2009-09-16 67 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