1. Documentación en Tahiti -> Masters Book List -> Net Services Administrator’s Guide -> 9 Configuring and Administering Oracle Net Listener
Documentación en Tahiti -> Masters Book List -> Administrator’s Guide -> 2 Creating and Configuring an Oracle Database ->
Creating a Database with the CREATE DATABASE Statement
2. En este objetivo, basicamente no están pidiendo que configuramos el LISTENER para que redirija peticiones a varias BD distintas. Para hacer la prueba vamos a crear una BD manualmente (que también es interesante que hagamos este ejercicio) y veremos como el LISTENER que hemos creado puede atender peticiones para las dos BBDD (OCM y OCMTEST).
3. Creamos la BD OCMTEST.
# Definimos las variables de sesión export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export ORACLE_SID=OCMTEST # Creamos el archivo de configuración a partir del ejemplo de la documentación # · http://docs.oracle.com/cd/E11882_01/server.112/e25494/create005.htm#CIAGFFIE vi $ORACLE_HOME/dbs/initOCMTEST.ora # Introducimos estas lineas db_name='OCMTEST' memory_target=300M processes = 150 audit_file_dest='/u01/app/oracle/admin/OCMTEST/adump' audit_trail ='db' db_block_size=8192 db_domain='' db_recovery_file_dest='/u01/app/oracle/flash_recovery_area' db_recovery_file_dest_size=2G diagnostic_dest='/u01/app/oracle' dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)' open_cursors=300 remote_login_passwordfile='EXCLUSIVE' undo_tablespace='UNDOTBS1' control_files = '/u01/app/oracle/oradata/OCMTEST/control01.ctl','/u01/app/oracle/flash_recovery_area/OCMTEST/control02.ctl' compatible ='11.2.0'
-- Nos conectamos a la Instancia con SQL*Plus "sqlplus / as sysdba" para crear el SPFILE CREATE SPFILE FROM PFILE;
# Creamos los directorios que hemos configurado en el SPFILE y otros que necesitaremos más adelante mkdir -p /u01/app/oracle/admin/OCMTEST/adump mkdir -p /u01/app/oracle/oradata/OCMTEST mkdir -p /u02/app/oracle/oradata/OCMTEST mkdir -p /u01/app/oracle/flash_recovery_area/OCMTEST/ # Levantamos la instancia en modo NOMOUNT # Este comando nos va a dar un error (ORA-845) ya que tenemos que aumentar el FS temporal (tmpfs) # Para ampliarlo temporalmente (para este ejercicio) debemos ejecutar como root el siguiente comando: mount -o remount,size=1G /dev/shm
-- Ahora ya podemos levantar la instancia
STARTUP NOMOUNT
-- Creamos la BD
-- Para ello, adaptamos el ejemplo de la documentación
-- Modificamos Passwords, Rutas, Juego de Caracteres y TBS de UNDO
CREATE DATABASE OCMTEST
USER SYS IDENTIFIED BY *************
USER SYSTEM IDENTIFIED BY *************
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/OCMTEST/redo101.log','/u02/app/oracle/oradata/OCMTEST/redo102.log') SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/app/oracle/oradata/OCMTEST/redo201.log','/u02/app/oracle/oradata/OCMTEST/redo202.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/app/oracle/oradata/OCMTEST/redo301.log','/u02/app/oracle/oradata/OCMTEST/redo302.log') SIZE 100M BLOCKSIZE 512
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/OCMTEST/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/OCMTEST/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/OCMTEST/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/OCMTEST/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/OCMTEST/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
-- Creamos el Diccionario de Datos
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
CONNECT SYSTEM
@?/sqlplus/admin/pupbld.sql
-- Estamos haciendo una instalación mínima de Oracle. Si comparamos con la instalación con DBCA, se instalan entre otros estos paquetes:
-- Tenemos una descripción de que hace cada uno en la documentación (http://docs.oracle.com/cd/E11882_01/server.112/e25513/scripts.htm#REFRN005)
-- @/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/catblock.sql;
-- @/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/catoctk.sql;
-- @/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/admin/owminst.plb;
-- connect "SYSTEM"/"systemPassword"
-- @/u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin/help/hlpbld.sql helpus.sql;
-- Activaremos los modos ARCHIVELOG y FLASHBACK
CONN / AS SYSDBA
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG
ALTER DATABASE FLASHBACK ON
ALTER DATABASE OPEN
4. Sin hacer ninguna modificación, el proceso PMON de la nueva BD (OCMTEST) registrará los servicios dinámicamente en el LISTENER que ya tenemos. Esto se debe a que tenemos el LISTENER en el puerto por defecto en el interfaz asociado al hostname de la máquina. Si cambiaramos algunos de estos parámetros, tendríamos que configurar una entrada en el fichero tnsnames.ora que apunte a ese LISTENER concreto y añadir la entrada al parámetro LOCAL_LISTENER de la instancia OCMTEST.
# Comprobamos que tras un minutos al haber levantado la instancia OCMTEST se registra en el LISTENER
lsnrctl services
# Veremos como el servicio OCMTEST tiene el status READY.
# Podemos añadir el servicio de forma estática en la configuración del listener.ora (pero no es necesario)
# Para ello modificamos la entrada SID_LIST_LISTENER del fichero $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = OCM)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = OCM)
)
(SID_DESC =
(GLOBAL_DBNAME = OCMTEST)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = OCMTEST)
)
)
# Recargamos la configuración del LISTENER
lsnrctl reload
5. Ahora, para completa la configuración de red, es buena práctica añadir la entrada del servicio OCMTEST en el fichero tnsnames.ora.
# Añadimos las siguientes lineas al fichero $ORACLE_HOME/network/admin/tnsnames.ora
OCMTEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocm.dbajunior.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = OCMTEST)
)
)
# Probamos la configuración
sqlplus system@OCMTEST
6. Ahora deshacemos todos los cambios y borramos la BD.
# Borramos la entrada OCMTEST del fichero tnsnames.ora
OCMTEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ocm.dbajunior.com)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = OCMTEST)
)
)
# Editamos la entrada de SID_LIST_LISTENER del fichero listener.ora de la siguiente forma
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = OCM)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = OCM)
)
)
# Recargamos la configuración del LISTENER
lsnrctl reload
# Borramos la BD "con cuidado" ;)
# Comprobamos el ORACLE_SID = OCMTEST
echo $ORACLE_SID
# Entramos a la instancia con SQL*Plus
sqlplus / as sysdba
-- Procedemos a borrar la BD comprobando que es la que queremos borrar (OCMTEST) en la máquina OCM SELECT INSTANCE_NAME, HOST_NAME FROM V$INSTANCE; -- Tenemos que poner la BD en modo MOUNT, EXCLUSIVE y RESTRIC (casi nada) STARTUP MOUNT EXCLUSIVE RESTRICT FORCE -- Ejecutamos el DROP DROP DATABASE;
# Por último, borramos los directorios y archivos innecesarios rm -Rf /u01/app/oracle/admin/OCMTEST rm -Rf /u01/app/oracle/oradata/OCMTEST rm -Rf /u02/app/oracle/oradata/OCMTEST rm -Rf /u01/app/oracle/flash_recovery_area/OCMTEST rm $ORACLE_HOME/dbs/*OCMTEST*