2010-08-09 22 views
8

Estoy intentando vincular SQL Server 2005 a una base de datos Oracle 10g. Instalé el cliente de Oracle en el servidor SQL y validé que puedo conectarme a la base de datos de Oracle usando tanto tnsping como sqlplus. Cuando trato de ejecutar una consulta en SQL Server me sale el siguiente:Vinculación de Oracle con SQL Server

OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD" returned message "ORA-12154: TNS:could not resolve the connect identifier specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "OraOLEDB.Oracle" for linked server "ORA_CSSA2APD".

¿Alguna idea? He intentado tanto de las siguientes consultas sin suerte:

select * from openquery(ORA_CSSA2APD, 'select count(rowid) from eservice_op.agent')

select count(rowid) from ORA_CSSA2APD..eservice_op.agent

Respuesta

5

sospecho un entorno ajuste. Es decir, su sesión está recogiendo el archivo TNSNAMES.ORA pero la sesión subyacente a SQL Server no lo está. Verificaría que ORACLE_HOME y, posiblemente, TNS_ADMIN se establezcan y señalen.

¿Puede utilizar la sintaxis easy connect para la base de datos con la conexión de SQL Server.

IE reemplazar ORA_CSSA2APD con nombre de host: 1521/service_name

+0

Las variables de entorno para ambos están establecidas y son precisas. No he probado la sintaxis de conexión que describiste arriba, pero intenté crear un UDL y copiarlo en la cadena de conexión sin suerte. Voy a probar tu sintaxis anterior y te haré saber los resultados. Lo aprecio. – bokoxev

+1

He reiniciado el servicio porque no estaba seguro de haberlo hecho desde que establecí la variable de entorno TNS_ADMIN y todo está funcionando ahora. ¡Gracias por la ayuda! – bokoxev

+0

Como @bokoxev dijo, si todo parece correcto, pero no funciona, intente reiniciar todo el servidor MSSQL desde MSSQL Management Studio, funcionó para mí. – CsBalazsHungary

2

mensajes de error TNS lo general significa que la conexión es deficiente (por ejemplo anfitrión es inalcanzable/timesout en el puerto especificado, o que simplemente no sabe a qué se supone que ORA_CSSA2APD apunta).

Una cosa a considerar es, ¿está usando un Windows de 64 bits y está utilizando un cliente Oracle de 32 bits o 64 bits (o posiblemente ambos). Si tiene una aplicación de 32 bits ejecutándose en un sistema operativo de 64 bits que intenta llamar a Oracle, necesita un cliente Oracle de 32 bits. Usar un cliente de 32 bits en un sistema operativo de 64 bits puede ser complicado y es más seguro NO instalarlo en la carpeta "Archivos de programa (x86)".

También tener en cuenta la following

En una versión de 64 bits de Windows Server 2003 o de Windows XP, el DirWin %% \ System32 está reservado para aplicaciones de 64 bits. Cuando una aplicación de 32 bits intenta acceder a la carpeta System32, el acceso se redirige a la carpeta siguiente: % windir% \ SysWOW64

Así que para Windows de 64 bits, el material de 32 bits está en el La carpeta SysWOW64 y las cosas de 64 bits se encuentran en la carpeta system32.

+0

Tanto el sistema operativo como el cliente de Oracle son de 32 bits. – bokoxev

4

ORA: 12154 generalmente significa que el alias de la base de datos a la que intenta conectarse no se encontró en el archivo tnsnames.ora. (Consulte http://ora-12154.ora-code.com/ una explicación más detallada.)

Debe asegurarse de que el origen de datos es un alias que el archivo tnsnames conoce (en el servidor donde reside SQL Server, independientemente de dónde esté ejecutando las consultas de); SQL Server va a ser como cualquier otro cliente de Oracle y necesita saber a dónde conectarse y sin el archivo tnsnames.ora, no va a saber los detalles de dónde está el db de Oracle.

Si no tiene acceso al servidor de SQL Server (hay uno del departamento del departamento de redundancia), necesitará que el administrador del servidor lo configure.

(La propiedad de origen de datos del servidor vinculado debería ser el alias en tnsnames.ora alias para el PP que está tratando de establecer el vínculo.)

HTH ...

+0

+1 - Muy probablemente esto. El error es muy específico. – REW

+0

Puedo conectarme con SQLPlus y puedo modificar el servidor con éxito para que no haya ningún problema con el archivo tnsnames y estoy usando el mismo nombre de servicio que especifiqué en los nombres como el argumento @datasrc del comando sp_addlinkedserver. ¿Alguna otra idea? – bokoxev

+0

Y SQLPlus ejecutándose en la misma máquina que SQL Server? –

0

Encontramos que SQL Server, por alguna razón desconocida, comenzó a buscar el archivo TNSNAMES.ORA en ubicaciones predeterminadas de Oracle.

Nos fueron capaces de colocar los archivos tnsnames.ora en los siguientes lugares, con resultados exitosos:

para SQL Server de 32 bits en el sistema operativo de 32 bits o de 64 bits en sistemas operativos de 64 bits

%ProgramFiles%\Oracle 
%ProgramFiles%\Oracle\network\admin 

para SQL Server de 32 bits en sistemas operativos de 64 bits

%ProgramFiles% (x86)\Oracle 
%ProgramFiles% (x86)\Oracle\network\admin 

Nosotros también fueron capaces de conectarse a través de SQL * Plus, pero SQL Server no pudo. Es importante tener en cuenta que SQL * Plus no utilizó el mismo archivo TNSNAMES.ORA. Es por eso que uno funcionó.

1

También me ha pasado este problema, pero solo con ciertas cuentas de usuario de Windows. Una combinación de habilitar la opción de proveedor "Permitir en proceso" para OraOLEDB.Oracle proporcionar (SSMS> Objetos del servidor> Servidores vinculados> Proporciona> OraOLEDB.Oracle), reiniciar el servicio SQL Server de Windows y, por último, ajustar los permisos en el archivo TNSNAMES.ora directamente.

Cuestiones relacionadas