您是否知道如何使用SSIS在两个不同的数据库(即Oracle和MSSQL)之间传输新记录?在同一个数据库和服务器中的两个表之间传输新数据没有问题,但这是否可以在完全不同的服务器和数据库之间进行此类操作?
聚苯乙烯。我知道使用Lookup的解决方案,但如果有人需要每天多次检查并添加大量记录(50k及更多),则效率不高。我想只使用新数据。
答案 0 :(得分:2)
您有几种选择:
基于时间戳的解决方案
如果您有一个列在源系统中存储插入时间的列,则只能选择自上次加载以来创建的新记录。使用相同的逻辑,您也可以传输已修改的记录,只需在更改时使用时间戳值标记记录。
基于序列的解决方案
如果源表中有序列,则可以根据该序列加载新记录。查询目标系统的最后一个值,然后加载大于该值的avarything。
基于CDC的解决方案
如果源系统中有CDC(更改数据捕获),则可以跟踪更改,并可以根据CDC条目加载它们。
满载
这是最耗费资源的解决方案:您必须将所有数据从源复制到目标。如果您没有任何标记新记录的列,则应使用此解决方案。
您可以通过以下几种方式实现此目标:
<强>摘要强>
如果您至少有一列标记新的/已修改的记录,则可以使用它来实现SSIS的差异/增量加载。如果你没有任何线索,哪些列/行被更改,你必须加载(或至少查询)所有这些。
没有解决方案可以使用多个服务器启用单查询(INSERT .. SELECT)解决方案,而无需传输所有数据。 (请注意,使用链接服务器的多服务器查询是从源系统传输数据)。
答案 1 :(得分:0)
变量怎么样?是否可以在SSIS中的不同数据库和服务器之间使用相同的变量?
我想从目标表中传输最后的id
号码并将其传输到源表(不同的服务器!)。
我可以在数据库范围内设置一个变量,如下所示:
DECLARE @Last int
SET @Last = (SELECT TOP 1 Id FROM dbo.Table_1 ORDER BY Id DESC)
SELECT *
FROM dbo.Table_2
WHERE ID > @Last;
但是它仅在同一数据库(作为SQL命令)中的两个表之间工作。我可以在Variables --> Add variable
中为整个SSIS包创建一个变量,但我不知道可以以与上面类似的方式使用该变量 - 在目标表中保留有关最后一个id的信息并传递它作为数据限制在源服务器上的另一个表中。