Oracle

Docker for Oracle 時間戳不同步

  • June 9, 2018

我在此連結的幫助下創建了一個 Oracle 數據庫 Docker 映像

SYSTIMESTAMP顯示 UTC 時間,而不是我本地機器的時間。

kaushik:~ knayak$ date
Fri Jun  8 17:46:35 IST 2018

select current_timestamp,systimestamp from dual;

CURRENT_TIMESTAMP                           SYSTIMESTAMP                      
------------------------------------------- ----------------------------------
08-06-18 05:47:51.742216000 PM ASIA/KOLKATA 08-06-18 12:17:51.742211000 PM GMT

如何更改容器的時間以匹配我的時區?

Google搜尋並嘗試了幾個選項,最後,什麼對我有用:-

以 root 使用者身份登錄到容器:

docker exec -u 0 -it oracle-ee bash

檢查/etc/localtime將指向 UTC 的文件

bash# cd /etc
bash# ls -lrt localtime
lrwxrwxrwx 1 root root 25 May 26 12:56 localtime -> ../usr/share/zoneinfo/UTC

刪除該文件並創建一個新的軟連結以指向與您當地時區對應的文件。

bash# rm -f localtime
bash# ln -s /usr/share/zoneinfo/Asia/Kolkata localtime 

退出 shell 並重新啟動容器。

docker restart <containername>

驗證查詢的輸出,它看起來很好。

LOCALTIMESTAMP                 SYSTIMESTAMP                         
------------------------------ -------------------------------------
09-06-18 01:57:23.685610000 PM 09-06-18 01:57:23.685601000 PM +05:30

命令或localtime文件可能因 Docker 模擬的作業系統而異。就我而言,它是 x86_64 GNU/Linux。

問題不在於您的數據庫,而是 docker 的問題。

Docker 在主機和虛擬機(“容器”……)之間的時間同步方面存在臭名昭著的問題。

最簡單的解決方案是使用管理員權限啟動 docker 容器(--privilegedflag to docker run),然後使用容器內的時間同步工具來修復它的時間(ntpdate -s your.country.clock)。

引用自:https://dba.stackexchange.com/questions/209096