Automação de cópia de arquivos Oracle – Servidor Linux

Automação de cópia de arquivos Oracle – Servidor Linux

Para automatizarmos a cópia de arquivos iremos utilizar os seguintes programas unix: SSH-KEYGEN, SCP, RSYNC e CRONTAB

Vamos simular o seguinte cenário: Um servidor Linux Oracle armazena seus backups e archives dentro do disco rígido local, estaremos automatizando a cópia dos backups e dos archives para um servidor Linux Backup, organizando de maneira que sempre teremos backup da base de dados da última semana SEG/TER/QUA/QUI/SEX:

SSH-KEYGEN = Criação das chaves publica e privada.

SCP = (Secure Copy Protocol) Transferência de arquivos de forma encriptada. Cópia dos Backups Full do Banco de Dados Oracle

RSYNC = Transferência de arquivos com sincronização, cópia de dados alterados. Cópia/Sincronização dos Archives do Banco de Dados Oracle

CRONTAB = Agendador de tarefas Unix

SSH-KEYGEN

Ssh-keygen é um programa Unix usado para gerar, gerenciar e converter chaves de autenticação para o ssh, isto é importante para você poder automatizar um processo de forma segura.

A ferramenta ssh-keygen armazena a chave privada id_rsa e a chave pública id_rsa.pub. Para o funcionamento você deve copiar o conteúdo da chave pública id_rsa.pub para o arquivo authorized_keys do servidor (máquina) remoto. Você pode colocar a chave com ou sem senha, segue o exemplo da criação da chave sem senha para utilizarmos na autenticação entre os Servidores:
cadeado
Autenticação do Servidor SERVERBKP para SERVERPROD utilizando SSH-KEYGEN=

No Servidor SERVERPROD
Criar chave publica e privada no SERVERPROD:

oracle@serverprod:/# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/oracle/.ssh/id_rsa): –enter
Enter passphrase (empty for no passphrase): –enter
Enter same passphrase again: –enter
Your identification has been saved in /oracle/.ssh/id_rsa.
Your public key has been saved in /oracle/.ssh/id_rsa.pub.
The key fingerprint is:
85:74:a9:53:39:9a:20:af:b7:b0:fc:82:41:0f:ee:cc oracle@serverprod
The key’s randomart image is:
+–[ RSA 2048]—-+
| . .o |
| . .. o= |
| o ..=.. |
| o . =. |
| o o . S. |
| o + . |
| + + + . |
| E + . |
| o. |
+—————–+

Copiar chave publica para o SERVERBKP no arquivo authorized_keys
(caso o arquivo não exista o mesmo será criado, porém necessário criar a seguinte estrutura)=

oracle@serverbkp:/# cd /home/oracle/
oracle@serverbkp:/# mkdir .ssh
oracle@serverbkp:/# chmod 700 .ssh

Iniciar cópia:
oracle@serverprod:/# scp /root/.ssh/id_rsa.pub oracle@serverbkp:/home/oracle/.ssh/authorized_keys
oracle@serverprod’s password:
id_rsa.pub 100% 395 0.4KB/s 00:00

Caso o arquivo foi criado agora, dar a seguinte permissão:
oracle@serverbkp:/# chmod 644 authorized_keys

Após conclusão deste processo o Servidor SERVERBKP já estara acessando o SERVERPROD, para testar:
oracle@serverbkp:/# ssh oracle@serverprod

SCP

SCP é um programa Unix que implementa o protocolo SCP (Secure Copy Protocol), ou seja, é um programa para fazer cópias com segurança.
scp
Segue o exemplo de criação de script utilizando o comando SCP para efetuar a cópia do backup do banco de dados, no script vamos realizar o expurgo e a cópia:

Obs. Utilizaremos o SCP para a cópia dos backups full e o RSYNC para a cópia/sincronização dos archives.
Levando em consideração que os backups que são criados no Servidor de Produção são criados com a seguinte parametrização de nomes:
Control File = control_spfile_c-55053848-20110609-00.bkp
Backup File = backup_4vmefv8a_1_1_2011-06-09.bkp

Criar 5 scripts = 1 para cada semana, afim de separar os backups em pastas: SEG, TER, QUA, QUI e SEX.
Nos scripts estaremos fazendo expurgo dos dados (deleção do backup anterior), para não ficarmos sem espaço de disco, nesta solução estaremos sempre com a última semana dos backups copiados.
Se preferir pode jogar todos em uma mesma pasta, mas se for fazer assim verifique a melhor forma de fazer o expurgo.

oracle@serverbkp:/# vi /oracle/scripts/copy_db_SEG.sh
#*****************************************************************#
# expurgo

rm /oracle/backup/SEG/*

# copia backup de SEG (SERVERPROD => SERVERBKP)

scp oracle@serverprod:/u01/BACKUP/rman/*$(date “+%Y%m%d-00.bkp”) /oracle/backup/SEG

scp oracle@serverprod:/u01/BACKUP/rman/*$(date “+%Y-%m-%d.bkp”) /oracle/backup/SEG
#*****************************************************************#

Para separar os backups por pastas a cada script criado alterar apenas o dia da semana:
SEG = TER = QUA = QUI = SEX
Assim teremos os seguintes diretórios
oracle@serverbkp:/# mkdir /oracle/backup/SEG
oracle@serverbkp:/# mkdir /oracle/backup/TER
oracle@serverbkp:/# mkdir /oracle/backup/QUA
oracle@serverbkp:/# mkdir /oracle/backup/QUI
oracle@serverbkp:/# mkdir /oracle/backup/SEX

Com os respectivos scripts:
copy_db_SEG.sh
copy_db_TER.sh
copy_db_QUA.sh
copy_db_QUI.sh
copy_db_SEX.sh

Dar permissão de execução para os scripts:
oracle@serverbkp:/# chmod 744 copy_de*

Para testar o script, executar:
(o script sempre executara o bkp do dia atual, o que determinara qual sera executado, será o CRONTAB)
oracle@serverbkp:/# ./copy_db_SEG.sh

RSYNC

Rsync, é um programa Unix que sincroniza remotamente os dados entre dois servidores (máquinas). O rsync utiliza as propriedades de criptografia do protocolo SSH, sendo assim mais seguro do que o FTP.
Laptop Senior BusinessmanO rsync é muito útil quando por exemplo você precisa atualizar seu site na Internet, vamos supor que você efetuou uma grande mudança em seu Site, e não sabe mais quais arquivos foram alterados, ao invés de enviar todos os arquivos, utilizando o rsync você enviará apenas os arquivos que foram alterados e/ou adicionados.

Como exemplo estarei utilizando a sincronização de archives que estão no Servidor Linux Oracle com os arquivos de Backup que estão em um Servidor Linux de Backup:

Criação de scripts .sh para automação de Backup dos Archives:
Obs. Considerando que na pasta do Servidor SERVERPROD os archives são controlados, ou seja são criados e removidos de acordo com o que foi configurado no RMAN

Caso não tenha o rsync instalado, baixar o pacote (de acordo com sua versão do Linux) e instalar o mesmo:
oracle@serverbkp:/# dpkg -i rsync_3.0.3-2_i386.deb

Estaremos copiando os archives via script que são gerados em /u01/archive/ (SERVERPROD) para /oracle/archive/01/ (SERVERBKP) e /oracle/archive/02/ (SERVERBKP), para facilitar o uso de expurgo dos archives, caso preferir considere apenas os parametros “01”.

Criar as respectivas pastas, onde serão armazenados os archives:
oracle@serverbkp:/# mkdir /oracle/archive/01
oracle@serverbkp:/# mkdir /oracle/archive/02

Para controlarmos o expurgo dos archives (deletar archives antigos) estaremos usando dois scripts e consequentemente duas pastas distintas (copy_arch01.sh e copy_arch02.sh), assim poderemos efetuar expurgo de archives diariamente, garantindo os ultimos archives no Servidor.

Para expurgo iremos utilizar os scripts:
expurgo_archives01.sh e expurgo_archives02.sh (respectivamente)

Criando os scripts de cópia de archives (copy_arch01.sh e copy_arch02.sh):
oracle@serverbkp:/# vi /oracle/scripts/copy_arch01.sh
#************************************************************#
PIDFILE=/oracle/scripts/pidrsync.0
#************************************************************#
# verificação se existe copia de archives em execucao:

if [ -f $PIDFILE ];
then
echo “Script rsync em execucao. ABORTANDO…” | tee -a $LOG_FILE
exit 1
fi
touch $PIDFILE
#*************************************************************#
rsync -Cravpe ssh oracle@serverprod:/u01/archive/ /oracle/archive/01/
rm -rf $PIDFILE

exit 1
#*************************************************************#

oracle@serverbkp:/# vi /oracle/scripts/copy_arch02.sh
Criar o segundo script igual o primeiro alterando o caminho:
copy_arch01.sh => :/u01/archive/ /oracle/archive/01/
copy_arch02.sh => :/u01/archive/ /oracle/archive/02/

Dar permissão de execução para os arquivos copy_arch01.sh e copy_arch02.sh:
oracle@serverbkp:/# chmod 744 copy_arch01.sh
oracle@serverbkp:/# chmod 744 copy_arch02.sh

Para testar o script executar:
oracle@serverbkp:/# ./copy_arch01.sh

Expurgo dos archives, criar os arquivos expurgo_archives01.sh e expurgo_archives02.sh
oracle@serverbkp:/# vi /oracle/scripts/expurgo_archives01.sh
#*************************************************************#
rm /oracle/archives/01/*
#*************************************************************#

oracle@serverbkp:/# vi /oracle/scripts/expurgo_archives02.sh
#*************************************************************#
rm /oracle/archives/02/*
#*************************************************************#

Dar permissão de execução para os arquivos expurgo_archives01.sh e expurgo_archives02.sh:
oracle@serverbkp:/# chmod 744 expurgo_archives01.sh
oracle@serverbkp:/# chmod 744 expurgo_archives02.sh

Para testar o script executar:
oracle@serverbkp:/# ./expurgo_archives01.sh

CRONTAB

Crontab é um programa Unix que edita o arquivo que controla a execução de determinados comandos no dia e horário programados, pensando em Windows, seria o Agendador de Tarefas Unix.
crontab_420_240

Vamos ver passo a passo como funciona o CRONTAB, usando como exemplo a execução de cópia de arquivos de backup e archives da BD Oracle de um Servidor Linux para outro:

–Montar a lista de execução de todos os scripts, respeitando o término do backup do SERVERPROD

oracle@serverbkp:/# crontab -e

50 23 * * 1 /scripts/bkp_SEG.sh >> /scripts/bkp_SEG.log
50 23 * * 2 /scripts/bkp_TER.sh >> /scripts/bkp_TER.log
50 23 * * 3 /scripts/bkp_QUA.sh >> /scripts/bkp_QUA.log
50 23 * * 4 /scripts/bkp_QUI.sh >> /scripts/bkp_QUI.log
50 23 * * 5 /scripts/bkp_SEX.sh >> /scripts/bkp_SEX.log

59 23 * * 1 /scripts/expurgo_archives02.sh >> /scripts/exp02.log
59 23 * * 2 /scripts/expurgo_archives01.sh >> /scripts/exp01.log
59 23 * * 3 /scripts/expurgo_archives02.sh >> /scripts/exp02.log
59 23 * * 4 /scripts/expurgo_archives01.sh >> /scripts/exp01.log
59 23 * * 5 /scripts/expurgo_archives02.sh >> /scripts/exp02.log
59 23 * * 6 /scripts/expurgo_archives01.sh >> /scripts/exp01.log

30 * * * 1 /scripts/copy_arch01.sh >> /scripts/copy_arch01.log
30 * * * 2 /scripts/copy_arch02.sh >> /scripts/copy_arch02.log
30 * * * 3 /scripts/copy_arch01.sh >> /scripts/copy_arch01.log
30 * * * 4 /scripts/copy_arch02.sh >> /scripts/copy_arch02.log
30 * * * 5 /scripts/copy_arch01.sh >> /scripts/copy_arch01.log
30 * * * 6 /scripts/copy_arch02.sh >> /scripts/copy_arch02.log

–Segue funcionamento referente as datas no CRONTAB

* * * * * (Script a ser executado) (log com o resultado)
| | | | |
| | | | \_ Dia da semana (0-7)
| | | \_ Mês (1-12)
| | \_ Dia do Mês (1-31)
| \_ Hora (0-23)
\_ Minuto (0-59)

–Para visualizar as tarefas:
oracle@serverbkp:/# crontab -l

–Para testar aguardar a execução na hora planejada.

Leia mais artigos em nossa página de Tecnologia.
E relaxe em nossa página Boa Viagem.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *