Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

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

Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
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
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"
vlf transaction log shrink reduce smaller
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.
Eigenschaften

Artikelnummer: 256650 – Letzte Überarbeitung: 12/05/2015 19:01:26 – Revision: 2.0

Microsoft SQL Server 7.0 Standard Edition

  • kbnosurvey kbarchive kbsqlssis kbinfo kbsqlserv kbsqlserv700 KB256650
Feedback