GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

DBMS_SCHEDULER – Executar comandos no sistema operacional

Olá pessoal, tudo bem?

No post abaixo é mencionado como executar comandos dos sistemas operacionais via banco de dados Oracle, usando o DBMS_SCHEDULER.

Primeiro, ESTA FUNÇÃO TEM QUE PASSAR POR UMA AVALIAÇÃO DO DBA, POIS QUEBRA A INTEGRIDADE DE SEGURANÇA DO BANCO COM O SERVIDOR, isso porque a função quando executa o JOB, ela usa o Owner “Oracle” no servidor, e assim, todas as permissões que este usuário tiver no S.O, a função conseguirá executar o comando passado.

Segundo, é necessário dar os seguintes grants abaixo:

grant create job to "users";
grant create external job to "users";
grant execute on dbms_scheduler to "users";

A função abaixo cria um JOB do tipo EXECUTAVEL e em seguida executa tal JOB. No final apaga o JOB.

CREATE OR REPLACE FUNCTION F_EXEC_COMMAND(p_command in varchar2)
RETURN VARCHAR2 IS
/*
Data/Criacao: 27/01/2010
Autor: Joao Elias de Aguiar - Manutencao Comercial
Objetivo: Cria job no banco e executa comandos no Unix/Linux/Windows
*/
--
v_name_job varchar2(25) := 'FEXECOM' || dbms_session.unique_session_id;
--
BEGIN
--
dbms_scheduler.create_job(job_name => v_name_job
,job_type => 'EXECUTABLE'
,job_action => p_command
,start_date => sysdate
,repeat_interval => 'FREQ=DAILY'
,enabled => true
,auto_drop => false
,comments => 'Run command in OS');
--
dbms_scheduler.run_job (job_name => v_name_job);
dbms_scheduler.drop_job (job_name => v_name_job);
--
return('Comando executado!');
--
EXCEPTION
When others then
dbms_scheduler.drop_job (job_name => v_name_job);
return('Erro ao executar comando: ' || sqlerrm);
END F_EXEC_COMMAND;
/

O nome do JOB é criado com a sessão concatenada no caso de várias execuções no mesmo momento.
Esta função pode ser executada em quaisquer sistemas operacionais. Basta que o comando enviado para execução seja próprio do S.O.

Bom, é isso aí pessoal.

Abs

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado.