標籤:oracle
我們知道,在Oracle資料庫中正常執行 select sysdate from dual 都可以返回當前主機的系統時間。
正常修改系統時間,對應的查詢結果也會變成修改後的系統時間。
現在遇到一個問題:測試系統修改了主機系統時間,資料庫查詢 select sysdate from dual 返回的時間和所在系統的主機時間相差很大,進一步排查發現返回的時間是固定不變的。
最終發現是Oracle有參數可以使得sysdate一直返回固定的時間,供某些測試情境使用。該庫也是因為有其他測試人員設定了該參數,而其他測試人員不知道,產生了疑惑。
官方對這個參數的描述如下:
FIXED_DATE enables you to set a constant date that SYSDATE will always return instead of the current date. To undo a fixed date setting, specify FIXED_DATE=NONE. This parameter is useful primarily for testing. The value can be in the format shown above or in the default Oracle date format, without a time.
簡單實驗驗證下,的確如此:
--1. 設定會話時間顯示格式:SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss‘;Session altered.--2. 查詢sysdate值,是正常返回資料庫所在主機的系統時間:SQL>SQL> select sysdate from dual;SYSDATE-------------------2017-03-31 10:16:10SQL> /SYSDATE-------------------2017-03-31 10:16:18--3. 設定fixed_date參數為固定一個值:SQL> alter system set fixed_date = ‘2017-04-01 12:00:00‘;System altered.--4. 重新查詢發現sysdate時間為設定的值,且固定不變:SQL> select sysdate from dual;SYSDATE-------------------2017-04-01 12:00:00SQL> /SYSDATE-------------------2017-04-01 12:00:00--5. 設定fixed_date參數為none,使sysdate正常顯示所在主機的系統時間:SQL> alter system set fixed_date = none;System altered.SQL> select sysdate from dual;SYSDATE-------------------2017-03-31 10:20:11SQL> /SYSDATE-------------------2017-03-31 10:20:14SQL>
Oracle的FIXED_DATE參數