Вывод журнала заданий планировщика Oracle - PullRequest
0 голосов
/ 22 декабря 2010

Я использую dbms_scheduler для выполнения хранимой процедуры PL / SQL. Я хотел бы иметь возможность, чтобы этот код создавал какой-нибудь вывод текстового журнала и связывал его с прогоном, чтобы убедиться, что он работает, но я не могу найти ничего, чтобы сделать это в документации. Есть ли возможность сделать это, что я скучаю? Это база данных 11g работает под Unix. Было бы очень хорошо, если бы я мог использовать dbms_output, чтобы я мог также запустить его из sqlplus и получить вывод.

Ответы [ 3 ]

2 голосов
/ 22 декабря 2010

Существует несколько представлений словаря данных Oracle Scheduler, которые помогут вам отслеживать задания.Вот две страницы документации, связанные с этим:

Кроме того, Oracle Scheduler объявляет некоторые внутренние переменные планировщика, которые вы можете использовать как любой другой идентификатор PL / SQL в вашей хранимой процедуре PL / SQL.Вот список этих переменных.

Если вы хотите занести в журнал информацию, специфичную для приложения, я предлагаю вам создать собственную таблицу журнала.Затем вы можете вставить в эту таблицу из вашей хранимой процедуры.Вы даже можете вставить туда любую из внутренних переменных планировщика, например, job_name и job_scheduled_start.

1 голос
/ 22 декабря 2010

я делаю вставку таблицы JOB_LOG в эту таблицу из вашей процедуры ...

0 голосов
/ 15 декабря 2012

Я согласен с тем, что сказали другие.Вот реальные гайки и болты, но с приятным интерфейсом тоже.Как я обычно делаю это:

Создайте таблицу журналов:

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_logger () для записи в ваш журнал.Это позволяет избежать неприятного беспорядка INSERT ... COMMIT из вашего интересного хранимого кода процесса.

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_OUTPUT, и вы хотите запустить его подОболочка Unix, это тоже возможно.

Вы бы сделали скрипт, который вызывает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...