1

SQL Server 2000 を使用して、単一の Oracle リンク サーバーに対して分散トランザクションを実行しようとしています。次のスクリプトを思い付きました。

BEGIN DISTRIBUTED TRANSACTION;
  SET XACT_ABORT  off;
  GO

  SELECT MAX(DEPTNO)+1,
  FROM [WSF08_CONTA_ORADATA_II]..[SCOTT].DEPT

  SET XACT_ABORT  on;
  GO

COMMIT TRANSACTION;

スクリプトが実行されるとすぐに、次のエラーが発生し、続いて SQL Management studio がフリーズして接続を閉じます。

メッセージ 7399、レベル 16、状態 1、行 3
リンク サーバー "WSF08_CONTA_ORADATA_II" の OLE DB プロバイダー "OraOLEDB.Oracle" がエラーを報告しました。プロバイダーは、予期しない壊滅的な障害を報告しました。
メッセージ 7303、レベル 16、状態 1、行 3 リンク サーバー "WSF08_CONTA_ORADATA_II" の OLE DB プロバイダー "OraOLEDB.Oracle" のデータ ソース オブジェクトを初期化できません。

何が起こっている?

*PD:

  1. 通常のクエリを使用してデータを作成/更新/削除できますが、DISTRIBUTED TRANSACTION句が含まれているとエラーが表示されます。
  2. 私たちは最近、サーバーを Oracle 10g にアップグレードまたはリンクしました。
4

1 に答える 1

3

SQL Server と Oracle を分散トランザクションに登録するには、MSDTC で XA トランザクションを有効にする必要があります。XA トランザクションのサポートを参照してください。

DTC が XA 準拠のトランザクション マネージャとして機能する場合、Oracle、IBM DB/2、Sybase、Informix、およびその他の XA 準拠のリソース マネージャは、DTC が制御するトランザクションに参加できます。

于 2010-01-29T21:51:35.253 に答える