Compattazione db da vb.net

mercoledì 12 novembre 2014 - 19.51

jekisi Profilo | Senior Member

Salve a tutto il forum, avrei il seguente problema:

Per compattare un db di access da vb faccio uso sel JRO

Dim jro As JRO.JetEngine
jro = New JRO.JetEngine
jro.CompactDatabase("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Aziendale 2012\Aziendale 2012.mdb;Jet OLEDB:Engine Type=5", _
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Aziendale 2012\Aziendale 2012 compact.mdb;Jet OLEDB:Engine Type=5")
My.Computer.FileSystem.DeleteFile("C:\Aziendale 2012\Aziendale 2012.mdb")
My.Computer.FileSystem.RenameFile("C:\Aziendale 2012\Aziendale 2012 compact.mdb", "Aziendale 2012.mdb")


Ma per compattare un db di sql?

A parte poi i riferimenti che bisogna aggiungere al progetto.

Distinti Saluti

Fabio Messina

alx_81 Profilo | Guru

>Salve a tutto il forum, avrei il seguente problema:
ciao

>Ma per compattare un db di sql?
A differenza di access ci sono varie considerazioni da fare. Ad esempio, è importante capire il recovery model del tuo database. In base ad esso potrebbe essere necessario prima fare il backup del log delle transazioni e poi la compattazione (in modo da guadagnare più spazio possibile, senza includere il log delle transazioni stesso).
L'operazione ti serve per risparmiare spazio oppure per avere un backup compresso del tuo database?
Perché lo shrink dovrebbe essere un'operazione straordinaria, poiché una delle best practice è quella di pre-dimensionare i file di database e di non lasciarli praticamente mai crescere (in modo da sapere fin dall'inizio la dimensione massima che vorrai coprire). Diciamo che non è un'operazione da fare a regime, e se così fosse, o il caso è particolare o, probabilmente si sta sbagliando qualcosina..
Vediamo di capire la tua situazione reale prima di tutto
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

jekisi Profilo | Senior Member

L' operazione mi serve per risparmiare spazio .

Ribadisco che di sql non sò nulla, sono alle prime, quindi consigliatemi anche voi.

Distinti Saluti

Fabio Messina

alx_81 Profilo | Guru

>L' operazione mi serve per risparmiare spazio .
ok, ma è un'operazione che devi fare una volta o è a regime?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

jekisi Profilo | Senior Member

Con vb e access lo faccio ad ogni avvio dell' applicazione

alx_81 Profilo | Guru

>Con vb e access lo faccio ad ogni avvio dell' applicazione
ok, con sql server questo è meglio evitarlo.
Considera che la crescita del database non dipende solo dai dati ma anche di quanto deve tenere nel log delle transazioni.
A mio avviso come primo punto dovresti controllare il modello di recupero del tuo database.
Andiamo per passo, dimmi qual è il modello di recupero del tuo database e quale esigenza hai in termini di disaster recovery (fino a che punto vuoi poter ripristinare la situazione del tuo database).
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

jekisi Profilo | Senior Member

Ascolta, non puoi dirmi le cose con parole più semplici, perchè di sql non sò nulla, sono alle prime.

dimmi qual è il modello di recupero del tuo database e quale esigenza hai in termini di disaster recovery (fino a che punto vuoi poter ripristinare la situazione del tuo database).

A livello di compattazione vorrei fare solo la cosa più giusta.

alx_81 Profilo | Guru

Sapere il modello di recupero é il punto primo per darti una soluzione semplice. Come già ti dicevo, in sql server la compattazione non andrebbe nemmeno fatta a regime, ma solo per esigenze straordinarie.
Controlla nelle proprietà del tuo database (tasto destro-->proprieta, opzioni) il modello di recupero.
Se é full(completo), il file di log crescerà sempre, e quindi dovrai procedere con dei backup del log
Se é simple(semplice), puoi tenere sempre il log della stessa dimensione(e quindi l'operazione di compattazione risulta superflua).

L'obbiettivo é quello di predimensionare il tuo database per non far mai crescere i file. Di conseguenza lo spazio occupato sarà sempre lo stesso.

Più semplice di così non so come spiegarlo.
Spero possa andare meglio.

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

jekisi Profilo | Senior Member

Ciao, anche se non conosco le differenze, sta messo su REGISTRAZIONE MINIMA.

alx_81 Profilo | Guru

>Ciao, anche se non conosco le differenze, sta messo su REGISTRAZIONE MINIMA.
perfetto, è sinonimo di simple. Come le due parole indicano, il tuo database sta scrivendo sul file di log delle transazioni (.ldf) riusandolo di continuo, facendo, di fatto, una registrazione delle operazioni minimale, solo per poter annullare le operazioni che fa in caso di errore durante l'esecuzione. Di conseguenza, se trovi una dimensione per la quale non cresce mai (basta tenerlo controllato per un paio di giorni di traffico ufficiale) la compattazione non ti serve. Ti consiglio quindi di non compattare il tuo database e di dare una dimensione fissa, lasciando un po' di margine per l'inserimento di nuovi dati (e anche in questo caso, devi sapere quante informazioni arrivano ogni giornata lavorativa per fare un rapido calcolo dello spazio polmone che ti serve).
Alla fine dovrai dare una dimensione al file dei dati (ipotizzo l'unico mdf che il tuo database ha) ed una al file del log delle transazioni (ldf) e sei a posto, poichè il secondo file non crescerà mai (se ben dimensionato) e il primo crescerà in maniera controllata in base ai dati che verranno inseriti nel tempo.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

jekisi Profilo | Senior Member

Ok, grazie per la risposta.

alx_81 Profilo | Guru

>Ok, grazie per la risposta.
Se hai bisogno di una mano per le stime o altro, chiedi pure.
So che eri abituato ad altro, ma vedrai che se dimensioni tutto come si deve, non te ne preoccuperai più per molto dello spazio
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5