konto usunięte

Temat: Linked Server No transaction is active


Witam,

Mam pewien problem. Otóż na jednej z baz, mam trigger, który wykonuję Insert/Update na zdalnej bazie - użyłem LinkedServer. Rezultatem działania triggera jest wiadomość:

No transaction is active

Odpalając insert/update poza triggerem wszystko jest ok. MSDTC są uruchomione na serwerach.

Pzdr,
M

Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Hej,
Użycie linked servera w triggerze powoduje rozpoczęcie transakcji w kontekście transakcji z serwera 'lokalnego'. Próbowałeś jawnie wywoływać trnsakcję rozproszoną (BEGIN DISTRIBUTED TRAN)? Podaj kod błędu - czy jest to może błąd 7391?
Napisz coś więcej nt. konfiguracji.

Pozdrawiam,
Daniel

konto usunięte

Temat: Linked Server No transaction is active

Daniel N.:
Hej,
Użycie linked servera w triggerze powoduje rozpoczęcie transakcji w kontekście transakcji z serwera 'lokalnego'. Próbowałeś jawnie wywoływać trnsakcję rozproszoną (BEGIN DISTRIBUTED TRAN)? Podaj kod błędu - czy jest to może błąd 7391?
Napisz coś więcej nt. konfiguracji.

Pozdrawiam,
Daniel


tak, próbowałem distributed tran, niestety nie rozwiązuje to problemu.

tak numer błędu to 7391.

Msg 7391, Level 16, State 2, Procedure test Line 17

The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "LINKSERVER" was unable to begin a distributed transaction.

konto usunięte

Temat: Linked Server No transaction is active

Może ja napiszę coś o konfiguracji.
Maszyna na któej jest wywoływany trigger to serwer wirtualny 2008r2 będący w domenie, sql2k8r2 standard.
Maszyna zlinkowana to aktualnie win7 rówież z sql2k8r2 ale w wersji express, nie jest ona w domenie ale ma łączność z domeną oraz na drugiej karcie sieciowej z podsiecią będącą całkowicie bez dostępu do domeny.
Ustawienia msdtc są na obu wg nas prawidłowo skonfigurowane. Wyjątki w firewallu windowsowym są pododawane (był też wyłączany).
Obie maszyny są spięte VPN zestawionym sprzętowo i wg działu IT nie ma żadnym blokad na tym łączu.
Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Jesteście pewni, że udało wam się zestawić transakcję rozproszoną?

Np. poprzez:

SET xact_abort ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM <serwer zdalny>.<baza>.<schemat>.<tabela>
COMMIT TRAN

==

Czy Linked Server w opcjach ma włączone RPC oraz RPC OUT na True?

==

Spróbujcie narzędziem DTCPing zweryfikować czy wszystko jest ok.
http://www.microsoft.com/en-us/download/details.aspx?i...

Uwaga:
DTCPing operuje jedynie na nazwach Netbios
W celu rozpoczęcia nowego testu należy uruchomić narzędzie ponownie

==

Spróbujcie testowo we właściwościach DTC, w zakładce security dla opcji Transaction Manager Communication wybrać opcję No Authentication Required - na obu hostach.

===
Pozdrawiam,
Daniel

konto usunięte

Temat: Linked Server No transaction is active

Daniel N.:
Jesteście pewni, że udało wam się zestawić transakcję rozproszoną?

Np. poprzez:

SET xact_abort ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM <serwer
> zdalny>.<baza>.<schemat>.<tabela>
COMMIT TRAN

==

Czy Linked Server w opcjach ma włączone RPC oraz RPC OUT na True?

==

Spróbujcie narzędziem DTCPing zweryfikować czy wszystko jest ok.
http://www.microsoft.com/en-us/download/details.aspx?i...

Uwaga:
DTCPing operuje jedynie na nazwach Netbios
W celu rozpoczęcia nowego testu należy uruchomić narzędzie ponownie

==

Spróbujcie testowo we właściwościach DTC, w zakładce security dla opcji Transaction Manager Communication wybrać opcję No Authentication Required - na obu hostach.

===
Pozdrawiam,
Daniel


wszystkie możliwe ustawienia DTC sprawdziliśmy....ustawienia RPC/RPC OUT też nie rozwiązują sprawy.

pzdr,
M.
Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Mateusz H.:

wszystkie możliwe ustawienia DTC sprawdziliśmy....ustawienia RPC/RPC OUT też nie rozwiązują sprawy.

pzdr,
M.

W porządku, ale czy jesteś pewien, że DTC działa poprawnie? DTCPing nie zwraca błędów?

Jesteś w stanie wykonać poniższe (uzupełnij <> swoimi danymi)?
SET xact_abort ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM <serwer> zdalny>.<baza>.<schemat>.<tabela>
COMMIT

Potwierdźcie mi proszę powyższe.

===
Pozdrawiam,
Daniel

konto usunięte

Temat: Linked Server No transaction is active

Daniel N.:
Mateusz H.:

wszystkie możliwe ustawienia DTC sprawdziliśmy....ustawienia RPC/RPC OUT też nie rozwiązują sprawy.

pzdr,
M.

W porządku, ale czy jesteś pewien, że DTC działa poprawnie? DTCPing nie zwraca błędów?

Jesteś w stanie wykonać poniższe (uzupełnij <> swoimi danymi)?
SET xact_abort ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM <serwer> zdalny>.<baza>.<schemat>.<tabela>
COMMIT

Potwierdźcie mi proszę powyższe.

===
Pozdrawiam,
Daniel


SELECT jest ok, nawet bez begin tran.

Natomiast użycie funkcji DML(insert,update) generuję błąd... ale tylko z poziomu triggera

sprawdzę DTCPing....

Mateusz H. edytował(a) ten post dnia 04.06.12 o godzinie 09:48
Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Istotne jest żeby działało BEGIN DISTRIBUTED TRANSACTION,wszakże ma to być transakcja rozproszona.Daniel N. edytował(a) ten post dnia 04.06.12 o godzinie 09:59

konto usunięte

Temat: Linked Server No transaction is active

Daniel N.:
Istotne jest żeby działało BEGIN DISTRIBUTED TRANSACTION,wszakże ma to być transakcja rozproszona.


co więc uczynić aby DIST TRAN działało


SET XACT_ABORT ON
GO
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO LINKEDSERVER.BAZA.dbo.TABELA(NAZWA)
VALUES('ASD')
COMMIT

nie działa


INSERT INTO LINKEDSERVER.BAZA.dbo.TABELA(NAZWA)
VALUES('ASD')

jest ok.

Mateusz H. edytował(a) ten post dnia 04.06.12 o godzinie 10:09
Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

No właśnie od tego należy zacząć ustalanie problemu. Sprawdźcie DTC (DTCPing) bo tak jak podejrzewałem nie działa poprawnie.

konto usunięte

Temat: Linked Server No transaction is active


Invoking RPC method on SERWER
Problem:fail to invoke remote RPC method
Error(0x6D9) at dtcping.cpp @303
-->RPC pinging exception
-->1753(There are no more endpoints available from the endpoint mapper.)
RPC test failed

Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Jeśli błąd nie pojawia się już przy starcie DTCPing to zweryfikujcie porty DCOM:

host1:
telnet <host2> 135

host2:
telnet <host1> 135

Telnet w WinSrv 2008 włączasz w Add Features->Telnet Client

konto usunięte

Temat: Linked Server No transaction is active

Daniel N.:
Jeśli błąd nie pojawia się już przy starcie DTCPing to zweryfikujcie porty DCOM:

host1:
telnet <host2> 135

host2:
telnet <host1> 135

Telnet w WinSrv 2008 włączasz w Add Features->Telnet Client

telnet działa. zapora systemu windows jest wyłączona na obu maszynach.
Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Wygląda na to, iż rzeczywiście mogło zabraknąć portów. Spróbujcie teraz (przy włączonych DTCPing na obu hostach) na hoście 2 wykonać NETSTAT -anob i zweryfikować port, na którym słucha DTCPing, następnie na hoście 1: telnet <host2> <wyszukany port>

Wydaje mi się, że zakres portów jest cięty na którymś firewallu, DTC może używać portów z zakresu 1024-65535 ---edit---zmieniło się od winsrv 2008 (http://support.microsoft.com/?id=929851).
Porty muszą byc otwarte w obu kierunkach.

Tutaj macie jeszcze kilka sposobów weryfikacji:
http://support.microsoft.com/kb/839880

Generalnie możecie zawęzić liczbę portów dla MSRPC, za pomocą DCOMCNFG lub poprzez edycję rejestru. Działa to dla wszystkich aplikacji używających tego protokołu :) (Zmiana zakresu wymaga restartu serwera :/ )

http://support.microsoft.com/kb/250367/en-us
http://sysadmin-helpdesk.blogspot.com/2009/07/troubles...Daniel N. edytował(a) ten post dnia 04.06.12 o godzinie 11:33

konto usunięte

Temat: Linked Server No transaction is active

Porty są otwarte w obu kierunkach, choć jeszcze staram się dowiedzieć czy na VPN nie ma jakich ograniczeń bo pierwsze informacje były o tym, że nie ma żadnych blokad.

netsh int ipv4 show dynamicport tcp  

pokazuje jedynie dwa wykorzystane porty dynamiczne.

konto usunięte

Temat: Linked Server No transaction is active


czy zmiany konfiguracji MSDTC/DTC, wymagają restartu serwera SQL ?

Daniel N.

Daniel N. Senior IT Architect,
DBA

Temat: Linked Server No transaction is active

Mateusz H.:

czy zmiany konfiguracji MSDTC/DTC, wymagają restartu serwera SQL ?

Nie, aczkolwiek niektóre ustawienia DTC wymagają restartu maszyny (np. zakres portów).

Generalnie procedura łączenia DTC wygląda następująco:
MSDTC używa RPC ednpoint mappera (135) do wynegocjowania portu, na którym będzie nasłuchiwać. Bez ustanowienia limitu, w sposób podany powyżej, zostanie wybrany port dynamiczny z dosyć dużego zakresu. Moze okazać się, iż niestety port(y) nie będą dostępnę przez firewall. W takiej sytuacji - przy współpracy z adminami od firewalli - ustala się pewien zakres portów, które będą otwarte. Zakres ten podaje się w DCOMCNFG lub w rejestrze, wtedy RPC będzie negocjował porty z predefiniowanej puli. Daniel N. edytował(a) ten post dnia 04.06.12 o godzinie 12:43

konto usunięte

Temat: Linked Server No transaction is active


Problem rozwiązany. W pliku hosts z C:\Windows\System32\drivers\etc brakował mapowań IP na instancję

konto usunięte

Temat: Linked Server No transaction is active

Jest to dość dziwne zachowanie i wg mnie niedopracowane rozwiązanie M$.
MSDTC pracuje na nazwach Netbios mimo. że w linkowaniu serwerów można użyć adresó IP na wskazanie serwera SQL.
Hosty pracują w dwóch podsieciach i nie rozpoznawały się po nazwach Netbiosowych, mimo, że prostą operacją jest odszukanie dla adresu IP odpowiedniej nazwy hosta w ramach sieci. Narzucenie mapowania adresu IP na konkretny host poprzez wykorzystanie systemowego pliku Hosts rozwiązało sprawę - tak jak już Mateusz napisał.

Następna dyskusja:

MSSQL 2005 linked server IB...




Wyślij zaproszenie do