复制Oracle数据库之间包含BLOB列的表

时间:2017-02-08 10:11:41

标签: database oracle sql-loader dblink datapump

在adhoc的基础上,我们希望将4个Oracle生产表中的内容复制到QA / UAT环境中。 这不是直接复制,我们需要根据某些输入条件复制数据进行过滤。

之前我们使用的是Sybase数据库,因此BCP实用程序在那里工作。但是,我们最近迁移到Oracle并需要类似的数据复制要求。

根据迄今为止的分析,我已经分析了以下选项 -

  • RMAN(恢复管理器) - 无法使用,因为它不允许我们复制选定的表或过滤数据。
  • SQLLDR(SQL Loader) - 不能使用它,因为我们有BLOB列,因此不确定如何为这些BLOBS创建CSV文件。任何建议?
  • Oracle数据泵(Expdp / Imbdp) - 不能使用它,因为即使它允许复制选定的表,它也不允许我们使用一些带有连接的查询来过滤数据(我知道它允许添加查询但它只适用于单个表)。解决方法是使用所需数据集创建临时表,并使用EXPDP和IMPDP对其进行dmp。如果我错过了这种方法中的任何内容,是否有任何建议?
  • 数据库链接 - 在这个用例中,这是最好的方法。但是需要检查DBA是否允许我们创建与PRD db的链接。
  • SQL PLUS COPY - 不能使用它,因为它不适用于BLOB字段。

有人可以告诉我们哪种方式应该是最好的方法。

2 个答案:

答案 0 :(得分:2)

我可能会使用DATAPUMP格式的外部表。所以它会像

create table my_ext_tab
organization external
(
        type oracle_datapump
        default directory UNLOAD
        location( 'my_ext_tab.dmp' )
)
as
<my query>

然后,您可以将文件复制到其他数据库,创建外部表,然后通过插入插入到新表中,例如:

insert /*+ APPEND */ into my_tab
select * from my_ext_tab

您还可以使用并行性来读取和写入文件

答案 1 :(得分:1)

考虑到所有约束,看起来数据库链接是最佳选择。您可以使用PROD环境中的联接和过滤器为查询创建视图,并通过数据库链接从这些视图中进行选择。这样,过滤在通过网络传输之前完成,而不是在目标端之后完成。