【问题标题】:SSIS Insert continuous data from one server / database to anotherSSIS将连续数据从一台服务器/数据库插入到另一台服务器/数据库
【发布时间】: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


【解决方案1】:

你是大部分的路。只需使用数据流任务而不是执行 SQL 任务。一个数据流可以有两个不同的连接。

  1. 获取最后一个 id 并将其放入带有 ExecuteSQL 任务的变量中。然后连接一个数据流任务

  1. 为数据流任务配置源和目标

  1. 在此示例中,我们使用带有 SQL 命令的 OLEDB 源,该命令接受使用“?”的参数

  1. 我们点击参数按钮并选择我们想要映射到它的变量

  1. 最后,通过单击目标,选择服务器连接管理器和表,然后单击映射选项卡,将目标中的字段映射到第二台服务器

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 2011-05-23
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    相关资源
    最近更新 更多