Sto cercando di eseguire SQL su un server collegato, ma ottengo gli errori seguenti:
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
Ci sono due errori restituiti dal provider:
Errore n. 1:
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile:
HelpContext: $00000000
SQLState: 01000
NativeError: 7412
Errore n. 2
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile:
HelpContext: $00000000
SQLState: 42000
NativeError: 7391
Come posso convincere Microsoft a preferire la funzionalità alla sicurezza?
O, almeno, come posso fare in modo che due SQL Severs parlino tra loro?
Domande correlate
- L'operazione non può essere eseguita perché il provider OLE DB "SQLNCLI10" ... (* il nome del server collegato è
(null)
) - Errore di transazione distribuita? ( utilizzando il provider Oracle )
- Impossibile arruolarsi in una transazione distribuita con NHibernate ( utilizzando Hibernate )
- Errore durante l'utilizzo della transazione distribuita in SQL Server 2008 R2 ( SQL Server 2008 R2, nessuna risposta )
- Errore di transazione distribuita solo tramite codice ( causato dal pool di connessioni )
- Errore durante l'esecuzione del coordinatore delle transazioni distribuite nel server collegato ( SQL Server 2008, nessuna risposta )
- Errore di transazione distribuita? ( nessuna risposta accettata; solo la risposta non aiuta )
- Come inserire nella tabella remota utilizzando il server collegato senza transazione? (la risposta accettata non si risolve )
Quello che ho fatto è irrilevante, ma lo posterò comunque.
Assicurati che il
Distributed Transaction Coordinator
servizio sia in esecuzione su entrambi i computer:Disabilita tutta la sicurezza MSDTC su entrambe le macchine:
Attiva le opzioni casuali sul server collegato:
Maledetto e imprecato.
Cose distrutte.
Controllato che un
SELECT
possa utilizzare il server collegato :SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected)
Controllato che il server client possa
ping
il server remoto :C:\Documents and Settings\avatar>ping asicmstest.contoso.com Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data: Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.40: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Controllato che il server remoto possa comunicare di nuovo, per nome, al server che ha avviato:
C:\Documents and Settings\avatar>ping asitestserver.contoso.com Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data: Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
Selezionato che
@@SERVERNAME
corrisponda al nome del server su entrambi i server :SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER
e
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST
Urlato
Emesso
SET XACT_ABORT ON
prima di inviare la mia richiesta :SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
Concesso
Everyone
Full Control
a :HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
su entrambi i server.