【问题标题】:Log table Schema changes日志表架构更改
【发布时间】:2012-05-15 11:19:16
【问题描述】:

每当我进行架构更改时,是否有任何方法可以记录在 SchemaSchema 中所做的更改?

我在这里阅读了一篇关于 DDL Triggers 的文章。但它并没有说明在表的架构中所做的具体更改。

【问题讨论】:

  • 这是一个部署问题,但显而易见的答案是新旧版本的 DDL 脚本应该在源代码控制中,您可以轻松地区分它们并查看有关更改的 cmets。如果这没有帮助,您需要阐明如何更改架构,即使用哪些工具?
  • 就像,每当在 SSMS 中,我都会对表格设计进行更改。在保存表格设计时,应调用触发器来记录所做的更改。
  • 事件通知呢?

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


【解决方案1】:

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

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

或者,您可以使用为您完成所有这些工作的 3rd 方产品,例如 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/

【讨论】:

    【解决方案2】:

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

    Create Trigger tr_DDLNotikums
        On DataBase
    For **DDL_DATABASE_LEVEL_EVENTS** 
    

    【讨论】:

      【解决方案3】:

      使用以下格式的 DDL 触发器

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-04
        • 2017-09-15
        • 2023-01-25
        • 2014-10-08
        • 2012-01-10
        • 1970-01-01
        • 2021-05-18
        • 2014-12-27
        相关资源
        最近更新 更多