可传输表空间、DataPump、Golden Gate 和具有 DB_Link 的视图哪个最好?
Transportable Tablespaces, DataPump, Golden Gate & a View with DB_Link which is best?
Oracle 12c 企业版版本 12.1.0.2.0
当前进程。
数据库 1 我有两个 Cursor SQL 查询(连接了多个 tables),它们基本上使用 [=61 写入平面文件(两个文件具有相似的文件格式) =] 循环。创建了许多 Flatfile 文件并将其写入目标目录。
数据库 2 从目标目录中获取平面文件并将每个平面文件处理到它的系统中。
将大量大文件从一个数据库写入目录,然后再处理到第二个数据库中,这肯定很耗时,公司正在寻找提高这种性能的方法。此过程每月进行一次,并创建 200 到 1500 个文件。每个文件的大小可能为 100k 到 5gig。
新进程。
我被要求考虑创建一个新的解决方案来加快这个过程。
作为开发人员,我遇到的任何解决方案的问题如下 a) 这样更快吗? b) 这可以在 [=61 中完成吗=] script c) 如果我尝试这样做会遇到什么问题? d) 有更好的解决方案吗? e) 此方法有任何performance/system问题吗?
1. Transportable tables - 是否可以在数据库 1 中创建暂存 table,我在其中批量收集来自两个 SQL 查询的所有数据到一个暂存中table。然后我使用暂存 table 存在的 table 空间并将该 table 空间传输到数据库 2 以用于处理到数据库 2 中。然后 table 空间将一周后从数据库 2 中删除。我也在一周后从数据库 1 中清除了暂存 table。
2。 DataPump - 我非常不确定数据泵,因为你正在编写导出 DMP 文件(可能使用查询 select 所需数据)到一个目录,然后选择该 DMP 文件导入到新目录中数据库 我假设它会在新系统中创建一个暂存 table 准备好将其处理到主 table 中。这可能是一个很大的转储文件,会有问题吗?
3。 Golden gate - 我不确定在Golden Gate 上,这不只是一个复制工具。不确定该工具的去向。
4.一个视图 - 在数据库 1 上创建一个视图(这可能是一个实体化视图吗?),它将包含 SQL 查询(UNION ALL),第二个数据库将使用数据库 link将数据处理到第二个数据库中。通过网络读取这些数据会有什么问题吗?
有什么好的想法吗?有没有人有上述经验?是否有比我需要查看的上述解决方案更好的解决方案?
谢谢肖恩
我肯定会选择选项 # 4 - 通过数据库获取所有数据 link。我几乎可以保证它将是最快的。在源数据库中创建一个视图(如果您需要多次 运行 查询,可以是 MVIEW),然后执行 DROP TABLE 和 CREATE TABLE AS SELECT 或 TRUNCATE TABLE 和 INSERT INTO .. SELECT 语句,具体取决于您的需要。 CTAS 和 IAS 都可以利用并行功能。
如果选项 # 4 由于某种原因不可行,数据泵导入(选项 # 2)可能是一个选项。在这种情况下,您应该考虑通过数据库 link 进行数据泵导入。它使过程更加简单。
如果在两个数据库之间传输数据成为瓶颈,您可以考虑使用压缩(在这种情况下检查您的许可证)。
Oracle 12c 企业版版本 12.1.0.2.0
当前进程。
数据库 1 我有两个 Cursor SQL 查询(连接了多个 tables),它们基本上使用 [=61 写入平面文件(两个文件具有相似的文件格式) =] 循环。创建了许多 Flatfile 文件并将其写入目标目录。
数据库 2 从目标目录中获取平面文件并将每个平面文件处理到它的系统中。
将大量大文件从一个数据库写入目录,然后再处理到第二个数据库中,这肯定很耗时,公司正在寻找提高这种性能的方法。此过程每月进行一次,并创建 200 到 1500 个文件。每个文件的大小可能为 100k 到 5gig。
新进程。
我被要求考虑创建一个新的解决方案来加快这个过程。
作为开发人员,我遇到的任何解决方案的问题如下 a) 这样更快吗? b) 这可以在 [=61 中完成吗=] script c) 如果我尝试这样做会遇到什么问题? d) 有更好的解决方案吗? e) 此方法有任何performance/system问题吗?
1. Transportable tables - 是否可以在数据库 1 中创建暂存 table,我在其中批量收集来自两个 SQL 查询的所有数据到一个暂存中table。然后我使用暂存 table 存在的 table 空间并将该 table 空间传输到数据库 2 以用于处理到数据库 2 中。然后 table 空间将一周后从数据库 2 中删除。我也在一周后从数据库 1 中清除了暂存 table。
2。 DataPump - 我非常不确定数据泵,因为你正在编写导出 DMP 文件(可能使用查询 select 所需数据)到一个目录,然后选择该 DMP 文件导入到新目录中数据库 我假设它会在新系统中创建一个暂存 table 准备好将其处理到主 table 中。这可能是一个很大的转储文件,会有问题吗?
3。 Golden gate - 我不确定在Golden Gate 上,这不只是一个复制工具。不确定该工具的去向。
4.一个视图 - 在数据库 1 上创建一个视图(这可能是一个实体化视图吗?),它将包含 SQL 查询(UNION ALL),第二个数据库将使用数据库 link将数据处理到第二个数据库中。通过网络读取这些数据会有什么问题吗?
有什么好的想法吗?有没有人有上述经验?是否有比我需要查看的上述解决方案更好的解决方案?
谢谢肖恩
我肯定会选择选项 # 4 - 通过数据库获取所有数据 link。我几乎可以保证它将是最快的。在源数据库中创建一个视图(如果您需要多次 运行 查询,可以是 MVIEW),然后执行 DROP TABLE 和 CREATE TABLE AS SELECT 或 TRUNCATE TABLE 和 INSERT INTO .. SELECT 语句,具体取决于您的需要。 CTAS 和 IAS 都可以利用并行功能。
如果选项 # 4 由于某种原因不可行,数据泵导入(选项 # 2)可能是一个选项。在这种情况下,您应该考虑通过数据库 link 进行数据泵导入。它使过程更加简单。
如果在两个数据库之间传输数据成为瓶颈,您可以考虑使用压缩(在这种情况下检查您的许可证)。