5

分散トランザクションを機能させるために、1 週間近く試してみました。MySQLからデータを選択しようとするMSSQLに関するいくつかの手順があります。私の必要性は、これを 1 つの (!) トランザクションで行うことです。OpenLinkのSingle-Tier MySQLドライバーを使用してMSSQLでODBC接続をセットアップした時点で、XAトランザクションが正常に機能することがわかりました(ODBC接続の構成後に統合されたテストボタンがあります)。次に、MSDASQLを介してMSSQLでリンクサーバーをこのODBC接続にセットアップしましたが、実行するとき

begin distributed transaction
    select * from optin..lu_source_proc
    select * from openquery(optinxa, 'SELECT * FROM tbl_source_proc')
commit transaction

実際のトランザクション内でこれ以上トランザクションを開始できないというエラーが表示されます。( Der OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "Es können keine weiteren Transaktionen in dieser Sitzung gestartet werden." zurückgeben.)

別のテスト:

set transaction isolation level serializable
begin transaction
    select * from optin..lu_source_proc
    select * from openquery(optinxa, 'SELECT * FROM tbl_source_proc')
commit transaction

しかし、構成時にODBCDer OLE DB-Anbieter "MSDASQL" für den Verbindungsserver "optinxa" hat die Meldung "[OpenLink][ODBC][Driver]Driver does not support this function" zurückgeben.ドライバーが XA トランザクションが機能すると述べているのはなぜでしょうか?

4

2 に答える 2

2

ここには 2 つの重要な側面があります --

1) OLE DB分散トランザクションをサポートしているようです。そのため、Microsoft OLE DB Provider for ODBC Data Sources もサポートされていると思います...

また、MSDASQL が分散トランザクションをサポートしている場合、ODBC ドライバーに委任するのではなく、その機能を直接処理すると思います...

-- を呼び出すことにより、ODBC ドライバで分散トランザクションがオンになります。

SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC)

そのため、DSN 作成ダイアログを介して OpenLink ドライバーのログを有効にすると、SQLSetConnectAttr(SQL_ATTR_ENLIST_IN_DTC) が呼び出されているかどうかを判断するのに役立ちます。

2) 「ドライバーはこの機能をサポートしていません」というエラーに至るまでの ODBC アクティビティをすぐに確認するには、追加のトレースを確認する必要があります...

これをさらに進めるために、 OpenLink Softwareでサポートケースを記録できます...

于 2011-08-26T14:43:07.993 に答える
0

XA データ ソースを Microsoft Distributed Transaction Coordinator (MS DTC) と共に使用して分散トランザクションを処理する場合は、次の手順が必要です

Windows XP および Windows Server 2003 の場合:

  1. コントロール パネルから [管理ツール] を開き、[コンポーネント サービス] を開きます。[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックして、[名前] ボックスに dcomcnfg と入力し、[OK] をクリックしてコンポーネント サービスを開くこともできます。

  2. [コンポーネント サービス]、[コンピューター] を展開し、[マイ コンピューター] を右クリックして、[プロパティ] を選択します。

  3. [MSDTC] タブをクリックし、[セキュリティの構成] をクリックします。

  4. [XA トランザクションを有効にする] チェック ボックスをオンにして、[OK] をクリックします。これにより、MS DTC サービスが再起動します。

  5. [OK] をもう一度クリックして [プロパティ] ダイアログ ボックスを閉じ、コンポーネント サービスを閉じます。

  6. SQL Server を停止してから再起動し、MS DTC の変更と同期するようにします。

Windows Vista および Windows Server 2008 の場合:

  1. [スタート] ボタンをクリックし、[検索の開始] ボックスに「dcomcnfg」と入力し、Enter キーを押してコンポーネント サービスを開きます。[検索の開始] ボックスに「%windir%\system32\comexp.msc」と入力して、コンポーネント サービスを開くこともできます。

  2. [コンポーネント サービス]、[コンピューター]、[マイ コンピューター]、[分散トランザクション コーディネーター] の順に展開します。

  3. [ローカル DTC] を右クリックし、[プロパティ] を選択します。

  4. [ローカル DTC のプロパティ] ダイアログ ボックスの [セキュリティ] タブをクリックします。

  5. [XA トランザクションを有効にする] チェック ボックスをオンにして、[OK] をクリックします。これにより、MS DTC サービスが再起動します。

  6. [OK] をもう一度クリックして [プロパティ] ダイアログ ボックスを閉じ、コンポーネント サービスを閉じます。

  7. SQL Server を停止して再起動し、MS DTC の変更と同期していることを確認します。

「 XA トランザクション サポートにはレジストリ エントリが必要」も参照し、サード パーティ製ドライバ XA DLL がこれらのレジストリ エントリを作成することを確認します。

于 2011-08-29T16:54:43.903 に答える