在以前的文章“SQL Azure迁移工具”中,我们讨论了在本地SQL实例与SQL Azure之间移动数据的选项。在这篇文章中,我们将着眼于更加复杂的数据交换方案,包括数据同步和在SQL Azure中刷新数据同时保持可用性。 实现数据同步通常需要一些前期分析,为这些工作确定最佳的流程以及最合适的工具和技术。其他的方面,你需要考虑同步表的的数量、需要刷新的频率(这可能与大量表在同一数据库中同步不同)、应用程序的运行时间要求以及表的大小。
一般来说,越大的表越需要越需要多的运行时间、实现数据同时越需要你更多的工作,以便使它不干扰应用程序使用数据库。 最简单的数据同步方法之一是创建临时表在目标数……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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模块里为每个表执行交换,并且交换没有成功时回滚这个事务处理。
作者
相关推荐
-
Linux支持的引入 推动了SQL Server 2016集成服务的发展
随着SQL Server的不断发展,集成服务也在发生相应的变化。在最新的SSIS更新中,增加Linux支持和SQL Server 2016升级向导。
-
Notre Dame对云端SQL Server性能基准的探索实践
确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。
-
横向扩展SQL Server应用程序:提高工作负载的选项
SQL Server管理员面临的最大挑战之一就是扩展数据库以适应更为繁重的数据处理工作负载。然而事情越发复杂的是,虽然Microsoft提供了许多不同的SQL Server可扩展性选项,但它们并不都适合于每种情况。
-
五大技巧构建首个SQL Server容器
容器的世界庞大而复杂,使用者可能会感到困扰,这里我们将列出一些示例,以便引导您顺利完成SQL Server容器的创建和管理。