更改每小時使用時間後,Oracle 12c 和作業相隔一小時執行
我有一個 Oracle 12c 數據庫,其中我檢測到計劃的作業在伺服器上的時間更改後相隔一小時執行,檢查數據庫我發現SYSTIMESTAMP與DBTIMEZONE不同
SQL> select dbtimezone, sessiontimezone from dual;
數據庫時區
會話時區
-04: 00 -05: 00
在我執行的作業系統中:date + “%Z%z”
CST -0500
SYSTIMESTAMP和DBTIMEZONE的這些值不一樣對嗎,當時間改變的時候是不是需要在數據庫中修改一些東西呢?
什麼都忘了
DBTIMEZONE
,它沒有實際用途。DBTIMEZONE的唯一目的是:它定義(內部)時區來儲存TIMESTAMP WITH LOCAL TIME ZONE
值 - 僅此而已。TIMESTAMP WITH LOCAL TIME ZONE
因此,當您有一個包含列的表並且該列包含數據時,您無法修改它。
SYSTIMESTAMP
(andSYSATE
) 以數據庫伺服器作業系統的時區返回!因此,它們當然可以不同。
處理SCHEDULER JOBS 的時區和夏令時非常複雜。查看日曆語法文件:
日曆語法不允許您指定時區。相反,調度程序從
start_date
參數中檢索時區。如果作業必須遵循夏令時調整,那麼您必須為start_date
. 例如,指定紐約start_date
時區'US/Eastern'
可確保自動應用夏令時調整。相反,如果將 的時區start_date
設置為絕對偏移量,例如'-5:00'
,則不遵循夏令時調整,並且您的作業執行將在半年中關閉一個小時。當
start_date
是NULL
時,調度程序確定重複間隔的時區如下:
- 它檢查會話時區是否是區域名稱。會話時區可以通過以下任一方式設置:
* 發出
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
啟用作業或視窗時的時區。