【问题标题】:SQL Server DDL changes (column names, types)SQL Server DDL 更改(列名、类型)
【发布时间】:2013-11-10 21:42:51
【问题描述】:

我需要审核对数据库所做的 DDL 更改。这些更改需要稍后在许多其他数据库中复制。我发现 here 可以启用 DDL 触发器来跟踪 DDL 活动,这对 create tabledrop table 操作非常有用,因为触发器获取了执行的 T-SQL,我可以愉快地存储它某处并稍后在其他服务器上执行它。

我遇到的问题是 alter 操作:当从 Management Studio 更改列名时,生成的事件不包含有关列的任何信息!它只是说表被锁定了...更重要的是,如果同时更改了许多列(例如,列 foo => oof,还有列 bar => rab) 事件只触发一次!

我可怜的人的解决方案是有一个表来存储要在更改操作之前和之后更改的表的结构。这样,我可以比较这两种结构并找出哪一列发生了什么。

但在我这样做之前,我想知道是否可以使用 SQL Server 中我忽略的其他一些功能来实现它,或者也许有更好的方法。你会怎么做?

【问题讨论】:

  • "technet.microsoft.com/en-us/library/bb522542(v=sql.105).aspx" 在这里您将找到您可以跟踪的所有 ddl 事件。如果 SSMS 发生更改,则无法在 DDL 触发器中进行控制。而是编写服务器级触发器以仅允许使用 t-sql 命令进行更改。
  • 链接好像坏了...而且我恐怕不能禁止用户从 SSMS 修改表...

标签: sql sql-server ddl audit ddl-trigger


【解决方案1】:

有一种产品就是为了做到这一点(我写的)。
它监视包含 ddl 更改的脚本、谁编写了它们以及何时以及它们对性能的影响,它使您能够轻松地将它们复制为一个部署脚本。根据您的要求,免费版就足够了。
http://www.seracode.com/

【讨论】:

    【解决方案2】:

    SQL Server 中没有针对您的需要的特殊功能。您可以使用触发器,但它们需要大量 T-SQL 编码才能正常工作。快速的解决方案是一些第三方工具,但它们不是免费的。请看一下这个关于第三方工具的答案https://stackoverflow.com/a/18850705/2808398

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多