【问题标题】:What's the best way to allow queries/views to see how tables looked in the past based on a datetime stamp in SQL Server 2008?允许查询/视图根据 SQL Server 2008 中的日期时间戳查看表过去的外观的最佳方法是什么?
【发布时间】:2010-02-26 06:25:20
【问题描述】:

场景:我们有大量的服务器环境信息(名称、IP、角色、防火墙端口等)。目前,它存储在 SharePoint 上的一个大型 Excel 工作簿中,例如,可以轻松地将过去版本的数据与当前版本进行并排比较。

我们计划将其转移到 SQL Server 2008 数据库中,以便更轻松地利用工具/自动化并提供更好的报告。但是,正如您所料,其中一个要求是管理员希望能够查看环境在过去某个时间点的样子。一些魔法,例如: sp_getEnvironmentsAsOf('PERF1', '2009-11-14 00:00:00') 突然返回了截至 2009 年 11 月 14 日的所有当前数据。

我正在研究 SQL Server 2008 Change Tracking 和 Change Data Capture,但所有场景和示例都与查看表中数据的特定要求无关,因为它们在某个任意点过去。

CT/CDC 合适吗?除了将我自己的解决方案从棘手和希望中推出之外,还有哪些其他选择?

【问题讨论】:

    标签: sql-server database-design sql-server-2008


    【解决方案1】:

    您应该设计您的架构来跟踪此更改,而不是依赖 dbms 功能。比如:

    Devices
      Id
      Description
      Serial number
      Some immutable properties
    
    Properties
      Id
      Description
    
    Device-Properties
      DeviceId
      PropertyId
      Value
      TimeStamp
    

    您永远不会更新或删除设备属性,您只会添加带有新时间戳的行。

    样本数据:

    Devices
    1,Server A,1123123
    2,Server B,1323454
    
    Properties
    1,IP Address
    2,Location
    3,Rol
    
    Devices-Properties
    1,1,192.168.0.10,2010-02-12
    1,2,Rack D,2010-02-12
    1,3,Proxy,2010-02-12
    2,1,192.168.0.105,2010-02-12
    2,2,Rack C,2010-02-12
    2,3,Mail server,2010-02-12
    1,1,192.168.0.11,2010-02-15
    

    在样本数据中,Server A IP 地址在2010-02-15 上从192.168.0.10 更改为192.168.0.11

    您可以根据需要构造视图或存储过程来连接和过滤数据。

    【讨论】:

      【解决方案2】:

      CDC 是合适的,但您可能还想查看 CodePlex 上的 AutoAudit

      【讨论】:

        【解决方案3】:

        我想到的是“快照”功能(快照显示了创建快照时数据库的状态)。但是,快照看起来像一个不同的数据库(因此您将查询类似“MyDBSnapshot_DATE”而不是“MyDB”的内容,并且它肯定需要资源[跟踪更改]。

        其他选择是……自己动手。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多