Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle计划程序作业日志输出_Oracle_Oracle11g - Fatal编程技术网

Oracle计划程序作业日志输出

Oracle计划程序作业日志输出,oracle,oracle11g,Oracle,Oracle11g,我正在使用dbms_调度程序执行PL/SQL存储过程。我希望能够让代码创建一些文本日志输出,并将其与运行相关联,以验证它是否正常工作,但在文档中找不到任何可以这样做的内容。有没有我不知道的设施?这是一个在Unix下运行的11g数据库。如果我可以使用dbms\u输出,那么我也可以从sqlplus运行它并获得输出,这将是非常好的 从您的过程中插入到该表中…我制作了一个表作业日志 从过程内部插入到该表中…有一组Oracle Scheduler数据字典视图,可帮助您监视作业。以下是与此相关的两个文档页:

我正在使用dbms_调度程序执行PL/SQL存储过程。我希望能够让代码创建一些文本日志输出,并将其与运行相关联,以验证它是否正常工作,但在文档中找不到任何可以这样做的内容。有没有我不知道的设施?这是一个在Unix下运行的11g数据库。如果我可以使用dbms\u输出,那么我也可以从sqlplus运行它并获得输出,这将是非常好的 从您的过程中插入到该表中…

我制作了一个表作业日志
从过程内部插入到该表中…

有一组Oracle Scheduler数据字典视图,可帮助您监视作业。以下是与此相关的两个文档页:

此外,Oracle调度器声明了一些内部调度器变量,您可以像PL/SQL存储过程中的任何其他PL/SQL标识符一样使用这些变量。下面是这些变量的定义


如果您想记录特定于应用程序的信息,我建议您创建自己的日志表。然后可以从存储过程中插入到该表中。您甚至可以在此处插入计划程序的任何内部变量,如job_name和job_scheduled_start。

有一组Oracle计划程序数据字典视图可帮助您监视作业。以下是与此相关的两个文档页:

此外,Oracle调度器声明了一些内部调度器变量,您可以像PL/SQL存储过程中的任何其他PL/SQL标识符一样使用这些变量。下面是这些变量的定义


如果您想记录特定于应用程序的信息,我建议您创建自己的日志表。然后可以从存储过程中插入到该表中。您甚至可以在那里插入调度程序的任何内部变量,如job_name和job_scheduled_start。

我同意其他人的说法。这里是实际的螺母和螺栓,但也有一个很好的界面。我通常的做法是:

创建日志记录表:

CREATE TABLE job_log (
    ts TIMESTAMP DEFAULT SYSTIMESTAMP PRIMARY KEY
  , message VARCHAR2(255)
);
制作一个易于写入日志表的存储过程:

CREATE OR REPLACE PROCEDURE job_logger (v_message VARCHAR2)
IS
BEGIN
  INSERT INTO job_log(message) VALUES (v_message);
  COMMIT;
END;
/
然后在作业中,您可能正在运行一个存储过程。在您自己的存储过程中,只需添加调用job\u logger()过程以写入日志的行即可。这将保持丑陋的插入。。。从您感兴趣的存储过程代码中提交混乱

CREATE OR REPLACE PROCEDURE foo 
IS
BEGIN
  job_logger('Starting job foo.');
  ...
  {your code here}
  ...
  job_logger('Another message that will be logged.');
  ...
  job_logger('Completed running job foo.');
EXCEPTION
    ...
    job_logger('Oops, something bad happened!');
    ...
END;
/
您的日志表由主键自动加时间戳和索引。要查看日志,可以运行以下命令

SELECT * FROM job_log ORDER BY ts DESC;

现在,如果您不希望使用Oracle调度器,而是希望使用DBMS_输出方式来编写输出,并且希望在Unix shell下运行它,那么这也是可能的

您可以创建一个调用sqlplus的脚本,有点像这样。如果您的用户是SCOTT,并且存储的过程称为FOO

#!/bin/sh
. /whatever/script/that/sets/your/oracle/environment
echo "
  set serveroutput on feedback off
  exec foo
" | sqlplus -s -l scott/tiger@orcl
注意,-s标志会抑制Oracle SQL Plus标志,以获得更清晰的输出。l标志使sqlplus在密码错误或其他错误时中止,而不是尝试提示输入用户名。反馈关闭将抑制PL/SQL“匿名块已完成”消息

如果要安排此操作,可以从cron调用它,如下所示:

00 00 * * * /path/to/the/above/script.sh > /where/you/want/your/output/saved.log 2>&1

我同意其他人所说的。这里是实际的螺母和螺栓,但也有一个很好的界面。我通常的做法是:

创建日志记录表:

CREATE TABLE job_log (
    ts TIMESTAMP DEFAULT SYSTIMESTAMP PRIMARY KEY
  , message VARCHAR2(255)
);
制作一个易于写入日志表的存储过程:

CREATE OR REPLACE PROCEDURE job_logger (v_message VARCHAR2)
IS
BEGIN
  INSERT INTO job_log(message) VALUES (v_message);
  COMMIT;
END;
/
然后在作业中,您可能正在运行一个存储过程。在您自己的存储过程中,只需添加调用job\u logger()过程以写入日志的行即可。这将保持丑陋的插入。。。从您感兴趣的存储过程代码中提交混乱

CREATE OR REPLACE PROCEDURE foo 
IS
BEGIN
  job_logger('Starting job foo.');
  ...
  {your code here}
  ...
  job_logger('Another message that will be logged.');
  ...
  job_logger('Completed running job foo.');
EXCEPTION
    ...
    job_logger('Oops, something bad happened!');
    ...
END;
/
您的日志表由主键自动加时间戳和索引。要查看日志,可以运行以下命令

SELECT * FROM job_log ORDER BY ts DESC;

现在,如果您不希望使用Oracle调度器,而是希望使用DBMS_输出方式来编写输出,并且希望在Unix shell下运行它,那么这也是可能的

您可以创建一个调用sqlplus的脚本,有点像这样。如果您的用户是SCOTT,并且存储的过程称为FOO

#!/bin/sh
. /whatever/script/that/sets/your/oracle/environment
echo "
  set serveroutput on feedback off
  exec foo
" | sqlplus -s -l scott/tiger@orcl
注意,-s标志会抑制Oracle SQL Plus标志,以获得更清晰的输出。l标志使sqlplus在密码错误或其他错误时中止,而不是尝试提示输入用户名。反馈关闭将抑制PL/SQL“匿名块已完成”消息

如果要安排此操作,可以从cron调用它,如下所示:

00 00 * * * /path/to/the/above/script.sh > /where/you/want/your/output/saved.log 2>&1

谢谢我想我找不到伐木设施是不存在的。我想一张记录表就可以了。谢谢。我想我找不到伐木设施是不存在的。我想必须有一个记录表。您的作业记录程序可能应该是一个自治的事务。。因此,您不会中断主事务处理。您的作业日志程序可能应该是一个自治事务。。因此,您不会中断主事务处理。