【发布时间】:2010-11-28 23:41:16
【问题描述】:
我正在尝试编写一个 T-SQL 例程,它根据数据库的逻辑名称使用 DBCC SHRINKFILE 来收缩事务日志文件。 DB_NAME() 函数为您提供数据库的逻辑名称。事务日志是否有等效的日志?如果没有,是否有其他方法可以获取此信息?事务日志的默认名称是<<Database Name>>_log,但我宁愿不依赖它。
【问题讨论】:
标签: sql-server transaction-log
我正在尝试编写一个 T-SQL 例程,它根据数据库的逻辑名称使用 DBCC SHRINKFILE 来收缩事务日志文件。 DB_NAME() 函数为您提供数据库的逻辑名称。事务日志是否有等效的日志?如果没有,是否有其他方法可以获取此信息?事务日志的默认名称是<<Database Name>>_log,但我宁愿不依赖它。
【问题讨论】:
标签: sql-server transaction-log
你可以使用:
SELECT name
FROM sys.master_files
WHERE database_id = db_id()
AND type = 1
对于任何 database_id,日志文件的类型 = 1,所有数据库的所有文件都可以在 sys.master_files 中找到。
编辑:
我应该指出,您不应该定期缩减日志。您的事务日志的大小应该适当,以防止它不得不增长,然后保持该大小。事务日志不能被即时文件初始化,并且必须在向其添加空间时清零,这是一个缓慢的顺序操作,会降低性能。
【讨论】:
DBCC SHRINKFILE('logical log name', size) 之外,您还应该首先输入 use [MyDatabase] 以确保您在正确的数据库中工作。
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)'
【讨论】: