回到未来望过去 2019-10-10 09:46 采纳率: 0%
浏览 348

dbms_datapump的subquery测试:发现impdp的query条件都可行,但是采用dbms_datapump过程方式每次都是全表泵入,没有按照subquery的条件

采用rowid方式分段,但是发现impdp的query条件都可行,但是采用dbms_datapump过程方式每次都是全表泵入,没有按照subquery的条件,分析中,大神路过的顺便看看回复个,谢谢

附注:

测试后台


```CREATE OR REPLACE PROCEDURE EXPDP_ IS
  H1 NUMBER;
BEGIN

  H1 := DBMS_DATAPUMP.OPEN(OPERATION   => 'IMPORT',
                           JOB_MODE    => 'table',
                           REMOTE_LINK => 'TO210');
  DBMS_DATAPUMP.SET_PARALLEL(HANDLE => H1, DEGREE => 1);

  DBMS_DATAPUMP.ADD_FILE(HANDLE => H1, FILENAME => 'i1.LOG', FILETYPE => 3);

  DBMS_DATAPUMP.METADATA_FILTER(HANDLE => H1,
                                NAME   => 'SCHEMA_EXPR',
                                VALUE  => 'IN (''HIS_tttt1'') ');
  DBMS_DATAPUMP.METADATA_FILTER(HANDLE => H1,
                                NAME   => 'NAME_EXPR',
                                VALUE  => 'IN(''T1'')');
 /* DBMS_DATAPUMP.METADATA_FILTER(HANDLE => H1,
                                NAME   => 'TABLE_FILTER',
                                VALUE  => 'HIS_tttt1.T1');*/
                                
  DBMS_DATAPUMP.METADATA_REMAP(HANDLE    => H1,
                               NAME      => 'REMAP_SCHEMA',
                               OLD_VALUE => 'HIS_tttt1',
                               VALUE     => 'HIS_tttt');
  DBMS_DATAPUMP.SET_PARAMETER(HANDLE => H1,
                              NAME   => 'TABLE_EXISTS_ACTION',
                              VALUE  => 'APPEND');
  DBMS_DATAPUMP.DATA_FILTER(HANDLE      => H1,
                            NAME        => 'SUBQUERY',
                            VALUE       => ' where substr(ROWID,1,16)=''AAAeB/AAZAAENFOA''');',
                            TABLE_NAME  => 'T1',
                            SCHEMA_NAME => 'HIS_tttt1');

 

  DBMS_DATAPUMP.START_JOB(HANDLE => H1);
  DBMS_DATAPUMP.DETACH(HANDLE => H1);
EXCEPTION
  WHEN OTHERS THEN
    NULL;
    DBMS_OUTPUT.PUT_LINE(SQLERRM);
END EXPDP_;


  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 05:20
    关注

    根据你提供的信息,可以看出你的问题出在了数据过滤上。你使用的是DBMS_DATAPUMP.DATA_FILTER来进行数据过滤,其中SUBQUERY指定了查询条件,但是在你的代码中,SUBQUERY的值末尾出现了多余的逗号,这会导致代码出错。因此,你需要删除掉这个多余的逗号,或者重新编辑你的代码,确保在使用SUBQUERY的时候,其值是正确的、没有语法错误的。

    另外,如果你希望使用SUBQUERY来过滤数据,你需要确保你的表中有一个ROWID字段,并且在SUBQUERY参数中使用substr(ROWID,1,16)来指定查询条件。如果你的表没有ROWID字段,你可以使用其他唯一标识符来替代ROWID,并在SUBQUERY参数中指定相应的查询条件。

    最后,如果你仍然无法解决你的问题,你可以和你的团队中的其他开发人员或DBA一起来共同解决这个问题。

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?