- Este tópico contém 19 respostas, 6 vozes e foi atualizado pela última vez 10 anos, 7 meses atrás por vanessa mortago amato.
-
AutorPosts
-
2 de janeiro de 2009 às 6:05 pm #84508dbaferParticipante
Se alguem souber, eu preciso executar um arquivo .sh do linux em uma procedure no oracle, exemplo:
create or replace procedure pr_executa_arquivo
is begin
–corpo da procedure
end;Se alguem tiver essa informação agradeço.
2 de janeiro de 2009 às 6:48 pm #84510Ricardo Portilho ProniParticipantePode criar um job que executa este .sh, e executa-lo onde você quiser na procedure.
2 de janeiro de 2009 às 8:30 pm #84520dbaferParticipanteRicardo, muito obrigado por ter respondido. Você tem um exemplo de como eu posso fazer isso, poderia me passar.
Abraço.
2 de janeiro de 2009 às 8:32 pm #84521Leonardo LitzParticipanteOlá
Primeiro voce deve criar um java source… este enviara o comando ao sistema operacional.
create or replace and compile java source named exec_linux as
import java.lang.*;
import java.io.*;public class exec_linux
{
public static void executeCommand (String command) throws IOException
{String[] uFullCommand = {“/bin/sh”, “-c”, command};
Runtime.getRuntime().exec(uFullCommand);
}
};Depois vc deverá criar uma procedure que execute a java source
CREATE OR REPLACE PROCEDURE prc_exec_linux(p_command IN VARCHAR2) AS
LANGUAGE JAVA NAME ‘exec_linux.executeCommand (java.lang.String)’;Assim quando voce executar a procedure, deverá passar como parametro o comando que vc quer que execute.
Vlw Leonardo Litz
2 de janeiro de 2009 às 8:49 pm #84522dbaferParticipanteLeonardo obrigado pelo conteúdo, parece que vai resolver. Só está dando o seguinte erro quando tento executar a procedure prc_exec_linux com o parametro (‘/oracle/teste/teste.sh’):
chamada Java finalizada por exceção Java não-detectada: java.security.AccessControlException: the Permission (java.io.FilePermission /bin/sh execute) has not been granted to FERNANDO. The PL/SQL to grant this is dbms_java.grant_permission( ‘FERNANDO’, ‘SYS:java.io.FilePermission’, ‘/bin/sh’, ‘execute’ )
sabendo que FERNANDO está com grant do DBA.
muito obrigado.
3 de janeiro de 2009 às 12:22 am #84524Leonardo LitzParticipanteDe permissao no linux para que o usuario FERNANDO possa acessar a pasta bin
5 de janeiro de 2009 às 4:07 pm #84531dbaferParticipanteLeandro eu coloquei o usuario Oracle no grupo (bin) e no grupo (root).
O usuario oracle é o nome do usuario do linux onde o Oracle 10g está instalado.
Dentro do Oracle 10g eu tenho um usuario chamado Fernando que é onde eu criei o java source e a procedure.
Eu não sei como faço para dar permissão para o usuario Fernando acessar o /bin do linux. Voc~e poderia me passar um exemplo.Muito obrigado.
5 de janeiro de 2009 às 4:45 pm #84533DanielBParticipantevc dio os permisos de java a nivel de BD?
BEGIN DBMS_JAVA.grant_permission (‘HR’ , ‘SYS:java.io.FilePermission’ , ‘<>’ , ‘execute’ ); DBMS_JAVA.grant_permission (‘HR’ , ‘SYS:java.lang.RuntimePermission’ , ‘writeFileDescriptor’ , ” ); DBMS_JAVA.grant_permission (‘HR’ , ‘SYS:java.lang.RuntimePermission’ , ‘readFileDescriptor’ , ” );END;/
5 de janeiro de 2009 às 5:38 pm #84537dbaferParticipanteDaniel, fiz exatamente como você deu o exemplo, não mostrou mais o erro, o problema só é que parece que não executa o arquivo teste.sh.
O conteudo de teste.sh é somente:
scp /oracle/bancos/. /mnt/bancos/
eu somente transfiro os arquivos de banco que são gerados por uma procedure para outro diretorio.
Você sabe o que pode ser?
Pois quando eu executo: /oracle/teste/teste.sh
funciona perfeitamente.Muito obrigado pelas dicas até então.
Abraço.
5 de janeiro de 2009 às 7:51 pm #84542Leonardo LitzParticipantecoloca ./teste.sh
5 de janeiro de 2009 às 9:32 pm #84543dbaferParticipanteParece que não executa o arquivo, mesmo com ./teste.sh
estou colocando:
exec prc_exec_linux(‘/oracle/teste/teste.sh’);
e também:
exec prc_exec_linux(‘./teste.sh’);Obrigado.
6 de janeiro de 2009 às 4:53 pm #84548Leonardo LitzParticipantetenta assim
./oracle/teste/teste.sh6 de janeiro de 2009 às 9:58 pm #84551dbaferParticipanteAssim também não funcionou.
Obrigado.
6 de janeiro de 2009 às 10:48 pm #84552jspaulonciParticipanteMoçada…coincidentemente estou com a mesma necessidade, só que em vez de ser Linux eu uso Solaris, (penso que o conceito é igual para os dois) , segui a idéia de vocês, quando executo a procedure não recebo erros, porem o arquivo .sh não é executado, se alguem avançar não deixem de postar a solução .
Abraços
João Paulo Spaulonci
7 de janeiro de 2009 às 3:27 pm #84554Leonardo LitzParticipanteTente fazer assim:
call prc_exec_linux(p_command => ”/usr/bin/scp /oracle/bancos/. /mnt/bancos/’);
Para ver se executa, nunca tentei executar um script direto
Vlw Leonardo Litz
-
AutorPosts
- Você deve fazer login para responder a este tópico.