日志表架构更改

时间:2012-05-15 11:19:17

标签: sql-server sql-server-2008 sql-server-2005 triggers

在我进行架构更改时,有没有办法记录Schema的{​​{1}}所做的更改?

我正在阅读一篇关于 DDL Triggers 的文章。但它没有说明表格模式中的具体变化。

3 个答案:

答案 0 :(得分:1)

这将非常困难,因为SSMS中的表实际上经常被删除并在后台重建(取决于模式更改的复杂性以及是否启用了“阻止保存需要表格的更改”重新创建“SSMS中的选项” - 记录所有不同类型的更改将是一场噩梦。 (约束被删除,只是重新创建 - 批量重新插入,重命名等等,当你所做的一切都是在连接表中重新排列的列)

如果您认真跟踪架构更改,我强烈建议您编写架构脚本(使用MSSMS中的生成脚本选项)&检查生成的文件到SVN / SourceSafe / TFS&使用这些系统可用的许多比较工具。

或者,您可以使用第三方产品为您完成所有这些,例如Red Gates SQL Source Control:

http://www.red-gate.com/products/sql-development/sql-source-control/

编辑:您可能会发现这很有用 - 它使用Service Broker(SQL 2005+)和SSB队列:

http://www.mssqltips.com/sqlservertip/2121/event-notifications-in-sql-server-for-tracking-changes/

答案 1 :(得分:1)

对于这个问题,我可能会使用Event Notifications。虽然我认为DDL触发器确实告诉了对表的具体更改,但只是触发定义:

Create Trigger tr_DDLNotikums
    On DataBase
For **DDL_DATABASE_LEVEL_EVENTS** 

答案 2 :(得分:0)

以下格式使用DDL触发器

 CREATE TRIGGER tr_DDL_Database ON DATABASE 
 FOR DDL_SCHEMA_EVENTS
 AS Begin
   Insert Into LogTable (XmlColumn)
   SELECT EVENTDATA()
 End