Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 用于每晚将数据从各种SQL Server移动到单个SQL Server的选项_Sql Server_Database - Fatal编程技术网

Sql server 用于每晚将数据从各种SQL Server移动到单个SQL Server的选项

Sql server 用于每晚将数据从各种SQL Server移动到单个SQL Server的选项,sql-server,database,Sql Server,Database,我们有3台SQL服务器(A、B和C)。服务器A已将服务器连接链接到B和C。我们在A上有许多视图连接来自B和C的数据。毫不奇怪,这些视图速度非常慢,需要数小时才能查询。我们讨论的是B和C中许多表中的1000条记录 我们的想法是将数据从B和C移动到A上的本地表中,然后将视图指向本地表。我们提出了许多数据传输选项: 每晚,将数据从B和C复制到A,只将增量移动到A上的表中(而不是整个数据集) 每晚,将B和C数据库恢复到A上的本地数据库,并将所有视图指向本地数据库 在a上编写一个自定义存储过程,该过程每晚

我们有3台SQL服务器(A、B和C)。服务器A已将服务器连接链接到B和C。我们在A上有许多视图连接来自B和C的数据。毫不奇怪,这些视图速度非常慢,需要数小时才能查询。我们讨论的是B和C中许多表中的1000条记录

我们的想法是将数据从B和C移动到A上的本地表中,然后将视图指向本地表。我们提出了许多数据传输选项:

  • 每晚,将数据从B和C复制到A,只将增量移动到A上的表中(而不是整个数据集)
  • 每晚,将B和C数据库恢复到A上的本地数据库,并将所有视图指向本地数据库
  • 在a上编写一个自定义存储过程,该过程每晚都会删除本地表,并使用SELECT*INTO将B和C中的数据填充到这些表中。将A上的所有视图指向本地表
  • 与选项3类似,在a上编写一个自定义存储过程,每晚计算a上的本地表与B和C上的等效表之间的增量。将a上的所有视图指向本地表
  • 我们不想使用选项1,因为(根据我们的高级DBA)复制会修改B和C上的表(例如,添加名为msrepl_tran_version的列)。B和C上的系统是我们无法修改的第三方应用程序

    我们不想使用选项2,因为我们不想拥有B和C中的每个表。我们只想要表的一个子集。这些数据库是巨大的,恢复它们会占用太多的空间

    我们目前正在探索备选方案3。然而,这并不适合我,因为每天晚上,我们都在移动大量数据,我们从B和C带来的90%左右的数据与前一天晚上相同

    高级DBA建议,除了选项1,选项4是每晚移动三角洲的唯一其他方法。然而,这似乎需要做很多工作。当然这是一个常见的问题,不需要编写自定义代码就可以解决


    有人有其他建议吗?

    您将永远无法正确检测增量。不要重新发明轮子,您描述的问题有一个简单的直接解决方案:

    • 将B和C都设置好
    • 在B和C上添加感兴趣的表格作为已发表文章
    • 让A订阅B和C,并以近乎实时的方式接收更新

    事务复制不会以任何方式修改表。复制代理仅挖掘日志中的更改,并将其转换为更新,这些更新将暂存到分发数据库中,然后应用于订阅服务器。任何第三方应用程序均未发生任何更改,表架构未修改。您可能被误导,认为复制不起作用,因为您只考虑了,这不适合您的问题描述(而且,与事务性复制不同,确实需要对已发布的文章进行结构更改)。

    您将永远无法正确检测增量。不要重新发明轮子,您描述的问题有一个简单的直接解决方案:

    • 将B和C都设置好
    • 在B和C上添加感兴趣的表格作为已发表文章
    • 让A订阅B和C,并以近乎实时的方式接收更新

    事务复制不会以任何方式修改表。复制代理仅挖掘日志中的更改,并将其转换为更新,这些更新将暂存到分发数据库中,然后应用于订阅服务器。任何第三方应用程序均未发生任何更改,表架构未修改。您可能被误导认为复制不起作用,因为您只考虑了,这不适合您的问题描述(而且,与事务性复制不同,确实需要对已发布的文章进行结构更改)。

    谢谢Remus,我将向项目团队提出此选项。您好,Remus,根据本文,事务复制确实将此列添加到表中:在本常见问题解答中也提到了它。请参阅题为“为什么复制会向复制表添加列”的问题;如果表未发布,它是否会被删除?嗯,在进一步调查之后,如果您希望订阅者更新数据(我们没有),它只会添加列。很酷(从我们的高级DBA那里得到一些支持)谢谢Remus,我将向项目团队提出这个选项。嗨,Remus,根据本文,事务复制确实将此列添加到表中:在这个常见问题解答中也提到了它。请参阅题为“为什么复制会向复制表添加列”的问题;如果表未发布,它是否会被删除?嗯,在进一步调查之后,如果您希望订阅者更新数据(我们没有),它只会添加列。酷(得到高级DBA的支持)