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!!!!

Conexão do Forms 6i com o Oracle 12c

O Oracle 12c não permite, por padrão, a conexão do Forms 6i pois a última versão do banco de dados certificada para o Forms 6i foi a 10.1.

Para que o Forms 6i se conecte ao Oracle 12c, faça o seguinte:

Primeiro, altere o parâmetro de inicialização sec_case_sensitive_logon para false. Conecte-se como system e dê o seguinte comando:

alter system set "sec_case_sensitive_logon"=false comment='Mudei para FALSE para permitir login do Forms6i' scope=both sid='*';

O comentário é somente um lembrete para que no futuro saibamos porquê alteramos o parâmetro. O scope both indica que é para o parâmetro ser alterado no spfile e na instância, dinamicamente, em todos os sids.

Em segundo lugar, edite o arquivo sqlnet.ora do servidor (fica no diretório $ORACLE_HOME/network/admin) e acrescente a seguinte linha:

SQLNET.ALLOWED_LOGON_VERSION=8

Com as duas modificações acima o Forms e Reports 6i conseguirão se conectar com o Oracle 12c normalmente (lembre-se que não é uma configuração certificada), sem nem precisar reiniciar o banco.

Lembre-se também que o Forms6i só trabalha com bancos UTF-8 ou WE8MSWIN1252, por exemplo. Se seu banco de dados tiver characterset AL32UTF8, o Forms 6i não funcionará!

Instalação do Oracle 12c Standard Edition One em um Oracle Linux 6

ATENÇÃO: ESTE ARTIGO AINDA NÃO ESTÁ TERMINADO. AINDA SERÁ ORGANIZADO E MELHORADO, MAS JÁ ESTÁ DISPONÍVEL PARA QUEM QUISER POIS JÁ É UMA AJUDA NA INSTALAÇÃO.

A versão mais atualizada do Oracle 12c Standard Edition One é a 12.1.0.1.0, e o Oracle Linux mais atual é a versão 7.1. Entretanto, a versão 12.1.0.1.0 NÃO É CERTIFICADA para o Oracle Linux 7.

Asism, faremos a instalação no Oracle Linux 6 (a última versão disponível é a Oracle Linux 6.7, distribuído gratuitamente no site https://edelivery.oracle.com).

Instale o Oracle Linux 6.7 tendo certeza de se utilizar de LVM e uma partição swap com 16 GB (recomendado quando a memório do servidor é de 16 GB ou mais), conforme demonstrado no tutorial de instalação do Oracle Linux 6.7.

Depois de instalar, atualize o sistema! Não se esqueça de configurar o serviço NTP e o acesso SSH!

Agora instale os seguintes pacotes (conforme Metalink Doc ID 1529864.1):

# yum install binutils glibc libgcc libstdc++ libaio libXext libXtst libX11 libXau libxcb libXi make sysstat compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc-devel ksh libstdc++-devel libaio-devel cloog-ppl cpp glibc-headers kernel-headers mpfr ppl xclock

# yum install oracle-rdbms-server-12cR1-preinstall

Opcional: se for necessário software cliente de 32 bits, instale também:

# yum install compat-libstdc++-33.i686 glibc.i686 glibc-devel.i686 libgcc.i686 libstdc++.i686 libstdc++-devel.i686 libaio.i686 libaio-devel.i686 libXext.i686 libXtst.i686 libX11.i686 libXau.i686 libxcb.i686 libXi.i686

Configure o arquivo /etc/hosts com o IP e o FQDN do servidor, por exemplo:

127.0.0.1     jupiter.casadealegria.com.br jupiter localhost
192.168.10.50 jupiter.casadealegria.com.br jupiter

Verifique se o comando hostname retorna o FQDN do servidor:

# hostname
jupiter.casadealegria.com.br

Muitas tarefas prévias (ajuste dos parâmetros do Kernel, dos limites, semáforos, não habilitação das transparent hugepages, etc., bem como a criação dos grupos oinstall, dba e do usuário oracle) já são feitas automaticamente com a instalação do pacote oracle-rdbms-server-12cR1-preinstall, mas outras tem que ter completadas manualmente.

Adicione as seguintes configurações ao arquivo /etc/security/limits.conf:

oracle     soft   nproc    2047
oracle     hard   nproc    16384
oracle     soft   nofile   1024
oracle     hard   nofile   65536
oracle     soft   stack    10240
oracle     hard   stack    10240

Agora adicione a seguinte linha ao arquivo /etc/pam.d/login:

session required pam_limits.so

Agora crie o arquivo /etc/profile.d/oracle.sh com o seguinte conteúdo:

if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
       ulimit -u 16384 
       ulimit -n 65536
    else
       ulimit -u 16384 -n 65536
    fi
fi

Para completar, crie uma senha para o usuário oracle e os diretórios padronizados para a instalação:

# passwd oracle
Changing password for user oracle.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

# mkdir /u01 /u02 /u03 /u04 /u05

# chown oracle:oinstall /u0? -R

Configure o ambiente para a instalação no arquivo .bash_profile do usuário oracle (acrescente o seguinte – ALTERE DE ACORDO COM SUAS NECESSIDADES):

#=======================
# Cofigurações do proxy:
#=======================
proxy="192.168.10.9:3128"
export http_proxy=$proxy
export https_proxy=$proxy
export ftp_proxy=$proxy
export no_proxy="localhost,127.0.0.1"

#=====================================
# Ajustes para a instalação do Oracle:
#=====================================

# Ajusta a umask
umask 0022

# Ajusta a LANG do linux:
export LANG=en_US.UTF-8

# Ajusta o ambiente básico do Oracle
ORACLE_BASE=/u01/app/oracle
ORACLE_BASE_DO_HOME=$ORACLE_BASE/product/12.1.0.1.0
ORACLE_HOME=$ORACLE_BASE_DO_HOME/db
ORACLE_SID=oracle1
export ORACLE_BASE ORACLE_HOME ORACLE_SID

# Ajusta NLS_LANG
#NLS_LANG=AMERICAN_AMERICA.UTF8; export NLS_LANG
NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252;
export NLS_LANG


# Ajusta variáveis para RAC (cuidado, ver Doc ID 1502996.1)
#export ORA_CRS_HOME=$ORACLE_BASE_DO_HOME/crs
#export ORA_ASM_HOME=$ORACLE_BASE_DO_HOME/asm

# Ajusta o home do Grid Control Agent
export AGENT_HOME=$ORACLE_BASE_DO_HOME/agent

# Ajusta a variável do TNS Admin:
export TNS_ADMIN=$ORACLE_HOME/network/admin

# Ajusta NLS dependendo se 9i ou 10g
test -d $ORACLE_HOME/ocommon/nls/admin/data && export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
test -d $ORACLE_HOME/nls/data && export ORA_NLS10=$ORACLE_HOME/nls/data

# Ajusta os PATHs
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib

Aumente o “Shared Memory File System” do servidor para que o Oracle possa utilizar o gerenciamento automático de memória. Edite, como root, o arquivo /etc/fstab, procure a linha que monta o /dev/shm e aumente a memória para a quantidade desejada. Por exemplo:

tmpfs     /dev/shm     tmpfs     defaults,size=3G     0 0

ATENÇÃO: depois de editar o arquivo, você deve remontar o /dev/shm (ou reiniciar o servidor). Nesse caso eu prefiro reiniciar para ter certeza de que o sistema será montado corretamente durante o boot. Para remontar agora:

# mount -o remount /dev/shm

Verifique se o sistema de arquivo de memória compartilhada já está com o tamanho desejado:

# df -h
Filesystem                      Size Used Avail Use% Mounted on
/dev/mapper/vg_jupiter-lv_raiz 1008G 3.1G 954G  1%   /
tmpfs                           3.0G    0 3.0G  0%   /dev/shm
/dev/sda1                       477M 147M 301M 33%   /boot

Agora faça o download dos arquivos do Oracle 12c no site da Oracle (www.oracle.com) e descompacte os arquivos dentro do diretório home do usuário oracle.

Para a instalação é necessário um servidor X mas, como o Oracle Linux 6 foi instalado sem ambiente gráfico, é necessário utilizar um desktop linux acessando via SSH com X11 forwarding. Teste da seguinte forma: com seu desktop acesse via SSH o servidor com o seguinte comando:

$ ssh -X -i <chave_privada> oracle@<servidor>

Agora, no servidor ainda via SSH, execute o xclok:

$ xclock

Se um relógio aparecer da tela de seu desktop, o X11 via SSH está funcionando e você poderá instalar o Oracle remotamente.