【问题标题】:Entire local database sync with sql azure整个本地数据库与 sql azure 同步
【发布时间】:2012-12-25 16:06:33
【问题描述】:

我正在开发一个使用本地数据库的 Windows 应用程序。 我想添加一个函数来将所有本地数据同步到 sql azure。

目前我使用以下代码。它使我能够成功同步一个特定的表。这里是“Author_Master”

 string sqlazureConnectionString = "XXXX";
 string sqllocalConnectionString = "Server=localhost;Database=Enh_Branchwise_Master_Bookshop;Trusted_Connection=True";

        using (SqlConnection serverCon = new SqlConnection(sqlazureConnectionString))
        using (SqlConnection clientCon = new SqlConnection(sqllocalConnectionString))
        {
            var provider1 = new SqlSyncProvider("scope1", serverCon);
            var provider2 = new SqlSyncProvider("scope1", clientCon);

            prepareServer(provider1);
            prepareClinet(provider2, serverCon);
            SyncOrchestrator sync = new SyncOrchestrator();
            sync.LocalProvider = provider1;
            sync.RemoteProvider = provider2;

            sync.Synchronize();

        }

还有以下方法。

 private static void prepareServer(SqlSyncProvider provider)
    {
        SqlConnection connection = (SqlConnection)provider.Connection;
        SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning(connection);

        if (!config.ScopeExists(provider.ScopeName))
        {
            DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(provider.ScopeName);
            scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Author_Master", connection));
            config.PopulateFromScopeDescription(scopeDesc);
            config.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
            config.Apply();
        }
    }

    private static void prepareClinet(SqlSyncProvider provider, SqlConnection sourceConnection)
    {
        SqlConnection connection = (SqlConnection)provider.Connection;
        SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning(connection);

        if (!config.ScopeExists(provider.ScopeName))
        {
            DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(provider.ScopeName);
            scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Author_Master", sourceConnection));
            config.PopulateFromScopeDescription(scopeDesc);
            config.Apply();
        }
    }

我的问题:有没有办法一次同步数据库中的所有表,而无需逐个添加表。

我的两个数据库具有相同的架构。 请给点建议,

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 亲爱的,我正在寻找与您在一张桌子上所做的相同的事情,请您帮我做这件事
  • 我已经使用以下代码来做到这一点。你可以试试。
  • @las in m 在 mvc4 中做同样的事情我使用了你的代码,但在 SqlSyncProvider 和所有中显示错误
  • @las 现在我已经删除了所有代码,但现在的问题是它没有执行

标签: database azure azure-sql-database microsoft-sync-framework azure-data-sync


【解决方案1】:

您可以使用 SQL 数据同步工具。

SQL 数据同步是 Windows Azure SQL 数据库的一项功能。

使用 SQL 数据同步,您可以通过 Windows Azure SQL 数据库实例同步选定的数据。

SQL 数据同步支持在 Windows Azure 数据中心内或跨 Windows Azure 数据中心进行同步。

SQL 数据同步还支持 SQL 数据库实例和本地 SQL Server 数据库的混合配置。

SQL 数据同步服务是免费的。

更多详情请查看“SQL 数据同步”子主题下的ScottGu's Blog Post

希望对你有帮助。

【讨论】:

  • @JuneT 感谢您提供宝贵的信息。我会相应地更新我的帖子。
  • @las 检查这个工具。可能对你有帮助。
  • @las 很高兴听到它有帮助。
【解决方案2】:

如果您使用的是 Sync Framework,则必须明确告诉它要实际同步哪些表(甚至列)。

【讨论】:

  • 目前我正在使用,是否可以从数据库查询中迭代所有表并执行上面的代码
  • 您只需要配置一次。是的,您可以遍历表列表并将它们添加到范围。
  • 好的,谢谢你的建议,这就是我现在要使用的东西
【解决方案3】:
  Dim clientProvision As SqlSyncScopeProvisioning = New SqlSyncScopeProvisioning(clientCon, syncScope)


                            If Not (clientProvision.ScopeExists("Scope_" + tableName)) Then
                                clientProvision.Apply()
                            End If

                            Dim serverProvision As SqlSyncScopeProvisioning = New SqlSyncScopeProvisioning(serverCon, syncScope)

                            If Not (serverProvision.ScopeExists("Scope_" + tableName)) Then
                                serverProvision.Apply()
                            End If

                            Dim syncOrchestrator As New SyncOrchestrator()

                            ' Create provider for SQL Server
                            Dim clientProvider As New SqlSyncProvider("Scope_" + tableName, clientCon)

                            ' Set the command timeout and maximum transaction size for the SQL Azure provider.
                            Dim serverProvider As New SqlSyncProvider("Scope_" + tableName, serverCon)

                            ' Set Local provider of SyncOrchestrator to the onPremise provider
                            syncOrchestrator.LocalProvider = clientProvider

                            ' Set Remote provider of SyncOrchestrator to the azureProvider provider 
                            syncOrchestrator.RemoteProvider = serverProvider

                            ' Set the direction of SyncOrchestrator session to Upload and Download
                            syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload


                            'Dim thread As New Threading.Thread(Sub() ShowStatistics(syncOrchestrator.Synchronize(), tableName))
                            'thread.Start()
                            ShowStatistics(syncOrchestrator.Synchronize(), tableName)

【讨论】:

    【解决方案4】:

    您可以为此使用 SQL 数据库迁移向导 (SQLAzureMW)。

    它是一个开源应用程序。

    您可以使用它在 Windows Azure SQL 数据库之间迁移您的 SQL 数据库。

    SQLAzureMW 有一个用户交互向导,可引导用户完成分析/迁移过程。

    获取更多关于SQL Database Migration Wizard的详细信息

    希望对你有帮助。

    【讨论】:

    • @las 为什么会这样?有什么特殊要求吗?
    • 迁移向导不是同步工具。它是一个迁移工具。您无法使用迁移工具进行增量同步。
    猜你喜欢
    • 2014-02-12
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多