Como converter uma instância simples (Single Instance) para Oracle RAC?
Autor: Adelson Luniere | Publicado: 2010-11-23T07:18:00-08:00

Neste artigo veremos um passo-a-passo sobre um método manual para converter um instância Simples (single instance) para Oracle database RAC

Informações sobre a instância:

&nbsp;&nbsp;&nbsp; ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; ORACLE_SID=prod

Localização dos datafiles = /u03/oradata/prod — /u03 está em formato de arquivo OCFS. 

Se seus arquivos estão em sistema de arquivo diferente e não compartilhado, você deve compia-los e renomeá-los quando for o caso.

Versão do banco de dados = 10g R2 (10.2.0.1.0)

Passos para conversão dem uma instância simples "single instance" para RAC

Passo 1) Instale o software clusterware em todos os nós que você usará o RAC

Para detalhes de como instalar o software clusterware, veja o link: http://www.viniciusdba.com.br/blog/?p=316 (sempre em português!). As nomenclaturas de diretórios e detalhes de instalação estarão diferentes, informarei sempre as que estou usando.

Basicamente você precisa configurar o endereço IP e outros arquivos do sistema operacional e variáveis de ambiente, antes de instalar o clusterware. Veja o que o blog apresenta uma solução completa.

Importante: A versão do software clusterware deve ser igual a do banco de dados, nunca misture as versões!!

Detalhes da instalação do software clusterware:

&nbsp;&nbsp;&nbsp; Nome do Cluster : crs
&nbsp;&nbsp;&nbsp; Diretório de instalação do Cluster : /u01/app/oracle/product/10.2.0/crs
&nbsp;&nbsp;&nbsp; Diretório do OCR&nbsp; : /u03/oracrs/ocr.ora
&nbsp;&nbsp;&nbsp; Diretório do Voting disk : /u03/oracrs/vote.crs

Passo 2) instale o banco de dados Oracle RAC em cluster 10g

Novamente siga as dicas excelentes deste blog: http://www.viniciusdba.com.br/blog/?p=396

Lembrando agora outro fato importante, a versão deste ambiente em RAC deve ser obrigatoriamente a mesma que você estava usando quando tinha uma só instância.

Detalhes da instalação:

&nbsp;&nbsp;&nbsp; RAC ORACLE_HOME=/u01/app/oracle/product/10.2.0/db
&nbsp;&nbsp;&nbsp; Número de instâncias = 2
&nbsp;&nbsp;&nbsp; Nome dos nós para as 2 instãncias = ocvmrh2103, ocvmrh2190

/u01 não está sendo compartilhado entre os nós do cluster.

Passo 3) Faça um backup da sua instância e recupere este backup na partição que está sendo compartilhada (BACKUP/RESTORE).

&nbsp;&nbsp;&nbsp; Se você estiver usando usando ASM, esta é a forma mais rápida:
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; a) Monte os discos usando o caminho do diretório dos datafiles:&nbsp; 
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mkdir /mnt/datafile
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; mount /hostdobancooriginal/diretorio/datafile /mnt/datafile -o user=usuario
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &gt;&gt;&gt;informe a senha

&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; b) Faça o backup (cópia) do seu banco direto para os discos ASM usando o rman
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rman target system/system123@sid
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; convert datafile '/mnt/datafile/system01.dbf' format '+disk/datafile/system01.dbf' ;

Passo 4) Faça uma cópia do seu init.ora e adicione os parâmetros para o RAC:

&nbsp;&nbsp;&nbsp; bash-3.00$ cp initprod.ora /tmp/initprod.ora

&nbsp;&nbsp;&nbsp; Parâmetros novos no arquivo /tmp/initprod.ora, perceba que as instância agora são numeradas 1 e 2, ok?

&nbsp;&nbsp;&nbsp; *.cluster_database = TRUE 
&nbsp;&nbsp;&nbsp; *.cluster_database_instances = 2 
&nbsp;&nbsp;&nbsp; *.undo_management=AUTO 
&nbsp;&nbsp;&nbsp; prod1.undo_tablespace=UNDOTBS1
&nbsp;&nbsp;&nbsp; prod1.instance_name=prod1
&nbsp;&nbsp;&nbsp; prod1.instance_number=1 
&nbsp;&nbsp;&nbsp; prod1.thread=1 
&nbsp;&nbsp;&nbsp; prod1.local_listener=listener_ocvmrh2103
&nbsp;&nbsp;&nbsp; prod2.instance_name=prod2
&nbsp;&nbsp;&nbsp; prod2.instance_number=2 
&nbsp;&nbsp;&nbsp; prod2.local_listener=listener_ocvmrh2190
&nbsp;&nbsp;&nbsp; prod2.thread=2 
&nbsp;&nbsp;&nbsp; prod2.undo_tablespace=UNDOTBS2

Passo 5) Altere a informação sobre a nova localização do arquivo de controle (controlfile), no arquivo&nbsp; /tmp/initprod.ora

Passo 6) Cria seu SPFILE
&nbsp;&nbsp;&nbsp; SQL&gt; create spfile='/u03/oradata/prod/spfileprod.ora' from pfile='/tmp/initprod.ora';

Passo 7) Copie o spfile criado para o diretório : ORACLE_HOME/dbs e crie um novo pfile a partir dele.

&nbsp;&nbsp;&nbsp; bash-3.00$ cp spfileprod.ora /u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora
&nbsp;&nbsp;&nbsp; bash-3.00$ pwd
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; /u01/app/oracle/product/10.2.0/db/dbs
&nbsp;&nbsp;&nbsp; bash-3.00$ cat initprod1.ora
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; spfile='/u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora'

Passo 8) Cria um novo arquivo de senha (password) para a instância prod1 embaixo do Oracle_home do RAC

&nbsp;&nbsp;&nbsp; bash-3.00$ orapwd file=orapwprod1 password=welcome1

Passo 9) inicialize o banco de dados no modo "MOUNT" e troque os nomes dos datafile e redo log para sua nova localização.

-----&gt;&gt;&gt;&gt;Antes confirme se sua varável de ambiente ORACLE_HOME está configurada corretamente:

&nbsp;&nbsp;&nbsp; bash-3.00$ echo $ORACLE_HOME
&nbsp;&nbsp;&nbsp; /u01/app/oracle/product/10.2.0/db&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; bash-3.00$ echo $ORACLE_SID
&nbsp;&nbsp;&nbsp; prod1
&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; SQL&gt; startup mount pfile=initprod1.ora
&nbsp;&nbsp;&nbsp; ORACLE instance started.

&nbsp;&nbsp;&nbsp; Total System Global Area&nbsp; 838860800 bytes
&nbsp;&nbsp;&nbsp; Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1222168 bytes
&nbsp;&nbsp;&nbsp; Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 213912040 bytes
&nbsp;&nbsp;&nbsp; Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 620756992 bytes
&nbsp;&nbsp;&nbsp; Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2969600 bytes
&nbsp;&nbsp;&nbsp; Database mounted.

Passo 10) Adicione a sugunda partição do RAC (thread) que irá atender a instância 2 

&nbsp;&nbsp;&nbsp; SQL&gt; alter database add logfile thread 2 group 4 ('/u03/oradata/prod/redo2_01.dbf') size 50M, group 5 ('/u03/oradata/prod/redo2_02.dbf') size 50M, group 6 &nbsp;&nbsp;&nbsp; ('/u03/oradata/prod/redo2_03.dbf') size 50M;
&nbsp;&nbsp;&nbsp; Database altered.

&nbsp;&nbsp;&nbsp; SQL&gt; ALTER DATABASE OPEN;
&nbsp;&nbsp;&nbsp; Database altered.

&nbsp;&nbsp;&nbsp; SQL&gt; alter database enable public thread 2;
&nbsp;&nbsp;&nbsp; Database altered.

Passo 11) Crie UNDO tablespace para a instância 2

O nome desta tablespace deve ser o mremos que você especificou no arquivo init.ora no passo 4.

&nbsp;&nbsp;&nbsp; QL&gt; CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/u03/oradata/prod/undotbs2_01.dbf' size 25M;
&nbsp;&nbsp;&nbsp; ablespace created.

Passo 12) Crie as visões (views) específicas para cluster na instância 1

&nbsp;&nbsp;&nbsp; QL&gt; @?/rdbms/admin/catclust.sql

Passo 13) No segundo nó do cluster:

Configure o ORACLE_HOME e o SID 

&nbsp;&nbsp;&nbsp; bash-3.00$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db
&nbsp;&nbsp;&nbsp; bash-3.00$ export ORACLE_SID=prod2

Crie o arquivo initprod2.ora igual ao initprod1.ora (da primeira instância). Lembre de copiar também o arquivo spfile para este segundo nó de cluster.

&nbsp;&nbsp;&nbsp; bash-3.00$ pwd
&nbsp;&nbsp;&nbsp; /u01/app/oracle/product/10.2.0/db/dbs
&nbsp;&nbsp;&nbsp; bash-3.00$ ls -lrt spfileprod.ora 
&nbsp;&nbsp;&nbsp; -rw-r-----&nbsp; 1 oracle oinstall 3584 Feb 19 12:36 spfileprod.ora
&nbsp;&nbsp;&nbsp; bash-3.00$ cat initprod2.ora 
&nbsp;&nbsp;&nbsp; spfile='/u01/app/oracle/product/10.2.0/db/dbs/spfileprod.ora'

Passo 14) Crie um novo arquivo de senhas (password) para esta instância

&nbsp;&nbsp;&nbsp; bash-3.00$ orapwd file=orapwprod2 password=welcome1

Passo 15) Crie os diretórios (mkdir) para os arquivos, conforme informado no init.ora,&nbsp; abaixo:
&nbsp;&nbsp;&nbsp; audit_file_dest
&nbsp;&nbsp;&nbsp; background_dump_dest
&nbsp;&nbsp;&nbsp; user_dump_dest
&nbsp;&nbsp;&nbsp; core_dump_dest


Passo 16) Inicialize a segunda instância

&nbsp;&nbsp;&nbsp; SQL&gt; startup pfile=initprod2.ora
&nbsp;&nbsp;&nbsp; ORACLE instance started.

&nbsp;&nbsp;&nbsp; Total System Global Area&nbsp; 838860800 bytes
&nbsp;&nbsp;&nbsp; Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1222168 bytes
&nbsp;&nbsp;&nbsp; Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 213912040 bytes
&nbsp;&nbsp;&nbsp; Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 620756992 bytes
&nbsp;&nbsp;&nbsp; Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2969600 bytes
&nbsp;&nbsp;&nbsp; Database mounted.
&nbsp;&nbsp;&nbsp; Database opened.


Passo 17) Agora é só adicionar os serviços do cluster

&nbsp;&nbsp;&nbsp; bash-3.00$ srvctl add database -d prod -o /u01/app/oracle/product/10.2.0/db -p /u03/oradata/prod/spfileprod.ora
&nbsp;&nbsp;&nbsp; bash-3.00$ srvctl add instance -d prod -i prod1 -n OCVMRH2103
&nbsp;&nbsp;&nbsp; bash-3.00$ srvctl add instance -d prod -i prod2 -n OCVMRH2190


Referência:
Metalink Note ID : 747457.1


Fique à vontade para tirar dúvidas comigo. Espero que você tenha Sucesso!


Luis Adelson.