quinta-feira, 16 de setembro de 2010

Como criar um banco de dados RAC usando o sql*plus

.Olá DBAs!


O RAC deixou de ser um bicho-papão, veja como é simples criar um banco de dados numa instância RAC. Os procedimentos também são úteis para migrar instâncias non-RAC para RAC. Vamos lá?

Comece criando um banco de dados simples no primeiro nó do cluster.
Use o comando "create database", depois converta-o para RAC, incluindo as configurações específicas para uma instância em cluster. Finalmente registre a instânci com o cluster.

Criando um non-RAC database

Crie um pfile

1) Criar um pfile para non-RAC database no nó 1

Segue um exemplo de um pfile. Foram comentados os parâmetros específicos de um banco de dados clusterizado (RAC). Alguns destes parâmetros podem ser deixados sem comentários, veja abaixo:

TSTDB2.__db_cache_size=4395630592
TSTDB1.__db_cache_size=4395630592
TSTDB2.__java_pool_size=16777216
TSTDB1.__java_pool_size=16777216
TSTDB2.__large_pool_size=16777216
TSTDB1.__large_pool_size=16777216
TSTDB2.__shared_pool_size=905969664
TSTDB1.__shared_pool_size=905969664
TSTDB2.__streams_pool_size=0
TSTDB1.__streams_pool_size=0
##*.cluster_database=true
*.cluster_database_instances=2
*.compatible='10.2.0.4'
*.db_block_size=8192
*.db_create_online_log_dest_1='+TSTDB_DATA'
*.db_domain=''
*.db_file_multiblock_read_count=32
*.db_name='TSTDB'
*.db_unique_name='TSTDB'
*.db_create_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest='+PWTEST_DATA'
*.db_recovery_file_dest_size=53687091200
*.job_queue_processes=0
*.log_archive_dest_1='LOCATION=+PWTEST_DATA'
*.log_buffer=20971520
*.open_cursors=300
*.optimizer_mode='ALL_ROWS'
*.pga_aggregate_target=500M
*.processes=100
*.remote_login_passwordfile='exclusive'
*.resource_limit=TRUE
*.sga_max_size=1G
*.sga_target=1G
*.star_transformation_enabled='TRUE'
*.undo_management='AUTO'
*.undo_retention=3600
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
#TSTDB1.undo_tablespace='UNDOTBS1'
#TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2
*.user_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/udump' *.control_files='+PWTEST_DATA/TSTDB/controlfile/TSTDB.ctl' *.audit_file_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/adump' *.background_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/bdump' *.core_dump_dest='/u01/app/oracle/product/10.2.0/db_1/admin/tstdb/cdump' *.fal_server=TSTDB
*.fal_client=TSTDB
*.standby_file_management=AUTO

### use o número do nó no nome da instância, desta meneira já fica pronto para cnversão em RAC.

Inicialize o banco com a opção NOMOUNT

TSTDB1 > startup nomount

ORA-01078: failure in processing system parameters
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER_TSTDB1'
TSTDB1 >

Ok. Este ero acontece porque é necessário incluir no TNS o parâmetro local listener para resolver o nome LISTENER_TSTDB1.

Abra o tnsnames.ora e adicione as seguintes linhas:
LISTENER_TSTDB1 = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)) )
                                                              ------------->> nome do servidor rede vip <<<
inicialize a instância novamente.

TSTDB1 > startup nomount
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
TSTDB1 >

Crie o banco de dados:

###Se você se esqueceu de comentar o parâmetro "cluster_database" recebrá o seguinte erro:

TSTDB1 > create database;
create database
*
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-12720: operation requires database is in EXCLUSIVE mode

TSTDB1 > show parameter cluster
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cluster_database boolean TRUE
cluster_database_instances integer 2
cluster_interconnects string
TSTDB1 >

Não sendo o caso, agora você irá executar:

catalog, catproc, pupbld scripts ### todos se encontram sobre /rdbms/admin

Converter para instância RAC

Primeiro, crie 2 UNDO tablespaces para as 2 instâncias.

TSTDB1 > create undo tablespace UNDOTBS1 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.

TSTDB1 > create undo tablespace UNDOTBS2 datafile '+DG_DATA' size 100M autoextend on next 50M maxsize 500M;
Tablespace created.

Adicione uma nova thread de REDO e habilite-a

###Se esse passo for ignorado você irá receber o erro quando inicializar a segunda instância:
###ORA-01620: no public threads are available for mounting)

TSTDB1 > alter database add logfile thread 2 group 10 '+DG_DATA' size 100M;
Database altered.

TSTDB1 > alter database add logfile thread 2 group 11 '+DG_DATA' size 100M;
Database altered.

TSTDB1 > alter database enable public thread 2;

Database altered.

PARÂMETROS ESPECÍFICOS DE UMA INSTÂNCIA RAC

Adicione agora todos os parâmetros específicos para ums inatância do tipo RAC no seu pfile.
### simplesmente tire os comentários dos parâmetros: undo_tablespaces e dos cluster_data - são eles: *.cluster_database=true
*.cluster_database_instances=2
TSTDB1.local_listener='LISTENER_TSTDB1' TSTDB2.local_listener='LISTENER_TSTDB2'
TSTDB1.undo_tablespace='UNDOTBS1'
TSTDB2.undo_tablespace='UNDOTBS2'
TSTDB1.instance_number=1
TSTDB2.instance_number=2
TSTDB1.thread=1
TSTDB2.thread=2

Inicialize os Listeners adicionais

Já adicionamos uma entrada no TNS para LOCAL_LISTENER. Vamos inicializar um novo listener. Atualize os seguintes arquivos:


listener.ora
----------------
LISTENER_TSTDB_servidor1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = servidor1)(PORT = 1521)(IP = FIRST))
)
)

SID_LIST_LISTENER_TSTDB_DB01-servidor1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)

Inclua a seguinte entrada para o novo banco de dados. Inicialize os listener


tnsnames.ora
--------------------
TSTDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vip-servidor2)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TSTDB)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)

Compartilhe seu pfile
Copie o pfile para os discos ASM ou crie o spfile nestes discos e inclua essa informação no pfile local.
Crie os diretorios da nova instância no nó 2 e inicialize as duas instâncias.


TSTDB2 > startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size 2144432 bytes
Variable Size 257247056 bytes
Database Buffers 792723456 bytes
Redo Buffers 21626880 bytes
Database mounted.
Database opened.
TSTDB2 >
 
Vamos registrar todos os recursos com o CRS.

$ srvctl add database -d TSTDB -o /u01/app/oracle/product/10.2.0/db_1
$ srvctl add instance -d TSTDB -i TSTDB1 -n servidor1
$ srvctl add instance -d TSTDB -i TSTDB2 -n servidor2
$ srvctl add service -d TSTDB -s TSTDBSVC -r "TSTDB1,TSTDB2"

Confirme se todos os serviços foram registrados:

$ . oraenv
ORACLE_SID = [TSTDB1] ? CRS

$ crs_stat |grep tstdb
NAME=ora.TSTDB.TSTDB1.inst
NAME=ora.TSTDB.TSTDB2.inst
NAME=ora.TSTDB.TSTDBSVC.TSTDB1.srv
NAME=ora.TSTDB.TSTDBSVC.TSTDB2.srv
NAME=ora.TSTDB.TSTDBSVC.cs
NAME=ora.TSTDB.db

Concluímos a configuração. Estes procedimentos também podem ser usados para migrar instâncias para RAC, neste caso, ao invés de cria o banco de dados pelo comando "create database", usaremos o script gerado do controlfile do banco de dados non-RAC (alter database backup controlfile to trace).

Nenhum comentário:

Postar um comentário