我必须在 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 的文章
任何建议将不胜感激
SQL Server 2000中具有ALTER TABLE FOO启用触发器ALL太
并生成所需的 ALTER TABLE 脚本使用这个
SELECT
DISTINCT 'ALTER TABLE ' + OBJECT_NAME(parent_obj) + ' /*DISABLE*/ ENABLE TRIGGER ALL'
FROM
sysobjects
WHERE
xtype = 'TR'
Run Code Online (Sandbox Code Playgroud)
我个人不会打扰测试触发器的状态。恕我直言,禁用的触发器不应该存在。尤其是因为OBJECTPROPERTY在 SQL Server 2000 中不支持它
编辑:
我的错误,SQL Server 2000 中的 OBJECTPROPERTY 根据评论具有 ExecIsTriggerDisabled。所以你可以跟踪之前和之后的状态
| 归档时间: |
|
| 查看次数: |
6178 次 |
| 最近记录: |