none
Diminuire file di Log RRS feed

  • Domanda

  • Ciao a tutti, non pensavo che un giorno avrei alimentato una delle domande più popolari su sql server, però, non sò come non riesco a portare il mio file di log a 1mb, che credo sia la dimensione minima possibile

    Andiamo con ordine, ho un db sql server 2005 ripristinato ora su un'altra macchina.

    Impostato il recovery model a simple
    USE Pippo
    BACKUP LOG Pippo WITH NO_LOG;
    DBCC SHRINKFILE (Pippo_log, 1);

    DBCC SHRINKFILE (Pippo_log, TRUNCATEONLY);

    ho lanciato tutte le istruzioni sopra, ho fatto un backup completo del db e poi rilanciato le istruzioni ma nulla

    il file di log mi rimane da 7 mega (quello dati da 3mb)

    Le dimensioni specificate del file di log sono appunto 7 mega (giuro non l'ho messo io), ma se da EM cambio il valore e poi rientro il valore non cambia.

    Ho anche fatto un backup completo, cancellato il db, rifatto il db vuoto ( i file sono ora da 3 e 1 mega, dati e log)

    ripristinato il backup su questo db, ma nulla, il file di log è nuovamente da 7 mega !

    come posso fare ?

    cosa mi sfugge ?

     

     

     

     

     

     

    martedì 21 giugno 2011 10:53

Risposte

  • Alessandro,

    per SQL Server il file di log è fondamentale e non va MAI e poi MAI cancellato manualmente !

    In soldoni, funziona così: quando tu ad esempio da un applicazione clicchi sul pulsante "Salva" mandi un comando INSERT/UPDATE/DELETE (in base a quello che è stato specificato nell'applicazione) al motore di SQL Server. Lui scrive NEL TRANSACTION LOG che tu gli hai chiesto di fare un operazione di modifica sui dati e solo dopo un certo tempo, solitamente ogni minuto circa, il motore di SQL Server effettua un operazione interna che si chiama CHECKPOINT che rilegge il file di log e applica tutte le operazioni "consolidate" aggiornando anche il file dati.

    Perciò l'idea di cancellare il file di log per riportare le dimensioni ad un valore minimo è decisamente una cosa da evitare, pena la perdita di tutte le transazioni effettuate dall'ultimo CHECKPOINT.

    Oltre a questo, il file del transaction log andrebbe posizionato su un disco DIVERSO da quello dove trovi il file dati. In questo modo, avendo a disposizione un backup recente, puoi rileggere le ultime operazioni fatte dal transaction log e riapplicarle, evitando di perdere tutto il lavoro fatto dall'ultimo backup.

    Il fatto che tu cancelli e ricrei il database e dopo il restore ti trovi di nuovo il file da 7MB è dovuto al funzionamento dell'operazione di RESTORE: SQL Server durante il backup copia le pagine di dati e del log nel file (o su nastro) e quando effettua il restore le rilegge dal file (o dal nastro) e sovrascrive le pagine del database sul quale le stai ripristinando. Quindi la dimensione del database DOPO il restore è sempre identica a quella presente nel momento in cui hai fatto il backup.

    Puoi leggere più dettagliatamente come funzionano Transaction Log e Backup/Restore nei Books On-Line: qui e qui.

    Nel primo link trovi anche le info su come gestire le dimensioni del log.

    Ciao!


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD ..::.. Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 21 giugno 2011 13:05

Tutte le risposte

  • beh grazie ad un collega, ho fatto in questo modo

    1) scollego il db

    2) cancello il file di log

    3) ricollego il db, e nella schermata di Em dice che non trova il file di log (ovviamente) e lo cancello

    4) ok, il db viene ricollegato e gli viene associato un file di log da 1 mega

    martedì 21 giugno 2011 11:47
  • Alessandro,

    per SQL Server il file di log è fondamentale e non va MAI e poi MAI cancellato manualmente !

    In soldoni, funziona così: quando tu ad esempio da un applicazione clicchi sul pulsante "Salva" mandi un comando INSERT/UPDATE/DELETE (in base a quello che è stato specificato nell'applicazione) al motore di SQL Server. Lui scrive NEL TRANSACTION LOG che tu gli hai chiesto di fare un operazione di modifica sui dati e solo dopo un certo tempo, solitamente ogni minuto circa, il motore di SQL Server effettua un operazione interna che si chiama CHECKPOINT che rilegge il file di log e applica tutte le operazioni "consolidate" aggiornando anche il file dati.

    Perciò l'idea di cancellare il file di log per riportare le dimensioni ad un valore minimo è decisamente una cosa da evitare, pena la perdita di tutte le transazioni effettuate dall'ultimo CHECKPOINT.

    Oltre a questo, il file del transaction log andrebbe posizionato su un disco DIVERSO da quello dove trovi il file dati. In questo modo, avendo a disposizione un backup recente, puoi rileggere le ultime operazioni fatte dal transaction log e riapplicarle, evitando di perdere tutto il lavoro fatto dall'ultimo backup.

    Il fatto che tu cancelli e ricrei il database e dopo il restore ti trovi di nuovo il file da 7MB è dovuto al funzionamento dell'operazione di RESTORE: SQL Server durante il backup copia le pagine di dati e del log nel file (o su nastro) e quando effettua il restore le rilegge dal file (o dal nastro) e sovrascrive le pagine del database sul quale le stai ripristinando. Quindi la dimensione del database DOPO il restore è sempre identica a quella presente nel momento in cui hai fatto il backup.

    Puoi leggere più dettagliatamente come funzionano Transaction Log e Backup/Restore nei Books On-Line: qui e qui.

    Nel primo link trovi anche le info su come gestire le dimensioni del log.

    Ciao!


    Danilo Dominici MCP MCDBA MCITP MCSE MCAD ..::.. Questo post è fornito "così com'è". Non conferisce garanzie o diritti di alcun tipo. Ricorda di usare la funzione "segna come risposta" per i post che ti hanno aiutato a risolvere il problema e "deseleziona come risposta" quando le risposte segnate non sono effettivamente utili. Questo è particolarmente utile per altri utenti che leggono il thread, alla ricerca di soluzioni a problemi similari. ENG: This posting is provided "AS IS" with no warranties, and confers no rights. Please remember to click "Mark as Answer" on the post that helps you, and to click "Unmark as Answer" if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    martedì 21 giugno 2011 13:05
  • grazie intanto, a dire la verità il file di log l'ho rinominato, certo non mi metto a farlo su di un db in produzione.

    Questo era un db in test in cui mi ero incaponito di riportare il file di log a 1 mega ma non riuscivo

     

    ciao

    martedì 21 giugno 2011 13:13