【发布时间】:2021-07-17 14:01:22
【问题描述】:
我有 2 个不同的服务器(Server1 和 Server2)。每个都有一个具有相似结构的数据库(db1 和 db2)。 db1中有连续的数据插入。
我想要一项作业,每天使用 SSIS 和 SQL Server 代理作为调度程序,将数据从一台服务器 (db1) 提取到另一台服务器 (db2)。 我只想将新数据(在早期作业中未传输的数据)传输到 db2。
为此,我想从 db2 中选择最后一个 Id,并使用它来仅传输 db1 中具有更高 id 的数据。
这个概念本身是可行的,但我不知道如何用 SSIS 来实现它。
在 SSIS 中,我尝试使用 SQL 执行任务并将其保存到变量中:
第一个任务(保护变量中的 id):
SELECT TOP (1) [ID] FROM [DB2] ORDER BY ID DESC
第二个任务(将行安全放入对象变量):
SELECT * FROM [DB1] where ID > ?
这行得通,但是我怎样才能将对象变量插入到 db2 中。
有没有更干净的方法:
Insert into Server2.[db2] select * from Server1.[db1] where ID > ?
问题是,SSIS 只允许 一个 连接用于每个 SQL 执行(数据流任务同样存在问题)。
我还考虑过临时表。但我不确定这是否正确。
如果有人有想法/提示会很棒。我没有找到太多关于这个的东西,我想这是一个简单的任务。
非常感谢。
【问题讨论】:
-
解决此问题的一种方法是将 Server2 创建为 Server1 上的链接服务器 - 这允许您从与 Server1 的连接中查询 db2。
-
另外,您是否考虑过将Log shipping 作为手工制作数据库同步的替代方案?
-
这个想法太棒了。我想我错过了写一些重要信息:它的一个本地服务器和一个 Azure 托管实例。如果我是对的,则在这种情况下无法记录运输信息:请参阅dba.stackexchange.com/questions/232332/…
-
抱歉不够清晰。但我想使用 SSIS 的一个原因是避免使用链接服务器。但这是个好主意。泰
-
假设这是只写数据?否则,您不会错过更改/删除的记录吗?
标签: sql-server database ssis data-transfer