2009-09-16 4 views
19

Ich versuche, eine T-SQL-Routine zu schreiben, die die Transaktionsprotokolldatei mit DBCC SHRINKFILE basierend auf dem logischen Namen der Datenbank verkleinert. Die DB_NAME() Funktion gibt Ihnen den logischen Namen der Datenbank. Gibt es eine Entsprechung für das Transaktionslog? Wenn nicht, gibt es eine andere Möglichkeit, diese Informationen zu erhalten? Der Standardname für die Transaktionsprotokolle ist <<Database Name>>_log, aber ich würde mich lieber nicht darauf verlassen.So erhalten Sie den logischen Namen des Transaktionsprotokolls in SQL Server 2005

Antwort

35

können Sie verwenden:

SELECT name 
FROM sys.master_files 
WHERE database_id = db_id() 
    AND type = 1 

Log-Dateien haben type = 1 für jede database_id und alle Dateien für alle Datenbanken können in sys.master_files finden.

EDIT:

Ich möchte darauf hinweisen, dass Sie nicht Ihre Log auf einer Routinebasis schrumpfen sollte. Ihr Transaktionslog sollte entsprechend groß sein, um zu verhindern, dass es jemals wächst, und dann in dieser Größe belassen wird. Das Transaktionsprotokoll kann nicht als Sofortdatei initialisiert werden und muss auf Null gesetzt werden, wenn Speicherplatz hinzugefügt wird. Dies ist eine langsame sequenzielle Operation, die die Leistung beeinträchtigt.

+2

ps. Beachten Sie, dass verschiedene Datenbanken in derselben Instanz denselben Protokollnamen verwenden können. Daher sollten Sie neben 'DBCC SHRINKFILE ('Logischer Log-Name', Größe)' '' verwenden Sie [MyDatabase] ', um sicherzustellen, dass Sie in der richtigen DB arbeiten. – JohnLBevan

12

Ausgehend von einer Standarddatenbank (zB nur eine Protokolldatei) lautet die Protokolldatei immer file_id = 2. Dies gilt auch, wenn Sie mehrere Datendateien haben (id = 3+ für NDFs).

Die DBCC übernimmt auch die Datei-ID. Also, DBCC SHRINKFILE (2...) wird immer funktionieren. Sie können nicht innerhalb des DBCC parametrieren, so dass dynanmisches SQL vermieden wird. Wenn Sie den Namen möchten, verwenden Sie FILE_NAME (2). Erzeugt

3
select Name 
from sys.database_files 

,

SomeDb_Data 
SomeDb_Log 

SqlServer 2012