Script de backup online do Oracle com RMAN

Para configurar o backup online de um banco Oracle através do uso do RMAN, eu uso o script abaixo:

#!/bin/bash
#
# Script de backup incremental do banco de dados Oracle, conforme indicado em:
#    "Oracle Database 2 Day DBA"
#    "Oracle Database Backup and Recovery User's Guide"
# Acrescentei o backup do init.ora e o backup trace do controlfile.
#
# Por Abrantes Araújo Silva Filho
#
# ANTES DE EXECUTAR A ROTINA DE BACKUP, configure o RMAN com os seguintes
# parâmetros (dependentes da versão do database e se enterprise ou standard):
# (atenção com os PATHs também!):
#
# Oracle 12c (12.1.0.1.0) Standard Edition One:
#   - CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
#   - CONFIGURE BACKUP OPTIMIZATION ON;
#   - CONFIGURE DEFAULT DEVICE TYPE TO DISK;
#   - CONFIGURE CONTROLFILE AUTOBACKUP ON;
#   - CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u09/fast_recovery_area/ORACLE1/controlfile_autobackup/%F';
#   - CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;
#   - CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
#   - CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
#   - CONFIGURE MAXSETSIZE TO UNLIMITED;
#   - CONFIGURE ENCRYPTION FOR DATABASE OFF;
#   - CONFIGURE ENCRYPTION ALGORITHM 'AES128';
#   - CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
#   - CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS;
#   - CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 2 TIMES TO DISK;
#   - CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u09/fast_recovery_area/ORACLE1/controlfile_snapshot/snapcf_oracle.f'; 
#
# Depois de tudo pronto, crie um crontab para o usuário oracle:
#    # Endereço de e-mail do log do crontab:
#    MAILTO=abrantesasf@gmail.com
#
#    # Roda o backup incremental diário, 19:00h.
#    00 19 * * * /home/oracle/bin/backup_oracle.sh
#
#
# Não altere este script se não souber o que está fazendo!


# Variáveis de ambiente
#######################
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.1.0/db
export ORACLE_SID=oracle1
export PATH=$ORACLE_HOME/bin:$PATH


# Roda RMAN
###########
rman <<EOF
connect target /
RUN {
 ALLOCATE CHANNEL disco_de_backup DEVICE TYPE DISK;
 RECOVER COPY OF DATABASE WITH TAG backup_incremental_diario UNTIL TIME "SYSDATE-3";
 BACKUP INCREMENTAL LEVEL 1 FOR RECOVER OF COPY WITH TAG backup_incremental_diario DATABASE PLUS ARCHIVELOG;
 CROSSCHECK BACKUP;
 DELETE NOPROMPT OBSOLETE;
}
exit
EOF


# Cria backup do init.ora e backup trace do controlfile:
########################################################
# Backup do init.ora antigo:
if [ -a /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora.bak ] ; then
 rm /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora.bak
 mv /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora.bak
else
 if [ -a /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora ] ; then
 mv /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora /u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora.bak
 fi
fi

# Backup do controlfile antigo:
if [ -a /u09/fast_recovery_area/ORACLE1/outros/control_file.txt.bak ] ; then
 rm /u09/fast_recovery_area/ORACLE1/outros/control_file.txt.bak
 mv /u09/fast_recovery_area/ORACLE1/outros/control_file.txt /u09/fast_recovery_area/ORACLE1/outros/control_file.txt.bak
else
 if [ -a /u09/fast_recovery_area/ORACLE1/outros/control_file.txt ] ; then
 mv /u09/fast_recovery_area/ORACLE1/outros/control_file.txt /u09/fast_recovery_area/ORACLE1/outros/control_file.txt.bak
 fi
fi

# Backup do init.ora novo e do controlfile novo:
sqlplus /nolog << EOF
connect / as sysdba
create pfile='/u09/fast_recovery_area/ORACLE1/outros/initoracle1.ora'
from spfile='/u01/app/oracle/product/12.1.0.1.0/db/dbs/spfileoracle1.ora';
alter database backup controlfile to trace as '/u09/fast_recovery_area/ORACLE1/outros/control_file.txt';
exit
EOF

OK, a listagem acima está MUITO CONFUSA pois a apresentação em tela é horrível. Baixe o script neste link então!

Salve o script em um diretório que possa ser encontrado pelo PATH e agende um crontab.

SIGA AS INSTRUÇÕES NO COMEÇO DO ARQUIVO para configurar o RMAN!!!!

Instalação do Oracle Linux 6

A última versão disponível do Oracle Linux 6 é a versão 6.7 que pode ser baixada no site https://edelivery.oracle.com. O Oracle Linux é grátis e livre para uso em produção e, se necessário, você pode pagar pelo suporte (compre suporte diretamente pelo site da Oracle).

A instalação demonstrada aqui foi feita em um servidor Dell T-410, com 6 HDs de 500 GB, em RAID-10, e 4 GB de RAM, visando uma instalação futura do Oracle Database 12c Standard Edition One.

Baixe o Oracle Linux 6.7 e grave a imagem em um DVD. Dê o boot pelo DVD. Inicialmente você verá a tela de teste do DVD, um teste opcional:

ol6001Você pode pular o teste de mída se tiver certeza que o DVD não tem nenhum problema.

Depois você verá a tela de boas-vindas do Oracle 6.7:

ol6002

Clique em Next e aparecerá a tela de seleção da língua utilizada durante a instalação. Mantenha o inglês:

ol6003

Clique em Next e aparecerá a tela de seleção do teclado, no meu caso o ABNT2:

ol6004

Clique em Next e aparecerá a tela de seleção dos dispositivos de storage utilizados pelo sistema. Como eu não vou utilizar SAN ou outra coisa, marquei a opção “Basic Storage Devices”:

ol6005

Clique em Next. Se já houver uma instalação Linux anterior no servidor o Oracle Linux 6 mostrará a tela abaixo, perguntando se queremos fazer uma nova instalação ou atualizar a instalação anterior. Marque a opção “Fresh Installation” para fazer uma nova instalação:

ol6006

Clique em Next. Aparecerá a tela de definição do hostname do servidor. Prencha o FQDN do servidor:

ol6007

Agora clique no botão “Configure Network”. A tela de configuração das conexões de rede surgirá, mostrando as placas de rede do servidor (os prints da configuração da rede estão ruins pois foram fotos feitas a partir de um celular pois a função de print-screen do Anaconda – o instalador do Oracle Linux – não estavam funcionando aqui; provavelmente um bug):

ol6008

Selecione a opção que está com o cabo de rede conectado (no meu caso, a interface em1) e clique em Edit:

ol6009

Aparecerá a tela de configuração das propriedades da rede, com diversas abas. Na aba Wired, marque a opção “Connect automatically”:

ol6010 Na aba 802.1x Security, deixe tudo desmarcado:

ol6011

Na aba do IPV6, marque a opção “Ignore”:

ol6013

Na aba do IPv4, preencha com as informações pertinentes à sua rede:

ol6012

Quando terminar, clique em Apply. Você voltará para a tela de preenchimento do hostname do servidor. Clique em Next. A tela de seleção do fuso horário aparecerá:

ol6014

Selecione o fuso horário de São Paulo e clique em Next. A tela de definição da senha de root aparecerá:

ol6015

Crie uma senha forte para o usuário e clique em Next. A tela de definição do particionamento de disco aparecerá:

ol6016

Clique em “Create Custom Layout” e depois clique em Next. A tela de particionamento avançada dos discos será exibida:

ol6017

Clique no botão “Create”. A tela de criação de um storage aparecerá:

ol6018

Escolha a opção “Standard Partition” e clique em “Create”. A tela de adição de uma partição será exibida. Vamos criar nossa partição /boot com ext4 e 500 MB. Preencha as opções como mostrado a seguir e clique no botão “OK”:

ol6019

A partição de boot será criada e voltaremos para a tela de particionamento. Clique novamente no botão “Create”. Iremos criar uma partição LVM com o restante do disco:

ol6020

Clique na opção “LVM Physical Volume” e clique em “Create”. Na tela de adicionar a partição LVM, marque a opção “Fill to maximum allowable size”:

ol6021

Depois clique em OK. Será exibida a tela de criação dos Volumes Groups e dos Logical Volumes, da LVM. Por padrão o Volume Group já está configurado com o nome de “vg_jupiter”, com extent de 4 MB. Podemos deixar assim:

ol6022

Agora clique no botão “Add” para adicionar os logical volumes. Iniciaremos criando um volume lógico para a partição de swap, com 16 GB (sugestão da Oracle para bancos de dados 12c onde o servidor tenha 16 GB ou mais de memória). Altere o file system para swap, o nome para lv_swap e o tamanho para 16384 (16 GB):

ol6023

Clique no botão “OK” para criar o volume lógico do swap. Agora clique novamente no botão “Add” para criarmos um volume lógico para a raiz. Altere o ponto de montagem para /, o sistema de arquivos para ext4, o nome para lv_raiz e o tamanho para 1048576 (1 TB). Obviamente modifique conforme sua necessidade:

ol6024

Para simplificar a demonstração da instalação só criarei essas partições mas você pode criar outras dependendo de suas necessidades. Clique em OK e confira o volume group e os logical values:

ol6025

Clique em OK e o sistema voltará para a tela de particinamento, com todas as nossas configurações:

ol6026

Clique em Next. A tela de confirmação de alteração das partições no disco será exibida:

ol6027

Clique em “Write changes to disk”. O sistema criará as partições e continuará com a instalação, solicitando o local para a instalação do Grub:

ol6028

Aceite o padrão e clique em Next. O sistema mostrará a tela de escolha do software a ser instalado:

ol6029 Mantenha a opção “Basic Server” e, na lista de repositórios, escolha somente a “Oracle Linux Server” e o “UEK3 kernel repo”. Clique em Next e a instalação começará. Inicialmente o sistema faz uma checagem pré-instalação:

ol6030

Depois o sistema começa a instalar os pacotes:

ol6031

Ao final da instalação, o Oracle ejetará o DVD e será exibida a tela de reboot do servidor:

ol6033

Clique em reboot e pronto! O Oracle Linux 6.7 está instalado.

Agora basta rodar um update no sistema para instalar as últimas atualizações.

SSH com chave pública no Oracle Linux 6

Uma das primeiras coisas a fazer quando configurar um novo servidor, é tornar o acesso via SSH mais seguro. No Oracle Linux 6 (e demais distribuições derivados do Red Hat Enterprise Linux 6, como a CentOS 6) o processo é bem fácil.

Edite o arquivo /etc/ssh/sshd_config e deixe as seguintes variáveis conforme mostrado abaixo:

PermitRootLogin no

RSAAuthentication no
PubkeyAuthentication yes

PermitEmptyPasswords no
PasswordAuthentication no

KerberosAuthentication no

GSSAPIAuthentication no

Agora dentro do diretório ~/.ssh de cada usuário, deverá existir um arquivo com o nome authorized_keys, listando as chaves públicas que terão acesso via SSH. As permissões desse arquivo devem ser 644 ou 640.

Tenha certeza de que esse arquivo existe pois após reiniciar o SSH, se você não tiver uma chave pública nesse arquivo em seu diretório home, não conseguirá acessar mais o servidor. Somente via acesso físico ao mesmo.

Depois que você colocar a chave pública em seu arquivo authorized_hosts, reinicie o serviço:

# service sshd restart
Stopping sshd:                        [ OK ]
Starting sshd:                        [ OK ]

Pronto, se você tentar acessar via SSH sem especificar sua chave privada, correspondente à chave pública que está no servidor, o SSH negará o acesso:

$ ssh abrantesasf@192.168.10.50
Permission denied (publickey).

Obviamente sua chave privada deve permanecer SECRETA ou qualquer pessoa que conseguir sua chave privada conseguirá logar no servidor.

Atualizar Oracle Linux 6 após instalação

Para atualizar o Oracle Linux 6 após uma instalação do zero, dê os seguintes comandos como root (atenção, pode ser necessário configurar o proxy no shell):

# yum repolist
Loaded plugins: security, ulninfo
public_ol6_UEKR3_latest                                | 1.2 kB 00:00 
public_ol6_UEKR3_latest/primary                        |  17 MB 00:10 
public_ol6_UEKR3_latest                                       440/440
public_ol6_latest                                      | 1.4 kB 00:00 
public_ol6_latest/primary                              |  52 MB 00:29 
public_ol6_latest                                         32120/32120
repo id repo name status
public_ol6_UEKR3_latest Unbreakable Enterprise Kernel Release 3 for Oracle Linux 6Server (x86_64) 440
public_ol6_latest Oracle Linux 6Server Latest (x86_64) 32.120

# yum check-update
Loaded plugins: security, ulninfo
bind-libs.x86_64 32:9.8.2-0.37.rc1.el6_7.2           public_ol6_latest
(resto do output omitido)

# yum install deltarpm
(output omitido)

# yum update
(output omitido)

Se uma atualização do kernel tiver sido feita, reinicie o servidor.

Configurar NTP no Red Hat Enterprise Linux 6 e derivados

A configuração do NTP para que o servidor possa manter seu relógio sempre atualizado é muito simples no Red Hat Enterprise Linux 6 e seus derivados (como o Oracle Linux 6 ou o CentOS 6).

Basta editar o arquivo /etc/ntp.conf e comentar os servidores NTP da Red Hat, incluindo os servidores NTP desejados:

#server 0.rhel.pool.ntp.org iburst
#server 1.rhel.pool.ntp.org iburst
#server 2.rhel.pool.ntp.org iburst
#server 3.rhel.pool.ntp.org iburst
server 189.50.12.221 iburst
server 189.50.12.220 iburst

O exemplo acima utiliza os dois servidores NTP do SM Saúde. Se você não tem nenhum servidor próprio para utilizar, use dos servidores NTP oficiais do Brasil (veja ntp.br para maiores informações):

  • a.st1.ntp.br
  • b.st1.ntp.br
  • c.st1.ntp.br
  • d.st1.ntp.br
  • a.ntp.br
  • b.ntp.br
  • c.ntp.br
  • gps.ntp.br

Depois de ajustar o arquivo /etc/ntp.conf, ajuste a inicialização automática do NTP com o comando (como usuário root):

# chkconfig /et/init.d/ntpd on

Agora precisamos criar o arquivo drift, utilizado pelo NTP, e iniciar o serviço:

# touch /var/lib/ntp/drift
# service ntpd start
Starting ntpd:                                                [ OK ]

Verifique se o NTP está funcionando e sincronizado com os servidores:

# ntpq -p
remote           refid        st t when poll reach delay offset jitter
======================================================================
+web01.smsaude.c 200.186.125.195 2 u  6 64   17     0.426 -0.038 0.041
*web02.smsaude.c 200.186.125.195 2 u  5 64   17     0.497 -1.522 0.014

# ntpstat 
synchronised to NTP server (189.50.12.220) at stratum 3 
 time correct to within 83 ms
 polling server every 64 s

Agora seu servidor já está com a data/hora sincronizada com um servidor NTP.