У меня есть простой скрипт передачи файлов bash. Когда этот скрипт запускается непосредственно с сервера базы данных Solaris, он успешно выполняется и передает файл на удаленный сервер. Но когда тот же сценарий выполняется через задание Oracle, он завершается ошибкой со следующим сообщением об ошибке.
Я нахожу это сообщение в выходном столбце таблицы all_scheduler_job_run_details.
"Could not create directory '/home/user/.ssh'.
Host key verification failed.
Couldn't read packet: Connection reset by peer"
Однако /home/user/.ssh уже присутствует и подключение к удаленному серверу без пароля.
v_local_dir=/u12/dw/temp
v_file_name=devcode_test_file
v_remote_dir=upload
v_usr=devcode
v_server=sftp1.umbrella.com
v_port=2222
v_cmd="cd ${v_remote_dir}
put ${v_local_dir}/${v_file_name}"
echo "Executing sftp command"
echo "Command is ${v_cmd}"
echo "${v_cmd}" | sftp -oPort=${v_port} ${v_usr}@${v_server}
Oracle создает программный код
dbms_scheduler.create_program
(
program_name=>'USER.PROG_DEVCODE',
program_action=> '/u12/dw/sftp_to_remote.sh',
program_type=>'EXECUTABLE',
number_of_arguments=>1,
comments => 'push files',
enabled=>FALSE
) ;
dbms_scheduler.enable 'DW_USER_REPORT.PROG_PUSH_FILE_TO_DEVCODE');
Программа создания рабочих мест Oracle
declare
p_job_name varchar2(500) := 'USER.JOB_PROG_DEVCODE';
p_command varchar2(500) := 'PROG_DEVCODE';
-- p_args := ''
p_type varchar2(500) := 'PROGRAM';
p_wait_result number := 1;
begin
DBMS_SCHEDULER.CREATE_JOB (
p_job_name -- IN VARCHAR2,
, p_command --program_name IN VARCHAR2,
, start_date => NULL
, repeat_interval =>
, end_date => NULL
, job_class => 'DEFAULT_JOB_CLASS'
, enabled => FALSE
, auto_drop => TRUE
, comments => NULL
, job_style => 'REGULAR'
);
DBMS_SCHEDULER.set_attribute(
p_job_name
, 'credential_name'
, 'USER.ORACLE_OS_CREDENTIAL'
);
DBMS_SCHEDULER.enable(
p_job_name
);
end;