Как выполнить скрипт bash / shell в Linux из Oracle DBMS_Scheduler? - PullRequest
0 голосов
/ 15 января 2019

У меня Linux-сервер Oracle. База данных генерирует файлы CSV с пользовательской хранимой процедурой, теперь в конце этой процедуры. Я хочу выполнить сценарий bash / shell в linux для отправки этих файлов в Amazon S3 Bucket.

Я получаю ошибки при попытке запланировать процесс в oracle:

EXTERNAL_LOG_ID = "job_2369137_852690", ORA-27369: сбой задания типа EXECUTABLE с кодом завершения: слишком длинный список аргументов

Использование DBM_SCHEDULER для создания сценария типа JOB, внешний

#!/bin/bash
echo hello world

DBMS_SCHEDULER.CREATE_JOB (
job_name => '"ODSMGR"."TEST_JOB"',
job_type => 'EXTERNAL_SCRIPT',
job_action => '#!/bin/bash
echo hello world',
number_of_arguments => 0,
start_date => NULL,
repeat_interval => NULL,
end_date => NULL,
enabled => FALSE,
auto_drop => FALSE,
comments => '');

1 Ответ

0 голосов
/ 16 января 2019

Используемое DBMS_SCHEDULER.CREATE_JOB имеет неверные аргументы. Желательно выполнить следующие стандартные шаги для запуска программы.

Сначала создайте программу с соответствующим именем и определите, что запускать. В приведенном ниже примере я запускаю команду bash напрямую. Вы можете поместить их в отдельный сценарий оболочки с соответствующими разрешениями и добавить его имя в program_action

BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
 program_name=> 'COPY_PROGRAM',
 program_type=> 'EXECUTABLE',
 program_action  => '/bin/bash -c "echo hello world"',
 enabled=> TRUE,
 comments=> 'Push files to Amazon S3 Bucket.'
);
END;
/

Затем создайте задание, используя эту программу.

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name     => 'TEST_JOB',
   program_name => 'COPY_PROGRAM',
   start_date => NULL,
   repeat_interval => NULL,
   end_date => NULL,
   enabled => FALSE,
   auto_drop => FALSE,
   comments => '');
END;
/

Для получения более подробной информации см. эту ссылку.

...