2010-02-11 119 views
8

我们有一个通过SQL Server 2008在共享主机上运行的数据库。由于性能的限制,我们现在处于这样的位置,我们必须移动数据库以及一个网站。我们对数据库使用更改跟踪,以便客户端可以使用同步框架进行同步。SQL Server 2008:更改跟踪表存储在哪里?

我的问题是:存储在数据库中的更改跟踪表是否意味着在重定位时它将保持原状?

我目前正在学习SQL Server的过程中,更好的跟踪点仍然暗示着我。从概念上讲,我不太了解变更跟踪表的位置。

+0

段落为赢:D – 2010-02-11 10:56:44

+0

嘿,谢谢。我确定我把他们放进去,但是哦! – Sergio 2010-02-11 11:01:25

回答

4

Commit表是一个隐藏的内部表,名为sys.syscommittab,只能由管理员直接访问,并为每次修改时为每个事务存储一行,以便参与更改跟踪。

相关数据存储在单独的系统表中,这是在用户表上启用更改跟踪时创建的。

通过在表级启用更改跟踪而创建的内部表名为sys.change_tracking_[object id],其中[object id]是目标表的对象ID。

+0

感谢您的回复。你将不得不原谅我的无知,但sys.syscommittab被隐藏,这是否意味着它与数据库是分开的,并且不会包含在任何备份中? 最坏的猜测情景是,我们移动数据库并丢失更改跟踪信息。 – Sergio 2010-02-11 11:14:58

+0

@Sergio:有趣的问题,不确定。我会挖一个... – 2010-02-11 11:52:53

1

here看起来像更改跟踪是与表格相同的数据库目录中的通用表。所以你对数据库的任何移动都应该带着你的变化表。

我会先调查数据库的架构,然后使用MSDN页面。

+0

@Hassan Syed:不幸的是,我不认为这是正确的 – 2010-02-11 11:05:22

+0

感谢您的文档链接。现在阅读它 – Sergio 2010-02-11 11:15:31

1

考虑是否发布这个答案,因为我通常不喜欢只是给出了一个链接,但在这种情况下,我想总结一些要点,所以做得不好评论!

This文章非常值得一读,它提供了有关更改跟踪和(和更改数据捕获)工作原理的大量细节。

对于更改跟踪,你可以找到内部表正在使用使用跟踪更改:

SELECT [name] FROM sys.internal_tables 
    WHERE [internal_type_desc] = 'CHANGE_TRACKING'; 

重要的报价是:

表是一般所谓的 内部表,并且对其名称或存储的 没有控制权。