2

最近、コードから非常に奇妙な例外が発生しました。

XXX.WrappedSqlException: ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist

while executing create table ST_UTEST2_DATE (value varchar(100) not null unique,replacement varchar(100) not null)
            at XXX
Caused by: java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist

            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
            at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
            at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
            at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
            at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
            at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
            at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
            at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1037)
            at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
            at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3584)
            at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3685)
            at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1088)
            ... 8 more

テーブルは実際には存在しません (この起動の前後の両方)。それは通常、「テーブルの作成」を実行したい場合です。テーブルの作成中に「テーブルまたはビューが存在しません」を取得する方法がわかりません。

この例外は 1 回だけスローされました。まったく同じ環境 (db 状態) の同じコードが何度も正常に実行されました。このコードを実行する複数のスレッドがあり (このテーブルの存在を確認し、存在しない場合は作成します)、それぞれに独自の接続があります。ただし、チェックと作成が行われるフラグメントは同期されます。テーブルの実行は複数のスレッドから同時に発生することはなく、チェックと作成はアトミックに行われます。

このような例外を生成する可能性のあるアイデア (ワイルドな推測を含む) は大歓迎です。

データベースは Oracle 10g です。

4

2 に答える 2

2

これは、データ ディクショナリが破損している場合によく発生します。詳細はこちらをお読みください(正確にはテーブルの作成ではありませんが、これは同じ問題である可能性があります。そこに記載されている解決策を試してください)。catqueue.sql スクリプトを実行する必要がある場合があります。データ ディクショナリでスクリプトを実行する前に、データベースのバックアップを作成する必要があります。ここで同じ議論を参照してください

于 2013-09-30T08:57:29.750 に答える