如何跟踪Sql Server中表结构的变化

时间:2012-08-30 07:58:35

标签: sql-server database audit

我有一个有三列的表(姓名,年龄,城市)。现在,如果有人在某个时候向表中添加一个额外的列(国家/地区)。我如何知道哪个列已添加到表中,即国家。

当有人改变表的结构时,有没有办法跟踪表结构的变化?

2 个答案:

答案 0 :(得分:2)

可以使用SQL Server DDL触发器来跟踪DDL更改,无论更改是有意还是无意。谁提交了更改,何时以及受已提交操作影响的内容是使用触发器捕获所需的基本信息。要使用此解决方案,需要创建和维护触发器和捕获的信息存储

在以下示例中,使用SQL Server的EVENTDATA()函数捕获有关触发触发器的事件的信息。 SQL脚本创建DDL触发器,捕获数据库级别上的CREATE,ALTER和DROP事件(尽管可以在服务器级别创建触发器以捕获服务器上所有数据库的事件;应使用ON ALL SERVER选项,而不是ON DATABASE):

CREATE TRIGGER Audit_DDL
ON DATABASE
    FOR CREATE_TABLE, ALTER_TABLE, DROP_TABLE
AS
     DECLARE
        @event xml;
     SET
     @event = EVENTDATA();
     INSERT INTO Audit_DDL_Events
     VALUES
     (
     REPLACE(CONVERT(varchar(50),
     @event.query('data(/EVENT_INSTANCE/PostTime)')), 'T', ' ')
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/LoginName)'))
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/UserName)'))
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/DatabaseName)'))
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/SchemaName)'))
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/ObjectName)'))
     ,
     CONVERT(varchar(150),
     @event.query('data(/EVENT_INSTANCE/ObjectType)'))
     ,
 CONVERT(varchar(max),
 @event.query('data(/EVENT_INSTANCE/TSQLCommand/CommandText)'))
 );

还必须创建适用于EVENTDATA XML审核数据的存储表:

CREATE TABLE Audit_DDL_Events
(
             DDL_Event_Time            datetime
             ,
             DDL_Login_Name            varchar(150)
             ,
             DDL_User_Name             varchar(150)
             ,
             DDL_Database_Name         varchar(150)
             ,
             DDL_Schema_Name           varchar(150)
             ,
             DDL_Object_Name           varchar(150)
             ,
             DDL_Object_Type           varchar(150)
             ,
             DDL_Command              varchar(max)
);

答案 1 :(得分:1)

您可以使用DDL触发器跟踪数据库结构的转换器。关于该主题的好文章可以找到here

第三方编辑

引用链接文章

  

DDL触发...激活存储过程以响应事件。他们   响应各种数据定义语言(DDL)   事件。这些事件由T-SQL语句指定   从关键字CREATE,ALTER和DROP开始。   ......这些用于审计和监管等管理任务   数据库操作。