你好,游客 登录 注册 搜索
背景:
阅读新闻

Oracle的FIXED_DATE参数

[日期:2017-04-25] 来源:Linux社区  作者:jyzhao [字体: ]

今天发现一个有意思的问题,我们知道,在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:10

SQL> /

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:00

SQL> /

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:11

SQL> /

SYSDATE
-------------------
2017-03-31 10:20:14

SQL>

更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-04/143141.htm

linux
相关资讯       Oracle参数  FIXED_DATE 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款