问题描述
嗨,
我正在尝试通过在Windows 10机器上的Oracle 11.2中的dbms_调度器作业中调用im来运行经典的转储导入。导入本身已成功完成,但遗憾的是,根据user_调度器__作业_run_详细信息,作业失败(系统找不到指定的路径)。
下面是一个示例代码:
conn系统/密码
exec DBMS_SCHEDULER.CREATE_JOB (作业_NAME =>'sorin',作业类型=>'Executable',作业_操作=>'im',编号_OF_ARGUS => 4 );
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 1 ,'sorin/test') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 2 ,'file="c:\1\dump.dmp"') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 3 ,'全=Y') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 4,'log="c:\1\sorin.log"') ;
Exec DBMS_SCHEDULER.RUN_JOB (作业名称=>'sorin',使用当前_SESSION => TRUE ) ;
返回一段时间后:
第1行出错:
ORA-27369 :类型为Executable的作业失败,退出代码为:系统找不到
指定的路径。
ORA-06512 : "SYS.DBMS_ISCHED" ,第196行
ORA-06512 : "SYS.DBMS_SCHEDULER" ,第486行
ORA-06512 :在第1行
但是,导入是进行的,并且在c:\1下创建了带有普通导入日志的sorin.log ,以“导入成功终止,但出现警告。
". And状态=此作业运行的表user_调度器_作业_运行详细信息中的失败。
我尝试过各种各样的方法,比如:
-创建凭据并将其传递给CREATE_JOB过程
-作业=>'?/INB/Imp',并显式提供到sim.exe的完整路径
-作业=>'c:\Windows\System32\cmd.exe'并作为参数传递一个.bat文件,该文件设置当前目录,然后调用
但结果都一样。我还没有尝试使用dbms_Sscheuler.Cream_程序创建程序,但我认为这并不是必要的。如果我应该试试,请告诉我。
虽然脚本基本上完成了它的工作是好的,但它在某种程度上是令人困惑和误导的,工作结束是失败的。您是否知道为什么会发生这种情况,以及应该如何修改代码,使dbms_调度器作业在这种情况下不会失败:导入是在所有运行和完成之后,因此它可以找到导入可执行文件、转储文件并创建导入日志文件。
提前感谢您的帮助。
我正在尝试通过在Windows 10机器上的Oracle 11.2中的dbms_调度器作业中调用im来运行经典的转储导入。导入本身已成功完成,但遗憾的是,根据user_调度器__作业_run_详细信息,作业失败(系统找不到指定的路径)。
下面是一个示例代码:
conn系统/密码
exec DBMS_SCHEDULER.CREATE_JOB (作业_NAME =>'sorin',作业类型=>'Executable',作业_操作=>'im',编号_OF_ARGUS => 4 );
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 1 ,'sorin/test') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 2 ,'file="c:\1\dump.dmp"') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 3 ,'全=Y') ;
exec DBMS_SCHEDULER.SET_JOB_ARGUM_VALUE ('sorin', 4,'log="c:\1\sorin.log"') ;
Exec DBMS_SCHEDULER.RUN_JOB (作业名称=>'sorin',使用当前_SESSION => TRUE ) ;
返回一段时间后:
第1行出错:
ORA-27369 :类型为Executable的作业失败,退出代码为:系统找不到
指定的路径。
ORA-06512 : "SYS.DBMS_ISCHED" ,第196行
ORA-06512 : "SYS.DBMS_SCHEDULER" ,第486行
ORA-06512 :在第1行
但是,导入是进行的,并且在c:\1下创建了带有普通导入日志的sorin.log ,以“导入成功终止,但出现警告。
". And状态=此作业运行的表user_调度器_作业_运行详细信息中的失败。
我尝试过各种各样的方法,比如:
-创建凭据并将其传递给CREATE_JOB过程
-作业=>'?/INB/Imp',并显式提供到sim.exe的完整路径
-作业=>'c:\Windows\System32\cmd.exe'并作为参数传递一个.bat文件,该文件设置当前目录,然后调用
但结果都一样。我还没有尝试使用dbms_Sscheuler.Cream_程序创建程序,但我认为这并不是必要的。如果我应该试试,请告诉我。
虽然脚本基本上完成了它的工作是好的,但它在某种程度上是令人困惑和误导的,工作结束是失败的。您是否知道为什么会发生这种情况,以及应该如何修改代码,使dbms_调度器作业在这种情况下不会失败:导入是在所有运行和完成之后,因此它可以找到导入可执行文件、转储文件并创建导入日志文件。
提前感谢您的帮助。
专家解答
有几件事
-使用完全限定的路径
-确保OracleJobSscheulerSID服务正在运行。
我的计算机上的示例
--上面的服务已停止
然后我启用并启动了服务
希望这个能帮上忙。
-使用完全限定的路径
-确保OracleJobSscheulerSID服务正在运行。
我的计算机上的示例
--上面的服务已停止
SQL> exec DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'sorin');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'sorin',JOB_TYPE => 'EXECUTABLE',JOB_ACTION =>'c:\oracle\product\12.1.0.2\bin\exp.exe', NUMBER_OF_ARGUMENTS => 4);
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 1, 'userid=mcdonac/xxxxxx@np12');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 2, 'file="c:\temp\dump.dmp"');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 3, 'owner=scott');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 4, 'log="c:\temp\sorin.log"');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.RUN_JOB(JOB_NAME => 'sorin', USE_CURRENT_SESSION => TRUE);
BEGIN DBMS_SCHEDULER.RUN_JOB(JOB_NAME => 'sorin', USE_CURRENT_SESSION => TRUE); END;
*
ERROR at line 1:
ORA-27370: job slave failed to launch a job of type EXECUTABLE
ORA-27300: OS system dependent operation:accessing job scheduler service failed with status: 2
ORA-27301: OS failure message: The system cannot find the file specified.
ORA-27302: failure occurred at: sjsec 5
ORA-27303: additional information: The system cannot find the file specified.
ORA-06512: at "SYS.DBMS_ISCHED", line 209
ORA-06512: at "SYS.DBMS_SCHEDULER", line 594
ORA-06512: at line 1
然后我启用并启动了服务
SQL> exec DBMS_SCHEDULER.DROP_JOB(JOB_NAME => 'sorin');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'sorin',JOB_TYPE => 'EXECUTABLE',JOB_ACTION =>'c:\oracle\product\12.1.0.2\bin\exp.exe', NUMBER_OF_ARGUMENTS => 4);
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 1, 'userid=mcdonac/******@np12');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 2, 'file="c:\temp\dump.dmp"');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 3, 'owner=scott');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('sorin', 4, 'log="c:\temp\sorin.log"');
PL/SQL procedure successfully completed.
SQL> exec DBMS_SCHEDULER.RUN_JOB(JOB_NAME => 'sorin', USE_CURRENT_SESSION => TRUE);
PL/SQL procedure successfully completed.
SQL> col job_name format a30
SQL> select job_name, status from user_scheduler_job_run_details order by log_date;
JOB_NAME STATUS
------------------------------ ------------------------------
SORIN FAILED
SORIN SUCCEEDED
希望这个能帮上忙。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




