- PR -

Oracle8.1.6のデータベースリンクを使用した際の警告(ORA-02055)に関する件

1
投稿者投稿内容
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2005-04-26 14:23
いつもお世話になっております。なおと申します。

Oracleでデータベースリンクを使用した際のSQL文実行時に、警告(ORA-02055)が発生します。

Oracleサーバの構成は以下の通りです。
【端末1】
 Oracle:Oracle8.1.6
 OS:Windows2000 Professional
 テーブル『AA』を作成
【端末2】
 Oracle:Oracle8.1.6
 OS:Windows2000 Professional
 テーブル『AA』を作成
 【端末1】に対するデータベースリンク『INST01.WORLD』を作成
 以下のSQL
  SELECT COUNT(*) FROM AA@INST01.WORLD
 を実行すると、【端末1】のテーブル『AA』の件数取得が可能である事も確認済。

以上のサーバ構成に対して、SQL*Plusから【端末2】に接続し、以下のコマンドを(コピーし、連続して)実行しました。

DELETE FROM AA@INST01.WORLD;
INSERT INTO AA@INST01.WORLD ( item1,item2,item3 ) SELECT item1,item2,item3 FROM AA;
COMMIT;
EXIT;

※.【端末1】のテーブル『AA』の内容を削除、【端末2】のテーブル『AA』の内容で【端末1】のテーブル『AA』に登録

この処理が、今まではエラー無く実行する事が出来ていたのですが、
昨日から以下のようなエラーを発するようになりました。

『INSERT』の行では、以下のエラーが表示されます。
> エラー行: 1: エラーが発生しました。
> ORA-02055: 分散更新操作でエラーが発生しました。ロールバックが必要です。
> ORA-02068: INST01で重大なエラーが発生しました。
> ORA-03113: 通信チャネルでファイルの終わりが検出されました。

『COMMIT』の行では、以下のエラーが表示されます。
> エラー行: 1: エラーが発生しました。
> ORA-02067: トランザクションまたはセーブポイントのロールバックが必要です。

「ロールバックが必要」とエラー出力しておりますが、コマンドを連続して実行させた為に、
SQL*Plusではロールバックを行わずにEXITが行われました。

このエラーが発生した後、再度SQL*Plusを起動し、
同様のコマンドを実行させると、以下のようなエラーを発するようになりました。

『INSERT』の行では、以下のエラーが表示されます。
> エラー行: 1: エラーが発生しました。
> ORA-02055: 分散更新操作でエラーが発生しました。ロールバックが必要です。
> ORA-12571: TNS: パケットの書込み機に障害が発生しました。
> ORA-12571: TNS: パケットの書込み機に障害が発生しました。

『COMMIT』の行では、以下のエラーが表示されます。
> エラー行: 1: エラーが発生しました。
> ORA-02067: トランザクションまたはセーブポイントのロールバックが必要です。

さらに3度目以降は、2度目と同じ結果(ORA02055,ORA-12571)が出力されます。

端末1, 端末2に関して、Oracleサーバのログを調査しましたが、
【端末1】
  1度目, 2度目共に、ALERTログには出力されておらず、trcファイルも作成されていない状態。
【端末2】
  1度目は、ALERTログには出力されておらず、trcファイルは作成されていない状態。
  2度目は、ALERTログには出力されておらず、trcファイルは作成されている状態。
  (trcには、ORA-12571の詳細(?)が書かれてあり、何故起こったのかまでは分かりませんでした。)
となっておりました。

エラーが出力されるようになった昨日以降と、エラーが出力されていなかった一昨日以前との差
に関する調査・洗い出しを行いましたが、特に何も見当たりませんでした。
(データ件数・内容の変化は無く、環境面での変更もありません。)

この状態から復帰する方法、もしくは、まずどの部分から調査すべきか教えて頂きたく思います。
以上、宜しくお願いします。
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-04-26 14:32
今日は。

え〜と、とりあえず「INST01」のDBの不整合が起きていて、書き込みが出来ない状態に
なっている様に見えるんですが。

traceファイル等があるならばオラクル社にTARを上げてみては如何? 
(KROWNとかも検索してみるとか。)
_________________
Inspired Ambitious
ISMS Assistant Auditor
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2005-04-26 16:11
ご回答ありがとうございます。

> 「INST01」のDBの不整合が起きていて、
端末1, 端末2には、別テーブル『BB』が共に存在し、
テーブル『AA』の場合と同様の【データベースリンクを用いたInsert】を行った場合、エラーは発生しませんでした。
テーブル『AA』自体が不整合状態になっているかもしれない、という事でしょうか?
(そうなると、、、リカバリ作業が必要になるんですね・・。)

> traceファイル等があるならばオラクル社にTARを上げてみては如何?
> (KROWNとかも検索してみるとか。)
出力されたトレースファイルに関しては、オラクル社に問い合わせてみようかと思います。
(尚、KROWNでの検索では引っかかりませんでした。)
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2005-04-26 16:23
では、とりあえず単純に直接値を入れる形式で
端末1、2でそれぞれで実行してみるとどうなるか確認してみてはいかがでしょう。

端末1
INSERT INTO AA ( item1,item2,item3 ) VALUSE (...)

端末2
INSERT INTO AA@INST01.WORLD ( item1,item2,item3 ) VALUSE (...)

#1と2逆にしてしまったので修正

[ メッセージ編集済み 編集者: TomScissors 編集日時 2005-04-26 16:23 ]
なお
常連さん
会議室デビュー日: 2004/02/17
投稿数: 29
投稿日時: 2005-04-27 09:54
【端末1】から直接値を入れるInsert文を実行した場合、問題なくInsert出来ました。
【端末2】からデータベースリンクを用いて、かつ、直接値を入れるInsert文を実行した場合、
(実行回数2回目以降のエラーと同様の)以下のエラーが出力されました。
> エラー行: 1: エラーが発生しました。
> ORA-02055: 分散更新操作でエラーが発生しました。ロールバックが必要です。
> ORA-12571: TNS: パケットの書込み機に障害が発生しました。
> ORA-12571: TNS: パケットの書込み機に障害が発生しました。
1

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