11

Tengo un gran problema: tengo que conectarme (solo quiero leer datos, no escribir) a IBM AS/400 de mi cliente (también conocido como iSeries, ahora IBM i) servidor ...Conexión al servidor de IBM i desde Sql Server 2008 R2

Creo que tengo todos los parámetros necesarios (me los ha dado el programador AS/400), pero no puedo entender qué controlador tengo que usar, y si tengo todo el software necesario para esto !

He instalado el controlador IBM AS/400 ClientAccess 5.8 (con un parche para el último SO), y ahora estoy tratando de configurar un nuevo Linked Server en mi servidor Sql Server 2008 R2 (x64).

Primer problema: ¿Qué controlador debo usar?

que tienen tantas opciones (pero tal vez ninguna de estas obras !!):

IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider 
IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider 
IBM DB2 UDB for iSeries IBMDARLA OLE DB Provider 

... o tal vez otros OLEDB/ODBC controladores genéricos ?!

Segundo problema: ¿Dónde debo poner mis parámetros (en los campos que quiero decir!)

En cualquier caso, en elegir un proveedor para mi Linked Server, obviamente, tengo que configurar los parámetros de mi ... pero sólo tengo esto:

  • nombre de usuario de un usuario ADMIN
  • contraseña del usuario ADMIN
  • AS/400 dirección IP del servidor
  • El nombre del archivo "principal", en la que se almacenan los datos de mi (algo así como ACG_DATV2)

tercer problema: ¿Cómo debo escribir mis consultas? ¿Cómo hacer referencia a un AS/400 "archivo" y tablas?

No sé cómo construir mi consulta de lectura: ¿dónde se almacenan las tablas y vistas (?!) Y cómo puedo hacer referencia a ellas?

¡Gracias de antemano!

Respuesta

15

Creo que hay muchas maneras de lograr lo que quiere, pero trataré de explicarle qué haría en su caso.

Con esa versión de IBM ClientAccess (y también el parche), no debería tener problemas para conectarme con un servidor vinculado Sql Server 2008 R2 si utiliza el proveedor de datos correcto.

En primer lugar, tratar de configurar el servidor vinculado de esta manera:

  • nombre de servidor vinculado: lo que quiere, es sólo un nombre personalizado (ejemplo: MYAS400)
  • Proveedor: IBM DB2 UDB for iSeries IBMDASQL OLE DB Provider
  • nombre del producto: no es importante, algo así como iSeries Access OLEDB Driver
  • fuente de datos: AS/dirección IP del servidor 400 (ejemplo: 192.168.0.1)

Si configura el servidor vinculado utilizando el asistente o mediante código SQL, la primera vez que necesite acceder a los datos del servidor AS/400, se le solicitarán las credenciales, con una ventana iSeries típica (mira mi ejemplo).

Establezca su nombre de usuario (ID de usuario) y la contraseña relativa, sin importar el caso de las cadenas.

enter image description here

Como consejo general (pero esto sólo está relacionado con mi experiencia!), Tratar de evitar caracteres especiales y menores casos distinciones/superiores ...

Si llega aquí (no hay problemas en la creación del Servidor Vinculado), el Servidor Vinculado debería funcionar (por lo que el primero y el segundo problema están resueltos): ¡construyamos la primera consulta!

Una vez creado el servidor vinculado, todo lo que necesita es simplemente hacer referencia al archivo, la biblioteca y, por supuesto, la tabla correcta y el servidor vinculado (por nombre): con esta información, cree una consulta como esta (que es la sintaxis habitual de T-SQL):

SELECT 
    (Field1) 
    , (Field2) 
    , * 
FROM (Linked Server Name).(Catalog Name).(Library).(TableName) 

la única información que probablemente se está perdiendo es el "archivo": se puede encontrar fácilmente navegar por el árbol Catálogos dentro de su nuevo servidor vinculado, o simplemente utilizar iSeries Access Navigator ¡herramienta!

Así, en su caso, creo que la consulta debe ser (más o menos):

SELECT 
    FILIO 
    , DTVLD 
    , DTVLA 
    , SEQZA 
    , CFIMP 
    , PADRE 
    , TPVLD 
    , CMVLD 
    , * 
FROM MYAS400.S242DA0A.ACG_DATV2.ANLE200F 

Tenga en cuenta que S242DA0A es válida sólo en mi caso ...

Recuerde también que:

  • AS/400 probablemente le pida credenciales muy a menudo: también si cierra y vuelve a abrir SSMS.
  • ¿Desempeño? ... mejor hablar de otra cosa :) ... extrae las tablas en tus tablas de servidor Sql y consúltalas desde allí. Hágalo con un simple: SELECT (Fields) INTO myTable FROM (AS/400 table)
  • He intentado este proceso muchas veces, no tuve muchos problemas (¡una vez que me capacité!) ... ¡pero solo para leer datos (como me pidió)! ¡Nunca intenté actualizar datos!

GOOD LUCK!

+0

¡Gracias, lo estoy intentando! –

+0

¿Crees que todo está bien también con Windows 7 x64? Pensé que había muchos problemas ... ¡pero aún estoy intentando con esta solución! :) –

+1

Dijiste que tienes una versión parcheada de iSeries ClientAccess (5.8): Creo que hablabas sobre el Service Pack (y la versión debería ser 4.0.100.1124 - V5R4M0): hasta donde sé, este también corrige los problemas en el sistema operativo reciente. – MAXE

Cuestiones relacionadas