Otro punto de vista sobre la Administración de Bases de Datos


martes, 30 de septiembre de 2008

Monitorización de Sesiones y Servicios en un entorno RAC

El comando por defecto para monitorizar los servicios de un entorno RAC es crs_stat -t, en metalink hay un script para formatear el resultado de una forma más vistosa y además se puede añadir una consulta para que muestre también el número de sesiones que hay en cada nodo del RAC y así comprobar si las sesiones se están balanceando de forma adecuada.

El script es muy sencillo y sería algo así:

#!/bin/ksh
# Monitorizacion de sesiones y servicios
#
##############################################
#
clear
# Variables de entorno
ORACLE_BASE=/opt/oracle/u01/app/oracle
ORACLE_HOME=/opt/oracle/u01/app/oracle/product/10.2/db_1
export ORACLE_BASE ORACLE_HOME

export ORACLE_SID=ORCL1

/opt/oracle/u01/app/oracle/product/10.2/db_1/bin/sqlplus -s "/ as sysdba" <<>
select inst_id , count(*) as sessions from gv\$session group by inst_id;
END


/opt/oracle/u01/app/oracle/scripts/crsstat.sh



El script crststat.sh se puede conseguir en Metalink buscando la nota, Note:259301.1


El resultado sería el siguiente:


INST_ID SESSIONS
---------- ----------
1 82
2 79

HA Resource Target State
----------- ------ -----
ora.ORCL.ORCL1.inst ONLINE ONLINE on nodo1
ora.ORCL.ORCL2.inst ONLINE ONLINE on nodo2
ora.ORCL.ORCLS.ORCL1.srv ONLINE ONLINE on nodo1
ora.ORCL.ORCLS.ORCL2.srv ONLINE ONLINE on nodo2
ora.ORCL.ORCLS.cs ONLINE ONLINE on nodo1
ora.ORCL.db ONLINE ONLINE on nodo2
ora.nodo1.ASM1.asm ONLINE ONLINE on nodo1
ora.nodo1.LISTENER_NODO1.lsnr ONLINE ONLINE on nodo1
ora.nodo1.gsd ONLINE ONLINE on nodo1
ora.nodo1.ons ONLINE ONLINE on nodo1
ora.nodo1.vip ONLINE ONLINE on nodo1
ora.nodo2.ASM2.asm ONLINE ONLINE on nodo2
ora.nodo2.LISTENER_NODO2.lsnr ONLINE ONLINE on nodo2
ora.nodo2.gsd ONLINE ONLINE on nodo2
ora.nodo2.ons ONLINE ONLINE on nodo2
ora.nodo2.vip ONLINE ONLINE on nodo2

Subconsulta con varias filas y un operador "like".

A veces en una consulta es necesario comprobar que un campo de una tabla contenga una cadena que queremos obtener de una o varias filas resultado de ejecutar una subconsulta.

Para resolver esta situación se puede usar una consulta de este tipo:

select a.fecha ,a.texto , b.cadena
from tabla_A a , tabla_B b
where upper(a.texto) like '%'||b.cadena||'%'
and b.cadena in (select cadena from tabla_B where id='1001')
and a.fecha>'01/01/08'
order by a.fecha;

Esta consulta muestra el campo texto que contenga las cadenas obtenidas en la subconsulta y que cumplan las condiciones indicadas.

jueves, 11 de septiembre de 2008

Conexiones Oracle a traves de túneles SSH

El problema aparece cuando queremos conectar dos servidores Oracle sobre Linux en dos redes distintas y que no están accesibles desde internet. El único nexo que tenemos es un tercer servidor de gestión que tiene acceso a los dos servidores, pero no hay conexión directa entre los dos servidores de bases de datos.

Una solución para no abrir puertos y no romper las reglas de seguridad es abrir una serie de túneles con ssh para establecer una conexión segura entre los dos servidores.

El esquema siguiente nos muestra la arquitectura que tenemos:

En este caso es necesario abrir dos túneles, uno desde el Servidor B al Servidor de Gestión y otro desde el Servidor de Gestión al Servidor A. Con esto hemos establecido una conexión directa y segura entre el Servidor A y el Servidor B.

Los pasos para crear los túneles son los siguientes:

1.- Crear tunel del Servidor B al de Gestión.

Para crear este tunel hay que ejecutar el siguiente comando conectado al Servidor B:

ssh -R 1521:localhost:1590 usuario@servidor_de_gestion

2.- Crear tunel entre el Servidor de Gestión y el Servidor A.

Conectado en el Servidor de Gestión, se crea con:

ssh -R 1521:localhost:1590 usuario@servidor_a

3.- Configuracion del fichero TNSNAMES.ora

La configuración del fichero TNSNAMES.ora en el Servidor A debe ser como esta:

ORCLB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)
(HOST = localhost)
(Port = 1521)
)
(CONNECT_DATA =
(SERVICE_NAME = ORCLB)
)
)

4.- Crear database link.

Por último, se puede crear un database link para acceder desde la base de datos del Servidor A a la base de datos del Servidor B.

create public database link ORCLB
connect to scott identified by tiger
using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(Port = 1521))(CONNECT_DATA = (SERVICE_NAME = ORCLB)))';


Es necesario poner la cadena de conexión completa puesto que si se pone el nombre del servicio definido en el fichero TNSNAMES.ora da un error:

TNS-12154 TNS:could not resolve service name.

Con esto ya se puede acceder desde el Servidor A al B utilizando un database link. El problema es que debemos mantener las conexiones ssh abiertas mientras queramos usar el database link, es decir, solo estará disponible mientras estén abietos los túneles definidos.

Links.
Túneles SSH (Gracias a Tolgalen)
Secure Remote Logins

.

jueves, 4 de septiembre de 2008

Configurar componentes de la base de datos

En una instalación con Oracle Standard Edition 10.2.0.4., cuando se creo la base de datos no se configuró ninguno de los componentes estandar que se pueden instalar. Estos componentes son:
- Oracle JVM
- Oracle XML DB
- Oracle Intermedia

Oracle recomienda que siempre se instalen estos componentes en la base de datos.

Para el desarrollo de una nueva aplicacion que usa geoposicionamiento ha sido necesario instalar Oracle Locator. El Oracle Locator se instala automáticamente al instalar el Oracle Intermedia, pero para instalar Intermedia es necesario tener instalado previamente Oracle JVM y XML DB.

Para instalar estos componentes se puede hacer desde la herramienta gráfica dbca o bien hacerlo manualmente siguiendo estos pasos:

1.- Instalación de Oracle JVM.

Para comprobar si Oracle JVM esta instalado se debe ejecutar la siguiente consulta:

select comp_id,comp_name,status,version from dba_registry;

Esta consulta muestra los siguientes componentes:

COMP_ID COMP_NAME STATUS VERSION
------- -------------------------------- ------ ----------
OWM Oracle Workspace Manager VALID 10.2.0.4.3
EM Oracle Enterprise Manager VALID 10.2.0.4.0
CATALOG Oracle Database Catalog Views VALID 10.2.0.4.0
CATPROC Oracle Database Packages and Types VALID 10.2.0.4.0
RAC Oracle Real Application Clusters VALID 10.2.0.4.0

No aparece ninguna referencia a JAVAVM.

Para instalar el componente es necesario ejecutar:

spool full_jvminst.log;
set echo on
connect / as sysdba
startup mount
alter system set "_system_trig_enabled" = false scope=memory;
alter database open;
select obj#, name from obj$
where type#=28 or type#=29 or type#=30 or namespace=32;
@?/javavm/install/initjvm.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/initxml.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/xdk/admin/xmlja.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/rdbms/admin/catjava.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
@?/rdbms/admin/catexf.sql
select count(*), object_type from all_objects
where object_type like '%JAVA%' group by object_type;
shutdown immediate
set echo off
spool off
exit


Para compilar los objetos que hayan quedado inválidos:

@?/rdbms/admin/utlrp.sql

A continuación se puede comprobar los objetos java creados:

select owner, count(*) from all_objects
where object_type like '%JAVA%'
group by owner;

2.- Instalación de Oracle XML DB.

Conectado como sysdba hay que ejecutar:

$ORACLE_HOME/rdbms/admin/catqm.sql

es necesario pasar tres parámetros:

- password para el usuario XDB
- tablespace por defecto del usuario XDB
- tablespace temporal del usuario XDB

por ejemplo:

$ORACLE_HOME/rdbms/admin/catqm.sql XDB SYSAUX TEMP

Para comprobar que la instalación ha sido correcta:

select comp_name, status, version from DBA_REGISTRY
where comp_name= 'Oracle XML Database' ;

3.- Instalación de Oracle Intermedia.

Conectado como sysdba, se ejecuta:

@?/ord/admin/ordinst.sql SYSAUX SYSAUX

Para crear el usuario MDSYS y asignar los permisos adecuados.

A continuación se crean los paquetes y tipos:

@?/ord/im/admin/iminst.sql

4.- Comprobación de componentes instalados en la base de datos.

Para comprobar que todos los componentes están instalados correctamente:

select comp_id,comp_name,status,version from dba_registry;

COMP_ID COMP_NAME STATUS VERSION
-------------- --------------------------- ------ ------------
ORDIM Oracle interMedia VALID 10.2.0.4.
0XDB Oracle XML Database VALID 10.2.0.4.0
EXF Oracle Expression Filter VALID 10.2.0.4.0
OWM Oracle Workspace Manager VALID 10.2.0.4.3
EM Oracle Enterprise Manager VALID 10.2.0.4.0
CATALOG Oracle Database Catalog Views VALID 10.2.0.4.0
CATPROC Oracle Database Packages and Types VALID 10.2.0.4.0
RAC Oracle Real Application Clusters VALID 10.2.0.4.0
JAVAVM JServer JAVA Virtual Machine VALID 10.2.0.4.0
XML Oracle XDK VALID 10.2.0.4.0
CATJAVA Oracle Database Java Packages VALID 10.2.0.4.0


Al estar instalado el Oracle Intermedia ya se pueden usar los paquetes de Oracle Locator.

Notas de Metalink.

Note:472937.1 Information On Installed Components and Schemas
Note:276554.1 How to Reload the JVM in 10.1.0.X and 10.2.0.X
Note:243554.1 How to Deinstall and Reinstall XML Database (XDB)

Oracle® interMedia User's Guide - Installing and Upgrading Oracle interMedia