我有2个具有相同结构的数据库,一个在本地计算机上,另一个在公司的服务器上。每隔确定的时间,本地数据库中的数据应同步到服务器数据库。
我对如何执行此操作有一个大致的想法 - 创建一个脚本,以某种方式“合并”不在服务器数据库上的信息,然后使此脚本作为服务器的预定作业运行。但是,我的问题在于我对此并不十分熟悉。
SQL Server Management Studio是否提供了一种简单的方法(某种向导)并生成这种脚本?这是我必须从头开始构建的吗?
我已经完成了一些基本的谷歌搜索并遇到了“复制”一词,但我并不完全理解它。我宁愿听到那些实际上已经做过这件事的人的一些意见,或者他们善于解释这类事情。
感谢。
答案 0 :(得分:12)
复制听起来像是一个很好的选择,但会有一些开销(不是技术开销,但知识需要支持它)。
另一个SQL Server选项是SSIS。 SSIS提供图形工具来设计您要做的事情。如果合适,SSIS包还可以运行SQL语句。可以从SQL Server作业启动并安排SSIS包。
在选择解决方案时,您应该考虑同步规则的复杂性。例如,在合并数据时难以解决冲突,例如重复密钥。如果规则很简单,则可以轻松创建SQL脚本。但是,复杂的冲突规则可能更难以在脚本(或复制)中实现。
答案 1 :(得分:8)
遗憾的是,SQL Server Management Studio并没有提供太多这样的功能。
你应该仔细研究一些优秀的商业产品:
Red Gate Software的SQL Compare和SQL Data Compare - 强力推荐的优秀工具!您甚至可以将实时数据库与另一个数据库中的备份进行比较并同步数据 - 非常漂亮!
ApexSQL的SQL Diff和SQL Data Diff
他们都花钱 - 但如果你认真对待它,并且你在日常生活中使用它们,那么它们很快就会得到报酬 - 非常值得每一分钱。
SQL Server 2008中唯一的“免费”选项是在两台服务器之间创建一个链接,然后使用MERGE statement(SQL Server 2008中的新增功能)来传输数据。这不适用于结构更改,并且仅限于在两个服务器之间建立实时连接。
答案 2 :(得分:5)
您一定要阅读有关事务复制的内容。这听起来非常适合你所描述的情况。以下是一些可以帮助您入门的链接。
答案 3 :(得分:4)
您想要的是Peer-to-Peer Transactional Replication,它允许在两个数据库中更新数据,但通过连续的更改合并使数据保持同步。这是您想要的结果匹配,但是是一个相当昂贵的选项(在两个站点上都需要Enterprise Edition)。另一种选择是Bidirectional Transactional Replication,但由于这还需要两个EE许可证,我说对等点更容易以相同的资金部署。
一个更加预算友好的选项是Updatable Subscriptions for Transactional Replication,但是可以更新的订阅被弃用,你可以把钱放在一匹失去的马上。
另一种选择是使用Merge Replication。最后,对于“本地”数据库非常流动的情况,有Sync Framework。
请注意,所有这些选项需要公司服务器数据库的一些配置和合作。
答案 4 :(得分:0)
有一些优秀的第三方工具。对我来说,xSQL Data Compare一直都是这样做的。由于比较是高度可修改的,因此几乎适用于所有数据比较或数据同步方案。希望这有帮助!