2009-09-16 27 views
19

我正在嘗試編寫一個基於數據庫的邏輯名稱使用DBCC SHRINKFILE來縮小事務日誌文件的T-SQL例程。 DB_NAME()函數爲您提供了數據庫的邏輯名稱。對於事務日誌,是否有相當的一個?如果沒有,有沒有其他方法可以獲得這些信息?事務日誌的默認名稱是<<Database Name>>_log,但我寧願不依賴於此。如何獲取SQL Server 2005中的事務日誌的邏輯名稱

回答

35

您可以使用:

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

日誌文件有任何database_id的數據和所有數據庫中的所有文件類型= 1可以在sys.master_files中被發現。

編輯:

我要指出,你不應該在常規基礎上有所萎縮日誌。您的交易日誌應適當調整大小,以防止它不斷增長,然後保持這種規模。事務日誌不能被即時文件初始化,並且在向其中添加空間時必須清零,這是一個緩慢的順序操作,會降低性能。

+2

PS。請注意,同一實例上的不同數據庫可能使用相同的日誌名稱。除了放置'DBCC SHRINKFILE('邏輯日誌名',size)'之外,你應該首先使用'MyDatabase'來確保你在正確的DB中工作。 – JohnLBevan 2013-01-03 15:49:49

12

假設一個標準數據庫(例如只有一個日誌文件),日誌文件始終是file_id = 2。即使您有多個數據文件(NDF爲id = 3+),這也適用。

DBCC也採用文件ID。因此,DBCC SHRINKFILE (2...)將始終有效。您不能在DBCC內部進行參數設置,因此可以避免使用dynanmic SQL。如果您想要名稱,請使用FILE_NAME(2)。

3
select Name 
from sys.database_files 

生成,

SomeDb_Data 
SomeDb_Log 

SqlServer的2012

相關問題