這應該是我射手生涯所遇過數一數二的詭異茶包。

在 Windows 10 建了一台 Hyper-V VM 跑 Oracle Express 資料庫,測試時發生詭異狀況。操作網頁寫入資料庫,以新增時間為條件查詢,剛寫入的資料卻不在查詢結果中。INSERT 時取 SYSDATE 作為新增時間,查詢期間設最近七天內綽綽有餘,但查不到就是查不到。

懷疑寫入程式邏輯有錯,清查沒發現疑點;接著懷疑是查詢介面有問題,直接挖出它的查詢 SQL 指令手動執行,一樣找不到資料。最後,擴大日期條件到最近一個月終於查到資料了,新增日期卻是 2020/2/8,花惹發?當場實測 SELECT SYSDATE FROM DUAL,日期沒錯是今天,這到底是怎麼一回事?由於是接手別人的舊程式,懷疑程式隱藏我沒發現的神秘邏輯,用力重查一遍,仍無所獲。

灰心喪志之際,順手開了 Winows 右下角的時鐘,我目睹到驚人的一幕:

這台 VM 不時會回到 2020/2/8 這一天,穿回去幾秒,回到現在幾秒,再穿回去幾秒,不斷反覆。所以狀況是 - 我寫入資料庫時遇上穿越,新增時間欄位留下了 2/8 的日期;而當我手動測試 SYSDATE 剛好跳回正確時間,得到時間正常的假象。陰錯陽差,我死命在程式碼找答案,但問題卻躺在萬萬想不到的地方 - Windows 時間會亂跳。

推測可能跟 Windows 的自動時間同步有關。這台 VM 的網路設定連不上 Internet,是否錯誤參考不正確的時間來源導致詭異現象?知識經驗有限,我無力解釋,但問題在關閉 Set time automatically 後消失。

補聲暗。


Comments

# by Julian

我之前碰過一次類似的狀況,改半天一直但時間還是跳掉,結果是HOST時間錯了,GUEST的時間會一直和HOST同步。

# by P

Secure time issuez disable it via registry

# by ByTIM

超越時空的資料,遇到真的很...

# by 未來人

恭喜你,挖到蟲洞。

Post a comment