オーラ-30926:できない安定した行のセットは、ソーステーブル

StackOverflow https://stackoverflow.com/questions/2337271

  •  22-09-2019
  •  | 
  •  

質問

を取得しています

オーラ-30926:できない安定した行のセットは、ソーステーブル

以下のクエリ:

  MERGE INTO table_1 a
      USING 
      (SELECT a.ROWID row_id, 'Y'
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

私た table_1 このデータをもった、内側のクエリ(src るもデータです。

なぜこのエラーに来るか、どうすいのでしょうか。

役に立ちましたか?

解決

これは通常、USING句で指定されたクエリで重複によって引き起こされます。これはおそらく、TABLE_Aが親表であり、同じROWIDが複数回返されることを意味します。

あなたはすぐに(「Y」は一定の値である場合は、実際に、あなたもクエリでそれを配置する必要はありません)あなたのクエリでDISTINCTを使用して問題を解決することができます。

あなたはこのような何かを行うことができます(あなたのテーブルを知らない)クエリが正しいと仮定します:

  MERGE INTO table_1 a
      USING 
      (SELECT distinct ta.ROWID row_id
              FROM table_1 a ,table_2 b ,table_3 c
              WHERE a.mbr = c.mbr
              AND b.head = c.head
              AND b.type_of_action <> '6') src
              ON ( a.ROWID = src.row_id )
  WHEN MATCHED THEN UPDATE SET in_correct = 'Y';

他のヒント

あなたはおそらく、ターゲットテーブルの複数回の同じ行を更新するためにしようとしています。私はちょうど私が開発したMERGE文に非常に同じ問題に遭遇しました。ことを確認してください更新は、マージの実行中に複数回、同じレコードには触れません。

  

どのようにトラブルシューティングORA-30926エラーが発生しますか? (ドキュメントID 471956.1)

1)失敗したステートメントを識別します。

  

ALTERセッションセットイベント「30926トレース名errorStackがレベル3」;

または

  

ALTER SYSTEMセットイベント「30926トレース名はオフerrorStackが」;

と、それが発生したときます。

udumpの中で.trcのファイルを監視 それが正しい場合は、

2)が、おそらくこれは、最近行われていない場合、クエリの実行計画を確認するために計画またはTKPROFを説明)し、分析や関係テーブル上の計算統計使用(SQL文、チェックを発見しました。再構築(または再作成/ドロップ)インデックスがあまりにも役立つかもしれません。

3.1)SQLステートメントは、MERGEですか? 参加するには重複する値が存在しないことを確実にするUSING句によって返されたデータを評価します。決定論的句

が含まれるようにMERGE文を変更します

3.2)このビュー経由UPDATEステートメントですか? もしそうなら、テーブルにビューの結果を移入しようとすると、直接テーブルを更新してみてください。

3.3)テーブルの上にトリガがありますか?それでも失敗するかどうかを確認するために、それを無効にしてみてください。

3.4)ステートメントは、「IN-サブクエリ」非マージ可能ビューが含まれていますか?クエリは、「FOR UPDATE」句を持っている場合、これは重複する行が返されるにつながることができます。バグ2681037

を参照してください。

3.5)テーブルには、未使用の列を持っていますか?これらを削除すると、エラーを防ぐことができます。

SQLを変更するとエラーが硬化しない場合は、

4)、問題が連鎖行がある場合は特に、テーブルがある可能性があります。 4.1)任意のテーブル内の破損またはその索引があるかどうかを確認するためにSQLで使用されるすべてのテーブル上の声明「TABLE VALIDATE STRUCTURE CASCADE ANALYZE」を実行します。 4.2)を確認し、そして排除、テーブル上の任意の連鎖または移行ROWS。このようPCTFREEの正しい設定としてこれを最小化する方法があります。 使用注122020.1 - 行連鎖と移行 4.3テーブルは、さらに索引構成の場合)、以下を参照してください。 注102932.1 - のIOTに連鎖行を監視する

たエラーは日本が12cにお答え合(複製、非決定論的表現のWHERE句).私の場合は関連するその他のエラー原因によると、オラクルのメッセージテキストを重視し):

オーラ-30926:できない安定した行のセットは、ソーステーブル
原因:安定した行のセットできなかった ていますが、これらのdml活動 または、非決定的な場を提供しています。

を合併した大きなバッチした上で実行されるライブデータベースに多くの同時のユーザーが変える必要があります。う為取引の前に統合した合併には別途、犯ます。その解決策を見出すことに合意した、とのメッセージ:

アクション:除非決定性が条項と 再発行のdml.

SQL Error: ORA-30926: unable to get a stable set of rows in the source tables
30926. 00000 -  "unable to get a stable set of rows in the source tables"
*Cause:    A stable set of rows could not be got because of large dml
           activity or a non-deterministic where clause.
*Action:   Remove any non-deterministic where clauses and reissue the dml.

このエラーが発生した私にとって が重複データ(16K)

I して独特のうまくいった .

そんな中、もしくは合併しない独自の同proble発生した 二時間でしたコミット

後の合併がコミットは同じエラーが表示されます。

なく、クエリー作品がコミットを与えた後に合併します。

更なる解明のご利用にな解決のエラーオ-30926さらに一般の場合:

することを確実にしなければならなセットの指定されたデータの利用()条項は、複製値を 参列, (の カラムの()の項.

にOPの例は、使用条項だけを選んでキーで十分に加え個別の利用を提供しています。しかし、一般の場合には、使用条項を選択組み合わせキー列を一致する属性カラムで使用する更新...セットを提供しています。そのために一般の場合、追加で個別に利用条項だくことができるよう更新を行同じキーの場合も、ORA-30926エラーになります。

これは家のDCookieの回答のポイント3.1Tagarの答えは、私の経験からない場合、すぐに自明である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top