MSSQL, PostgreSQL linked server - MSDTC XARMCreate error przy próbie użycie transakcji

0

Witam,

Zapytanie jest takie (dość prostem, chciaż w praktyce będzie ich więcej):

 
BEGIN TRAN TranTest
BEGIN TRY
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
           ([idmeasurement]
           ,[idmeasuringpoint]
           ,[measuringtype]
           ,[idstatus]
           ,[date]
           ,[value]
           ,[unit])
     VALUES
           (543
           ,'asdasd'
           ,'ioiosiads'
           ,543
           ,'2010-10-01'
           ,15
           ,'m3')
END TRY
BEGIN CATCH
    ROLLBACK TRAN TranTest
    PRINT 'Błąd'
    RETURN 
END CATCH

COMMIT TRAN TranTest

Odpowiedź:

//
OLE DB provider "PGNP" for linked server "PostgreSQL2" returned message "MSDTC XARMCreate error".
Msg 7391, Level 16, State 2, Line 31
The operation could not be performed because OLE DB provider "PGNP" for linked server "PostgreSQL2" was unable to begin a distributed transaction.
//

Próbowałem jeszcze tak, ale w sumie na jedno wychodzi i efekt ten sam:

BEGIN TRAN
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
           ([idmeasurement]
           ,[idmeasuringpoint]
           ,[measuringtype]
           ,[idstatus]
           ,[date]
           ,[value]
           ,[unit])
     VALUES
           (543
           ,'asdasd'
           ,'ioiosiads'
           ,543
           ,'2010-10-01'
           ,15
           ,'m3')
if @@Error > 0
ROLLBACK
else
COMMIT TRAN

Macie jakiś pomysł? Niestety, na forum prowidera PGNP (http://www.pgoledb.com/forum/index.php) nie zapytam, bo wyłączyli rejestrację, komunikat błędu raczej wiele nie mówi, szukanie na google też nie dało rezultatów. Zaznaczam, że:

  • takie samo zapytanie bez użycia transakcji działa tak jak trzeba
  • użycie transakcji przy insertach do tabel w bazie MSSQL też działa więc nie jest to raczej problem z samym MSDTC, a z providerem do PostgreSQL

Myślałem jeszcze, żeby użyć providera ODBC do PostgreSQL, ale tu też porażka - w ogóle nie działa na nim linked server. Mógłbym olać transacje, ale z pewnych względów nie chcę tego robić.

Pomoże ktoś?

0

Witam.
Powinieneś zajrzec do Event Loga, tam będziesz miał informację której nazwy pliku sterownika ODBC nie ma w rejestrze (ścieżkę też tam będziesz miał).

Pozdrawiam
Michał M.

ktos napisał(a)

Witam,

Zapytanie jest takie (dość prostem, chciaż w praktyce będzie ich więcej):

 
BEGIN TRAN TranTest
BEGIN TRY
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
           ([idmeasurement]
           ,[idmeasuringpoint]
           ,[measuringtype]
           ,[idstatus]
           ,[date]
           ,[value]
           ,[unit])
     VALUES
           (543
           ,'asdasd'
           ,'ioiosiads'
           ,543
           ,'2010-10-01'
           ,15
           ,'m3')
END TRY
BEGIN CATCH
    ROLLBACK TRAN TranTest
    PRINT 'Błąd'
    RETURN 
END CATCH

COMMIT TRAN TranTest

Odpowiedź:

//
OLE DB provider "PGNP" for linked server "PostgreSQL2" returned message "MSDTC XARMCreate error".
Msg 7391, Level 16, State 2, Line 31
The operation could not be performed because OLE DB provider "PGNP" for linked server "PostgreSQL2" was unable to begin a distributed transaction.
//

Próbowałem jeszcze tak, ale w sumie na jedno wychodzi i efekt ten sam:

BEGIN TRAN
INSERT INTO [PostgreSQL2].[postgres].[synctest].[measurements]
           ([idmeasurement]
           ,[idmeasuringpoint]
           ,[measuringtype]
           ,[idstatus]
           ,[date]
           ,[value]
           ,[unit])
     VALUES
           (543
           ,'asdasd'
           ,'ioiosiads'
           ,543
           ,'2010-10-01'
           ,15
           ,'m3')
if @@Error > 0
ROLLBACK
else
COMMIT TRAN

Macie jakiś pomysł? Niestety, na forum prowidera PGNP (http://www.pgoledb.com/forum/index.php) nie zapytam, bo wyłączyli rejestrację, komunikat błędu raczej wiele nie mówi, szukanie na google też nie dało rezultatów. Zaznaczam, że:

  • takie samo zapytanie bez użycia transakcji działa tak jak trzeba
  • użycie transakcji przy insertach do tabel w bazie MSSQL też działa więc nie jest to raczej problem z samym MSDTC, a z providerem do PostgreSQL

Myślałem jeszcze, żeby użyć providera ODBC do PostgreSQL, ale tu też porażka - w ogóle nie działa na nim linked server. Mógłbym olać transacje, ale z pewnych względów nie chcę tego robić.

Pomoże ktoś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1