Oracle

更改每小時使用時間後,Oracle 12c 和作業相隔一小時執行

  • November 13, 2019

我有一個 Oracle 12c 數據庫,其中我檢測到計劃的作業在伺服器上的時間更改後相隔一小時執行,檢查數據庫我發現SYSTIMESTAMPDBTIMEZONE不同

SQL> select dbtimezone, sessiontimezone from dual;

數據庫時區

會話時區


-04: 00 -05: 00

在我執行的作業系統中:date + “%Z%z”

CST -0500

SYSTIMESTAMPDBTIMEZONE的這些值不一樣對嗎,當時間改變的時候是不是需要在數據庫中修改一些東西呢?

什麼都忘了DBTIMEZONE,它沒有實際用途。DBTIMEZONE的唯一目的是:它定義(內部)時區來儲存TIMESTAMP WITH LOCAL TIME ZONE值 - 僅此而已。TIMESTAMP WITH LOCAL TIME ZONE因此,當您有一個包含列的表並且該列包含數據時,您無法修改它。

SYSTIMESTAMP(and SYSATE) 以數據庫伺服器作業系統的時區返回!

因此,它們當然可以不同。

處理SCHEDULER JOBS 的時區和夏令時非常複雜。查看日曆語法文件

日曆語法不允許您指定時區。相反,調度程序從start_date 參數中檢索時區。如果作業必須遵循夏令時調整,那麼您必須start_date. 例如,指定紐約start_date時區'US/Eastern'可確保自動應用夏令時調整。相反,如果將 的時區start_date設置為絕對偏移量,例如'-5:00',則不遵循夏令時調整,並且您的作業執行將在半年中關閉一個小時。

start_dateNULL時,調度程序確定重複間隔的時區如下:

  1. 它檢查會話時區是否是區域名稱。會話時區可以通過以下任一方式設置:

* 發出ALTER SESSION聲明,例如: * SQL>ALTER SESSION SET time_zone = 'Asia/Shanghai'; * 設置ORA_SDTZ環境變數。 * 設置系統資料庫值HKLM\SOFTWARE\Oracle\KEY_{Oracle Home Name}\ORA_SDTZ(僅限 Windows)。 2. 如果會話時區是絕對偏移量而不是區域名稱,則調度程序使用DEFAULT_TIMEZONE調度程序屬性的值。有關詳細資訊,請參閱SET_SCHEDULER_ATTRIBUTE 程序。 3. 如果DEFAULT_TIMEZONE屬性為NULL,調度程序使用SYSTIMESTAMP啟用作業或視窗時的時區。

另請參閱https://stackoverflow.com/questions/29271224/how-to-handle-day-light-saving-in-oracle-database/29272926#29272926

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