一個特殊的ORA-00600: internal error code, arguments: [6302], [20], [], [], [], [], [], []
仔細看看天書一樣的TRACE檔案,沒什麼大的發現,只是有一點跟之前見過的TRACE不一樣,開頭就有這樣兩行:
key1 (20): 7a 68 61 6e 67 34 31 30 38 32 32 40 31 36 33 2e 63 6f 6d 00
key2 (19): 7a 68 61 6e 67 34 31 30 38 32 32 40 31 36 33 2e 63 6f 6d
那麼既然是索引相關的問題,而且TRACE檔案中也有一個KEY的關鍵字,那麼上面這串數字應該就是索引的鍵值了,這個表上一共三個索引,一個是順序號,一個是EMAIL,另一個也是一串數字,那麼先把這串數字解出來吧(因為涉及到客戶資訊,所以上面的數字使用了偶自己的資訊代替),其實上面的數字就是ASCII值,那麼ORACLE中有函式可以用的,select UTL_RAW.CAST_TO_varchar2(replace('7a 68 61 6e 67 34 31 30 38 32 32 40 31 36 33 2e 63 6f 6d',' ','')) from dual,返回結果是一個EMAIL(返回的EMAIL使用偶自己的替代了),那麼就很明確的知道了是這個表上的EMAIL的一個索引的問題。上面的函式其實就是把空格去掉,然後轉換成VARCHAR2,得到的就是ASCII字元轉換過來的實際資訊了。
看看這個表的索引也很正常,而且也有新的資料新來,並且新的資料EMAIL欄位也是有值的,那就說明這個索引還在不停的更新中,索引是沒問題的。仔細看看上面的兩串數字,發現KEY1最後多了一個00,這就是這個問題的關鍵所在了。因為這個EMAIL是客戶透過WEB提交過來的,WEB中可能對這個欄位的校驗不嚴格導致這個特殊的控制字元被傳入到了資料庫中,而這個值更新到索引中的時候,就會報這個錯。為了驗證這個錯誤,可以反過來做一下,把UTL_RAW.CAST_TO_varchar2(replace('7a 68 61 6e 67 34 31 30 38 32 32 40 31 36 33 2e 63 6f 6d 00',' ',''))更新到任何一行的EMAIL欄位上,立馬錯誤重現。找到了根本,解決就比較簡單了,不過這個ASCII碼為00的特殊字元,客戶是怎麼弄進來的呢?
另外補充一點UTL_RAW的用法,這個包還有一個CAST_TO_RAW的函式,可以把字串轉化成RAW,這個特性可以應用在DBLINK中。
具體說就是如果資料庫之間的字符集不一致,可能導致透過DBLINK拉過來的中文出現亂碼,那麼可以在遠端建一個VIEW,把所有中文透過CAST_TO_RAW把字串轉換成RAW,然後資料拉過來後,再透過CAST_TO_VARCHAR2再還原出來,這樣就可以解決亂碼問題了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-1017234/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORA-00600: internal error code, arguments: [13011]Error
- ORA-00600: internal error code, arguments: [2131], [9], [8]Error
- ORA-00600: internal error code, arguments: [qosdExpStatRead: expcnt mismatch], [Error
- 案例ORA-00600: internal error code, arguments: [qkaffsindex3], [], [], [], []ErrorIndex
- ORA-00600: internal error code, arguments: [13013], [5001], [267], [8389014]Error
- ORA-00600: internal error code, arguments: [knacpft_ProcessFetchedTxns250]Error
- Oracle索引修復 ,ORA-00600: internal error code, arguments: [6200],Oracle索引Error
- 邏輯STANDBY上的ORA-00600: internal error code, arguments: [krvtadc], [], [], [], [], []Error
- ORA-00600: internal error code, arguments: [kzsrsea] DataGuard環境的異常Error
- 遭遇ORA-00600: internal error code, arguments: [kcrrrfswda.11], [4], [368], [], [], [], [], []Error
- ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr]邏輯壞塊解決ErrorAST
- BUG:ORA-00600: internal error code, arguments: [kmgs_pre_process_request_6], [6], [2873], [2560], [3Error
- ORA-06544:PL/SQL:internal error,arguments:[56319]SQLError
- ORA-00600: [OSDEP_INTERNAL]
- 【ERROR】OPatch failed with error code 73ErrorAI
- RA-03137:TTC protocol internal error:[12333]ProtocolError
- js中的arguments是一個好東西JS
- ubuntu下pig報錯ERROR 2999: Unexpected internal error. Failed to create DataStorage的解決UbuntuErrorAIAST
- MySQL:一個特殊的問題MySql
- OPatch failed with error code 73AIError
- Error Domain=kAFAssistantErrorDomain Code=7ErrorAI
- MyEclipse - Retrieving archetypes: has encountered a problem An internal error occurred duringEclipseError
- HTTP 錯誤 500.21 - Internal Server Error 解決方案HTTPServerError
- HTTP 錯誤 500.19 - Internal Server Error v4.0.30319HTTPServerError
- Mysql系統變數中 log_error_services | log_filter_internal; log_sink_internal 和 log_error_verbosity | 2 解釋MySql變數ErrorFilter
- Python錯誤:PyCharm 安裝出錯 Internal error,please。。。PythonPyCharmError
- [Code Composer Studio] fatal error #6001Error
- 錯誤解決:cc: Internal error: Killed (program cc1)Error
- ORA-00257:archiver error. Connect internal only,until freed.HiveError
- ORA-03137: TTC protocol internal error: [12333]分析及處理ProtocolError
- JS的argumentsJS
- HTTP 錯誤 500.19- Internal Server Error 錯誤解決方法HTTPServerError
- 記錄一個Excel中特殊的VLOOKUP方法Excel
- weblogic報錯: OPatch failed with error code 73WebAIError
- Function.caller, arguments.caller, arguments.callee, arguments.callee.calllerFunction
- pyinstaller打包pytest+allure框架的程式碼後,執行時exe: error: unrecognized arguments: --alluredir框架ErrorZed
- 執行flutter run命令報錯::ERROR: Could not connect to lockdownd, error code -17FlutterError
- 解決方案 | MiKTex SSL connect error code 35Error