代码之家  ›  专栏  ›  技术社区  ›  Locksfree

如何确定数据库是否已更改?

  •  4
  • Locksfree  · 技术社区  · 16 年前

    我需要确定mssql服务器上的数据库是否在两个不同的时刻之间发生了变化。

    最好,我希望检查是基于T-SQL的,或者使用SMOs,而不是基于文件的。我查了一下MSDN,但到目前为止还没有找到任何相关的东西。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Ivan Stankovic    12 年前

    财务日志 , DBCC页面 fn_dump_dblog文件 Open LDF file and view LDF file content 在线文章获取更多详细信息,并深入分析读取事务日志信息所需的内容

        2
  •  2
  •   KM.    16 年前

    对于SQL Server 2005及更高版本,可以添加DDL触发器,例如:

    CREATE TRIGGER [YourDatabaseTrigger]
    ON DATABASE
    FOR DDL_EVENTS
    AS
    
    DECLARE @EventData      xml
    DECLARE @Message        varchar(1000)
    SET @EventData=EVENTDATA()
    
    INSERT INTO YourLogTable 
        (EventDateTime,EventDescription) 
        VALUES (GETDATE(),SUSER_NAME()
                         +'; '+@EventData.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)')
                         +'; '+@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)')
                         +'; '+@EventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
               )
    RETURN
    GO
    
    ENABLE TRIGGER [YourDatabaseTrigger] ON DATABASE
    

    CREATE TRIGGER YourTableTrigger On YourTable
    FOR INSERT
    AS
    
    INSERT INTO YourLogTable 
        (EventDateTime,EventDescription) 
        SELECT GETDATE(),SUSER_NAME()
                         +'; INSERT YourTable'+
                         +'; data='+...your column data here...
        FROM INSERTED
    GO
    
        3
  •  1
  •   Mark Byers    16 年前

    红门有两种产品可能会让你感兴趣:

    它们可以将数据库的当前版本与备份副本进行比较,并分别查找架构或数据中的更改。

        4
  •  1
  •   Darnell    16 年前

    DDL triggers Service Broker . 但是,除非您有可比较的东西,否则识别数据更改可能要困难得多。我能想到 Database Snapshot