Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #93916
    dannieljp
    Participante

      Olá…

      gastaria de saber se tem como o Oracle ver(saber) a quantidade de espaço livre nos discos do servidor. Sei que tem como rodar um job que chama um comando externo e etc…

      Minha dúvida é: tem como fazer isso só com os recursos do Oracle? Sem depender de nenhum comando ou nada do sistema operacional?

      Agradeço antecipadamente.

      #93920
      diegolenhardt
      Participante

        uma idéia seria ler um arquivo gerado atraves de um df -h,

        Linux: df -h > usoHD.txt

        feito numa crontab, e então lido via SQL*Loader ou UTL_FILE,

        com java-source também seria possível, pois lá você consegue mandar a JVM executar comandos no SO, e então da mesma forma gravaria um arquivo com a saída dos comandos, e o mesmo procedimento de banco,

        eu faria com a crontab gerando um arquivo e um UTL_FILE lendo diariamente/semanalmente, enfim, conforme a necessidade,

        #93926
        vieri
        Participante

          Pode use o Scheduler, pois ele permite de executar
          external programs.

          sample:

          BEGIN
          DBMS_SCHEDULER.create_job (
          job_name => ‘DISK_FREE_JOB’,
          job_type => ‘EXECUTABLE’,
          job_action => ‘/home/oracle/df/free_space_os.sh’,
          start_date => SYSTIMESTAMP,
          repeat_interval => ‘ SYSDATE+1’,
          end_date => NULL,
          enabled => TRUE,
          comments => ‘Job verify to free space in linux.’);
          END;
          /

          oque precisar criar.

          df -h para texto,
          carga com loader para tabela,
          procedure e package para envio de email,
          procedure para enviar o conteudo da tabela
          que vc carregou,
          sheduler apontando para o shell script que realiza
          todos essas passos em um único sh.

          ex procedure:

          create or replace procedure system.pr_monit_espaco
          is
          l_body long := chr(10) ||’ ‘ || rpad(‘FREE SPACE’, 400, ‘ ‘) || chr(10);
          begin
          for x in ( SELECT espaco from system.free_space_os )
          loop
          l_body := l_body || lpad(x.espaco, 400, ‘ ‘) || ‘ ‘ || chr(10);
          end loop;
          mail.send
          ( p_sender_email => ”,
          p_from => ‘Dba_monitor ‘,
          p_to => mail.array( ”),
          p_subject => ‘Espaco em Disco no XXXXX!’,
          p_body => l_body );
          end;

          ex do SH:

          #!/bin/ksh
          ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
          ORACLE_HOME=$ORACLE_BASE/product/10.2.0; export ORACLE_HOME
          ORACLE_SID=ora10g ; export ORACLE_SID
          PATH=/usr/sbin:$PATH; export PATH
          PATH=$ORACLE_HOME/bin:/u01/app/oracle/product/10.2.0/OPatch/:$PATH; export PATH
          #NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

          df -h /u01 >> /home/oracle/df/free_space_os_u01.txt
          df -h /u02 >> /home/oracle/df/free_space_os_u02.txt
          df -h /u03 >> /home/oracle/df/free_space_os_u03.txt
          df -h /u04 >> /home/oracle/df/free_space_os_u04.txt
          df -h /u01/oradata >> /home/oracle/df/free_space_os_u01_oradata.txt
          df -h /u02/oradata >> /home/oracle/df/free_space_os_u02_oradata.txt

          sqlldr userid=system/xxxx control=/home/oracle/df/free_space_os_u01.ctl direct=true log=/home/oracle/df/free_space_os_u01.log
          sqlldr userid=system/xxxx control=/home/oracle/df/free_space_os_u02.ctl direct=true log=/home/oracle/df/free_space_os_u02.log
          sqlldr userid=system/xxxx control=/home/oracle/df/free_space_os_u03.ctl direct=true log=/home/oracle/df/free_space_os_u03.log
          sqlldr userid=system/xxxx control=/home/oracle/df/free_space_os_u04.ctl direct=true log=/home/oracle/df/free_space_os_u04.log
          sqlldr userid=system/xxxxx control=/home/oracle/df/free_space_os_u01_oradata.ctl direct=true log=/home/oracle/df/free_space_os_u01_oradata.log
          sqlldr userid=system/xxxxx control=/home/oracle/df/free_space_os_u02_oradata.ctl direct=true log=/home/oracle/df/free_space_os_u02_oradata.log

          rm -rf /home/oracle/df/free_space_os_u01.txt
          rm -rf /home/oracle/df/free_space_os_u02.txt
          rm -rf /home/oracle/df/free_space_os_u03.txt
          rm -rf /home/oracle/df/free_space_os_u04.txt
          rm -rf /home/oracle/df/free_space_os_u01_oradata.txt
          rm -rf /home/oracle/df/free_space_os_u02_oradata.txt

          sqlplus system/xxxxx@ora10g << EOF
          conn /as sysdba
          exec system.pr_monit_espaco
          exit

          EOF

          No loader terá que ter a cláudula APPEND,
          e na primeiro carga o TRUNCATE.

          Ache que a partir dai da pra tu criar.

          Dessa maneira dei muita volta ,
          tem maneira mais práticas.

          qq dúvida poste ai…

          #93931
          Marcos Braga
          Participante

            Oi dannieljp,

            Não sei se vai te atender, mas creio que o Enterprise Manager faz esse gerenciamento. E você pode configurar os alertas para enviar email. Se lembro bem, na seção Hosts.

            []s
            Braga

            #93938
            dannieljp
            Participante

              Obrigado a todos pelas respostas!

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