RAC y como Crear Manualmente Una Base de Datos Oracle 11gR2
RAC y como Crear Manualmente Una Base de Datos Oracle 11gR2: Una de mis entradas mas populares al dia de hoy, ha sido la de como crear una base de datos en 11g. Ahora lo que vamos a hacer es como crear una base de datos manualmente en un ambiente RAC en 11g
Verificar Variable de Ambiente
Aqui tenemos que decidir el nombre que va a tener nuestra instancia y base de datos, aqui un ejemplo utilizando Korn shell, si utilizas C Shell, usa el comando setenv
Crear el archivo de parametros
Aqui esta un ejemplo de un archivo init para que arranques, este no es para nada uno a tener en produccion ya que ese tiene que ser revisado para las necesidades de la instancia, pero para nuestras pruebas, con este es mas que suficiente.Este archivo lo guarde en la siguiente ruta /mount/dba01/oracle/TESTDB/pfile/initTESTDB1.ora, tu lo puedes guardar en la ruta que a ti te sirva y lo puedas tener a la mano.
Conectarnos a la base de datos y crear el archivo de parametros binario a partir del archivo initTESTDB.ora
Nos vamos a conectar a la base de datos autenticandonos con el sistema operativo y una vez conectados vamos a crear el archivo binarios (spfile).
Crear Nuestra Base de Datos
Una vez que creamos nuestro archivo binario de parametros, vamos a levantar la base de datos en modo nomount
Ahora vamos a correr el siguiente SQL para crear nuestra base de datos.Tomando en cuenta que en ASM ya existen los siguientes directorios:
Correr scripts para crear las vistas del Diccionario de Datos
Una vez que la base de datos se haya creado, vamos a correr los siquientes cuatro scripts para crear las vistas y procedimientos del diccionario de datos, este es un paso obligatorio asi que no te lo saltes, catalog.sql,catproc.sql y catclust.sql deben de correr con el usuario sys y los encuentras en $ORACLE_HOME/rdbms/admin, el script pupbld.sql debe de correr con el usuario system y lo encuentras en el directorio $ORACLE_HOME/sqlplus/admin. Aqui un ejemplo de como correrlos:
Para asegurarme que los usuarios de sys y system usen a TEMP como su tablespace temporal , corro el siguiente comando
Hasta este momento, si seguiste mi previa entrada de como crear una base de Datos en Linux, todo es similar (hasta parte del mismo texto :) ), pero aqui es en donde empieza a cambiar la situacion.
Crear segundo hilo de Online Redo Logs y segundo Tablespace de Undo
En RAC, cada instancia necesita tener su propio set de online Redo logs y su propio tablespace de undo, por eso necesitamos crear para la segunda instancia este segundo set, y asi sucesivamente para cada instancia que vayas a tener en tu configuracion.
Archivo de Parametros en RAC
Otra de las cosas que cambia con respecto a una Base de Datos que no esta en RAC contra una que si esta en arquitectura RAC, es que hay ciertos parametros que es obligatorio que en todas las instancias sean iguales,en 11gR2 son los siguientes
Aqui un ejemplo del init que construi para este ejercicio, llamado /mount/dba01/oracle/TESTDB/pfile/pfileTESTDB_RAC.ora
Una de las cosas que te permite la arquitectura de RAC, es que cada instancia tenga su propio archivo de parametros.
Pero en mi caso, prefiero tener uno compartido, esto lo hago removiendo cualquier archivo de arranque que exista en $ORACLE_HOME/dbs/spfileTESTBn.ora (donde n es el numero de instancia)
Algo que debes de tener muy claro es que como vamos a tener un archivo
de parametros compartido, la rutas fijas, (Que no pertenecen a ASM)
tienen que ser iguales en todos tus nodos, como por ejemplo audit_file_dest.
Ya que removi cualquier archivo de parámetros que tenia, para cada instancia en su servidor en $ORACLE_HOME/dbs, voy a crear un archivo initTESTDBn.ora (n para el numero de instancia) que apunte a mi archivo de arranque binario compartido
Ahora voy a bajar la instancia TESTDB1 para despues subirla con el archivo de parametros en RAC
Ya que levantamos la instancia con los parametros necesarios de RAC, vamos a habilitar el segundo hilo de los online Redo Log
Y ahora volvemos a bajar la instancia TESTDB1
Añadir nuestra Base de Datos como Recurso al Clusterware
Si te has fijado, todo lo hemos trabajado en una sola instancia,para poder manejarlo con el Server Manager, vamos a utilizar una utileria llamada srvctl. En 11gR2 , se define una base de datos como un recurso en Oracle Clusterware, y cuando creamos una base de datos manual, esto se hace con la utileria srvctl.
Conclusion
Espero que estos pasos te sirvan el dia que no quieras utilizar el dbca para crear tu base de datos, esto te permite mas flexibilidad para la creacion de esta.
Verificar Variable de Ambiente
Aqui tenemos que decidir el nombre que va a tener nuestra instancia y base de datos, aqui un ejemplo utilizando Korn shell, si utilizas C Shell, usa el comando setenv
- variable ORACLE_SID
export ORACLE_SID=TESTDB1 - variable DB_NAME
export DB_NAME=TESTDB - variable ORACLE_BASE
export ORACLE_BASE='/mount/oracle' - variable ORACLE_HOME
export ORACLE_HOME='/mount/oracle/product/11.2.0.2v3' - variable PATH
export PATH=$ORACLE_HOME/bin:$PATH
Crear el archivo de parametros
Aqui esta un ejemplo de un archivo init para que arranques, este no es para nada uno a tener en produccion ya que ese tiene que ser revisado para las necesidades de la instancia, pero para nuestras pruebas, con este es mas que suficiente.Este archivo lo guarde en la siguiente ruta /mount/dba01/oracle/TESTDB/pfile/initTESTDB1.ora, tu lo puedes guardar en la ruta que a ti te sirva y lo puedas tener a la mano.
*.audit_file_dest ='/mount/oracle/dump01/TESTDB/adump' *.audit_trail ='db' *.compatible ='11.2.0' *.control_files='+ASM_DATA/TESTDB/CONTROLFILE/control01.ctl','+ASM_DATA/TESTDB/CONTROLFILE/control02.ctl' *.db_block_size =8192 *.db_name ='TESTDB' *.db_recovery_file_dest='+FRA_DATA' *.db_recovery_file_dest_size =2G *.diagnostic_dest ='/mount/oracle/dump01' *.cluster_database=FALSE *.log_archive_dest_1='LOCATION=+ASM_DATA/TESTDB/ARCHIVELOG' *.log_archive_format='%t_%s_%r.dbf' *.memory_target =1G *.open_cursors =300 *.processes =150 *.remote_listener='orclespdev1-scan.oracleenespanol.blogspot.com:1826' *.remote_login_passwordfile ='EXCLUSIVE' TESTDB1.instance_name = TESTDB1 TESTDB1.instance_number=1 TESTDB1.undo_tablespace='UNDOTBS1'
Conectarnos a la base de datos y crear el archivo de parametros binario a partir del archivo initTESTDB.ora
Nos vamos a conectar a la base de datos autenticandonos con el sistema operativo y una vez conectados vamos a crear el archivo binarios (spfile).
$ sqlplus /nolog SQL> CONNECT / AS SYSDBA SQL> CREATE SPFILE FROM PFILE = '/mount/dba01/oracle/TESTDB/pfile/initTESTDB1.ora';
Crear Nuestra Base de Datos
Una vez que creamos nuestro archivo binario de parametros, vamos a levantar la base de datos en modo nomount
SQL> startup nomount;
Ahora vamos a correr el siguiente SQL para crear nuestra base de datos.Tomando en cuenta que en ASM ya existen los siguientes directorios:
ASMCMD> pwd +ASM_DATA/TESTDB ASMCMD> ls ARCHIVELOG/ CONTROLFILE/ DATAFILE/ ONLINELOG/ PARAMETERFILE/ TEMPFILE/
CREATE database TESTDB USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password MAXINSTANCES 32 MAXLOGHISTORY 10000 MAXLOGMEMBERS 5 MAXDATAFILES 2024 MAXLOGFILES 64 ARCHIVELOG LOGFILE GROUP 1 ( '+ASM_DATA/TESTDB/ONLINELOG/redo01a.log', '+ASM_DATA/TESTDB/ONLINELOG/redo01b.log' ) SIZE 100M, GROUP 2 ( '+ASM_DATA/TESTDB/ONLINELOG/redo02a.log', '+ASM_DATA/TESTDB/ONLINELOG/redo02b.log' ) SIZE 100M, GROUP 3 ( '+ASM_DATA/TESTDB/ONLINELOG/redo03a.log', '+ASM_DATA/TESTDB/ONLINELOG/redo03b.log' ) SIZE 100M CHARACTER SET UTF8 NATIONAL CHARACTER SET AL16UTF16 DATAFILE '+ASM_DATA/TESTDB/DATAFILE/system01.dbf' size 500M autoextend on next 100M maxsize 2000M extent management local SYSAUX datafile '+ASM_DATA/TESTDB/DATAFILE/sysaux01.dbf' size 100M autoextend on next 100M maxsize 2000M UNDO tablespace UNDOTBS1 datafile '+ASM_DATA/TESTDB/DATAFILE/undotbs1_01.dbf' size 500M autoextend on next 100M maxsize 1000M DEFAULT temporary tablespace TEMP tempfile '+ASM_DATA/TESTDB/TEMPFILE/temp01.dbf' size 100M autoextend on next 100M maxsize 1000M;
Correr scripts para crear las vistas del Diccionario de Datos
Una vez que la base de datos se haya creado, vamos a correr los siquientes cuatro scripts para crear las vistas y procedimientos del diccionario de datos, este es un paso obligatorio asi que no te lo saltes, catalog.sql,catproc.sql y catclust.sql deben de correr con el usuario sys y los encuentras en $ORACLE_HOME/rdbms/admin, el script pupbld.sql debe de correr con el usuario system y lo encuentras en el directorio $ORACLE_HOME/sqlplus/admin. Aqui un ejemplo de como correrlos:
TESTDB1 >CONNECT SYS AS SYSDBA spool catalog.log @/mount/oracle/product/11.2.0.2v3/rdbms/admin/catalog.sql spool off spool catproc.log @/mount/oracle/product/11.2.0.2v3/rdbms/admin/catproc.sql spool off spool catclust.log @/mount/oracle/product/11.2.0.2v3/rdbms/admin/catclust.sql spool off TESTDB1 >CONNECT SYSTEM Enter password: spool pupbld.log @/mount/oracle/product/11.2.0.2v3/sqlplus/admin/pupbld.sql spool off
Para asegurarme que los usuarios de sys y system usen a TEMP como su tablespace temporal , corro el siguiente comando
TESTDB1 >alter user sys temporary tablespace TEMP; User altered. TESTDB1 >alter user sys temporary tablespace TEMP; User altered.
Hasta este momento, si seguiste mi previa entrada de como crear una base de Datos en Linux, todo es similar (hasta parte del mismo texto :) ), pero aqui es en donde empieza a cambiar la situacion.
Crear segundo hilo de Online Redo Logs y segundo Tablespace de Undo
En RAC, cada instancia necesita tener su propio set de online Redo logs y su propio tablespace de undo, por eso necesitamos crear para la segunda instancia este segundo set, y asi sucesivamente para cada instancia que vayas a tener en tu configuracion.
TESTDB1 > CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 2 '+ASM_DATA/TESTDB/DATAFILE/undotbs2_01.dbf' size 100M autoextend on next 100M maxsize 1000M 3 ONLINE 4 RETENTION NOGUARANTEE 5 BLOCKSIZE 8K 6 FLASHBACK ON; Tablespace created. TESTDB1 > ALTER DATABASE ADD LOGFILE THREAD 2 2 GROUP 4 ( 3 '+ASM_DATA/TESTDB/ONLINELOG/redo04a.log', 4 '+ASM_DATA/TESTDB/ONLINELOG/redo04b.log' 5 ) SIZE 100M; Database altered. TESTDB1 > ALTER DATABASE ADD LOGFILE THREAD 2 2 GROUP 5 ( 3 '+ASM_DATA/TESTDB/ONLINELOG/redo05a.log', 4 '+ASM_DATA/TESTDB/ONLINELOG/redo05b.log' 5 ) SIZE 100M; Database altered. TESTDB1 > ALTER DATABASE ADD LOGFILE THREAD 2 2 GROUP 6 ( 3 '+ASM_DATA/TESTDB/ONLINELOG/redo06a.log', 4 '+ASM_DATA/TESTDB/ONLINELOG/redo06b.log' 5 ) SIZE 100M; Database altered.
Archivo de Parametros en RAC
Otra de las cosas que cambia con respecto a una Base de Datos que no esta en RAC contra una que si esta en arquitectura RAC, es que hay ciertos parametros que es obligatorio que en todas las instancias sean iguales,en 11gR2 son los siguientes
COMPATIBLE
CLUSTER_DATABASE
CLUSTER_DATABASE_INSTANCES
CONTROL_FILES
DB_BLOCK_SIZE
DB_DOMAIN
DB_FILES
DB_NAME
DB_RECOVERY_FILE_DEST
DB_RECOVERY_FILE_DEST_SIZE
DB_UNIQUE_NAME
INSTANCE_TYPE (RDBMS or ASM)
PARALLEL_EXECUTION_MESSAGE_SIZE
REMOTE_LOGIN_PASSWORDFILE
UNDO_MANAGEMENT
Aqui un ejemplo del init que construi para este ejercicio, llamado /mount/dba01/oracle/TESTDB/pfile/pfileTESTDB_RAC.ora
*.audit_file_dest ='/mount/oracle/dump01/TESTDB/adump' *.audit_trail ='db' *.compatible ='11.2.0' *.control_files='+ASM_DATA/TESTDB/CONTROLFILE/control01.ctl','+ASM_DATA/TESTDB/CONTROLFILE/control02.ctl' *.db_block_size =8192 *.db_name ='TESTDB' *.db_recovery_file_dest='+FRA_DATA' *.db_recovery_file_dest_size =2G *.diagnostic_dest ='/mount/oracle/dump01' *.cluster_database=TRUE *.log_archive_dest_1='LOCATION=+ASM_DATA/TESTDB/ARCHIVELOG' *.log_archive_format='%t_%s_%r.dbf' *.memory_target =1G *.open_cursors =300 *.processes =150 *.remote_listener='orclespdev1-scan.oracleenespanol.blogspot.com:1826' *.remote_login_passwordfile ='EXCLUSIVE' TESTDB1.instance_name = TESTDB1 TESTDB2.instance_name = TESTDB2 TESTDB1.instance_number=1 TESTDB2.instance_number=2 TESTDB1.undo_tablespace='UNDOTBS1' TESTDB2.undo_tablespace='UNDOTBS2' TESTDB1.thread=1 TESTDB2.thread=2
Una de las cosas que te permite la arquitectura de RAC, es que cada instancia tenga su propio archivo de parametros.
Pero en mi caso, prefiero tener uno compartido, esto lo hago removiendo cualquier archivo de arranque que exista en $ORACLE_HOME/dbs/spfileTESTBn.ora (donde n es el numero de instancia)
Algo que debes de tener muy claro es que como vamos a tener un archivo
de parametros compartido, la rutas fijas, (Que no pertenecen a ASM)
tienen que ser iguales en todos tus nodos, como por ejemplo audit_file_dest.
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3/dbs oracle $ rm ./*TESTDB*.ora
Ya que removi cualquier archivo de parámetros que tenia, para cada instancia en su servidor en $ORACLE_HOME/dbs, voy a crear un archivo initTESTDBn.ora (n para el numero de instancia) que apunte a mi archivo de arranque binario compartido
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/oracle/product/11.2.0.2v3/dbs oracle $ cat initTESTDB1.ora SPFILE='+ASM_DATA/TESTDB/PARAMETERFILE/spfileTESTDB.ora'
Ahora voy a bajar la instancia TESTDB1 para despues subirla con el archivo de parametros en RAC
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/TESTDB/pfile oracle $ sqlplus SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 15 10:00:53 2012 Copyright (c) 1982, 2010, Oracle. All rights reserved. Enter user-name: /as sysdba TESTDB1 >shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. TESTDB1 > SPFILE='+ASM_DATA/TESTDB/PARAMETERFILE/spfileTESTDB.ora' FROM PFILE = '/mount/dba01/oracle/TESTDB/pfile/pfileTESTDB_RAC.ora'; File created. TESTDB1 >startup ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2233336 bytes Variable Size 675286024 bytes Database Buffers 369098752 bytes Redo Buffers 22319104 bytes Database mounted. Database opened. TESTDB1 >
Ya que levantamos la instancia con los parametros necesarios de RAC, vamos a habilitar el segundo hilo de los online Redo Log
TESTDB1 >ALTER DATABASE ENABLE PUBLIC THREAD 2; Database altered.
Y ahora volvemos a bajar la instancia TESTDB1
TESTDB1 >shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.
Añadir nuestra Base de Datos como Recurso al Clusterware
Si te has fijado, todo lo hemos trabajado en una sola instancia,para poder manejarlo con el Server Manager, vamos a utilizar una utileria llamada srvctl. En 11gR2 , se define una base de datos como un recurso en Oracle Clusterware, y cuando creamos una base de datos manual, esto se hace con la utileria srvctl.
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/admin oracle $ srvctl add database -d TESTDB -o "/mount/oracle/product/11.2.0.2v3" oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/admin oracle $ srvctl add instance -d TESTDB -i TESTDB1 -n servidor1.oracleenespanol.blogspot.com oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/admin oracle $ srvctl add instance -d TESTDB -i TESTDB2 -n servidor2.oracleenespanol.blogspot.com
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/admin oracle $ srvctl start database -d TESTDB
oracle@servidor1.oracleenespanol.blogspot.com [TESTDB1] /mount/dba01/oracle/admin oracle $ srvctl status database -d TESTDB Instance TESTDB1 is running on node servidor1 Instance TESTDB2 is running on node servidor2
Conclusion
Espero que estos pasos te sirvan el dia que no quieras utilizar el dbca para crear tu base de datos, esto te permite mas flexibilidad para la creacion de esta.
Comentarios
Publicar un comentario