Αναγν. άρθρου: 256650 - Τελευταία αναθεώρηση: Κυριακή, 19 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0

Το αρχείο INF: Τρόπος συρρίκνωση στο αρχείο καταγραφής συναλλαγών του SQL Server 7.0

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

Περίληψη

Υπάρχουν ορισμένα συνήθη αίτια, γιατί ένα αρχείο καταγραφής συναλλαγών ενδέχεται να μην συρρίκνωση όταν χρησιμοποιείτε την εντολή SHRINKDATABASE DBCC ή SHRINKFILE DBCC. Τα ηλεκτρονικά βιβλία SQL Server Books Online θέματα "DBCC SHRINKFILE" και "DBCC SHRINKDATABASE" παρέχουν λεπτομερείς πληροφορίες, αλλά ακολουθεί μια σύντομη Περίληψη.

Περισσότερες πληροφορίες

  • Στον Microsoft SQL Server 7.0, οι εντολές SHRINKFILE και SHRINKDATABASE, ορίστε ένα μέγεθος προορισμού για τη συρρίκνωση. Κάθε αρχείο καταγραφής είναι σημαδεμένο με αυτές τις εντολές, αλλά στην πραγματικότητα είναι ένα αντίγραφο ασφαλείας του αρχείου καταγραφής ή την περικοπή του αρχείου καταγραφής που προσπαθεί να συρρικνώσετε τα αρχεία. Επομένως, μετά χρησιμοποιήστε το SHRINKFILE ή SHRINKDATABASE εντολή πρέπει να επίσης εκδώσετε μια εντολή που περικόπτει το αρχείο καταγραφής πριν να υπάρχει οποιαδήποτε πιθανότητα αυτό θα συρρικνωθεί.
  • Που δεν μπορεί να συρρικνωθεί ένα αρχείο καταγραφής σε μέγεθος μικρότερο από το τι επιτρέπεται από τα εξής κριτήρια:

    • Για να συρρικνώσετε έναν μικρότερο από το αρχικό της μέγεθος αρχείου καταγραφής που πρέπει να συρρικνώσετε μεμονωμένα αρχεία με SHRINKFILE DBCC. Δεν μπορείτε να χρησιμοποιήσετε SHRINKDATABASE DBCC να συρρικνώσετε ένα αρχείο καταγραφής σε μέγεθος μικρότερο από το μέγεθος του αρχικού ή συγκεκριμένα αναγνωρισμένα. Το αρχικό μέγεθος ορίζεται ως το μέγεθος του αρχείου καταγραφής οφείλεται σε CREATE DATABASE καθώς και τυχόν ρητή εντολές ALTER DATABASE. Το αρχικό μέγεθος δεν περιλαμβάνει αυτόματη ανάπτυξη του αρχείου καταγραφής.

    • Το φυσικό αρχείο καταγραφής δεν μπορεί να είναι μικρότερο από το μέγεθος του χώρου που χρησιμοποιείται αυτήν τη στιγμή μέσα στο αρχείο καταγραφής. Μπορείτε να χρησιμοποιήσετε την εντολή DBCC SQLPERF (LOGSPACE) για την εποπτεία του χώρου που χρησιμοποιείται.

    • Το τρέχον μέγεθος του αρχείου καταγραφής της βάσης δεδομένων του μοντέλου είναι το ελάχιστο μέγεθος για οποιαδήποτε βάση δεδομένων καταγραφής σε αυτόν το διακομιστή. Από προεπιλογή, το αρχείο καταγραφής της βάσης δεδομένων του μοντέλου είναι λιγότερο από 1 MB.

    • Επειδή ένα αρχείο καταγραφής μπορεί να συρρικνωθεί μόνο σε ένα εικονικό αρχείο καταγραφής όριο αρχείου (VLF), δεν μπορείτε να συρρικνώσετε ένα αρχείο καταγραφής σε μέγεθος μικρότερο από ένα VLF, ακόμα και αν το χώρο που δεν χρησιμοποιείται. Παρομοίως, αν χρησιμοποιείται ένα μέρος μιας VLF δεν μπορεί να συρρικνωθεί κάποιο χώρο στο συγκεκριμένο VLF. Για περισσότερες πληροφορίες, ανατρέξτε στα θέματα "Εικονικού αρχεία καταγραφής" και "Transaction Log φυσικής αρχιτεκτονικής" στα ηλεκτρονικά βιβλία SQL Server Books Online.


  • Το αρχείο καταγραφής συναλλαγών είναι ένα αρχείο καταγραφής "αναδίπλωση γύρω". Αυτό σημαίνει ότι σε κάθε δεδομένη στιγμή ενδέχεται να υπάρχουν VLFs με χώρο "Ελεύθερη" ή "με δυνατότητα επανάληψης χρήσης" κατά την αρχή, μέση, ή/και το τέλος του αρχείου καταγραφής. Για να συμπτύξετε το αρχείο καταγραφής πρέπει να είναι "Ελεύθερη" χώρου στο τέλος του αρχείου καταγραφής, όχι μόνο ελεύθερο χώρο σε οποιοδήποτε σημείο του αρχείου καταγραφής. Επίσης, μπορείτε να συρρικνώσετε ολόκληρη VLFs. Για να συμπτύξετε τη συναλλαγή καταγραφής του VLFs στο τέλος του αρχείου καταγραφής πρέπει να είναι ανενεργά και έχει περικοπεί. Για περισσότερες πληροφορίες, ανατρέξτε στο θέμα "Περικοπή της καταγραφής κινήσεων" στα ηλεκτρονικά βιβλία SQL Server Books Online.
Here are a few things to keep in mind:
  • Always perform system database and user database backups before and after you make changes that affect the system. DBCC SHRINKFILE and DBCC SHRINKDATABASE are not logged operations, and running them invalidates further transaction log backups. You must make a full database backup after you run either the DBCC SHRINKFILE or the DBCC SHRINKDATABASE commands.

  • Make sure that there are no backups scheduled to occur during the time the shrink is supposed to occur.

  • Make sure that there are no old, long-running, or unreplicated transactions. To do so, use code similar to:
    DBCC OPENTRAN (database_name)
    					
  • Run the DBCC SHRINKFILE or DBCC SHRINKDATABASE command to mark a shrinkpoint. DBCC SHRINKFILE and DBCC SHRINKDATABASE permissions default to members of the sysadmin fixed server role or thedb_ownerfixed database role, and are not transferable. For information about the differences between these commands, refer to the following topics in SQL Books Online (note the different parameters):

    DBCC SHRINKFILE     (file_name, target_size)
    DBCC SHRINKDATABASE (database_name, target_percent)
    					
  • Create some dummy transactions to make the log wrap around and then issue a BACKUP command to truncate the log. The BACKUP statement is what actually attempts to shrink the log to the marked target size.

    Here is a sample of how to create a dummy transactions that wraps the log for a single logical log file and causes it to truncate, allowing for shrinkage. Modify the sample as needed for your environment.
       SET NOCOUNT ON
       DECLARE @LogicalFileName sysname,
               @MaxMinutes INT,
               @NewSize INT
    
       -- *** MAKE SURE TO CHANGE THE NEXT 4 LINES WITH YOUR CRITERIA. ***
       USE     [Test DB]              -- This is the name of the database
                                      -- for which the log will be shrunk.
       SELECT  @LogicalFileName = 'Test DB Log',  -- Use sp_helpfile to 
          -- identify the logical file 
          -- name that you want to shrink.
               @MaxMinutes = 10,      -- Limit on time allowed to wrap log.
               @NewSize    = 10       -- in MB
    
       -- Setup / initialize
       DECLARE @OriginalSize int
       SELECT @OriginalSize = size -- in 8K pages
         FROM sysfiles
         WHERE name = @LogicalFileName
       SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
               CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
         FROM sysfiles
         WHERE name = @LogicalFileName
    
       CREATE TABLE DummyTrans
         (DummyColumn char (8000) not null)
    
       -- Wrap log and truncate it.
       DECLARE @Counter   INT,
               @StartTime DATETIME,
               @TruncLog  VARCHAR(255)
       SELECT  @StartTime = GETDATE(),
               @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'
       -- Try an initial shrink.
       DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    
       EXEC (@TruncLog)
    
       -- Wrap the log if necessary.
       WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
             AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk    
             AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
         BEGIN -- Outer loop.
           SELECT @Counter = 0
           WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
             BEGIN -- update
               INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
               DELETE DummyTrans
               SELECT @Counter = @Counter + 1
             END   -- update
           EXEC (@TruncLog)  -- See if a trunc of the log shrinks it.
         END   -- outer loop
       SELECT 'Final Size of ' + db_name() + ' LOG is ' +
               CONVERT(VARCHAR(30),size) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
         FROM sysfiles 
         WHERE name = @LogicalFileName
       DROP TABLE DummyTrans
       PRINT '*** Perform a full database backup ***'
       SET NOCOUNT OFF
    					
    Check to see if the log has shrunk from its original size.Repeat the preceding steps if necessary. If the log is not shrinking, re-check the summary at the top of the article to see if you are encountering any of the common issues with shrinking the log.
After the log shrinks:
  1. Perform a full database backup of the master database.
  2. Perform a full database backup of the user database. This is necessary because the SHRINK command is not logged and invalidates future transaction log backups unless a full database backup is completed.
To determine why the log is growing so big in the first place, you can check for open transactions, long running transactions, unreplicated transactions, or transactions that touch a lot of data.

Αναφορές

Για πρόσθετες πληροφορίες, κάντε κλικ στους αριθμούς των άρθρων παρακάτω, για να προβάλετε τα άρθρα της Γνωσιακής Βάσης της Microsoft (Knowledge Base):
110139  (http://support.microsoft.com/kb/110139/EN-US/ ) Το αρχείο INF: Προκαλεί την εμφάνιση του αρχείου καταγραφής συναλλαγών SQL Συμπλήρωση προς τα επάνω
62866  (http://support.microsoft.com/kb/62866/EN-US/ ) INFO: Reasons Why SQL Transaction Log Is Not Being Truncated
66057  (http://support.microsoft.com/kb/66057/EN-US/ ) PRB: Running Out of Log Space When Running Large Bulk Loads
80629  (http://support.microsoft.com/kb/80629/EN-US/ ) PRB: Transaction Log Partially Truncated
SQL Server Books Online; topics: "Transaction Log Physical Architecture"; "Optimizing Transaction Log Performance"

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 7.0 Standard Edition
Λέξεις-κλειδιά: 
kbinfo kbsqlserv kbsqlserv700 kbmt KB256650 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:256650  (http://support.microsoft.com/kb/256650/en-us/ )