INF: SO WIRD'S GEMACHT: Verkleinern des SQL Server 7.0-Transaktionsprotokolls

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 256650 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
256650 INF: How to Shrink the SQL Server 7.0 Transaction Log
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Es gibt einige häufige Gründe, warum ein Transaktionsprotokoll möglicherweise nicht kleiner wird, wenn Sie den Befehl DBCC SHRINKFILE oder DBCC SHRINKDATABASE verwenden. Detaillierte Informationen finden Sie in der Onlinedokumentation für SQL Server unter den Themen "DBCC SHRINKFILE" und "DBCC SHRINKDATABASE", eine kurze Zusammenfassung folgt in diesem Artikel:

Weitere Informationen

  • In Microsoft SQL Server 7.0 setzen die Befehle SHRINKFILE und SHRINKDATABASE eine Zielgröße für die Verkleinerung fest. Jede Protokolldatei wird von diesen Befehlen gekennzeichnet, eigentlich ist es jedoch eine Protokollsicherung oder Protokollverkürzung, die versucht, die Dateien zu verkleinern. Sie müssen deshalb, nachdem Sie den Befehl SHRINKFILE oder SHRINKDATABASE verwendet haben, außerdem einen Befehl ausgeben, der das Protokoll verkürzt, bevor es überhaupt kleiner werden kann.
  • Sie können ein Protokoll nicht kleiner machen, als es durch diese Kriterien erlaubt ist:

    • Um ein Protokoll auf ein Volumen unterhalb der ursprünglichen Größe zu verkleinern, müssen Sie einzelne Dateien mithilfe von DBCC SHRINKFILE verkleinern. Sie können mit DBCC SHRINKDATABASE Protokolle nicht auf eine kleinere Größe als die ursprüngliche Größe oder eine explizit festgelegte Größe verkleinern. Die ursprüngliche Größe wird als Größe des Protokolls aufgrund des Befehls CREATE DATABASE plus expliziter ALTER DATABASE-Befehle bestimmt. Die ursprüngliche Größe schließt automatisches Wachsen des Protokolls nicht mit ein.

    • Die physische Protokolldatei kann nie kleiner sein als die Menge an Speicherplatz, die aktuell innerhalb der Protokolldatei verwendet wird. Sie können mithilfe des Befehls DBCC SQLPERF (LOGSPACE) die Menge des verwendeten Speicherplatzes überwachen.

    • Die aktuelle Größe des Protokolls der Modelldatenbank ist die Mindestgröße für das Protokoll einer jeden Datenbank auf diesem Server. Das Protokoll der Modelldatenbank liegt standardmäßig unter 1 MB.

    • Da eine Protokolldatei nur bis zur Grenze einer virtuellen Protokolldatei (Virtual Log File, VLF) verkleinert werden kann, ist es nicht möglich, eine Protokolldatei so zu verkleinern, dass sie kleiner als eine virtuelle Protokolldatei ist, auch wenn der Speicherplatz nicht verwendet wird. Ebenso können Sie keinen Speicherplatz in dieser virtuellen Protokolldatei verkleinern, wenn ein Teil dieser virtuellen Protokolldatei gerade verwendet wird. Weitere Informationen finden Sie in den Kapiteln "Virtuelle Protokolldateien" und "Physische Architektur des Transaktionsprotokolls" der SQL Server-Onlinedokumentation.


  • Bei dem Transaktionsprotokoll handelt es sich um ein "umlaufendes" Protokoll. Das bedeutet, dass es zu jeder Zeit virtuelle Protokolldateien mit "freiem" oder "wieder verwendbarem" Speicherplatz am Anfang, in der Mitte und/oder am Ende des Protokolls geben kann. Um das Protokoll zu verkleinern, muss "freier" Speicherplatz am Ende des Protokolls vorhanden sein, nicht nur an einer beliebigen Stelle im Protokoll. Sie können außerdem nur gesamte virtuelle Protokolldateien verkleinern. Um ein Transaktionsprotokoll zu verkleinern, müssen die virtuellen Protokolldateien am Ende der Protokolldatei inaktiv und verkürzt sein. Detaillierte Informationen hierzu finden Sie unter dem Thema "Abschneiden des Transaktionsprotokolls" in der SQL Server-Onlinedokumentation.
Dabei sind einige Punkte zu beachten:
  • Führen Sie immer Systemdatenbank- und Benutzerdatenbanksicherungen durch, bevor und nachdem Sie Änderungen vornehmen, die sich auf das System auswirken. DBCC SHRINKFILE und DBCC SHRINKDATABASE sind keine protokollierten Vorgänge, und das Ausführen dieser Befehle macht weitere Transaktionsprotokollsicherungen ungültig. Sie müssen eine komplette Sicherung der Datenbank durchführen, nachdem Sie entweder den Befehl DBCC SHRINKFILE oder DBCC SHRINKDATABASE ausgeführt haben.

  • Stellen Sie sicher, dass keine Sicherungen für die Zeit geplant sind, in der die Verkleinerung durchgeführt werden soll.

  • Vergewissern Sie sich, dass es keine alten oder replizierten Transaktionen oder Langzeittransaktionen gibt. Verwenden Sie hierzu einen Code, der dem folgenden ähnelt:
    DBCC OPENTRAN (database_name)
    					
  • Führen Sie den Befehl DBCC SHRINKFILE oder DBCC SHRINKDATABASE aus, um einen Verkleinerungspunkt zu markieren. Berechtigungen für DBCC SHRINKFILE und DBCC SHRINKDATABASE haben standardmäßig Mitglieder der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner. Diese Berechtigungen sind nicht übertragbar. Informationen über die Unterschiede zwischen diesen Befehlen finden Sie unter folgenden Themen in der SQL-Onlinedokumentation (beachten Sie die verschiedenen Parameter):

    DBCC SHRINKFILE     (file_name, target_size)
    DBCC SHRINKDATABASE (database_name, target_percent)
    					
  • Erstellen Sie "Dummy"-Transaktionen, damit freier oder überschreibbarer Platz ans Ende des umlaufenden Protokolls geschoben wird, und geben Sie dann einen BACKUP-Befehl aus, um das Protokoll zu verkürzen. Es ist die BACKUP-Anweisung, die versucht, das Protokoll auf die markierte Zielgröße zu verkleinern.

    Nachfolgend ein Beispiel für das Erstellen einer "Dummy"-Transaktion, die das Protokoll für eine einzelne logische Protokolldatei umlaufen lässt und bewirkt, dass das Protokoll verkürzt wird und sich so verkleinern lässt. Ändern Sie das Beispiel entsprechend Ihrer Umgebung ab.
       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
    					
    Überprüfen Sie, ob die ursprüngliche Größe des Protokolls reduziert wurde. Wiederholen Sie, wenn nötig, die vorhergehenden Schritte. Wenn das Protokoll nicht verkleinert wird, überprüfen Sie nochmals die Zusammenfassung am Anfang dieses Artikels, um festzustellen, ob eines der häufigen Probleme beim Verkleinern des Protokolls aufgetreten ist.
Maßnahmen, nachdem das Protokoll verkleinert wurde:
  1. Führen Sie eine komplette Datenbanksicherung der zentralen Datenbank durch.
  2. Führen Sie eine komplette Datenbanksicherung der Benutzerdatenbank durch. Dies ist notwendig, da der Befehl SHRINK nicht protokolliert wird und zukünftige Transaktionsprotokollsicherungen ungültig macht, es sei denn, eine komplette Datenbanksicherung wurde durchgeführt.
Um zu bestimmen, warum das Protokoll überhaupt derart an Größe zugenommen hat, können Sie prüfen, ob offene Transaktionen, Langzeittransaktionen, nicht replizierte Transaktionen oder Transaktionen vorliegen, die eine große Datenmenge verarbeiten.

Informationsquellen

Weitere Informationen finden Sie in folgenden Artikeln der Microsoft Knowledge Base:
110139 Gründe für das Anwachsen eines Transaktionsprotokolls
62866 INFO: Reasons Why SQL Transaction Log Is Not Being Truncated
66057 PRB: Running Out of Log Space When Running Large Bulk Loads
80629 PRB: Transaction Log Partially Truncated
SQL Server-Onlinedokumentation; Themen: "Physische Architektur des Transaktionsprotokolls"; "Verbessern der Leistung des Transaktionsprotokolls"

Eigenschaften

Artikel-ID: 256650 - Geändert am: Mittwoch, 18. Mai 2011 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 7.0 Standard Edition
Keywords: 
kbsqlssis kbinfo kbsqlserv kbsqlserv700 KB256650
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com