无需与应用程序同步的更改跟踪

时间:2014-06-06 17:14:48

标签: sql sql-server tsql

我作为运行SQL Server 2008 R2的双人DBA团队的一员工作,我有点像意外的DBA。我们最近遇到了一个问题,即我们几乎没有使用过的小桌子最终会被截断。我们俩都发誓我们没有这样做,但它确实发生了。

为避免将来出现这种情况,我们对实施变更跟踪感兴趣。我们没有必要保留已更改的数据,因此我们决定不使用更改数据捕获。

话虽如此,我所阅读的有关变更跟踪的内容似乎更多的是使用它来与应用程序同步数据,而不是简单地记录所有变更。我可以使用更改跟踪来简单地保留过去6个月内所做的所有更改的列表吗?一旦我为SQL Server GUI中的每个数据库启用它,信息存储在哪里?你正确实现这一点的任何其他信息都会很棒。

谢谢!

1 个答案:

答案 0 :(得分:0)

来自更改跟踪的文档:

  

主键列的值仅来自的信息   跟踪表,其中包含更改信息。这些   值标识已更改的行。获取最新信息   对于那些行的数据,应用程序可以使用主键列   将源表与跟踪表连接的值。

所以,如果你打算尝试使用它作为一种机制以某种方式恢复意外删除,我想你会发现它缺乏。但是不要相信我的话。设置以下测试:

  1. 在测试环境中,设置虚拟表并在其上启用更改跟踪。
  2. 将一些数据插入虚拟表格。
  3. 删除数据
  4. 使用更改跟踪恢复数据。
  5. 尽管已经将CDC视为一种选择,但这听起来更像是你所追求的。 CDC确实跟踪非主键列,因此如果有人意外地进行了数据修改,CDC将跟踪受影响的行中的所有值。它具有不允许表截断的额外好处,因为它的实现方式(它使用复制日志读取器)。

    此外,您可以将CDC清理作业配置为在任何您想要的任何时间后自动清除数据(听起来6个月是您的保留期,这是完全可行的。)