我必须在 sql server 2000 环境中对我们的一个数据库进行数据库清理。清理主要包括禁用所有触发器、删除所有旧数据、启用触发器和收缩事务日志。
目前我遇到的最大问题是禁用触发器。这在 sql 2005 / 2008 中会非常容易,因为它们包含“禁用所有触发器”命令。我有一个查询来列出所有触发器,尽管它没有列出触发器的状态(这将是一个奖励)
SELECT S2.[name] TableName, S1.[name] TriggerName, CASE WHEN S2.deltrig = s1.id THEN 'Delete' WHEN S2.instrig = s1.id THEN 'Insert' WHEN S2.updtrig = s1.id THEN 'Update' END 'TriggerType' , 'S1',s1.*,'S2',s2.* FROM sysobjects S1 JOIN sysobjects S2 ON S1.parent_obj = S2.[id] WHERE S1.xtype='TR'
Run Code Online (Sandbox Code Playgroud)
对于每个表,记录的删除将是一个简单的删除,这可能不是最有效的方法,而是规定的方法。
Shrinking the Transaction Log 也是排序的,我在 Microsoft 支持站点上找到了一篇关于使用 DBCC 的文章
任何建议将不胜感激