Я согласен с тем, что сказали другие.Вот реальные гайки и болты, но с приятным интерфейсом тоже.Как я обычно делаю это:
Создайте таблицу журналов:
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