Einführung In Microsoft SQL Server 2005 können Sie die Transaktionsprotokolldateien in einer Datenbank verkleinern, um nicht verwendete Seiten zu entfernen. Die Datenbank-Engine wird den Speicherplatz effizient wiederverwenden. Wenn eine Transaktionsprotokolldatei jedoch unerwartet wächst, kann es erforderlich sein, die Transaktionsprotokolldatei manuell zu verkleinern.
In diesem Artikel wird beschrieben, wie Sie die DBCC SHRINKFILE-Anweisung verwenden, um Transaktionsprotokolldateien in einer SQL Server 2005-Datenbank im vollständigen Wiederherstellungsmodell manuell zu verkleinern. Die Methode, die Sie zum Verkleinern einer Transaktionsprotokolldatei in SQL Server 2005 verwenden, unterscheidet sich möglicherweise von der Methode, die Sie zum Verkleinern einer Transaktionsprotokolldatei in SQL Server 2000 verwenden. Für weitere Informationen zum Verkleinern von Transaktionsprotokolldateien in SQL Server 2000 klicken Sie auf die Artikelnummer unten, um den entsprechenden Artikel in der Microsoft Knowledge Base anzuzeigen:
272318 ( http://support.microsoft.com/kb/272318/ ) INF: Verkleinern von Transaktionsprotokollen in SQL Server 2000 mithilfe von DBCC SHRINKFILE
Zum Anfang
Weitere Informationen In SQL Server 2005 versucht der Verkleinerungsvorgang (DBCC SHRINKFILE) sofort, die angegebene Transaktionsprotokolldatei auf die erforderliche Größe zu verkleinern. Um Transaktionsprotokolldateien im vollständigen Wiederherstellungsmodell manuell zu verkleinern, sichern Sie zunächst die Transaktionsprotokolldateien. Verwenden Sie dann die DBCC SHRINKFILE-Anweisung, um die Transaktionsprotokolldatei zu verkleinern.
Im Allgemeinen ist das Verkleinern von Transaktionsprotokolldateien in SQL Server 2005 schneller als das Verkleinern von Transaktionsprotokolldateien in SQL Server 2000. Der Grund dafür ist, dass der SQL Server 2005-Protokollmanager inaktive virtuelle Protokolldateien basierend auf der Speicherreihenfolge der physischen Festplatte erstellt oder wiederverwendet. Daher befindet sich der inaktive Teil einer Transaktionsprotokolldatei normalerweise am Ende der Datei.
Beispielsweise könnte eine Transaktionsprotokolldatei 100 virtuelle Protokolldateien enthalten, aber nur 2 virtuelle Protokolldateien verwenden. SQL Server 2000 speichert die erste virtuelle Protokolldatei, die am Anfang der Transaktionsprotokolldatei verwendet wird, und die zweite virtuelle Protokolldatei, die in der Mitte der Transaktionsprotokolldatei verwendet wird. Um die Transaktionsprotokolldatei auf nur zwei virtuelle Protokolldateien zu verkleinern, füllt SQL Server den Rest der zweiten virtuellen Protokolldatei mit virtuellen Protokolleinträgen. SQL Server verschiebt den Anfang des logischen Protokolls in die nächste verfügbare virtuelle Protokolldatei, die vom Protokollmanager angegeben wird. Der Protokollmanager erstellt möglicherweise eine virtuelle Protokolldatei in der Mitte der Transaktionsprotokolldatei, vor der letzten aktiven virtuellen Protokolldatei. In diesem Fall müssen mehrere Protokollsicherungsvorgänge und mehrere Verkleinerungsvorgänge verwendet werden, um die Transaktionsprotokolldatei erfolgreich auf zwei virtuelle Protokolldateien zu verkleinern. Im schlimmsten Fall müssen Sie möglicherweise 50 Protokollsicherungsvorgänge und 50 Verkleinerungsvorgänge verwenden, um die Transaktionsprotokolldatei erfolgreich auf 2 virtuelle Protokolldateien zu verkleinern.
In SQL Server 2005 können Sie die Transaktionsprotokolldatei jedoch sofort auf zwei virtuelle Protokolldateien verkleinern, indem Sie eine DBCC SHRINKFILE-Anweisung ausführen. Dies liegt daran, dass der SQL Server 2005-Protokollmanager zwei virtuelle Protokolldateien in der Reihenfolge erstellt, in der sie auf der physischen Festplatte gespeichert sind. Beide virtuellen Protokolldateien befinden sich am Anfang der Transaktionsprotokolldatei.
Wenn Sie versuchen, eine Transaktionsprotokolldatei zu verkleinern, die in SQL Server 2005 nur über sehr wenig freien Speicherplatz verfügt, müssen Sie einen weiteren Protokollsicherungsvorgang durchführen. Durch diesen zusätzlichen Protokollsicherungsvorgang wird die Transaktionsprotokolldatei auf eine kleinere Größe gekürzt. Wenn Sie Transaktionsprotokolldateien in SQL Server 2000 verkleinern, müssen Sie zusätzlich zu den oben genannten drei Schritten auch diesen Protokollsicherungsvorgang durchführen. Weitere Informationen finden Sie im Microsoft Knowledge Base-Artikel im Abschnitt „Einführung“. Um eine Transaktionsprotokolldatei mit sehr wenig freiem Speicherplatz in SQL Server 2005 zu verkleinern, gehen Sie folgendermaßen vor: 1. Sichern Sie die Transaktionsprotokolldateien, sodass die meisten aktiven virtuellen Protokolldateien inaktiv sind. Daher können inaktive virtuelle Protokolldateien in einem späteren Schritt gelöscht werden. Führen Sie dazu eine Transact-SQL-Anweisung aus, die der folgenden Transact-SQL-Anweisung ähnelt. BACKUP LOG <DatabaseName> TO DISK = '<BackupFile>'
Hinweis: In dieser Anweisung ist <DatabaseName> ein Platzhalter für den Namen der zu sichernden Datenbank. In dieser Anweisung ist <BackupFile> ein Platzhalter für den vollständigen Pfad zur Sicherungsdatei.
Führen Sie beispielsweise die folgende Transact-SQL-Anweisung aus. BACKUP-LOG TestDB TO DISK='C:TestDB1.bak'
2. Verkleinern Sie die Transaktionsprotokolldatei. Führen Sie dazu eine Transact-SQL-Anweisung aus, die der folgenden Transact-SQL-Anweisung ähnelt. DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS
Hinweis: In dieser Anweisung ist <FileName> ein Platzhalter für den Namen der Transaktionsprotokolldatei. In dieser Anweisung ist <TargetSize> ein Platzhalter für die Zielgröße der Transaktionsprotokolldatei. Die Zielgröße muss angemessen sein. Beispielsweise können Sie eine Transaktionsprotokolldatei nicht auf weniger als zwei virtuelle Protokolldateien verkleinern.
3. Wenn die DBCC SHRINKFILE-Anweisung die Transaktionsprotokolldatei nicht auf die Zielgröße verkleinert, führen Sie die in Schritt 1 erwähnte BACKUP LOG-Anweisung aus, um weitere virtuelle Protokolldateien inaktiv zu machen.
4. Führen Sie die in Schritt 2 erwähnte DBCC SHRINKFILE-Anweisung aus. Danach sollte die Transaktionsprotokolldatei nahe an der Zielgröße sein.
Zusammenfassend lässt sich sagen, dass sich der Algorithmus, den der Protokollmanager verwendet, um die nächste virtuelle Protokolldatei auszuwählen, in SQL Server 2005 geändert hat. Daher unterscheidet sich das Verkleinern von Transaktionsprotokolldateien in SQL Server 2005 in folgenden Punkten vom Verkleinern von Transaktionsprotokolldateien in SQL Server 2000: • Wenn die Protokolldatei über viel freien Speicherplatz verfügt, ist das Verkleinern der Transaktionsprotokolldatei in SQL Server 2005 schneller Verkleinern der Transaktionsprotokolldatei in SQL Server 2000 Das Verkleinern von Transaktionsprotokolldateien geht schneller.
• Das Verkleinern einer Transaktionsprotokolldatei in SQL Server 2005 ist dasselbe wie das Verkleinern einer Transaktionsprotokolldatei in SQL Server 2000, wenn die Protokolldatei keinen freien Speicherplatz hat.
• Das Verkleinern einer Transaktionsprotokolldatei in SQL Server 2005 erfordert einen Protokollsicherungsvorgang mehr als die Durchführung dieses Vorgangs in SQL Server 2000, wenn die Protokolldatei nur über sehr wenig freien Speicherplatz verfügt.