- Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 10 meses atrás por
dannieljp.
-
AutorPosts
-
6 de maio de 2010 às 6:17 pm #93916
dannieljp
ParticipanteOlá…
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.
6 de maio de 2010 às 6:56 pm #93920diegolenhardt
Participanteuma 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,
8 de maio de 2010 às 12:23 am #93926vieri
ParticipantePode 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.WE8ISO8859P1df -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.txtsqlldr 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.logrm -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.txtsqlplus system/xxxxx@ora10g << EOF
conn /as sysdba
exec system.pr_monit_espaco
exitEOF
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…
8 de maio de 2010 às 9:52 pm #93931Marcos Braga
ParticipanteOi 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
Braga10 de maio de 2010 às 5:25 pm #93938dannieljp
ParticipanteObrigado a todos pelas respostas!
-
AutorPosts
- Você deve fazer login para responder a este tópico.