Converter um banco de dados Oracle single para RAC (Real Application Clusters) pode parecer para muitos uma tarefa complicada, cheia de mistérios… mas de fato, NÃO é!
A Oracle nos disponibiliza algumas ferramentas para esta conversão, dentre elas o próprio DBCA (Database Configuration Assistant) e o RCONFIG. Para saber mais sobre a conversão de single para RAC através destas ferramentas acesse Oracle® Real Application Clusters Installation Guide
Neste artigo estará sendo abordado uma conversão MANUAL de single para RAC (2 nodes), mas atente-se, o exemplo parte do ponto em que você já tenha o ambiente RAC montado (GI + ORACLE Database Software) e a base SINGLE que será convertida já migrada/clonada para o ambiente RAC.
Confirmando que nossa base é single.
[oracle@rac1 ~]$ sqlplus SQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 4 08:14:17 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Enter user-name: / as sysdba Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select * from v$active_instances; no rows selected SQL> show parameter cluster; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cluster_database boolean FALSE cluster_database_instances integer 1 cluster_interconnects string
Primeiramente criamos os redo log online e a undo tablespace para o segundo nó dos cluster.
Cada nó do cluster requer um conjunto individual de redo log e de segmentos de undo.
Cada instance precisa de no mínimo 2 grupos de redo log online, preferencialmente multiplexados em discos diferentes com a finalidade de recuperação de falhas.
Para cada instance é atribuído um número de thread, iniciando em 1, quando adicionamos mais arquivos de log é importante nos certificarmos que estamos atribuindo esta nova thread, de modo que os arquivos de log serão adicionados à instância correta.
--REDO THREAD 2 SQL> alter database add logfile thread 2 group 8 ('+REDOA/teste/redo08a.log','+REDOB/teste/redo08b.log') size 500m; Database altered. SQL> alter database add logfile thread 2 group 9 ('+REDOA/teste/redo09a.log','+REDOB/teste/redo09b.log') size 500m; Database altered. SQL> alter database add logfile thread 2 group 10 ('+REDOA/teste/redo10a.log','+REDOB/teste/redo10b.log') size 500m; Database altered. SQL> alter database add logfile thread 2 group 11 ('+REDOA/teste/redo11a.log','+REDOB/teste/redo11b.log') size 500m; Database altered. SQL> alter database enable public thread 2; Database altered. --UNDO TABLESPACE SQL> create undo tablespace UNDOTBS2 datafile '+DATA' size 500M; Tablespace created.
Criado os redo logs e a undo para a segunda thread, execute o catclust.sql que ira criar as views de dicionário de dados do RAC.
O catclust.sql está localizado dentro de $ORACLE_HOME/rdbms/admin ou simplesmente execute conforme abaixo.
SQL> @?/rdbms/admin/catclust Package created. Package body created. PL/SQL procedure successfully completed. View created. Synonym created. Grant succeeded. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. View created. Grant succeeded. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. Synonym created. View created. Grant succeeded. Synonym created. View created. Grant succeeded. Synonym created. PL/SQL procedure successfully completed. SQL>
Como nossa base ainda não possui nenhuma parametrização para o cluster, precisamos ajustar alguns parâmetros para dar continuidade na conversão da base single para RAC, desta forma criei um pfile para ajustar os parâmetros necessários.
SQL> create pfile from spfile; File created.
teste1.undo_tablespace='UNDOTBS1' teste2.undo_tablespace='UNDOTBS2' teste1.instance_number=1 teste2.instance_number=2 teste1.thread=1 teste2.thread=2 *.remote_listener='oracle-scan:1521' *.cluster_database_instances=2 *.cluster_database=TRUE
Observe que foi especificado o nome da instance frente a algum parâmetros. Isto significa que o parâmetro é único para aquela instance, quando especificado * significa que ele é valido para todas as instances do RAC.
Foi atribuído a undo tablespace UNDOTBS2 criada acima para a instance teste2 e especificado a thread2 e instance_number para as bases conforme exemplo acima.
O parâmetro CLUSTER_DATABASE_INSTANCES especifica a quantidade de instances que fazem parte do RAC, enquanto o CLUSTER_DATABASE habilita o database em modo cluster.
O REMOTE_LISTENER é o “single name” do SCAN (11g +), necessário para balanceamento de carga (load balance) entre os RACs. Caso o ambiente seja 10g é necessário criar uma entrada no TNSNAMES.ora.
Feito os ajustes no pfile irei subir a base utilizando este pfile modificado, criar um SPFILE dentro do ASM para que seja compartilhado entre as instances e apontar este SPFILE dentro do pfile local da instance em cada nó do RAC.
SQL> show parameter spf NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string /u01/app/oracle/product/11.2.0 .4/dbhome_1/dbs/spfileteste.o ra SQL> shut immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> exit Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options [oracle@rac1 ~]$ export ORACLE_SID=teste1 [oracle@rac1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 4 09:35:11 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. SQL> startup pfile='initteste.ora' ORACLE instance started. Total System Global Area 1.6034E+10 bytes Fixed Size 2269072 bytes Variable Size 4764729456 bytes Database Buffers 1.0972E+10 bytes Redo Buffers 294916096 bytes Database mounted. Database opened. SQL> create spfile='+DATA/teste/spfileteste.ora' from pfile='initteste.ora'; File created.
[oracle@rac1 ~]$ echo "SPFILE='+DATA/teste/spfileteste.ora'" > $ORACLE_HOME/dbs/initteste1.ora --NODE2 [oracle@rac2 ~]$ echo "SPFILE='+DATA/teste/spfileteste.ora'" > $ORACLE_HOME/dbs/initteste2.ora
--voltando NODE1 [oracle@rac1 ~]$ sqlplus SQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 4 09:43:55 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Enter user-name: / as sysdba Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> shut immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL>
Agora é preciso registrar o database e instances no CRS utilizando o utilitário SRVCTL. A partir do momento que o CRS gerencie o database/instances cadastradas com sucesso é possível reiniciar o servidor que as bases serão iniciadas na sequencia sem depender de uma intervenção manual para iniciá-las, claro, desde que não haja falhas.
[oracle@rac1 ~]$ srvctl add database -d teste -o $ORACLE_HOME [oracle@rac1 ~]$ srvctl add instance -d teste -i teste1 -n rac1 [oracle@rac1 ~]$ srvctl add instance -d teste -i teste2 -n rac2Subindo o database utilizando o SRVCTL podemos ver que nosso RAC já possui 2 instances ativas:
[oracle@rac1 ~]$ srvctl start database -d teste
[oracle@rac1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Tue Mar 4 09:52:39 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select * from v$active_instances; INST_NUMBER INST_NAME ----------- ------------------------------------------------------------ 1 rac1:teste1 2 rac2:teste2Dúvidas, necessidades ou compartilhamentos extra deixem um comentário.
Referências:
http://docs.oracle.com/cd/B28359_01/install.111/b28264/cvrt2rac.htm#RILIN1101 http://allthingsoracle.com/convert-single-instance-to-rac-part-2-manually-convert-to-rac/
0 comentários:
Postar um comentário