- PR -

SQLServerとOracleをリンクさせる

1
投稿者投稿内容
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2005-01-07 19:33
お世話になっております。

現在、MSDEとOracle10g StandardEditionを使って
データの連携をするシステムを構築しております。
具体的には、あるシステムがMSDEにデータを書き込んだ時点で、
同じデータをOracleの同一構成のテーブルに書くという仕組みになります。

環境は、
Windows 2003 Server Standard Edition
MSDE 2000 SP3
Oracle Standard Edition one 10g
となります。

Microsoftのサポートページを見ながら、DBのリンクを作成し、
SQLServerのEnterpriseManagerから、OracleのテーブルをSELECT
でデータを取得したり、INSERTでデータの挿入をするところまで
できました。
 で、次に、該当のテーブルにトリガーを作成し、Oracleの
テーブルに同じデータをINSERTする文を書き設定しました。

次に、SQLServerEnterpriseManagerのSQLペインから、INSERT文を
発行すると、トリガーも正常に動作し、Oracleのテーブルにも
データがINSERTされているのですが、テストでAccessからODBC経由で接続して、
テーブルを開き、データの追加をすると

[Microsoft][ODBC SQL Server Driver][SQL Server]OLE DB エラー トレース[OLE/DB Provider 'MSDAORA' ITranscationJoin::JoinTranscation returned 0x8000d048]。
[Microsoft][ODBC SQL Server Driver][SQL Server]OLE DB プロバイダ 'MSDAORA'は分散トランザクションを開始できなかったので、要求した操作は実行されませんでした。

と言われてしまいます。
イベントログには、何も残っていません。

http://support.microsoft.com/kb/816633/ja
に掲載されている事項も試したのですが、ダメでした。(これをやる前は、イベントログに該当のメッセージが記録されていたが、権限設定を変更してからでなくなった)

なにが悪いのかの見当がつきません。

不思議なのは、INSERT文を発行する文には問題ないのに、ソフトウェアを経由すると物の見事に失敗してくれるところです・・・。

なにか、ヒントなどないでしょうか?
どんな小さな事でも結構です。是非よろしくお願い致します。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-01-08 02:40
Dr.Doraemonさん、こんばんは。

取り敢えず、↓この辺を。
http://support.microsoft.com/default.aspx?scid=kb;ja;280106

上記ドキュメントにもあるとおり、リンク サーバを用いて Oracle のデータを更新する場合には、分散トランザクション・コーディネータ関係のレジストリを弄る必要がありますが、その辺はOKでしょうか?
Dr.Doraemon
ぬし
会議室デビュー日: 2002/03/23
投稿数: 265
投稿日時: 2005-01-08 13:41
きくちゃん様

深夜にもかかわらず、ご返答ありがとうございます。
ご指摘頂いたページは私も参考にさせて頂きました。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI]
配下のレジストリは、Oracleの10g用に変更しております。

不思議なのは、SQLServer EnterpriseManagerの中でINSERT文を発行する分には正常にどうするのに、Access経由やEnterpriseManagerのグリッドからデータを入れるとエラーが出る理由がわかりません。

MSDTC周りだとは思うのですが・・・。
1

スキルアップ/キャリアアップ(JOB@IT)