OCI неверная операция ORA-01010
Я запускаю пакетное приложение, которое обрабатывает огромные файлы данных и помещает данные в базу данных Oracle 11g. Я использую Java 1.6.20, ojdbc6 и ucp11.2. Периодически я получаю ORA-01010 недопустимую операцию SQLExceptions. Когда я посмотрел значение этой ошибки и действия, которые нужно предпринять для этого:
ORA-01010: недопустимая операция OCI
Причина:
Одно из следующего: 1) Вы попытались выполнить недопустимую операцию OCI. 2) Вы используете клиентское приложение Oracle, связанное с библиотеками версии 7.1 (или выше), для переменной среды ORA_ENCRYPT_LOGIN установлено значение TRUE, и вы попытались подключиться к серверу Oracle Server версии 7.0 (или ниже). 3) Вы подключены к Oracle Server версии 7.1 (или выше), для параметра инициализации DBLINK_ENCRYPT_LOGIN задано значение TRUE, и вы попытались использовать ссылку на базу данных, указывающую на Oracle Server версии 7.0 (или ниже). 4) Вы подключены к Oracle Server версии 9.0.2(или выше) и пытались использовать ссылку на базу данных, указывающую на Oracle Server версии 9.0.1(или ниже) для распределенной автономной транзакции.
Действие:
По указанным выше причинам: 1) Не используйте недопустимую операцию OCI. 2) Если вы не хотите использовать зашифрованные пароли подключения в вашей распределенной базе данных, установите для ORA_ENCRYPT_LOGIN значение FALSE. Если вы хотите использовать зашифрованные пароли подключения, вы должны обновить все серверы Oracle до версии 7.1 (или выше). 3) Если вы не хотите использовать зашифрованные ссылки на базу данных в вашей распределенной базе данных, установите для DBLINK_ENCRYPT_LOGIN значение FALSE. Если вы хотите использовать зашифрованные ссылки на базы данных, вы должны обновить все серверы Oracle до версии 7.1 (или выше). 4) Не пытайтесь распределенной автономной транзакции на Oracle Server версии 9.0.1(или ниже).
Это не имеет смысла для меня, потому что я использую более свежие драйверы 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)
1 ответ
Я имел обыкновение видеть эту ошибку, когда я пытаюсь получить доступ / написать некоторый столбец clob. Я верю, что это ошибка самого оракула, и она не будет происходить постоянно. После того, как мы повысили до 12, эта проблема исчезла.
Но по крайней мере вы должны быть в состоянии перехватить исключение и определить, какой SQL-оператор вызывает проблему.