采用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_;
根据你提供的信息,可以看出你的问题出在了数据过滤上。你使用的是DBMS_DATAPUMP.DATA_FILTER
来进行数据过滤,其中SUBQUERY
指定了查询条件,但是在你的代码中,SUBQUERY
的值末尾出现了多余的逗号,这会导致代码出错。因此,你需要删除掉这个多余的逗号,或者重新编辑你的代码,确保在使用SUBQUERY
的时候,其值是正确的、没有语法错误的。
另外,如果你希望使用SUBQUERY
来过滤数据,你需要确保你的表中有一个ROWID字段,并且在SUBQUERY
参数中使用substr(ROWID,1,16)
来指定查询条件。如果你的表没有ROWID字段,你可以使用其他唯一标识符来替代ROWID,并在SUBQUERY
参数中指定相应的查询条件。
最后,如果你仍然无法解决你的问题,你可以和你的团队中的其他开发人员或DBA一起来共同解决这个问题。