error DTS urgente

09/06/2005 - 15:51 por daniel | Informe spam
hola gente, miren estoy corriendo un programa que utiliza DTS para hacer
querys en otro server de SQL, pero me esta dando error. el servidor tiene
win2k sp4 con sql2k sp3. y la pc tiene win2k pro con sp4 y MSDE del office
xp que seria el sql2k.

el query que ejecuto es este:
DECLARE @@NRO_ERROR Int
DECLARE @@EXPRESION_UPDATE AS VarChar(7000)

SET XACT_ABORT ON
SET NOCOUNT ON

BEGIN TRAN


||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||


SET @@EXPRESION_UPDATE = 'UPDATE [W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
' +
' SET DescUnidad = TOri.DescUnidad,' +
' FactorFt2 = TOri.FactorFt2,' +
' Fec_Alta = TOri.Fec_Alta,' +
' Usu_Alta = TOri.Usu_Alta,' +
' FecUltAct = TOri.FecUltAct,' +
' UsuUltAct = TOri.UsuUltAct,' +
' FecBajLog = TOri.FecBajLog,' +
' UsuBajLog = TOri.UsuBajLog' +
' FROM ([NTS-TEST04].[EMP30].dbo.UnidadMedida as TOri' +
' INNER JOIN (SELECT CASE WHEN Max(FecUltProceso) IS NULL' +
' THEN CAST(''1950-01-01 00:00:00'' AS
DateTime)' +
' ELSE' +
' Max (FecUltProceso)' +
' END As UltProc' +
' FROM
[W2K-TERM2].[EMP_LOCAL].dbo.Sincronizacion' +
' WHERE Id_Sentido = 1) AS B' +
' ON TOri.Fec_Alta > B.UltProc' +
' OR TOri.FecUltAct > B.UltProc' +
' OR TOri.FecBajLog > B.UltProc)' +
' INNER JOIN [W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
AS TDes' +
' ON TDes.IdUnidad = TOri.IdUnidad '



EXEC (@@EXPRESION_UPDATE)

SET @@NRO_ERROR = @@ERROR
IF @@NRO_ERROR <> 0 BEGIN
ROLLBACK TRAN
END

COMMIT TRAN

SET NOCOUNT OFF
SET XACT_ABORT OFF


y me da este error:

Server: Msg 7391, Level 16, State 1, Line 1
No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no pudo
iniciar una transacción distribuida.
[OLE/DB provider returned message: New transaction cannot enlist in the
specified transaction coordinator. ]
Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

en los do servidores tengo configurados los linked server y funciona, o sea
si entro en la opcion que dice Tabla veo las tablas del otro server.

alguna idea?

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
09/06/2005 - 16:01 | Informe spam
Esta iniciado el servicio MSDTC en ambos servers?


AMB

"daniel" wrote:

hola gente, miren estoy corriendo un programa que utiliza DTS para hacer
querys en otro server de SQL, pero me esta dando error. el servidor tiene
win2k sp4 con sql2k sp3. y la pc tiene win2k pro con sp4 y MSDE del office
xp que seria el sql2k.

el query que ejecuto es este:
DECLARE @@NRO_ERROR Int
DECLARE @@EXPRESION_UPDATE AS VarChar(7000)

SET XACT_ABORT ON
SET NOCOUNT ON

BEGIN TRAN


||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||


SET @@EXPRESION_UPDATE = 'UPDATE [W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
' +
' SET DescUnidad = TOri.DescUnidad,' +
' FactorFt2 = TOri.FactorFt2,' +
' Fec_Alta = TOri.Fec_Alta,' +
' Usu_Alta = TOri.Usu_Alta,' +
' FecUltAct = TOri.FecUltAct,' +
' UsuUltAct = TOri.UsuUltAct,' +
' FecBajLog = TOri.FecBajLog,' +
' UsuBajLog = TOri.UsuBajLog' +
' FROM ([NTS-TEST04].[EMP30].dbo.UnidadMedida as TOri' +
' INNER JOIN (SELECT CASE WHEN Max(FecUltProceso) IS NULL' +
' THEN CAST(''1950-01-01 00:00:00'' AS
DateTime)' +
' ELSE' +
' Max (FecUltProceso)' +
' END As UltProc' +
' FROM
[W2K-TERM2].[EMP_LOCAL].dbo.Sincronizacion' +
' WHERE Id_Sentido = 1) AS B' +
' ON TOri.Fec_Alta > B.UltProc' +
' OR TOri.FecUltAct > B.UltProc' +
' OR TOri.FecBajLog > B.UltProc)' +
' INNER JOIN [W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
AS TDes' +
' ON TDes.IdUnidad = TOri.IdUnidad '



EXEC (@@EXPRESION_UPDATE)

SET @@NRO_ERROR = @@ERROR
IF @@NRO_ERROR <> 0 BEGIN
ROLLBACK TRAN
END

COMMIT TRAN

SET NOCOUNT OFF
SET XACT_ABORT OFF


y me da este error:

Server: Msg 7391, Level 16, State 1, Line 1
No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no pudo
iniciar una transacción distribuida.
[OLE/DB provider returned message: New transaction cannot enlist in the
specified transaction coordinator. ]
Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].

en los do servidores tengo configurados los linked server y funciona, o sea
si entro en la opcion que dice Tabla veo las tablas del otro server.

alguna idea?



Respuesta Responder a este mensaje
#2 daniel
09/06/2005 - 20:58 | Informe spam
si.
ahi probe de hacer un update simple y un select y me funciona ok.
luego probe el query que puse en este mensaje, pero sin la sentencia BEGIN
TRAN y funciona bien. el tema es que esa sentencia me dicen que es para
poder hacer un rollback en el caso que de un error en la ejecucion de la
sentencia. es mas este query corre dentro de un SP con otros update mas,
entonces si uno se cuelga me cuelga todos. pero al estar esa sentencia eso
no pasa. eso es lo que me dice la consultora del soft.

lo raro es que a ellos les funciona bien y tienen las misma configuracion de
servidores y ya verificamos que esten configurados iguales.

alguna idea?

"Alejandro Mesa" escribió en el
mensaje news:
Esta iniciado el servicio MSDTC en ambos servers?


AMB

"daniel" wrote:

> hola gente, miren estoy corriendo un programa que utiliza DTS para hacer
> querys en otro server de SQL, pero me esta dando error. el servidor


tiene
> win2k sp4 con sql2k sp3. y la pc tiene win2k pro con sp4 y MSDE del


office
> xp que seria el sql2k.
>
> el query que ejecuto es este:
> DECLARE @@NRO_ERROR Int
> DECLARE @@EXPRESION_UPDATE AS VarChar(7000)
>
> SET XACT_ABORT ON
> SET NOCOUNT ON
>
> BEGIN TRAN
>
>
>


||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> ||||||||
>


||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> ||||||||
>
>
> SET @@EXPRESION_UPDATE = 'UPDATE


[W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
> ' +
> ' SET DescUnidad = TOri.DescUnidad,' +
> ' FactorFt2 = TOri.FactorFt2,' +
> ' Fec_Alta = TOri.Fec_Alta,' +
> ' Usu_Alta = TOri.Usu_Alta,' +
> ' FecUltAct = TOri.FecUltAct,' +
> ' UsuUltAct = TOri.UsuUltAct,' +
> ' FecBajLog = TOri.FecBajLog,' +
> ' UsuBajLog = TOri.UsuBajLog' +
> ' FROM ([NTS-TEST04].[EMP30].dbo.UnidadMedida as TOri' +
> ' INNER JOIN (SELECT CASE WHEN Max(FecUltProceso) IS NULL'


+
> ' THEN CAST(''1950-01-01 00:00:00''


AS
> DateTime)' +
> ' ELSE' +
> ' Max (FecUltProceso)' +
> ' END As UltProc' +
> ' FROM
> [W2K-TERM2].[EMP_LOCAL].dbo.Sincronizacion' +
> ' WHERE Id_Sentido = 1) AS B' +
> ' ON TOri.Fec_Alta > B.UltProc' +
> ' OR TOri.FecUltAct > B.UltProc' +
> ' OR TOri.FecBajLog > B.UltProc)' +
> ' INNER JOIN


[W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
> AS TDes' +
> ' ON TDes.IdUnidad = TOri.IdUnidad '
>
>
>
> EXEC (@@EXPRESION_UPDATE)
>
> SET @@NRO_ERROR = @@ERROR
> IF @@NRO_ERROR <> 0 BEGIN
> ROLLBACK TRAN
> END
>
> COMMIT TRAN
>
> SET NOCOUNT OFF
> SET XACT_ABORT OFF
>
>
> y me da este error:
>
> Server: Msg 7391, Level 16, State 1, Line 1
> No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no


pudo
> iniciar una transacción distribuida.
> [OLE/DB provider returned message: New transaction cannot enlist in the
> specified transaction coordinator. ]
> Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB'
> ITransactionJoin::JoinTransaction returned 0x8004d00a].
>
> en los do servidores tengo configurados los linked server y funciona, o


sea
> si entro en la opcion que dice Tabla veo las tablas del otro server.
>
> alguna idea?
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
09/06/2005 - 21:29 | Informe spam
Para eso te recomendaria lo siguiente:

1 - No uses sql dynamico, pues el update a servidor linkeado esta ocurriendo
en otro contesto fuera del procedimiento que inicio la transaccion y esto
hace mas engorroso poder detectar si hubo error.

2 - Para transacciones multiserver, debes usar "begin distributed
transaction" en vez de "begin transaction".


AMB

"daniel" wrote:

si.
ahi probe de hacer un update simple y un select y me funciona ok.
luego probe el query que puse en este mensaje, pero sin la sentencia BEGIN
TRAN y funciona bien. el tema es que esa sentencia me dicen que es para
poder hacer un rollback en el caso que de un error en la ejecucion de la
sentencia. es mas este query corre dentro de un SP con otros update mas,
entonces si uno se cuelga me cuelga todos. pero al estar esa sentencia eso
no pasa. eso es lo que me dice la consultora del soft.

lo raro es que a ellos les funciona bien y tienen las misma configuracion de
servidores y ya verificamos que esten configurados iguales.

alguna idea?

"Alejandro Mesa" escribió en el
mensaje news:
> Esta iniciado el servicio MSDTC en ambos servers?
>
>
> AMB
>
> "daniel" wrote:
>
> > hola gente, miren estoy corriendo un programa que utiliza DTS para hacer
> > querys en otro server de SQL, pero me esta dando error. el servidor
tiene
> > win2k sp4 con sql2k sp3. y la pc tiene win2k pro con sp4 y MSDE del
office
> > xp que seria el sql2k.
> >
> > el query que ejecuto es este:
> > DECLARE @@NRO_ERROR Int
> > DECLARE @@EXPRESION_UPDATE AS VarChar(7000)
> >
> > SET XACT_ABORT ON
> > SET NOCOUNT ON
> >
> > BEGIN TRAN
> >
> >
> >
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> > ||||||||
> >
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
> > ||||||||
> >
> >
> > SET @@EXPRESION_UPDATE = 'UPDATE
[W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
> > ' +
> > ' SET DescUnidad = TOri.DescUnidad,' +
> > ' FactorFt2 = TOri.FactorFt2,' +
> > ' Fec_Alta = TOri.Fec_Alta,' +
> > ' Usu_Alta = TOri.Usu_Alta,' +
> > ' FecUltAct = TOri.FecUltAct,' +
> > ' UsuUltAct = TOri.UsuUltAct,' +
> > ' FecBajLog = TOri.FecBajLog,' +
> > ' UsuBajLog = TOri.UsuBajLog' +
> > ' FROM ([NTS-TEST04].[EMP30].dbo.UnidadMedida as TOri' +
> > ' INNER JOIN (SELECT CASE WHEN Max(FecUltProceso) IS NULL'
+
> > ' THEN CAST(''1950-01-01 00:00:00''
AS
> > DateTime)' +
> > ' ELSE' +
> > ' Max (FecUltProceso)' +
> > ' END As UltProc' +
> > ' FROM
> > [W2K-TERM2].[EMP_LOCAL].dbo.Sincronizacion' +
> > ' WHERE Id_Sentido = 1) AS B' +
> > ' ON TOri.Fec_Alta > B.UltProc' +
> > ' OR TOri.FecUltAct > B.UltProc' +
> > ' OR TOri.FecBajLog > B.UltProc)' +
> > ' INNER JOIN
[W2K-TERM2].[EMP_LOCAL].dbo.UnidadMedida
> > AS TDes' +
> > ' ON TDes.IdUnidad = TOri.IdUnidad '
> >
> >
> >
> > EXEC (@@EXPRESION_UPDATE)
> >
> > SET @@NRO_ERROR = @@ERROR
> > IF @@NRO_ERROR <> 0 BEGIN
> > ROLLBACK TRAN
> > END
> >
> > COMMIT TRAN
> >
> > SET NOCOUNT OFF
> > SET XACT_ABORT OFF
> >
> >
> > y me da este error:
> >
> > Server: Msg 7391, Level 16, State 1, Line 1
> > No se puede realizar la operación. El proveedor OLE DB 'SQLOLEDB' no
pudo
> > iniciar una transacción distribuida.
> > [OLE/DB provider returned message: New transaction cannot enlist in the
> > specified transaction coordinator. ]
> > Traza de error de OLE DB [OLE/DB Provider 'SQLOLEDB'
> > ITransactionJoin::JoinTransaction returned 0x8004d00a].
> >
> > en los do servidores tengo configurados los linked server y funciona, o
sea
> > si entro en la opcion que dice Tabla veo las tablas del otro server.
> >
> > alguna idea?
> >
> >
> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida