¿Como consultar un origen de datos ODBC (DSN) desde SQL Server 2005 64-bit a través de OPENROWSET u OPENQUERY + Servidor Vinculado (Proveedor MSDASQL 64-bit)?
|
Cada día es más habitual necesitar consultar orígenes de datos ODBC (DSN) desde SQL Server 2005, ya sea para importar, para exportar, o simplemente consultar dichos datos. Esto se hace en muchos casos utilizando el proveedor MSDASQL, que se trata de un proveedor OLEDB para acceder a orígenes de datos ODBC (es decir, es un puente OLEDB a ODBC), y en SQL Server utilizar OPENROWSET o un Servidor Vinculado (Linked Server) y OPENQUERY para acceder a dicho origen de datos (DSN). De hecho, este proveedor OLEDB (MSDASQL) también se utiliza en Aplicaciones Web y WinForms, etc. Sin embargo, "de serie" sólo existe la edición MSDASQL de 32-bit. Por ello, si una instalación de SQL Server 2005 64-bit sólo puede acceder a los proveedores OLEDB de 64-bit registrados en dicho servidor ¿Qué hacer para consultar un origen de datos ODBC a través SQL Server 2005 64-bit? |
Desde SQL Server 2005 sólo podemos acceder a orígenes de datos externos a través de Proveedores OLEDB. El principal problema, es que en ocasiones utilizamos orígenes de datos ODBC (DSN) a los que accedemos a través del proveedor MSDASQL.dll (puente OLEDB a ODBC) en servidor SQL Server 2005 32-bit o SQL Express 32-bit, utilizando OPENROWSET o bien un Servidor Vinculado (Linked Server) junto con OPENQUERY. En este caso, todo funciona correctamente, como se muestra en el siguiente ejemplo (OPENROWSET, OPENQUERY y crear Servidor Vinculado - Linked Server):
-- *** Ejemplo de OPENROWSET con MSDASQL y un origen de datos ODBC (DSN) *** -- *** Nota: Antes de nada, dar de alta el origen de datos ODBC *** -- *** Para ello, utilizar la herramienta administrativa Data Sources (ODBC) *** SELECT * FROM OPENROWSET('MSDASQL', 'DSN=miDSN', 'SELECT EmpId, EmpName FROM Employees')
-- *** Ejemplo de crear un Servidor Vinculado (Linked Server) con MSDASQL *** -- *** y un origen de datos ODBC (DSN) *** -- *** y consultar al Servidor Vinculado utilizando OPENQUERY *** -- *** Nota: Antes de nada, dar de alta el origen de datos ODBC *** -- *** Para ello, utilizar la herramienta administrativa Data Sources (ODBC) *** EXEC sp_addlinkedserver @server = 'miDSN' , @srvproduct = 'miProduct', @provider = 'MSDASQL', @datasrc = 'miDSN'
SELECT * FROM OPENQUERY(miDSN, 'SELECT EmpId, EmpName FROM Employees')
|
Sin embargo, cuando implementamos nuestra solución en un servidor SQL Server 2005 64-bit (ya sea x64 o IA64), nos encontramos con dos problemas:
- Por defecto, NO está disponible el proveedor MSDASQL de 64-bit. Esto supone, que al intentar utilizar el proveedor MSDASQL en un servidor SQL Server 2005 64-bit, obtendremos el error:
Mens. 7403, Nivel 16, Estado 1, Línea 1. The OLE DB provider "MSDASQL" has not been registered.
Que verdad tan grande !! es que la realidad es que no está registrado, ya que SQL Server 2005 64-bit es un proceso de 64-bit que sólo podrá acceder a los proveedores OLEDB de 64-bit, y por defecto, sólo tendremos instalado el proveedor MSDASQL de 32-bit, al cual no podremos acceder desde SQL Server 2005 64-bit.
Por suerte, el proveedor MSDASQL 64-bit está disponible para descarga desde la Web de Microsoft desde Mayo de 2008 (no sé que ocurrió dicho mes de Mayo, pero olé-olé ;-). El enlace es el siguiente: 64-Bit OLEDB Provider for ODBC (MSDASQL)
- Necesitaremos instalar los Drivers ODBC de 64-bit que necesitemos. Es decir, MSDASQL 64-bit es sólo un puente OLEDB 64-bit a ODBC 64-bit. Esto quiere decir, que MSDASQL NO es un puente OLEDB 64-bit a ODBC 32-bit ¿queda claro? Pues bien, necesitaremos instalar los drivers ODBC 64-bit correspondientes. Aquí adquirimos una fuerte dependencia con el correspondiente fabricante, ya que en ocasiones (sobre todo hace unos años) no hay disponibilidad de drivers 64-bit de algunos productos, y en dicho caso, nuestro gozo en un pozo... excepto que podamos utilizar Drivers ODBC 64-bit de terceros (habitualmente de pago), como es el caso de DataDirect (conocidos anteriormente como MERANT y como INTERSOLV, el principal fabricante de drivers ODBC de toda la vida) u Open Link.
Con todo esto realizado, ya estaremos en situación de poder ejecutar consultas a orígenes de datos ODBC a través de OPENROWSET ó a través de Servidores Vinculados (Linked Servers) junto con OPENQUERY, en servidores SQL Server 2005 64-bit (y también en Aplicaciones Web o WinForms de 64-bit, etc. ;-).
También es interesante recordar, que NO es necesario cerrarse en banda con los drivers ODBC. Es decir, existe la alternativa (que además es más recomendale) de utilizar el proveedor OLEDB que necesitemos directamente (en vez de utilizar ODBC a través de MSDASQL). Es decir, en vez de utilizar un Driver ODBC para acceder a un motor de base de datos X a través del proveedor OLEDB MSDASQL ¿Por que no utilizar directamente un proveedor OLEDB para dicho motor de base de datos X? Esto es lo recomendable, ya que MSDASQL es un proveedor puente que lo único que hace es introducir una capa de software intermedia adicional. Además, también es posible obtener Proveedores OLEDB de terceros, como es el caso (al igual que ocurre con los Drivers ODBC) de DataDirect y Open Link, por poner dos ejemplos.
Por último, comentar que el contenido de este artículo ha sido probado sobre servidores de pruebas y sobre servidores de producción con total éxito... y sólo desear que os sirva de ayuda como a mí me ha servido ! |
|
|
|