Java Oracle数据泵导出错误“;无效参数值";
我有一个数据泵导出脚本,我想运行它。数据库是oracle11g。为了试用,我一直在SQLDeveloper中执行它。脚本如下所示:Java Oracle数据泵导出错误“;无效参数值";,java,oracle11g,datapump,Java,Oracle11g,Datapump,我有一个数据泵导出脚本,我想运行它。数据库是oracle11g。为了试用,我一直在SQLDeveloper中执行它。脚本如下所示: DECLARE JOBHANDLE NUMBER; STATUS VARCHAR2(20); LOGFILE UTL_FILE.FILE_TYPE; LINE VARCHAR2(200); ROW NUMBER := 1; TYPE OUTP
DECLARE
JOBHANDLE NUMBER;
STATUS VARCHAR2(20);
LOGFILE UTL_FILE.FILE_TYPE;
LINE VARCHAR2(200);
ROW NUMBER := 1;
TYPE OUTPUT_TYPE IS TABLE OF VARCHAR2(128) INDEX BY PLS_INTEGER;
OUTPUT OUTPUT_TYPE;
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY "TESTDIR11" AS ''/home/achim/temp/0003759/T0987654321/'' ';
JOBHANDLE := DBMS_DATAPUMP.OPEN(
operation => 'EXPORT',
job_mode => 'TABLE',
job_name => 'TST TMF.ACHIMSTEST11');
DBMS_DATAPUMP.ADD_FILE(
HANDLE => JOBHANDLE,
filename => 'Q01DED3D.dmp',
directory => 'TESTDIR11',
filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE
,reusefile => 1
);
DBMS_DATAPUMP.ADD_FILE(
HANDLE => JOBHANDLE,
filename => 'Q01DED3D.log',
directory => 'TESTDIR11',
filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE
,reusefile => 1
);
BEGIN
DBMS_DATAPUMP.SET_PARAMETER(
handle => JOBHANDLE,
name => 'INCLUDE_METADATA',
value => 0);
DBMS_DATAPUMP.METADATA_FILTER(
HANDLE => JOBHANDLE,
name => 'NAME_LIST',
value => '''ACHIMSTEST11''',
object_path => 'TABLE');
DBMS_DATAPUMP.METADATA_FILTER(
HANDLE => JOBHANDLE,
name => 'SCHEMA_LIST',
value => '''TMF''');
DBMS_DATAPUMP.START_JOB(JOBHANDLE);
DBMS_DATAPUMP.WAIT_FOR_JOB(JOBHANDLE, STATUS);
EXCEPTION
WHEN OTHERS
THEN
status := 'ERROR';
END;
DBMS_DATAPUMP.DETACH(JOBHANDLE);
LOGFILE := UTL_FILE.FOPEN('TESTDIR', 'Q01DED3D.log', 'R');
Loop BEGIN
UTL_FILE.GET_LINE(LOGFILE, LINE);
OUTPUT(ROW) := LINE;
ROW := ROW + 1;
EXCEPTION
WHEN No_Data_Found
THEN
EXIT;
END;
END Loop;
EXECUTE IMMEDIATE 'DROP DIRECTORY "TESTDIR"';
END;
问题是我遇到了一个我无法解释的错误,我不知道如何找到它。错误消息是:
错误报告:
ORA-39001:参数值无效
ORA-06512:“系统数据库系统错误”,第79行
ORA-06512:“系统DBMS_数据泵”,第3507行
ORA-06512:在“系统DBMS_数据泵”第3756行
ORA-06512:第18行
DBMS\u DATAPUMP.GET\u STATUS
来定义作业,更不用说运行了
我尝试不使用reusefile
参数,并尝试用它表示的实际整数值替换DBMS\u DATAPUMP.KU$\u FILE\u TYPE\u DUMP\u FILE
在SQLDeveloper中运行它会在dba_datapump_作业中留下一个浮动条目,这并不是很容易摆脱的。作业状态为“定义”。这将阻止我再次运行脚本。搜索了大约一个小时后,我发现它可以通过下拉表“TMF.”“TST TMF.ACHIMSTEST11”清除来删除,尽管为什么这样做是个谜
我想我应该指出,我没有编写这个脚本,它是从Java程序中的FreeMarker模板生成的。在Java程序中,生成的脚本作为OracleCallableStatement运行,用于11g数据库。我在SQLDeveloper中摆弄它的唯一原因是试图让它在12c数据库中工作。不用说,该脚本也不适用于sqldevoper中的12c。我有点希望它能为11g工作
顺便说一句,我在使用12c数据库运行Java时遇到的错误与上面显示的相同
如果有人能看到任何事实上是错误的,甚至只是看起来可疑的东西,我将非常感谢你的建议
我也不知道如何在作业还没有定义的情况下使用DBMS_DATAPUMP.GET_STATUS,更不用说运行了
作业已定义,您在调用add\u file
时已拥有句柄。因此,您可以添加一个异常处理程序来调用get_status
并输出结果(当然,在执行set serveroutput on
之后):
(是的,我知道别人不好的时候,即使是重新提高,但这只是暂时的事…)
鉴于您所展示的内容和出错的呼叫,我希望这将显示如下内容:
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/home/achim/temp/0003759/T0987654321/Q01DED3D.dmp"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
当它作为可调用语句运行时,可能会为目录对象使用不同的路径。或者根本不包括create/drop,这是您在运行时通常不会做的。12c版本或者没有定义目录,或者如果它位于不同的服务器上,则使用的路径在那里无效。或者,可能是RAC,并且仅在一个节点上有效,这可能会导致错误间歇性出现
在您所展示的内容中,/home/achim
部分看起来可疑。Oracle进程所有者(通常为Oracle
)必须能够读取和写入操作系统目录中的文件,并且除非您已打开主目录让全世界都能看到,否则您可能会失败,因为Oracle
无法按您的要求创建转储文件
如果是这种情况,则将目录路径更改为指向您确信oracle
具有必要权限的位置;如果您有权访问该帐户,请尝试从命令行手动创建文件以进行验证。如果没有,您只需要仔细检查操作系统目录及其层次结构上的权限
当然,您可能会看到一个不同的错误,但看起来它必须与目录或文件相关,而不是其他参数
另外,有关删除孤立作业的信息,请参阅我的Oracle支持文档336014.1。谢谢你,Alex,我担心我在编写脚本时有点概念性思维淡出,该脚本改编自Java版本。因为我使用的是SQLDeveloper,所以我认为转储所在的目录应该在我的机器上。当它作为CallableStatement运行时,它与DB在同一台机器上运行。当然,当我使用SQLDeveloper运行它时,情况也是如此,因为执行的是DB,而不是我的客户机。谢谢你帮我澄清。我会修复那个部分,然后再试一次。答对了!我将目录路径更改为数据库所在的服务器上的一个适当目录,并使其正常工作。我想我现在可以在12c的Java程序中找到错误的原因了。这几乎肯定是FreeMarker模板中缺少的属性值。再次感谢!
ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-31641: unable to create dump file "/home/achim/temp/0003759/T0987654321/Q01DED3D.dmp"
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3