3

巨大なデータ ファイルを処理し、そのデータを Oracle 11g データベースに入れるバッチ アプリケーションを実行しています。Java 1.6.20、ojdbc6、および ucp11.2 を使用しています。断続的に、ORA-01010 無効な操作の SQLExceptions が発生します。このエラーの意味と対処方法を調べたところ、次のようになりました。

ORA-01010: OCI操作が無効です

原因:

次のいずれかです。1) 無効な OCI 操作を試みました。2) バージョン 7.1 (またはそれ以降) のライブラリにリンクされた Oracle クライアント アプリケーションを使用しており、環境変数 ORA_ENCRYPT_LOGIN が TRUE に設定されており、バージョン 7.0 (またはそれ以前) の Oracle サーバーに接続しようとしました。3) バージョン 7.1 (またはそれ以降) の Oracle Server に接続しており、初期化パラメータ DBLINK_ENCRYPT_LOGIN が TRUE に設定されており、バージョン 7.0 (またはそれ以前) の Oracle Server を指すデータベース リンクを使用しようとしました。4) バージョン 9.0.2 (またはそれ以降) の Oracle サーバーに接続しており、バージョン 9.0.1 (またはそれ以前) の Oracle サーバーを指すデータベース リンクを分散自律型トランザクションに使用しようとしました。

アクション:

上記の原因の場合: 1) 無効な OCI 操作を使用しないでください。2) 分散データベースで暗号化された接続パスワードを使用したくない場合は、ORA_ENCRYPT_LOGIN を FALSE に設定します。暗号化された接続パスワードを使用する場合は、すべての Oracle サーバーをバージョン 7.1 (またはそれ以降) にアップグレードする必要があります。3) 分散データベースで暗号化されたデータベース リンクを使用したくない場合は、DBLINK_ENCRYPT_LOGIN を FALSE に設定します。暗号化されたデータベース リンクを使用する場合は、すべての Oracle サーバーをバージョン 7.1 (またはそれ以降) にアップグレードする必要があります。4) バージョン 9.0.1 (またはそれ以前) の Oracle サーバーで分散自律型トランザクションを試行しないでください。

私は最近の JDBC ドライバーとかなり最新のバージョンの Oracle を使用しているため、これは私には意味がありません。問題がログインである場合、なぜ 90-95% で機能し、他の 5-10% で機能しないのでしょうか? すべての Oracle サーバーが 11g であることを確認しました。また、ORA-01010 情報を掲載して、これに答えようとする人が、答えを見つけたと思って、答えを避けることができるようにしました。私の問題とはあまり関係がないように見えるこの一見難解なメッセージを解釈できない限り、気にしないでください。

以下のコメントに基づいて更新します。

正確なエラーは次のとおりです。

Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [select sum(FREQ) from CONTRIBUTOR_DETL where EXTRACT(MONTH FROM DOS) BETWEEN 6 and 8 and CONTRIBUTOR_HDR_ID = ? and ERROR_FOUND = 'N']; SQL state [72000]; error code [1010]; ORA-01010: invalid OCI operation
; nested exception is java.sql.SQLException: ORA-01010: invalid OCI operation

        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
        at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:728)
        at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:744)
        at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:775)
        at org.ddpa.dsc.dao.impl.DscSummaryDaoImpl.getAcceptedOccurrencesBySummerQuarter(DscSummaryDaoImpl.java:176)
        at org.ddpa.dsc.reports.DscSummaryReport.getSummaryReport(DscSummaryReport.java:132)
        at org.ddpa.dsc.pre.DscPreprocessor.preprocessFile(DscPreprocessor.java:195)
        at org.ddpa.dsc.Main.main(Main.java:33)
Caused by: java.sql.SQLException: ORA-01010: invalid OCI operation

        at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
        at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1034)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:791)
        at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:866)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3387)
        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3431)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
        at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at oracle.ucp.jdbc.proxy.PreparedStatementProxyFactory.invoke(PreparedStatementProxyFactory.java:110)
        at $Proxy3.executeQuery(Unknown Source)
        at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:643)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586)
4

1 に答える 1

0

clob列にアクセス/書き込みしようとすると、このエラーが表示されていました。これはオラクル自体のバグであり、常に発生するとは限りません。12 にアップグレードした後、この問題はなくなりました。

しかし、少なくとも、例外をキャッチして、問題の原因となっている SQL ステートメントを特定できるはずです。

于 2014-08-18T02:40:25.323 に答える