我正在尝试将事件从Oracle DBMS_SCHEDULER放入Windows事件日志中。
(我愿意接受其他方法,就我所读的内容而言,看起来DBMS_SCHEDULER是执行此操作的最佳选择。)
我做了很多研究,这似乎是在Oracle中运行Windows命令的基本结构:
BEGIN
sys.dbms_scheduler.create_job(
job_name => 'TESTJOB',
job_type => 'EXECUTABLE',
job_action => 'C:\Windows\System32\cmd.exe',
job_class => 'DEFAULT_JOB_CLASS',
number_of_arguments => 3,
auto_drop => FALSE,
enabled => FALSE);
sys.dbms_scheduler.set_job_argument_value('TESTJOB', 1, '/q');
sys.dbms_scheduler.set_job_argument_value('TESTJOB', 2, '/c');
sys.dbms_scheduler.set_job_argument_value('TESTJOB', 3, '<desired command>');
sys.dbms_scheduler.enable('TESTJOB');
END;
我尝试将<desired command>
替换为:
eventcreate /L Application /SO MyMessage /T Warning /id 218 /D "testing 123"
但是,当我尝试运行作业时,这导致了以下错误:
ORA-27369: job of type EXECUTABLE failed with exit code: Incorrect function.
然后出于好奇,我将<desired command>
更改为dir>testFile.txt
,如果它可以与其他命令一起使用:
testFile.txt
并且创建了eventcreate
...因此,看来Oracle允许使用某些命令,但不允许其他命令。为什么?有办法解决吗?
我还尝试了其他一些操作,例如将eventcreate
语句放入批处理文件中,然后从Oracle运行该批处理文件,这仍然是相同的错误。
我应该提到,直接在命令行中使用dir>testFile.txt
运行完整的“作业操作”命令和参数会产生所需的结果。
在这一点上,我已经准备好使用C#或类似的东西编写一个基本应用程序,该应用程序将条目放入Windows事件日志并直接从Oracle运行可执行文件,而无需处理这些Windows命令
(编辑:发布问题后,我确实做到了,但是现在我遇到了其他问题。请参见this question。)
我想念什么吗?
P.S。即使有效的{{1}}命令也需要大约1或2秒才能运行。花这么长时间才能运行这样的基本命令,这很奇怪。这让我觉得这里有些根本上是错误的。