viernes, 3 de abril de 2009

¿Qué es un Tnsnames?

También llamado método LOCAL: indica que la resolución se hace a través de otro archivo de configuración llamado tnsnames.ora, residente en la misma ubicación.

Servicios de conexión (TNSNAMES.ORA)

El nombre de un servicio es aquel que engloba las características necesarias para que una conexión entre un cliente y un servidor puedan llevarse a cabo. Los nombres de estos servicios se van a definir dentro del archivo de configuración TNSNAMES.ORA, los cuales van a servir como string de conexión para los usuarios que deseen acceder a una base de datos determinada.
Para definir un servicio necesitaremos saber:
  • La maquina de destino de la conexión o una dirección IP que la identifique. En esta maquina esta ubicada la Base de Datos.
  • El protocolo que se va a utilizar para establecer la conexión con el servidor.
  • La dirección o el puerto por donde esta escuchando el listener del servidor.
  • El identificador de la instancia de la base de datos sobre la cual vamos a realizar las futuras
    operaciones.

    Ejemplo de un archivo TNSNAMES.ORA :

    Bd_desa.world =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS =
    (PROTOCOL = TCP)
    (HOST = maq_desa)
    (Port = 1521)
    )
    )
    (CONNECT_DATA = (SID = DESA)
    )
    )

Existe un servicio de conexión llamado Bd_desa, el cual va a servir al usuario como string de
conexión para comunicarse, a la base de datos DESA, ubicada en la maquina maq_desa,
siempre y cuando envíe sus peticiones de conexión utilizando un protocolo de tipo TCP y que
dichas peticiones sean enviadas al puerto 1521 de la maquina maq_desa, que es allí donde
estará escuchando el listener encargado de resolver dichas solicitudes.

¿Qué es un Listener?

TNS Listener es un proceso servidor que provee la conectividad de red con la base de datos Oracle. El listener está configurado para escuchar la conexión en un puerto específico en el servidor de base de datos. Cuando se pide una conexión a la base de datos, el listener devuelve la información relativa a la conexión. La información de una conexión para una instancia de una base de datos provee el nombre de usuario, la contraseña y el SID de la base de datos. Si estos datos no son correctos se devolverá un mensaje de error.

  • Por defecto el puerto del listener es el 1521
  • El listener no limita el número de conexiones a la base de datos.

Toda la información del listener la contiene un archivo denominado listener.ora ( $ORACLE_HOME/network/admin. )

El comando para gestionar el listener es lsnrctl. Mediante este comando podemos:

  • Parar el listener.
  • Ver el estado del listener.
  • Arrancar el listener.
  • Rearrancar el listener.
SEGURIDAD LISTENER ORACLE 10G (securing the listener)

El principal paso para realizar la seguridad en el listener es ponerle una contraseña password. El primer método para poner una contraseña al listener es editando el fichero listener.ora y escribiendo la siguiente línea:

PASSWORDS_LISTENER = orapass

Cuando guardemos el fichero con los cambios realizamos un reload del listener

lsnrctl> reload

Nota: El comando para entrar en el listener es lsnrctl ( $ORACLE_HOME/bin )

El segundo método para poder cambiar la contraseña al listener es el siguiente:

lsnrctl> change_password

Este comando te pedirá la clave antigua y la nueva clave.Si es la primera vez que ejecutas este comando la contraseña antigua ( old password ) habrá que dejarla en blanco.

El comando SET y SAVE CONFIG permite guardar esos cambios en el listener porque ahora el listener está gobernado por un password.

lsnrctl > set password
lsnrctl > save config

La información antigua se guardará enlistener.bck y listener.ora se actualizará con los nuevos datos

UNA VEZ QUE EL PASSWORD ESTÉ CREADO ESTE SERÁ REQUERIDO PARA CUALQUIER TAREA ADMINISTRATIVA( ej: parar el listener ).

Área Global del Sistema, SGA

Sirve para facilitar la transferencia de información entre usuarios y también almacena la información estructural de la BD más frecuentemente requerida.

La SGA se divide en varias partes:

Buffers de BD, Database Buffer Cache

Es el caché que almacena los bloques de datos leidos de los segmentos de datos de la BD, tales como tablas, índices y clusters. Los bloques modificados se llamas bloques sucios. El tamaño de buffer caché se fija por el parámetro DB_BLOCK_BUFFERS del fichero init.ora.
Como el tamaño del buffer suele ser pequeño para almacenar todos los bloques de datos leidos, su gestión se hace mediante el algoritmo LRU.


Buffer Redo Log

Los registros Redo describen los cámbios realizados en la BD y son escritos en los ficheros redo log para que puedan ser utilizados en las operaciones de recuperación hacia adelante, roll-forward, durante las recuperaciones de la BD. Pero antes de ser escritos en los ficheros redo log son escritos en un caché de la SGA llamado redo log buffer. El servidor escribe periódicamente los registros redo log en los ficheros redo log.
El tamaño del buffer redo log se fija por el parámetro LOG_BUFFER.


Área de SQL Compartido, Shared SQL Pool

En esta zona se encuentran las sentencias SQL que han sido analizadas. El analisis sintáctico de las sentencias SQL lleva su tiempo y Oracle mantiene las estructuras asociadas a cada sentencia SQL analizada durante el tiempo que pueda para ver si puede reutilizarlas. Antes de analizar una sentencia SQL, Oracle mira a ver si encuentra otra sentencia exactamente igual en la zona de SQL compartido. Si es así, no la analiza y pasa directamente a ejecutar la que mantinene en memoria. De esta manera se premia la uniformidad en la programación de las aplicaciones. La igualdad se entiende que es lexicografica, espacios en blanco y variables incluidas. El contenido de la zona de SQL compartido es:
  • Plan de ejecución de la sentencia SQL.
  • Texto de la sentencia.
  • Lista de objetos referenciados.
Los pasos de procesamiento de cada petición de análisis de una sentencia SQL son:

  • Comprobar si la sentencia se encuentra en el área compartida.
  • Comprobar si los objetos referenciados son los mismos.
  • Comprobar si el usuario tiene acceso a los objetos referenciados.

Si no, la sentencia es nueva, se analiza y los datos de análisis se almacenan en la zona de SQL compartida.
También se almacena en la zona de SQL compartido el caché del diccionario. La información sobre los objetos de la BD se encuentra almacenada en las tablas del diccionario. Cuando esta información se necesita, se leen las tablas del diccionario y su información se guarda en el caché del diccionario de la SGA.
Este caché también se administra mediante el algoritmo LRU. El tamaño del caché está gestionado internamente por el servidor, pero es parte del shared pool, cuyo manaño viene determinado por el parámetro SHARED_POOL_SIZE.

Area Global del Programa - PGA

Un área global del programa (PGA) es una región de memoria que contiene datos y la información de control para un proceso del servidor. Es una memoria no compartida creada por Oracle cuando se comienza un proceso del servidor. El acceso a él es exclusivo a ese proceso del servidor y es leído y escrito solamente por el código de Oracle que actúa a nombre de él.

Se compone de:

  • Área SQL privada.
  • Memoria de Sesión.

Área SQL privada.

Es el área donde se guarda información de una instrucción SQL ejecutada, cada sesión tiene un área privada SQL. Si se lanza la misma instrucción SQL muchas sesiones pueden tener como área privada una misma área compartida. en el área persistente y el área de tiempo de ejecución. La persistente se libera cuando se cierra el cursor, la de tiempo de ejecución se libera cuando se termina la ejecución de la instrucción.


Áreas de SQL y cursores.
La localización del área privada depende del tipo de conexión establecida en el servidor. Si la conexión se hace dedicada el área privada se guarda en la PGA, si es compartida se guarda en la SGA.


Memoria de sesión
La memoria de la sesión es la memoria asignada para mantener las variables de
una sesión (información de la conexión) y otra información relacionada con la una sesión Para un servidor compartido, se comparte la memoria de la sesión, no es privada.