To transaction log αποτελείται από active και inactive entries. Ένα entry χαρακτηρίζεται inactive όταν πλέον δεν χρειάζεται προκειμένου να γίνει restore η βάση, είναι προφανές ότι τα entries που έχουν γίνει *πριν* από ένα backup δεν χρειάζονται.
Για να μπορέσεις να κάνεις shrink το TL θα πρέπει πρώτα να το κάνεις truncate. Tο truncate μαρκάρει τις εγγραφές ως inactive συγκρίνοντας πότε έγινε η κάθε εγγραφή σε σχέση με το τελευταίο backup. Άρα, για να μπορέσεις να κάνεις truncate το TL θα πρέπει να κάνεις πρώτα τη βάση ένα full backup. Το shrink δεν είναι κάτι σαν defrag, δεν αφαιρεί τον άδειο χώρο αλλά τις άχρηστες εγγραφές από το TL. Χωρίς να έχεις κάνει backup και truncate τη βάση, ο server θεωρεί ότι είναι απαραίτητες για τυχόν restore και έτσι το shrink αποτυγχάνει. Έτσι λοιπόν, η διαδικασία έχει ως εξής:
- full backup της βάσης
- κάνε ένα BACKUP LOG
ή
EXEC sp_dboption dbname, 'trunc. log on chkpt.', 'True'
CHECKPOINT
DBCC SHRINKFILE (dbname_Log,100,Truncateonly)
Υπάρχει περίπτωση να μην παίξουν τα παραπάνω, οπότε θα δούμε εναλλακτικούς τρόπους. Μπορείς να διαβάσεις τα topics "Truncating the Transaction Log" και "Shrinking the Transaction Log" στα BOL για να καταλάβεις επακριβώς τι γίνεται.
Vir prudens non contra ventum mingit