系統日期設定不正確導致的ORA-01839錯誤
早上收到開發人員發來的郵件,說在一個測試環境中SQL執行報錯,但相同的SQL在另一個測試環境中卻執行經常,叫我幫忙分析一下原因。報錯的SQL為:
SQL> select to_date(substr(cvalidate, 6, 10), 'MM-DD') from lcpol where polno='210010000123931';
select to_date(substr(cvalidate, 6, 10), 'MM-DD') from lcpol where polno='210010000123931';
*
ERROR at line 1:
ORA-01839: date not valid for month specified
一看錯誤資訊是ORA-01839: date not valid for month specified。首先想到可能是資料有問題導致在使用TO_DATE報錯。不管怎樣先去求證下是不是真的存在該錯誤。首先連線上說執行報錯的庫,執行SQL,果然如開發人員所說報錯。接著連線上說執行正常的庫,執行SQL,果然Oracle很友好的返回了結果。既然錯誤事實存在,那就要去找出導致錯誤的原因了。
按照對錯誤的第一反應,先去比對兩邊的資料是否一樣。比對結果有點令人失望,兩邊的資料完全一模一樣。難道是SQL本身存在問題?仔細分析下SQL,應該沒錯啊,雖然使用'MM-DD'格式化的寫法不怎麼好,但也應該不至於導致執行錯誤啊,況且在另外的庫上是執行正確的。那問題到底處在哪呢?難道是兩庫的日期引數設定不一樣?檢視了一下,兩個資料庫的NLS_CHARACTERSET,
NLS_NCHAR_CHARACTERSET, NLS_DATE_LANGUAGE, NLS_DATE_FORMAT設定也是一樣的。好吧,看來問題應該不在資料上。
再回頭來看一下,在條件polno='210010000123931'下的cvalidate是個什麼值呢?
SQL> select cvalidate from lcpol where polno='210010000123931'; CVALIDATE ---------- 2012-02-29
看來該值確實也比較特殊,4年才會出現一次。但是特殊歸特殊,也不應該報錯了。想到如果直接用該值會怎樣?嗯,那就試試看:
SQL>select to_date(substr('2012-02-29', 6, 10), 'MM-DD') from dual;
ERROR
-----------------------
ERROR at line 1:
ORA-01839: date not valid for month specified
SQL> select to_date(substr('2012-02-29', 6, 10), 'MM-DD') from dual;
TO_DATE(SU
----------
2012-02-29
測試結果還是一樣。正一籌莫展之際,突然注意到雖然使用'MM-DD'來格式化日期,但是結果中仍然還有年的資訊!想到當前的NLS_DATE_FORMAT為'YYYY-MM-DD',猜測Oracle會使用當前系統的日期來附加年的資訊。難道是那臺執行錯誤的庫的系統日期不正確,馬上檢視一下,果然,系統日期是2013年!
$ date
Fri Mar 1 18:45:13 CST 2013
馬上聯絡系統管理小組幫忙修正系統日期。在系統日期修改正確後,SQL執行正常,至此問題解決。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13885898/viewspace-1651579/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記錄下解決自定義 Feign 呼叫,響應content-type 格式不正確導致的解析錯誤
- PostgreSQL DBA(29) - Backup&Recovery#2(日期格式導致的錯誤)SQL
- 資料庫報ORA-01839的錯誤資料庫
- Lombok 的@ToString導致的Maven編譯錯誤LombokMaven編譯
- Greenplummax_prepared_transactions設定不正確時的症狀-toomanyclientsalreadyOOMclient
- SQL未明確定義列錯誤SQL
- Apache Solr錯誤預設配置導致的RCE(CVE-2019-12409)ApacheSolr
- win10系統提示dcom遇到錯誤1068導致當機的解決步驟Win10
- win10系統怎麼設定長日期_win10時間日期設定為長日期的步驟Win10
- 誤升級GLIBC導致系統崩潰之後
- 升級Xcode10導致的編譯錯誤XCode編譯
- win10系統引導怎麼設定_win10設定系統引導的方法Win10
- SQLite 由於 mscoree.dll 損壞導致 BadImageFormatException 試圖載入格式不正確的程式SQLiteORMException
- win10系統設定登入錯誤次數及鎖定賬戶的方法Win10
- 12.2.0.1bug導致的Failed to register in OCRLOCAL group.錯誤AI
- ORA-04031錯誤導致當機案例分析
- mysql怎麼設定密碼都不正確的一個解決方法MySql密碼
- dotnet 6 在 Win7 系統證書鏈錯誤導致 HttpWebRequest 記憶體洩露Win7HTTPWeb記憶體洩露
- 【北亞伺服器資料恢復】LUN對映出錯導致檔案系統一致性錯誤的資料恢復案例伺服器資料恢復
- Session物件改變請求頭值導致的401錯誤Session物件
- 動態建立 @ViewChild 導致執行時錯誤的原因分析View
- 記錄一次homestead意外關閉導致的錯誤
- [譯] RxJS: 避免因濫用 switchMap 而導致錯誤JS
- Win10系統下因DistributedCOM錯誤1001導致電腦自動重啟怎麼辦Win10
- win10系統出現dcom錯誤1068導致藍色畫面當機如何解決Win10
- easycode生成程式碼報錯:配置資訊不正確
- laravel Route RESTful 因路由先後順序導致的解析錯誤LaravelREST路由
- 多次密碼錯誤導致登入介面鎖定,可以刪除網站的 runtime 資料夾密碼網站
- smt加工這些失誤會導致smt加工出錯
- win10系統如何設定寫入除錯資訊 win10系統設定系統寫入除錯資訊的步驟Win10除錯
- Win10安裝Ubuntu雙系統導致Win10系統時間出錯Win10Ubuntu
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- 什麼會導致HTTP代理出現400錯誤請求HTTP
- 分析SAN LUN Mapping出錯導致檔案系統共享衝突的情況APP
- win10系統如何設定時間日期顯示農曆Win10
- 作業系統錯誤點作業系統
- win10系統長日期格式顯示怎麼設定 win10系統設定長時間格式顯示的步驟Win10
- 什麼會導致HTTP出現429請求過多錯誤?HTTP
- keycloak~時間不正確的問題