viernes, 3 de abril de 2009

tnsnames

Archivo ubicado en los clientes,contiene los nombres de servicio de red, asignados a descriptores a través de los cuales se nos permite acceder

Ejemplo de configuración del tnsnames.ora

CNNORASITE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 193.168.4.220)(PORT = 2484))
)
(CONNECT_DATA =
(SERVICE_NAME = orasite)
)
)


Parámetros del archivo:

HOST: Dirección ip del servidor con el cual queremos conectar

PORT: Puerto donde escucha la base de datos

SERVICE_NAME: Nombre del servicio de base de datos al que queremos conectar

DESCRIPTOR DE CONEXION: En este caso el descriptor para conectarnos es CNNORASITE

Podemos comprobar si la conexión es correcta mediante el comando TNSPING


$TNSPING nb_descriptor_de_red

RESOLUCIÓN POR TNSNAMES.ORA ("LOCAL NAMING")
1.- Configurar el listener del servidor (listener.ora) para que dé servicio a cada una de las BDs de la máquina y arrancarlo. Configurar los clientes (tnsnames.ora) y probar la conexión a las BDs. Al configurar los clientes, la resolución de string de conexión por defecto es a través del archivo TNSNAMES.ORA: parámetro names.directory_path del fichero SQLNET.ORA:

names.directory_path = (TNSNAMES, HOSTNAME, ONAMES)

Para ver cómo se crean los procesos servidores dedicados (si no se usa configuración MTS - Servidor compartido):

a) hacer telnet a VENTAS y conectarse con sql*plus ó conectarse a la base validando localmente, y desde sql*plus mirar los procesos que se han creado (el de usuario:sql*plus, y el proceso servidor dedicado (local=YES)); consultando la vista v$session y v$process. Utilizar el comando lsnrctl services y explicar resultado->no pasa por el listener, luego no se refleja la conexión en este comando.

b)conectarse en cliente/servidor a la BD y comprobar de nuevo los procesos (proceso cliente de sql*plus en el cliente, proceso servidor dedicado (local=NO)). Utilizar el comando lsnrctl services y explicar resultado, diferencias con el apartado a)->pasa por el listener, por lo que se refleja el establecimiento de conexión a través del servidor dedicado.

Si la base está configurada en modo compartido, forzar que los clientes se conecten por servidor dedicado en lugar de compartido. Esto se puede hacer de 2 formas:

En el tnsnames.ora del cliente crear un nuevo string de conexión igual que el ya existente para esta BD pero en la sección CONNECT_DATA añadir (SERVER=DEDICATED): VENTAS_DEDICADOS.world =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(Host = 128.0.0.20)
(Port = 1521)
)
)
(CONNECT_DATA = (SID = orcl) (SERVER=DEDICATED)
)
)

y comprobar la conexión a través de este nuevo alias-> irá por servidor dedicadoen el sqlnet.ora del cliente añadir el parámetro USE_DEDICATED_SERVER=ON y comprobar cómo se realiza la conexión (usar el string de conexión inicial, no el anterior).

MÉTODO DE RESOLUCIÓN DE CONEXIÓN POR "HOST NAMING"

1.- No se puede usar Oracle Connection Manager, hay que usar TCP/IP, y resolución de direcciones por DNS/NIS/fich.hosts.

2.- Al configurar los clientes, indicar en primer lugar en el fichero SQLNET.ORA el método Host Naming para la resolución de string de conexión:

names.directory_path = (HOSTNAME, TNSNAMES, ONAMES)

3.- En el servidor de BD hay que poner el global_dbname para cada BD (antes del SDI_NAME) en el listener.ora de la siguiente forma (en lugar de ORACLE_SID.DB_DOMAIN):

global_dbname=

4.- En el cliente, añadir la dirección IP y el alias de la máquina a la que se quiere acceder (servidor de BD) en el fichero de hosts (si es que no existe DNS o NIS). Y para conectarse usar como string de conexión el nombre o dir.IP de la máquina servidor.

No hay comentarios:

Publicar un comentario