oracle - SSIS 2017 包成功完成,但没有来自 ole dB oracle 源的 ole db oracle 目标的所有数据
问题描述
我有一个具有 ole dB 源(oracle 11g)的 SSIS 包,该包具有数千万条记录,并且我尝试将相同的数据插入到具有快速加载选项的 oracle 12c ole dB 目标中。包成功完成,没有错误,但目标表没有任何数据,包显示已插入大约 400 万条记录,黄色旋转仍在旋转。
我正在使用 sql server 2017 和 windows server 2016 与 Visual Studio 2017。我的观察之一是包正在调整,直到临时缓冲区已满,然后它不是。
解决方案
我对 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' 来解析与目标数据库的网络连接。
然后它很简单
insert into target_table@tgt_db
(col1,
col2,
col3)
values (select col1,
col2,
col3
from local_table
);
当然,您可以将该 INSERT 放入一个 PL/SQL 过程中,该过程还可以包括用于从目标等中删除的任何逻辑,然后在 dbms_scheduler 中调度该过程。或者,您对从源中提取的目标数据库应用相同的原则。
推荐阅读
- authentication - 是否可以通过 AD 组对雪花用户进行身份验证?
- ios - 结合 uncollect 运算符?
- c# - wpf中的自动组合组合框白色文本框
- command-line - 如何自动化此代码以从 txt 输入计算机名。列表?
- node.js - 如何告诉打字稿编译器不使用导出?
- javascript - 如何根据用户使用纯 JS 滚动来转换 div 位置?
- javascript - 在输入值之前,最大长度不会显示,并且在 Backspacing 之后它会减少到 31 个字符
- javascript - JS 中的 react prop 验证有问题
- caching - 清除多台服务器的缓存
- javascript - 仅在我的 HTML5 页面中需要时尝试使用 JS 游戏启动/触发 iframe