AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 139309
Accepted
John Eisbrener
John Eisbrener
Asked: 2016-05-24 12:39:18 +0800 CST2016-05-24 12:39:18 +0800 CST 2016-05-24 12:39:18 +0800 CST

Backups CRON e RMAN

  • 772

Executamos backups RMAN por meio de tarefas CRON, mas encontramos os e-mails prontos para uso com CRON para quase fazer o que queremos. Eu sei que podemos canalizar a saída do RMAN para /dev/null para que nenhum e-mail seja enviado, o que para qualquer execução bem-sucedida do RMAN é o resultado desejado, mas se o trabalho do RMAN apresentar um erro, eu gostaria que a saída padrão completa enviado por e-mail para a equipe de DBA para revisão. Suspeito que possa agrupar meus scripts RMAN com um script de shell bash que canalizará a saída padrão para o cron apenas em caso de falha, mas existe uma maneira melhor de fazer isso?

Para resumir:

  1. Posso canalizar a saída padrão para um e-mail no caso de um erro (e ignorar a saída padrão se não houver erro) para que possamos usar a funcionalidade de e-mail padrão no cron?
  2. Caso contrário, devo apenas agrupar meus scripts de backup do RMAN com lógica para que ele retorne apenas a saída do script de shell se um erro for encontrado?
  3. Existe outra abordagem que não estou vendo ou não consigo encontrar online que faça isso?

Minhas desculpas se isso já foi perguntado. Encontrei várias perguntas e cenários pontuais, mas nada que eu senti correspondesse exatamente ao resultado desejado.

Obrigado!

oracle linux
  • 1 1 respostas
  • 3378 Views

1 respostas

  • Voted
  1. Best Answer
    user3629
    2016-05-25T02:13:07+08:002016-05-25T02:13:07+08:00

    Eu escrevo um script bash para executar os backups (RMAN, datapump e também xtrabackup e dump para MySQL de maneira semelhante) e, em seguida, chamo isso do cron. Dessa forma, você pode lidar com o e-mail como quiser.

    Então, uma linha crontab simples é assim

    00 18 * * 0-6 /dba/bin/rman.sh > /tmp/dba_rman_SID.log 2>&1
    

    Então tudo é feito no script.

    Portanto, defina algumas variáveis ​​comuns, incluindo RMAN, por exemplo

    export RMAN="${ORACLE_HOME}/bin/rman target /"
    ...
    etc etc
    

    Em seguida, importe uma lista de e-mails que você deseja (um por linha) de um arquivo local

    declare -a EMAILS
    readarray -t EMAILS < .emails.dat
    

    Em seguida, defina alguns procedimentos úteis que você pode usar mais tarde para tratamento de erros e e-mail

    abort_with_error()
    {
            echo
            echo "Error :" $1
            echo
            echo "Error Code :" ${ERR}
            echo
    
            export SUBJECT="Error - ${SUBJECT}"
    
            send_email
    
            exit 1
    }
    
    send_email()
    {
            echo
            echo "Sending logfile via email to the following :"
            echo
    
            for EMAIL in ${EMAILS[@]}
            do
                    echo ${EMAIL}
                    echo
            done
    
            for EMAIL in ${EMAILS[@]}
            do
                    case $EMAIL in
                            \#*) ;;
                            *) ${MAILX} -s "${SUBJECT}" ${EMAIL} < ${LOG_FILE} ;;
                    esac
            done
    }
    

    agora o processo principal que é agrupado para enviar tudo para um arquivo de log. Este é um exemplo simples, mas mostra o método básico.

    {
    
        //add what you want your script to do here - can be many things for example:
    
            ${RMAN}<<EOF
            delete noprompt force obsolete;
            exit;
    EOF
    
            ERR=$?
            if [ ${ERR} -ne 0 ];
            then
                    abort_with_error "The RMAN delete obsolete backup step failed"
            fi
    
    
            echo "${JOB_NAME} ended at : $(date)"
    
            send_email
    
    } > ${LOG_FILE} 2>&1
    

    Ajuste os procedimentos abort_with_error e send_email de acordo com seu ambiente e suas necessidades.

    Isso separa o agendador do processo, portanto, não há necessidade de alterar o cron se você atualizar seu processo de backup ou obter um novo membro da equipe que precise dos e-mails.

    Dessa forma, você recebe um e-mail se funcionar e se não funcionar, mas com Erro no assunto, para que uma regra de e-mail simples possa ocultar backups bem-sucedidos não interessantes e destacar falhas e uma contagem simples todas as manhãs mostra se algo não funcionou e-mail e precisa de uma olhada. Como o log é mantido no servidor, você pode encontrá-lo lá (adicione algo ao trabalho para limpar os antigos depois de algumas semanas).

    Obviamente, existem várias maneiras de implementar algo assim e você precisará variar para se adequar (e eu cortei * muitas * coisas do script para maior clareza).

    • 3

relate perguntas

  • Backups de banco de dados no Oracle - Exportar o banco de dados ou usar outras ferramentas?

  • ORDER BY usando prioridades personalizadas para colunas de texto

  • Interface sqlplus confortável? [fechado]

  • Como encontrar as instruções SQL mais recentes no banco de dados?

  • Como posso consultar nomes usando expressões regulares?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve