修改系統時間導致DB2報錯SQL0903N,RC=2
阿新 • • 發佈:2019-02-16
問題描述
我的DB2多分割槽資料庫(DPF)環境,作業系統時間被意外/人工修改了,現在我修改回來之後,發現所有的更新操作都會失敗(insert/delete/update/import/create/load)報錯如下:SQL0903N COMMIT statement failed, transaction rolled back. Reason code: "2".
SQLSTATE=40504
原因
在非分割槽的資料庫環境中,修改系統時間對DB2的影響很小,一般不用擔心,具體可以參考連結 Scenario: Changing the system clock但在DPF環境下,有需要注意的地方。每個節點的DB2的
http://blog.csdn.net/qingsong3333/article/details/57082390
問題重現
DPF環境預設情況下,結論如下:1. 時間往後修改一天,操作正常
2. 時間往後修改一天,再修改回來,操作報錯 SQL0903N RC=2
3. 時間往前修改一天,操作報錯 SQL0903N RC=2
4. 時間往前修改一天,再修改回來,操作正常
(“往後”在這裡指修改到將來的某個時間點,“往前”指修改到過去的某個時間點)
C:\windows\system32>db2 "insert into t1 values(100)" DB20000I The SQL command completed successfully. C:\windows\system32>date 當前日期: 2017/05/27 週六 輸入新日期: (年月日) 2017/05/28 C:\windows\system32>db2 "insert into t1 values(528)" <-時間往後修改一天,操作正常 DB20000I The SQL command completed successfully. C:\windows\system32>date 當前日期: 2017/05/28 週日 輸入新日期: (年月日) 2017/05/27 C:\windows\system32>db2 "insert into t1 values(527)" <-時間往後修改一天,再修改回來,操作報錯 SQL0903N RC=2 DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0903N COMMIT statement failed, transaction rolled back. Reason code: "2". SQLSTATE=40504 =================換另外一個數據庫============= C:\windows\system32>db2 "insert into t1 values(100)" DB20000I The SQL command completed successfully. C:\windows\system32>date 當前日期: 2017/05/27 週六 輸入新日期: (年月日) 2017/05/26 C:\windows\system32>db2 "insert into t1 values(100)" <-時間往前修改一天,操作報錯 SQL0903N RC=2 DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. During SQL processing it returned: SQL0903N COMMIT statement failed, transaction rolled back. Reason code: "2". SQLSTATE=40504 C:\windows\system32>date 當前日期: 2017/05/26 週五 輸入新日期: (年月日) 2017/05/27 C:\windows\system32>db2 "insert into t1 values(100)" <-時間往前修改一天,再修改回來,操作正常 DB20000I The SQL command completed successfully.
注意:上面的問題在單分割槽的環境下是不會出現的,在多分割槽環境下會出現,即使這個多分割槽環境只有一個物理節點。
解決辦法
1. 如果VTS和當前系統時間差小於24小時,可以修改例項配置引數MAX_TIME_DIFF並重啟例項(可以等到VTS和系統時間一致時,再修改回來),修改之後的值超過時間差即可,最大值是24小時。2.如果時間差超過24小時,可以考慮以下方案:
--重建資料庫
--什麼也不做,等實際時間追上VTS,但這段時間內不能做更新操作
--把日誌控制檔案發給IBM售後技術支援,讓他們幫忙修改一下VTS,不過做完之後需要對資料庫做一個全庫離線備份。
參考資料
SQL0903N Reason code: "2" returned, when running a query on a partitioned database environmentSynchronizing clocks in a partitioned database environment
Scenario: Changing the system clock