【故障處理】由於ojdbc14.jar版本不正確導致ORA-01461和ORA-01483故障的處理
今天遭遇由於ojdbc14.jar版本不正確導致ORA-01461和ORA-01483報錯的問題。簡單記錄一下這個問題的處理過程。
1.應用程式報錯現象
以下是從應用程式日誌中擷取的兩段報錯資訊。
2011-05-05 04:24:28,148 INFO [org.iata.asdcore.acdm.esb.service.AcdmEsbServiceImpl] The number is ***********************986
2011-05-05 04:24:28,451 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01461: can bind a LONG value only for insert into a LONG column
2011-05-05 04:24:28,451 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01461: can bind a LONG value only for insert into a LONG column
2011-05-05 04:24:28,451 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
2011-05-03 19:10:14,414 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01483: invalid length for DATE or NUMBER bind variable
2011-05-03 19:10:14,414 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01483: invalid length for DATE or NUMBER bind variable
2011-05-03 19:10:14,414 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:254)
這裡提到的兩個報錯資訊彙總如下:
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-01483: invalid length for DATE or NUMBER bind variable
由於這個報錯的發生,導致資料出現了異常。業務資料的恢復耗費了很大的精力。
2.問題分析
MOS上記錄了這個報錯資訊的基本原因和處理方法。
參見MOS文章“OERR: ORA 1461 can bind a LONG value only for insert into a LONG column [ID 18864.1]”,內容如下。
Error: ORA 1461
Text: can bind a LONG value only for insert into a LONG column
-------------------------------------------------------------------------------
Cause: An attempt was made to insert a value from a LONG datatype into
another datatype.
This is not allowed.
Action: Do not try to insert LONG datatypes into other types of columns.
從報錯資訊上看,貌似是由於插入的值過大導致的報錯。
不過從插入的資訊和表結構定義進行分析,初步排除了這種可能性。
3.進一步的問題現象
從測試環境上進行了反覆測試,現象如下:
在序列執行下,應用程式執行正確無誤,沒有出現如上報錯。
然而,在並行執行的條件下,便“偶爾”會出現這個問題。
從此現象分析,便可以排除故障是由於資料本身問題導致的。
4.問題原因
經過嘗試和測試。最終確認了此問題是由於應用程式中使用的驅動程式與Oracle伺服器端的版本不一致導致的。
5.處理方法
將伺服器端的驅動程式(ojdbc14.jar)替換應用程式中的檔案。
資料庫伺服器上驅動程式位置如下。
ora10g@secdb /home/oracle$ cd $ORACLE_HOME/jdbc/lib
ora10g@secdb /oracle/ora10gR2/product/10.2.0/db_2/jdbc/lib$ ls -ltr
total 13M
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 nls_charset12.jar
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12.jar
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12.zip
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12dms.jar
-rw-r----- 1 oracle oinstall 1.5M Jun 22 2005 ojdbc14.jar
-rw-r----- 1 oracle oinstall 1.5M Jun 22 2005 ojdbc14dms.jar
-rw-r----- 1 oracle oinstall 1.9M Jun 22 2005 ojdbc14_g.jar
-rw-r----- 1 oracle oinstall 1.9M Jun 22 2005 ojdbc14dms_g.jar
經過反覆測試,故障得到了有效處理。
6.小結
從此問題分析和處理過程中我們得到的經驗和教訓是:需要充分重視應用程式開發與資料庫技術結合的重要性!
任何細節上的疏忽都有可能對生產環境產生重大的影響。
Good luck.
secooler
11.05.06
-- The End --
1.應用程式報錯現象
以下是從應用程式日誌中擷取的兩段報錯資訊。
2011-05-05 04:24:28,148 INFO [org.iata.asdcore.acdm.esb.service.AcdmEsbServiceImpl] The number is ***********************986
2011-05-05 04:24:28,451 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01461: can bind a LONG value only for insert into a LONG column
2011-05-05 04:24:28,451 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01461: can bind a LONG value only for insert into a LONG column
2011-05-05 04:24:28,451 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
2011-05-03 19:10:14,414 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01483: invalid length for DATE or NUMBER bind variable
2011-05-03 19:10:14,414 ERROR [org.hibernate.util.JDBCExceptionReporter] ORA-01483: invalid length for DATE or NUMBER bind variable
2011-05-03 19:10:14,414 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:254)
這裡提到的兩個報錯資訊彙總如下:
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-01483: invalid length for DATE or NUMBER bind variable
由於這個報錯的發生,導致資料出現了異常。業務資料的恢復耗費了很大的精力。
2.問題分析
MOS上記錄了這個報錯資訊的基本原因和處理方法。
參見MOS文章“OERR: ORA 1461 can bind a LONG value only for insert into a LONG column [ID 18864.1]”,內容如下。
Error: ORA 1461
Text: can bind a LONG value only for insert into a LONG column
-------------------------------------------------------------------------------
Cause: An attempt was made to insert a value from a LONG datatype into
another datatype.
This is not allowed.
Action: Do not try to insert LONG datatypes into other types of columns.
從報錯資訊上看,貌似是由於插入的值過大導致的報錯。
不過從插入的資訊和表結構定義進行分析,初步排除了這種可能性。
3.進一步的問題現象
從測試環境上進行了反覆測試,現象如下:
在序列執行下,應用程式執行正確無誤,沒有出現如上報錯。
然而,在並行執行的條件下,便“偶爾”會出現這個問題。
從此現象分析,便可以排除故障是由於資料本身問題導致的。
4.問題原因
經過嘗試和測試。最終確認了此問題是由於應用程式中使用的驅動程式與Oracle伺服器端的版本不一致導致的。
5.處理方法
將伺服器端的驅動程式(ojdbc14.jar)替換應用程式中的檔案。
資料庫伺服器上驅動程式位置如下。
ora10g@secdb /home/oracle$ cd $ORACLE_HOME/jdbc/lib
ora10g@secdb /oracle/ora10gR2/product/10.2.0/db_2/jdbc/lib$ ls -ltr
total 13M
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 nls_charset12.jar
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12.jar
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12.zip
-rw-r----- 1 oracle oinstall 1.6M Jun 22 2005 classes12dms.jar
-rw-r----- 1 oracle oinstall 1.5M Jun 22 2005 ojdbc14.jar
-rw-r----- 1 oracle oinstall 1.5M Jun 22 2005 ojdbc14dms.jar
-rw-r----- 1 oracle oinstall 1.9M Jun 22 2005 ojdbc14_g.jar
-rw-r----- 1 oracle oinstall 1.9M Jun 22 2005 ojdbc14dms_g.jar
經過反覆測試,故障得到了有效處理。
6.小結
從此問題分析和處理過程中我們得到的經驗和教訓是:需要充分重視應用程式開發與資料庫技術結合的重要性!
任何細節上的疏忽都有可能對生產環境產生重大的影響。
Good luck.
secooler
11.05.06
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-694743/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【故障處理】一次RAC故障處理過程
- MongoDB故障處理MongoDB
- 故障分析 | Greenplum Segment 故障處理
- GPON網路故障如何處理?GPON網路故障處理流程
- 【故障處理】ORA-600:[13013],[5001]故障處理
- 【故障處理】ORA- 2730*,status 12故障分析與處理
- 微服務的故障處理微服務
- linux故障處理Linux
- ora-故障處理
- hillstone現場故障處理指導手冊
- 歸檔日誌滿導致的資料庫掛起故障處理資料庫
- 線上故障處理手冊
- MySQL show processlist故障處理MySql
- teams登入故障處理
- Oracle更新Opatch故障處理Oracle
- 如何快速處理線上故障
- Mysql故障處理2則MySql
- dataguard故障處理一則
- AIX系統故障處理AI
- 【Linux】 nfs 故障處理LinuxNFS
- 【故障】“ORACLE使用者被鎖定”故障處理和分析Oracle
- 四類ADSL故障的剖析和處理
- AIX下由於nfs故障導致oracle hangAINFSOracle
- 【故障處理】ORA-12162 錯誤的處理
- 故障分析 | MySQL convert 函式導致的字符集報錯處理MySql函式
- 【故障處理】CRS-1153錯誤處理
- 【故障處理】ORA-19809錯誤處理
- 【故障處理】序列cache值過小導致CPU利用率過高
- undo表空間故障處理
- flash_recovery_area故障處理
- 一次dataguard故障處理
- 分散式事務故障處理分散式
- 歸檔日誌滿導致的資料庫掛起故障處理【轉載】資料庫
- 【故障處理】【oerr】【grep】謹防grep“花哨”功能導致oerr工具無法使用
- 【問題處理】因ASM磁碟組空間不足導致資料庫例項無法啟動的故障處理ASM資料庫
- hbase 故障的處理方案。 (轉載文章)
- Oracle 10g RAC故障處理Oracle 10g
- 如何處理HTTP 503故障問題?HTTP