深入探讨SQL Azure数据同步(上)

日期: 2011-01-24 作者:Roman Rehak翻译:康占国 来源:TechTarget中国 英文

在以前的文章“SQL Azure迁移工具”中,我们讨论了在本地SQL实例与SQL Azure之间移动数据的选项。在这篇文章中,我们将着眼于更加复杂的数据交换方案,包括数据同步和在SQL Azure中刷新数据同时保持可用性。   实现数据同步通常需要一些前期分析,为这些工作确定最佳的流程以及最合适的工具和技术。其他的方面,你需要考虑同步表的的数量、需要刷新的频率(这可能与大量表在同一数据库中同步不同)、应用程序的运行时间要求以及表的大小。

一般来说,越大的表越需要越需要多的运行时间、实现数据同时越需要你更多的工作,以便使它不干扰应用程序使用数据库。   最简单的数据同步方法之一是创建临时表在目标数……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

在以前的文章“SQL Azure迁移工具”中,我们讨论了在本地SQL实例与SQL Azure之间移动数据的选项。在这篇文章中,我们将着眼于更加复杂的数据交换方案,包括数据同步和在SQL Azure中刷新数据同时保持可用性。

  实现数据同步通常需要一些前期分析,为这些工作确定最佳的流程以及最合适的工具和技术。其他的方面,你需要考虑同步表的的数量、需要刷新的频率(这可能与大量表在同一数据库中同步不同)、应用程序的运行时间要求以及表的大小。一般来说,越大的表越需要越需要多的运行时间、实现数据同时越需要你更多的工作,以便使它不干扰应用程序使用数据库。

  最简单的数据同步方法之一是创建临时表在目标数据库然后从源数据库加载这些数据。在SQL Azure中,可以用SQL Server Integration Services 或者Bcp 工具来实现,如前面文章所讨论的。一旦数据加载到临时表,运行一系列 T-SQL 脚本去比对临时表与主表之间的数据并使他们同步。下面有一个示例序列我已经在很多个项目中成功实施了。

  •   使用Delete From 命令 关联临时表和主表并且删除主表中那些与临时表中行没有匹配的的行。
  •   使用 UPDATE FROM 命令关联临时表和主表并且更新主表中的记录。
  •   使用 Insert 命令 把仅存在临时表中的行插入到主表中。

  如果您使用的SQL Server 2008或者更新的版本,可利用Merge语句把第二条和第三条语句组合成单一的命令。Merge语句的绰号是Upsert, 因为它有一条语句中实现插入新行和更新原有行的组合能力。因此,Merge本身具有很好的数据同步能力。

  在中小规模的表中使用我所描述的工具效果很好,因为表在更新发生时临时的被锁定因此暂时无法使用。但在我经验,这是一个轻微的干扰,可以通过在数据库使用率低的时段同步或者分解成批量的更新。缺点是,你必须实现每个表的自定义代码。

  本人曾经也有一个稍微修改的方案,它去除了每个表执行一些列脚本的需要。当你加载临时表后,执行存储过程sp_rename,交换主表和临时表的名字。这个执行的速度非常快,甚至运行在很多表上。在TRY/CATCH模块里为每个表执行交换,并且交换没有成功时回滚这个事务处理。

相关推荐