Shrink Log on Always On SQL

Shrink Log on Always On SQL

Η γενική ορολογία αναφέρει να μην κάνουμε shrink το log ή γενικότερα την database.

Όπως όμως γνωρίζουμε κάτι τέτοιο δεν είναι απόλυτα εφικτό καθώς ο διαθέσιμος χώρος που έχουμε πολλές φορές δεν είναι άπειρος και σίγουρα κάποια στιγμή θα αντιμετωπίσουμε το πρόβλημα, οπότε σίγουρα θα πρέπει να κάνουμε τις κατάλληλες διαδικασίες.

Όταν έχουμε ένα μόνο Instance του sql server τότε τα πράγματα είναι πιο απλά, όταν όμως έχουμε να κάνουμε με κάτι πιο σύνθετο όπως όταν έχουμε instance σε always on τα πράγματα αλλάζουν.

Θα πρέπει λοιπόν πρώτα να κάνουμε backup το log, μια απαραίτητη διαδικασία, και στην συνέχεια να προβούμε στο shring. Μέχρι εδώ όλα καλά, αλλά δυστυχώς τα πράγματα δεν είναι τόσο απλά.

Τι γίνεται εάν δεν έχουμε διαθέσιμο χώρο για το log backup? Και σε αυτό, έχουμε την λύση η οποία δεν είναι άλλη από το να κάνουμε backup σε null τοποθεσία. Η διαδικασία αυτή σημαίνει παράλληλα ότι έχουμε χάσει το log backup οπότε δεν μπορούμε να κάνουμε restore σε αυτό το σημείο.

DECLARE @Database VARCHAR(50) =’dbname’

BACKUP LOG @Database TO DISK=’NUL:’ WITH NO_CHECKSUM, CONTINUE_AFTER_ERROR

Αφού λοιπόν ολοκληρωθεί η διαδικασία ξεκινάμε το shring του log με το παρακάτω scipt:

DECLARE @dbname sysname
DECLARE @sqlstmt varchar(max)
SET @dbname = @Database
SET @sqlstmt = ‘use [‘ + @dbname + ‘];DBCC SHRINKFILE(2, 1024, TRUNCATEONLY);’

EXEC (@sqlstmt)

Εδώ θα πρέπει να αναφέρουμε ότι κατά πάσα πιθανότητα δεν θα γίνει το log με επιτυχία και αυτό γιατί δεν έχει ολοκληρωθεί η ενημέρωση των υπολοίπων transaction logs. Οπότε το πιθανότερο είναι να εκτελέσουμε την διαδικασία πολλές φορές μέχρι όντως να γίνει shring.