Vivendo e Aprendendo

Experiência prática na administração de Banco de Dados

Para duplicar um banco oracle na mesma maquina

by Gilberto C. Andrade on 01 dezembro 2008

Tagged as: Database,

Atualmente aqui na Secretaria estamos em um processo de implantação de um sistema de recursos humanos, para ser mais exato, praticamente toda parte de infraestrutura (hardware e software) já está pronta para uso. Mas por questões que foge ao meu conhecimento (penso ser licitação), a fase mais densa (treinamento e uso pelo usuário final) está em fase de planejamento/reestruturação. Bom, apesar dessa, vamos dizer morosidade, tem uma fase desse processo que não pára: a migração. Nesse processo participam duas equipes: parametrização e a própria migração, o qual nessa última pertenço.

A migração é um ciclo constante onde a partir de modificações(parametrização) importantes no banco de produção, é acionado uma requisição de atualização do banco de migração (utilizado para validar a parametrização com a ativação de funções do sistema de recursos humanos, por exemplo, calculo de folha). Para esse ciclo funcionar tive que realizar uma das tarefas mais comuns para quem administra um que é cópia/duplicação/clonagem de um banco em produção para outro banco (até mesmo em outro servidor) a ser utilizado como teste. O procedimento descrito aqui, nada mais é do que sequência descrita na própria [documentação (http://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmdupdb. htm#i1006474):

  1. Create an Oracle Password File for the Auxiliary Instance
  2. Establish Oracle Net Connectivity to the Auxiliary Instance
  3. Create an Initialization Parameter File for the Auxiliary Instance
  4. Start the Auxiliary Instance
  5. Mount or Open the Target Database
  6. Make Sure You Have the Necessary Backups and Archived Redo Logs (Essencial - você precisa de um backup
  7. Allocate Auxiliary Channels if Automatic Channels Are Not Configured
  8. Recrie a tablespace temporária (extra)

Task 1: Create an Oracle Password File for the Auxiliary

Instance

cd $ORACLE_HOME/dbs/
orapwd file=$ORACLE_HOME/dbs/orapwbeta password=senha entries=5

Task 2: Establish Oracle Net Connectivity to the Auxiliary

Instance

vi $ORACLE_HOME/network/admin/tnsnames.ora
BETA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracleibm.secad)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = beta.secad.to.gov.br)
    )
  )

Atenção: a criação estática de um listener é importantíssima, caso contrário vc encontrá problemas de conexão, como o erro:
`ORA-12528: TNS:listener: all appropriate instances are blocking new connections

vi $ORACLE_HOME/network/admin/listener.ora
# listener.ora Network Configuration File: 
/opt/oracle/db/10.2.0.1.0/server/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = producao.secad.to.gov.br)
      (ORACLE_HOME = /opt/oracle/db/10.2.0.1.0/server)
      (SID_NAME = producao)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = alfa.secad.to.gov.br)
      (ORACLE_HOME = /opt/oracle/db/10.2.0.1.0/server)
      (SID_NAME = alfa)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = beta.secad.to.gov.br)
      (ORACLE_HOME = /opt/oracle/db/10.2.0.1.0/server)
      (SID_NAME = beta)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracleibm)(PORT = 1521))
  )

Task 3: Create an Initialization Parameter File for the

Auxiliary Instance

vamos criar primeiro a estrutura de diretorios onde ficarão os arquivos do banco

cd /dm0/oracle/admin/beta
mkdir adump
mkdir arch
mkdir bdump
mkdir cdump
mkdir data
mkdir exp
mkdir pfile
mkdir scripts
mkdir udump
mkdir utlfile

Agora o arquivo de inicialização, para isso vou fazer uma copia do banco original e fazer a mudanças necessárias

cd /dm0/oracle/admin/beta/pfile/
cp ../../producao/pfile/init.ora.292007145712 initbeta.ora
vi initbeta.ora

Se estiver usando spfile no banco original, crie um arquivo de inicialização (pfile) a partir dele

export ORACLE_SID=producao
sqlplus /as sysdba
CREATE PFILE='/dm0/oracle/admin/beta/pfile/initbeta.ora' FROM SPFILE;

Substitua todas as ocorrências do banco anterior

:g/producao/s//beta/g

#Acrescente mais uma seção neste arquivo
###########################################
#  Filename Conversion Initialization Parameters
#  Renaming Datafiles in RMAN DUPLICATE DATABASE
#  Renaming Online Logs in RMAN DUPLICATE DATABASE
###########################################
DB_FILE_NAME_CONVERT=(/dm0/oracle/admin/producao/data/ 
,/dm0/oracle/admin/beta/data/)
LOG_FILE_NAME_CONVERT=(/dm0/oracle/admin/producao/data 
,/dm0/oracle/admin/beta/data)

Salve o arquivo. Para facilitar a duplicação recomenda-se criar um spfile no local padrao da instalação. Isso irá lhe poupar o trabalho quando o rman fizer o shutdwon e startup, ele não solicitará o arquivo de inicialização pfile.

sqlplus /as sysdba
CREATE SPFILE FROM PFILE='/dm0/oracle/admin/beta/pfile/initbeta.ora';

Task 4: Start the Auxiliary Instance

export ORACLE_SID=beta
sqlplus /as sysdba
STARTUP FORCE NOMOUNT

Task 5: Mount or Open the Target Database (Opcional -

provavelmente o banco original já esteja aberto!)

Conecte-se ao banco de origem


STARTUP MOUNT;#mount or open database origem

Task 6: Make Sure You Have the Necessary Backups and

Archived Redo Logs (Essencial - você precisa de um backup recente, caso contrário, a clonagem criará um banco antigo)

export ORACLE_SID=producao
rman target /
Recovery Manager: Release 10.2.0.2.0 - Production on Wed Mar 14 18:12:58 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: PRODUCAO (DBID=2991538920)
RMAN> list backup;
using target database control file instead of recovery catalog
List of Backup Sets
===================

Task 7: Allocate Auxiliary Channels if Automatic Channels

Are Not Configured

Start RMAN with a connection to the target database, the auxiliary instance, and, if applicable, the recovery catalog database
Nesta conexão pode ocorrer um error comum na versao 10g:
`ORA-12528: TNS:listener: all appropriate instances are blocking new connections
Este é um erro conhecido do Oracle 10g onde um SHUTDOWN IMMEDIATE é seguido por um STARTUP MOUNT ou STARTUP FORCE MOUNT. Execute um novo SHUTDOWN no banco e então um STARTUP. Você será capaz de conectar novamente.
Se ainda sim você não conseguir conectar, inverta as opções do rman:

#Forma alternativa  
#oracle@oracleibm:/dm0/oracle/admin/beta/pfile> export ORACLE_SID=beta  
#oracle@oracleibm:/dm0/oracle/admin/beta/pfile>rman target sys@producao 
auxiliary / 
oracle@oracleibm:/dm0/oracle/admin/beta/pfile> export 
ORACLE_SID=producao
oracle@oracleibm:/dm0/oracle/admin/beta/pfile> rman TARGET /  AUXILIARY SYS@beta

Recovery Manager: Release 10.2.0.2.0 - Production on Thu Mar 15 09:03:41 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

connected to target database: PRODUCAO (DBID=2991538920)
auxiliary database Password:
connected to auxiliary database: BETA (not mounted)

RMAN>
RUN 
{
  # to manually allocate a channel of type sbt issue:
  #ALLOCATE AUXILIARY CHANNEL ch1 DEVICE TYPE sbt;

  # to manually allocate two auxiliary channels for disk issue (specifying 
  # whatever channel id that you want):
  ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;
  ALLOCATE AUXILIARY CHANNEL aux2 DEVICE TYPE DISK;
  DUPLICATE TARGET DATABASE TO beta;
}
.
.
.
contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Finished Duplicate Db at 15/03/2007 09:55:47

RMAN> quit

Task 8: Recrie a tablespace temporária (extra)

ALTER DATABASE TEMPFILE '/dm0/oracle/admin/beta/data/temp01.dbf' DROP INCLUDING 
DATAFILES;
ALTER TABLESPACE TEMP ADD TEMPFILE '/dm0/oracle/admin/beta/data/temp01.dbf' 
SIZE 200M REUSE AUTOEXTEND ON NEXT 5M MAXSIZE 2000M; 

Outra coisa, como este banco é para teste, devemos desabilitar o modo archive do mesmo

oracle@oracleibm:/dm0/oracle/admin/beta/pfile> export ORACLE_SID=beta
oracle@oracleibm:/dm0/oracle/admin/beta/pfile> sqlplus / as sysdba
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /opt/oracle/db/10.2.0.1.0/server/dbs/arch
Oldest online log sequence     0
Next log sequence to archive   1
Current log sequence           1

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.
Total System Global Area 1811939328 bytes
Fixed Size                  2071896 bytes
Variable Size             419431080 bytes
Database Buffers         1375731712 bytes
Redo Buffers               14704640 bytes
Database mounted.

SQL> alter database noarchivelog;
Database altered.

SQL> alter database open;
Database altered.

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /opt/oracle/db/10.2.0.1.0/server/dbs/arch
Oldest online log sequence     0
Current log sequence           1
SQL> 

**

Não esquecer de coletar estatísticas

**

begin
dbms_stats.gather_database_stats(options=> 'GATHER AUTO');
end;
comments powered by Disqus