【问题标题】:SSIS 2017 package successfully completed without all data at ole db oracle destination from ole dB oracle sourceSSIS 2017 包成功完成,但没有来自 ole dB oracle 源的 ole db oracle 目标的所有数据
【发布时间】:2021-03-01 13:22:22
【问题描述】:

我有一个 SSIS 包,它具有 ole dB 源(oracle 11g),其中包含数千万条记录,并且我尝试将相同的数据插入到具有快速加载选项的 oracle 12c ole dB 目标中。包已成功完成,没有错误,但目标表没有任何数据,包显示已插入大约 400 万条记录,黄色旋转仍在旋转。

我将 sql server 2017 和 windows server 2016 与 Visual Studio 2017 一起使用。我的观察之一是包正在调整,直到临时缓冲区已满,然后它不是。

【问题讨论】:

    标签: oracle ssis


    【解决方案1】:

    我对 SSIS 的唯一了解是它在性能方面是一头猪。它通过网络逐行、缓慢地获取每一行。我曾经遇到过一个问题,开发人员试图使用 SSIS 将大约一百万行从 oracle db 加载到 mssql db。花了四个多小时。我花了 30 分钟来获得良好的跟踪并观察缓慢的活动,另外 15 分钟让我在源 oracle dbd 中编写 PL/SQL 过程。该过程在大约 4 分钟内运行负载 --- 而 SSIS 需要超过 4 小时。

    为此,您首先需要在数据库中创建一个将驱动该进程的数据库链接。这里我将假设源数据库。

    CREATE DATABASE LINK tgt_db
       CONNECT TO hr IDENTIFIED BY password
       USING 'tgt_db';
    

    USING 'tgt_db' 告诉它使用 tnsames 条目 'tgt_db' 来解析与目标 db 的网络连接。

    那么就这么简单

    insert into target_table@tgt_db 
         (col1, 
          col2, 
          col3) 
    values (select col1, 
                   col2, 
                   col3 
            from local_table
            );
    

    当然,您可以将该 INSERT 放入一个 PL/SQL 过程中,该过程还可以包括从目标等中删除的任何逻辑,然后在 dbms_scheduler 中调度该过程。或者,您对从源中提取的目标数据库应用相同的原则。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多