0

Oracle 12c 企业版版本 12.1.0.2.0 版本

当前进程。

数据库 1 我有两个 Cursor SQL 查询(连接多个表),它们基本上使用 PL/SQL for 循环写入平面文件(两个文件具有相似的文件格式)。许多平面文件文件被创建并写入目标目录。

数据库 2 从目标目录中提取平面文件并将每个平面文件处理到它的系统中。

将许多大文件从一个数据库写入目录,然后再处理到第二个数据库中,我肯定会很耗时,公司正在寻找提高这种性能的方法。这个过程每月发生一次,创建 200 到 1500 个文件。每个文件的大小可以是 100k 到 5gig。

新流程。

我被要求研究创建一个新的解决方案来加快这个过程。

作为开发人员,我面临的任何解决方案的问题如下 a)这更快吗?b)这可以在 PL/SQL 脚本中完成c)如果我尝试这样做会遇到什么问题?d)有更好的解决方案吗?e)这种方法有任何性能/系统问题吗?

1. 可传输表- 可以在数据库 1 中创建一个暂存表,我将两个 SQL 查询查询中的所有数据批量收集到一个暂存表中。然后,我使用暂存表所在的表空间并将该表空间传输到数据库 2,以用于处理到数据库 2。然后,该表空间将在一周后从数据库 2 中删除。一周后我也从数据库 1 中清除了暂存表。

2. DataPump - 我非常不确定 datapump 作为你的写作导出 DMP 文件(可能使用查询来选择所需的数据)到一个目录,然后拿起该 DMP 文件导入到新数据库我假设它会在新系统中创建一个临时表,以便将其处理到主表中。这可能是一个大转储文件,这会是一个问题吗?

3. Golden Gate - 我不确定 Golden Gate,这不只是一个复制工具。不知道用这个工具去哪里。

4. 视图- 在数据库 1 上创建一个视图(这可能是一个实体化视图吗?),它将同时保存 SQL 查询(UNION ALL),第二个数据库将使用数据库链接调用此视图以将数据处理到第二个数据库。通过网络读取这些数据会有什么问题吗?

任何想法都会很棒?有没有人有上述经验?有没有比我需要看的上面更好的解决方案?

谢谢肖恩

4

1 回答 1

0

我肯定会选择选项#4 - 通过数据库链接获取所有数据。我几乎可以保证它会是最快的。在源数据库中创建一个视图(如果您需要多次运行查询,可以是一个 MVIEW),然后根据您的需要执行 DROP TABLE 和 CREATE TABLE AS SELECT 或 TRUNCATE TABLE 和 INSERT INTO .. SELECT 语句。CTAS 和 IAS 都可以利用并行功能。

如果选项#4 由于某种原因不可行,则数据泵导入(选项#2)可能是一个选项。在这种情况下,您应该考虑通过数据库链接进行数据泵导入。它使过程变得更加简单。

如果在两个数据库之间传输数据成为瓶颈,您可以考虑使用压缩(在这种情况下检查您的许可证)。

于 2020-01-29T19:53:26.900 回答