"Kann nicht in die Transaktion aufgenommen werden" mit dem Oracle-Verbindungsserver von MS SQL Server

583
Pete

Wir haben ein Setup, bei dem wir MS SQL Server mit einem verknüpften Oracle-Server verwenden. Unsere Datenbank enthält Ansichten zur Oracle-Datenbank. Wir haben intern geschriebene Software (ich bin der Hauptentwickler), die dieses Setup verwendet.

Wir haben dieses Setup seit 5 Jahren und es funktioniert gut in der Produktion, auf einem Beta-Server und allen unseren Entwicklungsboxen, außer meinen.

Ich habe meinen Computer kürzlich mit Windows 10 neu aufgebaut (ich bin der erste, der hierfür Windows 10 verwendet). Ich verwende den Client für Oracle Database 12c Release 1 (12.1.0.2.0) (zuvor haben wir 11g verwendet, aber Windows 10 scheint 12c zu erfordern).

Wenn ich versuche, ein Update für eine Ansicht auf dem Oracle-Server innerhalb einer Transaktion durchzuführen, schlägt dies fehl. Dies funktioniert problemlos auf allen anderen Servern. Ich bin mir also sicher, dass es sich um ein Windows 10-Problem, ein Oracle 12c-Client-Problem handelt, oder ich habe das Setup irgendwie durcheinander gebracht.

Ich habe alle Setups in der Vergangenheit gemacht (Produktion, Beta und alle Entwickler-Computer-Setups), daher habe ich im Laufe der Jahre viel Erfahrung damit. Das Problem ist nur bei der Transaktion. Nicht-transaktionale Abfragen und Updates funktionieren einwandfrei. Hier ist ein Beispiel, das scheitern wird.

begin tran SET XACT_ABORT ON; update CLIENT set SUPERVISOR_FLAG = 'Y' where CLIENT_CODE = 'XYZ123' commit tran 

Der Fehler, den ich erhalte, ist:

OLE DB provider "OraOLEDB.Oracle" for linked server "REMOTESERVER" returned message "Unable to enlist in the transaction.". Msg 7391, Level 16, State 2, Line 2 The operation could not be performed because OLE DB provider "OraOLEDB.Oracle" for linked server "REMOTESERVER" was unable to begin a distributed transaction. 

Mehrere SQL-Server sind mit demselben Back-End-Oracle-Server verbunden und haben damit kein Problem. Daher kann ich ein Konfigurationsproblem auf dem Oracle-Server ausschließen.

Dies sind meine DTC-Einstellungen, und diese sind mit den anderen Computern identisch, die funktionieren:

DTC Settings

Für meine Oracle-Provider für Ole DB-Einstellungen (OraOLEDB.Oracle) habe ich "Dynamische Parameter", "Geschachtelte Abfragen", "Inprozess zulassen" und "Unterstützt den Like-Operator" aktiviert. Dies ist auch das gleiche wie bei anderen Maschinen.

Unter Serveroptionen sind die Einstellungen:

  • Kollatierungskompatibel - Falsch
  • Datenzugriff - Richtig
  • RPC-True
  • RPC Out - True
  • Remote-Sortierung verwenden - True
  • Sortierungsname - [leer]
  • Verbindungs-Timeout - 0
  • Abfrage-Timeout - 0
  • Händler - Falsch
  • Publisher - Falsch
  • Abonnent - Falsch
  • Lazy Schema Validation - Falsch
  • Werbung für verteilte Transaktionen aktivieren - Richtig

Wieder entsprechen diese den Einstellungen auf anderen Arbeitsservern.

Ich bin verblüfft Ich würde mich wirklich über jede Hilfe freuen, die jemand dazu anbieten kann.

Aktualisieren:

Nicht sicher, ob dies hilft, aber dies ist die DTC-Ablaufverfolgung:

pid=10580 ;tid=10624 ;time=07/19/2018-13:02:06.767 ;seq=1 ;eventid=TRANSACTION_MANAGER_STARTED_2 ;;"TM Identifier='(null) '" ;"MS DTC started with the following settings: Security Configuration (OFF = 0 and ON = 1): Network Administration of Transactions = 1, Network Clients = 1, Inbound Transactions = 1, Outbound Transactions = 1, Transaction Internet Protocol (TIP) = 0, XA Transactions = 1, MSDTC RPC Security = Mutual Authentication Required, Account = NT AUTHORITY\NetworkService, Firewall Exclusion = 0, Transaction Bridge Installed = 0, Filtering duplicate events = 1." pid=10580 ;tid=10624 ;time=07/19/2018-13:02:06.767 ;seq=2 ;eventid=TRACE_SETTINGS ;;"TM Identifier='(null) '" ;"Trace Configuration (OFF = 0 and ON = 1): Tracing Of DTC = 1, Tracing Of Transactions = 1, Tracing Of Aborted Transactions = 1, Tracing Of Long-Lived Transactions = 1, Tracing Of All Transactions = 0, Max Limit on Memory Buffers = 0." pid=10580 ;tid=17072 ;time=07/19/2018-13:02:35.182 ;seq=3 ;eventid=TRANSACTION_BEGUN ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"transaction has begun, description :'user_transaction'" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:35.182 ;seq=4 ;eventid=RM_ENLISTED_IN_TRANSACTION ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"resource manager #1003 enlisted as transaction enlistment #1. RM guid = '452dc8f8-8bbd-4da4-b3e2-e1e29d417a15'" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:36.104 ;seq=5 ;eventid=RECEIVED_ABORT_REQUEST_FROM_BEGINNER ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"received request to abort the transaction from beginner" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:36.104 ;seq=6 ;eventid=TRANSACTION_ABORTING ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"transaction is aborting" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:36.104 ;seq=7 ;eventid=RM_ISSUED_ABORT ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"abort request issued to resource manager #1003 for transaction enlistment #1" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:36.104 ;seq=8 ;eventid=RM_ACKNOWLEDGED_ABORT ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"received acknowledgement of abort request from the resource manager #1003 for transaction enlistment #1" pid=10580 ;tid=17072 ;time=07/19/2018-13:02:36.104 ;seq=9 ;eventid=TRANSACTION_ABORTED ;tx_guid=98d30080-f9d4-46cb-a35c-af47629b377c ;"TM Identifier='(null) '" ;"transaction has been aborted" pid=10580 ;tid=18812 ;time=07/19/2018-13:02:57.188 ;seq=10 ;eventid=CHECKPOINTING_STOPPED ;;"TM Identifier='(null) '" ;"MSDTC is suspending the checkpointing of transactions due to lack of activity" pid=10580 ;tid=18812 ;time=07/19/2018-13:02:57.188 ;seq=11 ;eventid=TRACING_STOPPED ;;"TM Identifier='(null) '" ;"MSDTC is suspending the tracing of long - lived transactions due to lack of activity" pid=10580 ;tid=17072 ;time=07/19/2018-13:04:46.678 ;seq=12 ;eventid=TRACING_STARTED ;;"TM Identifier='(null) '" ;"MSDTC is resuming the tracing of long - lived transactions" 
0

0 Antworten auf die Frage