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*