Tenho um aplicativo feito em VB que é usado para monitor o banco de dados ele executa alguns SQLs e gera um arquivo txt com as tabelas,tablespaces que estão para chegar o maximo de extends ou espaço. Gostaria de saber se é possivel criar isto direto dentro do oracle via procedure ou pl/sql para poder startar um job pelo proprio oracle e enviar um e-mail com os dados referente as tabelas e tablespaces de tempo em tempo. Conseguindo fazer direto via Oracle fica muito mais simples assim não preciso ter uma aplicação em VB para está função.
Segue abaixo modelo que eu tenho em VB. Instance = "PRD" selecao = " select owner,segment_name ,tablespace_name , segment_type , " selecao = selecao & "extents , max_extents,(max_extents - extents) as falta" selecao = selecao & " From dba_segments " selecao = selecao & " where (max_extents - extents) <= " & vNum & " and SEGMENT_TYPE in ('TABLE','INDEX') and owner not in ('SYSTEM' , 'SYS') " Monitor.Connect = "system/manager" Monitor.DatabaseName = instance Monitor.RecordSource = selecao Monitor.Refresh If Monitor.Recordset.RecordCount <> 0 Then For i = 1 To UBound(vPara) lblMsg.Caption = "Enviando e-mail para: " & vPara(i) & " Aguarde " DoEvents Mail.Reset Mail.Host = "idealstandard.com.br" Mail.From = "[EMAIL PROTECTED]" Mail.FromName = "Ideal Standard" Mail.AddAddress vPara(i) Mail.Subject = "Alerta Oracle" Mail.Body = "Objeto: " & Monitor.Recordset("owner") & "." & Monitor.Recordset("segment_name") & " " Mail.Body = Mail.Body & "Falta: " & Monitor.Recordset("falta") 'MousePointer = 11 On Error Resume Next Mail.Send If Err <> 0 Then MsgBox "Erro ocorrido: " & Err.Description End If Next i End If Exit Sub Sub Verifica_Sorage() Dim vNum As Integer Dim iArquivo As Integer 'Dim instance(1 To 4) Dim instance(1 To 1) On Error GoTo Some_Err vNum = 10 'instance(4) = "PRD" 'instance(2) = "DEV" 'instance(3) = "QUA" instance(1) = "SAF" iArquivo = FreeFile For i = 1 To UBound(instance) Open App.Path & "\" & "alerta.doc" For Append As iArquivo Print #iArquivo, " " Print #iArquivo, "É necessario fazer a manutenção do Storage dos itens abaixo " & " instance: " & instance(i) Print #iArquivo, "Usar Storage Manager para fazer a manutenção " Print #iArquivo, " " Close #iArquivo selecao = " select a.TABLESPACE_NAME,a.BYTES Bytes_Usados," selecao = selecao & "b.BYTES Bytes_Livres,round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) usado," selecao = selecao & " (100 - round(((a.BYTES-b.BYTES)/a.BYTES)*100,2)) falta " selecao = selecao & " from (select TABLESPACE_NAME,sum(BYTES) BYTES " selecao = selecao & " From dba_data_files " selecao = selecao & " group by TABLESPACE_NAME) a, (select TABLESPACE_NAME, " selecao = selecao & " sum(BYTES) BYTES " selecao = selecao & " From dba_free_space " selecao = selecao & " group by TABLESPACE_NAME ) b " selecao = selecao & " Where a.TABLESPACE_NAME = b.TABLESPACE_NAME and (100 - round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) ) <= " & vNum & " " selecao = selecao & " order by ((a.BYTES-b.BYTES)/a.BYTES) desc " If instance(i) = "SAF" Then Monitor.Connect = "system/intelxeon" Else Monitor.Connect = "system/manager" End If Monitor.DatabaseName = instance(i) Monitor.RecordSource = selecao Monitor.Refresh If Monitor.Recordset.RecordCount <> 0 Then While Not Monitor.Recordset.EOF lblMsg.Caption = "Coletando informações instance: " & instance(i) & " Aguarde " DoEvents Open App.Path & "\" & "alerta.doc" For Append As iArquivo 'Print #iArquivo, "É necessario fazer a manutenção do Storage dos itens abaixo " & " instance: " & instance(i) Print #iArquivo, " " 'Print #iArquivo, " " Print #iArquivo, "Tablespace : " & Monitor.Recordset("TABLESPACE_NAME") Print #iArquivo, "Bytes Livres : " & Monitor.Recordset("Bytes_Livres") Print #iArquivo, "Bytes Usados : " & Monitor.Recordset("Bytes_Usados") Print #iArquivo, "% Usado : " & Monitor.Recordset("usado") Print #iArquivo, "% Falta : " & Monitor.Recordset("falta") Monitor.Recordset.MoveNext Close #iArquivo Wend End If Next i Reset On Error GoTo 0 Exit Sub Some_Err: MsgBox CStr(Err.Number) & " " & Err.Description & " Verifica_Storage ", vbExclamation, "Atenção " On Error Resume Next MousePointer = 0 End Sub Grato Rogério [As partes desta mensagem que não continham texto foram removidas]