Siempre lo mismo, resuelvo alguna tarea complicadísima y no la documento como es debido, pasa el tiempo y se da el mismo escenario en otro cliente y.... CHAN!!! No me acuerdo como lo había resuelto!!!! (Vale aclarar, debido a éstas cuestiones fue que nació éste blog)
Pues bien, eso mismo me volvió a pasar hace unos días así que (como ya tengo mi ayuda memoria "on web") comparto, para los usuarios hispanoparlantes el paso a paso de una de las tareas más "rompecocos" con las que me toco lidiar:
Hacer consultas DML distribuidas entre servidores MS SQL 2000
Estas, como algunos sabrán, son los SELECT, INSERT, UPDATE O DELETE con JOIN en donde una (o más) de las tablas combinadas pertenecen a distintos servidores (uno el local y los otros remotos). Por ej. "Si quisieramos consultar todos los registros que no existen de una tabla x del servidor remoto en la misma tabla x pero del servidor local" escribiriamos los siguiente:
SELECT * FROM [SERVIDOR_REMOTO].[DB_REMOTA].[dbo].Tabla_X TablaRemota_X WHERE NOT EXISTS ( SELECT * FROM Tabla_X TablaLocal_X WHERE Tabla_X.Id = TablaRemota.Id) GO
Este escenario se podría dar en un ambiente de replica de SQL Server (de hecho es una de las consultas que estaba haciendo hace un rato). Si quisieramos ejecutar esta consulta el motor nos daría el siguiente error:
Al hacer ésto nos puede aparecer el siguiente mensaje de error:
Error 1068: no se puede iniciar el servicio o grupo de dependencia.
Si luego de iniciado el MSDTC nos da la siguiente pantalla de error al ejecutar nuestra consulta a un servidor linkeado:
"[OLE/DB provider returned message: No se puede dar de alta la nueva transacción en el coordinador de transacciones especificado. ]
Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].
No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no pudo iniciar una transacción distribuida." y blablablabla
Hay que habilitar un par de cosillas en el MSDTC:
Vamos a inicio --> ejecutar y escribir DCOMCNFG y apretamos Enter.
Se abre el administrador de "Servicios de Componentes": Hacemos click en el ícono "Servicios de Componentes", luego en la carpetita "Equipos" y, en el ícono "Mi PC", hacemos click con el control derecho y nos dirigimos a "propiedades". Una vez dentro de la ventana de propiedades tildamos la pestaña MSDTC y apretamos el botón "Configuración de seguridad..." y tildamos "Acceso a DTC desde la red", "Permitir clientes remotos", "Permitir administracion remota", "permitir entrantes" y "permitir salientes" y "no se requiere autenticación"
Luego de aceptar todo, reiniciamos los servicios del SQL Server Y ahí debería ya funcionar nuestra consulta LDM (SELECT, INSERT, UPDATE o DELETE) distribuida.