我有两个(链接的)Microsoft SQL 服务器,它们的设置基本相同,但它们的内容不同。与服务器的连接很慢。有些表包含很多行。某些记录在字段中有所不同。每台服务器上的数据匹配率为 99%
我需要以最少的流量传输将数据从一台服务器合并到另一台服务器。
例如:
SERV1.DB1.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 10 |
| 'file2.txt' | 5 |
| 'file3.txt' | 35 |
SERV2.DB2.dbo.Table:
| fname | count |
----------------------
| 'file1.txt' | 40 |
| 'file2.txt' | 150 |
And I want to update SERV2.DB2.dbo.Table to:
| fname | count |
----------------------
| 'file1.txt' | 10 |
| 'file2.txt' | 5 |
| 'file3.txt' | 35 |
我可以:
- 删除 SERV2.DB2.dbo.Table 并从备份 SERV1.DB1.dbo.Table 恢复到 SERV2
加:简单
减号:大型数据库速度慢
- 使用 JOIN\UPDATE\INSERT 或 MERGE\UPDATE\INSERT 构造与露营每个字段
加:简单
减号:大桌子慢
减:大量数据传输
- 使用所有字段在每行上添加和计算 HASH 列,然后使用 MERGE\UPDATE\INSERT 仅更新差异行
加:只传输所有行的哈希值和更新行
减号:更改表
减:计算
减号:很多桌子需要做更多的工作
- 使用 tablediff 实用程序
正负: ???在这种情况下有用吗?它是如何与慢速连接一起工作的?
有没有更有用的方法可以以最少的流量传输将数据从一台服务器合并到另一台服务器?
UPD:慢速连接通道是优化流量的原因。对于具有大量记录的表,比较两个表中的每条记录或复制完整的表\数据库将花费大量时间。