我正试图编写一个T-SQL例程,根据数据库的逻辑名称使用DBCC SHRINKFILE来收缩事务日志文件。 DB_NAME()
函数可以给出数据库的逻辑名称。那么是否有相应的函数可以查找事务日志的逻辑名称呢?如果没有,是否还有其他方法可以获取这些信息?默认情况下,事务日志的名称是<<Database Name>>_log
,但我不想依赖于此。
我正试图编写一个T-SQL例程,根据数据库的逻辑名称使用DBCC SHRINKFILE来收缩事务日志文件。 DB_NAME()
函数可以给出数据库的逻辑名称。那么是否有相应的函数可以查找事务日志的逻辑名称呢?如果没有,是否还有其他方法可以获取这些信息?默认情况下,事务日志的名称是<<Database Name>>_log
,但我不想依赖于此。
你可以使用:
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
AND type = 1
所有数据库的日志文件类型均为type = 1,可以在sys.master_files中找到所有数据库的所有文件。
编辑:
我应该指出,你不应该定期缩小你的日志文件。你的事务日志应该适当地调整大小,以使其永远不必增长,并且保持该大小。事务日志无法进行即时文件初始化,并且在添加空间时必须将其清零,这是一项缓慢的顺序操作,会降低性能。
select Name
from sys.database_files
SomeDb_Data
SomeDb_Log
SqlServer 2012
DECLARE @command varchar(1000)
SELECT @command = 'USE [?] DBCC SHRINKFILE (2 , 0, TRUNCATEONLY)'
EXEC sp_MSforeachdb @command
EXEC sp_MSforeachdb 'USE [?] DBCC SHRINKFILE (2 , 0, TRUNCATEONLY)'
DBCC SHRINKFILE('逻辑日志名称',大小)
之前,您应该先输入use [MyDatabase]
以确保您正在正确的数据库中操作。 - JohnLBevan