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
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.
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
select Name
from sys.database_files
,
SomeDb_Data
SomeDb_Log
SqlServer 2012
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