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]

Responder a