OCI 无效操作ORA-01010

问题描述 投票:0回答:1

我正在运行一个批处理应用程序,该应用程序处理巨大的数据文件并将数据放入 Oracle 11g 数据库中。我使用的是 Java 1.6.20、ojdbc6 和 ucp11.2。我间歇性地收到 ORA-01010 无效操作 SQLExceptions。当我查找此错误的含义以及为此采取的措施时:

ORA-01010: 无效的 OCI 操作

原因:

以下情况之一:1) 您尝试执行无效的 OCI 操作。 2) 您正在使用与版本 7.1(或 更高)库,设置环境变量 ORA_ENCRYPT_LOGIN 为 TRUE,并且您尝试连接到版本 7.0(或更低版本) 甲骨文服务器。 3) 您连接到版本7.1(或更高版本) Oracle Server,初始化参数DBLINK_ENCRYPT_LOGIN为 设置为 TRUE,并且您尝试使用指向 7.0 版(或更低版本)Oracle 服务器。 4) 您已连接到 版本 9.0.2(或更高版本)Oracle Server 并且您尝试使用 指向版本 9.0.1(或更低)Oracle Server 的数据库链接 分布式自治交易。

行动:

对于上述原因: 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)
oracle jdbc oracle-call-interface ucp
1个回答
0
投票

当我尝试访问/写入某些 clob 列时,我经常会看到此错误。我相信这是oracle本身的一个bug,而且不会一直发生。升级到12后,这个问题就消失了。

但至少你应该能够捕获异常并确定哪个sql语句导致了问题。

© www.soinside.com 2019 - 2024. All rights reserved.