我是数据库和SQL的新手,我正在努力了解SQL Change Tracking
和Microsoft Sync Framework
如何协同工作。
我找不到一些关于如何与Microsoft Sync Framework
同步数据库的明确示例,但希望我找到this站点,修改代码并在我的两个数据库上同步工作,这里是代码I得到:
// Server connection
using (SqlConnection serverConn = new SqlConnection(serverConnectionString))
{
if (serverConn.State == ConnectionState.Closed)
serverConn.Open();
// Client connection
using (SqlConnection clientConn = new SqlConnection(clientConnectionString))
{
if (clientConn.State == ConnectionState.Closed)
clientConn.Open();
const string scopeName = "DifferentPKScope";
// Provision Server
var serverProvision = new SqlSyncScopeProvisioning(serverConn);
if (!serverProvision.ScopeExists(scopeName))
{
var serverScopeDesc = new DbSyncScopeDescription(scopeName);
var serverTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, serverConn);
// Add the table to the descriptor
serverScopeDesc.Tables.Add(serverTableDesc);
serverProvision.PopulateFromScopeDescription(serverScopeDesc);
serverProvision.Apply();
}
// Provision Client
var clientProvision = new SqlSyncScopeProvisioning(clientConn);
if (!clientProvision.ScopeExists(scopeName))
{
var clientScopeDesc = new DbSyncScopeDescription(scopeName);
var clientTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable(table, clientConn);
// Add the table to the descriptor
clientScopeDesc.Tables.Add(clientTableDesc);
clientProvision.PopulateFromScopeDescription(clientScopeDesc);
clientProvision.SetCreateTrackingTableDefault(DbSyncCreationOption.CreateOrUseExisting);
clientProvision.Apply();
}
// Create the sync orchestrator
var syncOrchestrator = new SyncOrchestrator();
// Setup providers
var localProvider = new SqlSyncProvider(scopeName, clientConn);
var remoteProvider = new SqlSyncProvider(scopeName, serverConn);
syncOrchestrator.LocalProvider = localProvider;
syncOrchestrator.RemoteProvider = remoteProvider;
// Set the direction of sync session
syncOrchestrator.Direction = direction;
// Execute the synchronization process
return syncOrchestrator.Synchronize();
}
}
因此,通过这种方式,我的两个数据库之间的任何更改都会同步。但我希望我的C#应用程序能够在发生变化时自动同步两个数据库,因此我找到了一个名为Change Tracking
here的东西。我下载了提供SynchronizationHelper
的示例代码,该代码还在我的数据库中创建了名为"{TableName}_tracking"
的表。这是跟踪更改的另一个表,实际上它确实如此,每当我在数据库中更改某些内容时,_tracking
都会使用我更改,添加或删除的元素进行更新。 Change Tracking
不会自动同步我的数据库,只是跟踪它们的变化,这是为了什么目的?
使用第一个代码,同步有效,但没有创建_tracking
表,它是否只是同步表中的所有内容,无论发生什么变化?如果是这种情况,对于大型数据库,我应该使用Change Tracking
?
也许这是微不足道的,但我一直在谷歌搜索和测试很多代码,但我找不到明确的答案。
答案 0 :(得分:0)
安装Sync Framework时,它附带一个帮助文件,其中包含几个同步数据库的演练。您引用的第一个链接,第二个链接使用相同的同步提供程序,它们都有跟踪表。 Sync Framework支持使用内置的SQL更改跟踪功能或使用Sync Framework自行创建的自定义功能(_tracking)。
Sync Framework位于数据库之外,您需要调用它才能触发同步。改变跟踪就是它所说的 - 跟踪变化。
如果您希望数据库执行同步,则可能需要检查SQL Replication。