Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将不带应用程序的跟踪更改为与同步_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将不带应用程序的跟踪更改为与同步

Sql 将不带应用程序的跟踪更改为与同步,sql,sql-server,tsql,Sql,Sql Server,Tsql,我是一个运行SQLServer2008R2的两人DBA团队的一员,我是一个偶然的DBA。我们最近遇到了一个问题,一个我们很少使用的小桌子最终被截断了。我们俩都发誓我们没有这么做,但事情还是发生了 为了避免将来出现这种情况,我们有兴趣实施更改跟踪。我们实际上没有必要保留已更改的数据,因此我们决定不使用更改数据捕获 话虽如此,我读到的关于更改跟踪的内容似乎更多地是关于使用它与应用程序同步数据,而不是简单地记录所有更改。我可以使用变更跟踪来简单地保存过去6个月内所做的所有变更的列表吗?一旦我在SQL

我是一个运行SQLServer2008R2的两人DBA团队的一员,我是一个偶然的DBA。我们最近遇到了一个问题,一个我们很少使用的小桌子最终被截断了。我们俩都发誓我们没有这么做,但事情还是发生了

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

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


谢谢

来自变更跟踪文档:

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

所以,如果你想用它作为一种机制来恢复意外删除,我想你会发现它的不足。但不要相信我的话。设置以下测试:

在测试环境中,设置一个虚拟表并对其启用更改跟踪。 在虚拟表中插入一些数据。 删除数据 使用更改跟踪恢复数据。 尽管已经把CDC作为一种选择,但它听起来更符合你的追求。CDC会跟踪非主键列,因此如果有人意外修改数据,CDC会跟踪受影响行中的所有值。它还有另外一个好处,即不允许表截断,因为它的实现方式是使用复制日志读取器


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

感谢您的回复。我将在今天晚些时候或明天进行一些测试。然而,我想澄清的一件事是,我们实际上并不打算恢复数据。在执行截断或插入等操作时,我们只希望记录该事件。根据发生的情况,我们将能够使用ssis包简单地重新加载数据。我回避CDC的另一个原因是,听起来即使将数据保存很短时间,也会显著提高存储使用率。我们目前每周的负载大于100GB,不想将使用量翻一番。如果您只想跟踪是否有人删除或更改了数据,请查看SQL Audit。顺便说一句,您不能寻找截断,但它可以很好地处理标准删除。你会得到和谁一起运行的声明。