Jump to content

shrink sql 2005 log file


band
 Share

Recommended Posts

Καλημέρα. Έχω 2 sql server 2005 standard edition και έναν sql express 2008. Οι δύο 2005 έχουν μια database σε mirror και ο 2008 είναι ο witness. Το mirror δουλεύει σωστά. H database είναι σε full recovery mode. Το πρόβλημα είναι ότι το log file μεγαλώνει μέσα σε μια εβδομάδα και γεμίζει ο δίσκος. Όταν πάω από το management studio στο tasks-shrink-files και επιλέγω το log file και τη  δεύτερη επιλογή στο shrink action, το log δε μικραίνει. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Υπάρχει κάποιος τρόπος να γίνει αυτό με scheduled task?

Ευχαριστώ

Link to comment
Share on other sites

Η μαγική ενέργεια είναι transaction log backup τότε και μόνο τότε καθαρίζει εσωτερικά το log και φυσικά μετα απο αυτο μπορείς να κανείς και shrink αυτο αν και δεν χρειάζεται εφόσον παίρνεις καθημερινά και τακτικά log backup

Link to comment
Share on other sites

διαβάζοντας είδα το εξής. ότι για να γίνει το shrink πρέπει η βάση να είναι σε simple recovery mode. όμως για να δουλέψει το mirror πρέπει να είναι σε full. οπότε πως θα κάνω shrink ενώ είναι σε full recovery mode? με το backup το μέγεθος του αρχείου δε μειώθηκε.

Link to comment
Share on other sites

Να ξεκαθαρίσουμε πρώτα απο όλα ότι όταν λέμε στην γλώσσα του SQL server ότι γίνεται truncate το log σε καμμιά περίπτωση δεν εννοούμε ότι μικραίνει σαν μέγεθος το φυσικό αρχείο στο δίσκο. Αν θα πας στο sqlschool.gr και ψάξεις για το web cast με τίτλο ο θαυμαστος κόσμος του transaction log δεις τι ακριβώς γίνεται.

 

Το άλλο που πρέπει να γίνει και αυτο αντιληπτό είναι ότι το database mirroring παίζει μόνο με full recovery model.Οποιαδήποτε αλλαγή κανείς σε αυτό αυτη την στιγμή θα έχει σαν αποτέλεσμα να σταματήσει το mirroring. Aρα δεν το πειραζουμε

 

Τώρα όσον αφορά το γιατί ενώ έκανες backup το log και μετα έκανες shrink και δεν έγινε τίποτα, απλά επεσες πιθανότητα στην περίπτωση που ήταν με active transaction το τελευταίο virtual log του transaction log. Σε αυτή την περίπτωση η Μονή λύση είναι να κάνουμε την διαδικασία ξανά απο την αρχή δλδ backup log και shrink μετα.

Link to comment
Share on other sites

καλησπέρα. άρα αν κατάλαβα καλά με backup του transaction log και shrink αμέσως μετά, μικραίνει και το μέγεθος του αρχείου, εκτός πχ της περίπτωσης που είπατε. οπότε αν το βάλω σε ένα scheduled task, δε θα αντιμετωπίσω το πρόβλημα του να γεμίζει ο δίσκος.

Σωστά?

Link to comment
Share on other sites

Σωστά.

Αλλά δεν χρειάζεται να κανείς συνέχεια shrink.Πάρε το log backup κανε shrink και μετα βάλε schedule να παίρνεις log backup κάθε μια ώρα για παράδειγμα. Έτσι θα γίνετε πάντα επαναχρησιμοποιηση του καθαρισμενου μέρους του log

Link to comment
Share on other sites

Καλημέρα. έκανα και κάποιες δοκιμές σε βάση που δεν είναι mirror αλλά είναι σε full recovery model. κάνοντας backup το transaction log και μετά shrink, το μέγεθος του αρχείου στο δίσκο, δε μειώνεται. Υπάρχει κάποιος τρόπος?

Ευχαριστώ

Link to comment
Share on other sites

Παράξενο... Για δώσε dbcc sqlperf(logspace) όπου με αυτη θα δεις πόσο χρησιμοποιείται το log.Απο εκεί και πέρα θα πρέπει να κάνει dbcc shrinkfile είτε με το command είτε απο το γραφικό περιβάλλον. Ξαναλέω ότι σε περιπτώσεις που είναι ενεργό το τελευταίο virtual log θα χρειαστεί να πάρεις περισσότερα απο ένα log backups...

Link to comment
Share on other sites

τρέχοντας το query λέει Log Size (MB) 2379,367 και Log Space Used(%) 2,13803. Στη βάση που κάνω τις δοκιμές τώρα δεν είναι συνδεδεμένος κάνενας χρήστης, δεν χρησιμοποιείται, δεν κάνει κάτι. οπότε δε ξέρω αν αν ισχύει αυτό με το virtual log που λέτε.

να κάνω συνεχόμενα backup και shrink δηλαδή μέχρι να μειωθεί το μέγεθος στο δίσκο? πόσα μπορεί να χρειαστεί σε μια βάση που δεν κάνει τίποτα?

Link to comment
Share on other sites

Ουσιαστικά είναι άδειο το log. Το ερώτημα μου τώρα είναι πως κανείς shrink το log. Μπορείς να μου δώσεις την εντολή η να μου περιγράψεις την διαδικασία που κανείς;. Βέβαια υπάρχει και ο εύκολος τρόπος για να κανείς shrink σε αυτη την βάση που κανείς πειράματα , να γυρίσεις σε simple recovery model, αλλα δεν παίζει αυτο στην άλλη που έχει mirror γιατί θα το χαλάσει.

 

Περιμένω να μου πεις την εντολή ή την διαδικασία που κανείς shrink

Link to comment
Share on other sites

το shrink το κάνω από το magement studio. Δεξί κλικ στη βάση,tasks,shrink, files. Στο file type βάζω Log. Στο shrink action δοκίμασα με το πρώτο (release unused space) και το δεύτερο (Reorganize pages........) βάζοντας 1ΜΒ

Link to comment
Share on other sites

Χμμμμ, τελικά δούλεψε. το έβαλα να κάνει διαδοχικά backup κάθε 2 λεπτά το transaction log και μετά από 6-7 το έκανα shrink και μειώθηκε. Δεν είχα καταλάβει ότι θέλει τόσα πολλά backup για να γίνει επιτυχώς το shrink.

Ευχαριστώ πολύ!!!!!!

Link to comment
Share on other sites

Αυτό είναι ψιλο bug. Πρέπει να κάνει 2 backup και μετά shrink το log στον 2005. Βασικά βρες αν υπάρχει και κάποιος άλλος λόγος πέραν της έλλειψης backpup που μεγαλώνει το log.

Link to comment
Share on other sites

Δεν υπάρχει κανένα Bug

Απλά είναι Active transaction στο  log .

Θα πρότεινα το Shrink  να το ενεργοποιήσεις σε Scheduled Task σε βραδυνή που δεν έχει active transaction η DB.

Ο Αντώνης το είχε τονίσει αυτό από την αρχή :

Τώρα όσον αφορά το γιατί ενώ έκανες backup το log και μετα έκανες shrink και δεν έγινε τίποτα, απλά επεσες πιθανότητα στην περίπτωση που ήταν με active transaction το τελευταίο virtual log του transaction log.

Σε αυτή την περίπτωση η Μονή λύση είναι να κάνουμε την διαδικασία ξανά απο την αρχή δλδ backup log και shrink μετα.

http://autoexec.gr/forums/permalink/35259/35230/ShowThread.aspx#35230

Link to comment
Share on other sites

Το log δεν γίνετε Shrink μετά από Backup γιατί υπάρχουν open transactions

Kαπου σε Sql log θα έχεις error

Cannot shrink log file because all logical log files are in use

Επίσης χρησιμοποίησε το DBCC OPENTRAN  http://msdn.microsoft.com/en-us/library/ms182792(v=sql.90).aspx

για να δεις το Open transactions.

 

Link to comment
Share on other sites

Δεν υπάρχει κανένα bug, έτσι δουλεύει η shrink. Δηλαδή με απλά ελληνικά για να δουλέψει πρέπει ο ελεύθερος χώρος να είναι στο τέλος του αρχείου για να μπορέσει να το κάνει shrink. To λέω εδώ και χρόνια αυτό αλλά δεν με πιστεύται έτσι προς επίρρωση των όσων λέω εδώ και χρόνια δείτε και αυτό http://jmkehayias.blogspot.com/2008/11/database-transaction-log-part-2-how.html και αυτό http://technet.microsoft.com/en-us/library/ms189085.aspx.

Επίσης χρόνια φωνάζω ότι εφόσον έχετε βάση με full recovery model απαραίτητα πρέπει να παίρνουμε σε τακτά χρονικά διαστήματα transaction log backup δείτε πόσες φορές το έχω πει το έχω γράψει αυτό.

  1. http://sqlschoolgr.wordpress.com/2010/01/24/why-truncate_log-discontinued-answer-to-mr-kladakis/

  2. http://sqlschoolgr.wordpress.com/2010/03/09/%cf%8c-%cf%8c-transaction-log/

  3. http://sqlschoolgr.wordpress.com/2010/11/03/%ce%ac-transaction-log-%ce%ad-%cf%8e-%ce%ad/

  4. http://sqlschoolgr.wordpress.com/2010/03/14/lesson-backuprestore-in-sql-server-2008/

Τέλος όσον αφορά την shrink αφού δεν θέλετε να με ακούτε ότι δεν κάνουμε shrink (εξαίρεση σε ειδικές περιπτώσεις είναι το log) ακούστε τουλάχιστον την άποψη κάποιου που έφτιαξε τον SQL Server.

Link to comment
Share on other sites

 Share

×
×
  • Create New...