Pular para o conteúdo
  • Este tópico contém 19 respostas, 6 vozes e foi atualizado pela última vez 10 anos, 7 meses atrás por Avatar de vanessa mortago amatovanessa mortago amato.
Visualizando 15 posts - 1 até 15 (de 20 do total)
  • Autor
    Posts
  • #84508
    Avatar de dbaferdbafer
    Participante

      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.

      #84510
      Avatar de Ricardo Portilho ProniRicardo Portilho Proni
      Participante

        Pode criar um job que executa este .sh, e executa-lo onde você quiser na procedure.

        #84520
        Avatar de dbaferdbafer
        Participante

          Ricardo, muito obrigado por ter respondido. Você tem um exemplo de como eu posso fazer isso, poderia me passar.

          Abraço.

          #84521
          Avatar photoLeonardo Litz
          Participante

            Olá

            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

            #84522
            Avatar de dbaferdbafer
            Participante

              Leonardo 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.

              #84524
              Avatar photoLeonardo Litz
              Participante

                De permissao no linux para que o usuario FERNANDO possa acessar a pasta bin

                #84531
                Avatar de dbaferdbafer
                Participante

                  Leandro 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.

                  #84533
                  Avatar de DanielBDanielB
                  Participante

                    vc 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;/

                    #84537
                    Avatar de dbaferdbafer
                    Participante

                      Daniel, 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.

                      #84542
                      Avatar photoLeonardo Litz
                      Participante

                        coloca ./teste.sh

                        #84543
                        Avatar de dbaferdbafer
                        Participante

                          Parece 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.

                          #84548
                          Avatar photoLeonardo Litz
                          Participante

                            tenta assim
                            ./oracle/teste/teste.sh

                            #84551
                            Avatar de dbaferdbafer
                            Participante

                              Assim também não funcionou.

                              Obrigado.

                              #84552
                              Avatar de jspauloncijspaulonci
                              Participante

                                Moç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

                                #84554
                                Avatar photoLeonardo Litz
                                Participante

                                  Tente 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

                                Visualizando 15 posts - 1 até 15 (de 20 do total)
                                • Você deve fazer login para responder a este tópico.
                                plugins premium WordPress