如何在SQL Server 2005中获取事务日志的逻辑名称

Dan*_*anM 20 sql-server transaction-log

我正在尝试编写一个T-SQL例程,根据数据库的逻辑名称使用DBCC SHRINKFILE缩小事务日志文件.该DB_NAME()函数为您提供数据库的逻辑名称.事务日志是否有等价的?如果没有,是否有其他方式来获取此信息?事务日志的默认名称是<<Database Name>>_log,但我宁愿不依赖于此.

Jon*_*ias 38

您可以使用:

SELECT name
FROM sys.master_files
WHERE database_id = db_id()
  AND type = 1
Run Code Online (Sandbox Code Playgroud)

对于任何database_id,日志文件的type = 1,并且可以在sys.master_files中找到所有数据库的所有文件.

编辑:

我应该指出,你不应该在日常工作中缩小你的日志.您的事务日志应该适当调整大小,以防止它不得不增长,然后保持该大小.事务日志不能是即时文件初始化,并且在添加空间时必须将其清零,这是一种降低性能的慢速顺序操作.

  • PS.请注意,同一实例上的不同数据库可能使用相同的日志名称.因此,除了放置`DBCC SHRINKFILE('逻辑日志名称',大小)之外,你应该首先使用`use [MyDatabase]`来确保你在正确的数据库中工作. (2认同)

gbn*_*gbn 13

假设一个标准数据库(例如只有一个日志文件),日志文件总是file_id = 2.即使您有多个数据文件(NDF为id = 3+),这也适用.

DBCC也需要文件ID了.所以,DBCC SHRINKFILE (2...)永远都会有效.您无法在DBCC内部进行参数化,因此这可以避免动态SQL.如果您想要名称,请使用FILE_NAME(2).


SAm*_*SAm 6

select Name
from sys.database_files
Run Code Online (Sandbox Code Playgroud)

产生,

SomeDb_Data  
SomeDb_Log
Run Code Online (Sandbox Code Playgroud)

SqlServer 2012