- - PR -
トランザクション開始中にSQLServerのリンクサーバにアクセスするとエラー7391が発生
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-10 21:46
いつもお世話になってます。
SQLServerのリンクサーバにより別サーバのORACLEに対しアクセスを行っています。 しかし、トランザクションを明示的に開始している最中にリンクサーバへ アクセス(SELECT文等を実行)すると以下のエラーが発生します。 "OLE DB プロバイダ 'MSDAORA' は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。 OLE DB エラー トレース [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b]。" 他の掲示板の過去ログに同じ内容の投稿がいくつかありましたが、 改めて質問させていただきます。 分散トランザクション関係が関連していると思い、以下のサイトを参考にして 設定を行ってみたのですが状況は変わりませんでした。 http://support.microsoft.com/kb/817064 http://support.microsoft.com/kb/329332 http://support.microsoft.com/kb/827805 http://support.microsoft.com/kb/839279 環境 OS:Windows2003Server EntEd SP1 DB:SQLServer2000 EntEd SP4 (ORACLEのバージョンは9i) よろしくお願いいたします。 | ||||
|
投稿日時: 2006-01-11 09:25
1.DTCが開始されていない
2.MtxOCI.dllが読み込まれていない。 3.トランザクションをネスとしている。 のいずれかの様です。 http://frog.raindrop.jp/knowledge/archives/000108.html | ||||
|
投稿日時: 2006-01-11 11:40
Anthyhimeさま返信ありがとうございます。
1.DTCは開始されていました。 2.レジストリの値が異なっていたので変更しました。 3.トランザクションのネストは行っていません。 ご教授頂いたサイトの内容と合わせて確認してみましたが現象は変わりませんでした。 リンクサーバにて使用しているプロバイダは「Microsoft OLE DB Provider for Oracle」です、Books Onlineかネットかで当プロバイダは分散トランザクションを サポートしていると載っていたような覚えがあるのですが、間違いないでしょうか? 度々の質問で申し訳ありません。 | ||||
|
投稿日時: 2006-01-11 12:34
ここらあたりで解消しますかね。
http://support.microsoft.com/default.aspx?scid=kb;ja;280106 | ||||
|
投稿日時: 2006-01-11 14:52
SQLServerをインストールしてあるサーバの
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI」配下の 各レジストリ値は以下としてあります。 OracleXaLib:oraclient9.dll OracleSqlLib:orasql9.dll OracleOciLib:oci.dll レジストリ値が正しくないためにMtxOCI.dllが読み込まれず、 分散トランザクションが実行されていないということなのでしょうか? その後も調査してみたのですが、レジストリ値は上記の設定で 良さそうな感じなのですが・・・ ちなみに変更前のレジストリ値は以下でした OracleXaLib:xa80.dll OracleSqlLib:sqllib80.dll OracleOciLib:oci.dll | ||||
|
投稿日時: 2006-01-11 16:43
自己レスです。
コンポーネントサービスにおいて、MSDTCの「セキュリティの構成」により 「DTC ログオン アカウント」を"NT Authority\NetworkService"から Administrators権限をもつローカルアカウントに変更したところ エラーが発生せずに実行できるようになりました。 (分散トランザクションが開始できるようになった!?) しかし、以下のサイトに記述されているようにMSDTCサービスのログオンアカウントは "ネットワークサービス"とする必要があるようです。 http://support.microsoft.com/kb/839279 この対応で本当に良いものなのでしょうか・・・ | ||||
|
投稿日時: 2006-01-12 10:26
うまく行ったように思えたのですが、サーバを再起動したところイベントログにて
以下のエラーが発生し、DTCサービスが起動できないために同様のエラーが発生する ようになってしまいました。 MS DTC サービスを実行しているアカウントが無効です。 これは、サービスのアカウント情報が Microsoft 管理コンソール (MMC) のサービス スナップインを使用して変更された場合に起こります。 MS DTC サービスは開始作業を続行します。MS DTC サービスのアカウント情報が、コンポーネント サービス エクスプローラを使用して更新されていることを確認してください。 アカウント情報はコンポーネントサービスエクスプローラを使用して変更したの ですが、そもそもサービスに対するログオンは特定のローカルアカウントにする ことがまずかったのでしょうか? 結局、DTCサービスの再インストールを行い、再度設定をしてみたのですが 当初の問題は解決できず、振り出しに戻ってしまいました。 | ||||
|
投稿日時: 2006-01-12 14:01
問題は未だ解決しておりませんが、今までに対応を行った内容をまとめます。
(下記手順はMSDTCサービスをアンインストールした後からとなります) 1.MSDTCサービスのインストール support.microsoft.com/kb/839279 2.コンポーネントサービスよりMSDTCのセキュリティ構成の設定 ・「ネットワークDTCサービス」をチェック ・「受信を許可する」、「送信を許可する」をチェック ・「トランザクションマネージャ通信」の「認証を必要としない」を選択 support.microsoft.com/kb/839279 3.ネットワークDTCアクセスの有効化 support.microsoft.com/kb/817064 4.レジストリの変更 [HKEY_LOCAL_MACHINE/SOFTWARE/icrosoft/MSDTC] 「TurnOffRpcSecurity」を追加(設定値=1) support.microsoft.com/kb/827805 [HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSDTC/MTxOCI] ・OracleOciLib:oci.dll ・OracleSqlLib:orasql9.dll ・OracleXaLib:oraclient9.dll 以上の設定を行い、クエリアナライザ等より以下のSQLを実行する
いろいろ調査した結果、一通り設定を行なってみたつもりですがそれでも解決できず、お手上げ状態となっています。 ご存知のかたおりましたらご教授願います。 よろしくお願いいたします。 |