我有两个SQL Server实例,我在另一台服务器的一台服务器上进行了大量远程数据库查询。就像server1.database1上的这个查询一样:
select T1.id
from server1.database1.dbo.table1 T1
inner join server2.datbase2.dbo.table2 T2
on T1.id = T2.id
我从其他人那里继承了这段代码,并想知道是否有更好(更快)的方法吗?我的意思是,有没有办法在server1.database1.dbo上创建server2.databse2.dbo.table2的精确复制副本,该副本会更新自身并使其自身保持最新状态?
Microsoft SQL Server标准版(64位) 版本10.0.4000.0
编辑:实际上,我现在在这种情况下做的是,如果可以的话,我使用开放查询和(nolock)来获取我需要的最小数据集,并将其放在临时表中。我将“id”列设置为唯一的聚簇索引,以便它可以快速加入我在服务器1上加入的任何内容。
答案 0 :(得分:2)
在SQL Server中,您的方案有三个主要选项(取决于您的版本和版本):
Log Shipping :易于设置和维护;但是,“副本”数据库不是实时数据库,只能与原始服务器上的最后一个事务日志备份一样是最新的。
Mirroring :非常接近实时,但“副本”数据库无法直接读取;相反,需要定期创建快照。
Replication :难以管理和维护,但可能会为您提供“副本”数据库中最实时的数据版本。
除非您遇到链接服务器的性能或稳定性问题,否则它会坚持使用该方法,除非您愿意花费大量时间和精力来实施这三种方法中的一种。
答案 1 :(得分:0)
您可以创建表的视图,它是不可编辑的,但是可以获取确切的表而无需始终返回到其他数据库。但是你仍然需要另一张表。