Fung's DBA World

DBA knowledge,standing on the shoulders of giants.

Sysdate Different From Server and Client

June 11, 2015

某客户最近搬迁,在支援的过程中发现几点很好玩的东西。现在记录下来。

1.AIX RAC共享磁盘属性设置错误导致OCR只能在一个节点启动

这套系统通过存储镜像进行LUN迁移,主机不变,仅仅是更换机房。然而,在启动集群的时候,报

1
CRS-1714:Unable to discover any voting files, retrying discovery in 15 seconds

第一反应就是ocr文件损坏了,但是仔细一看,一个节点已经运行正常了,报错的是另一个节点,就是说不管哪个节点起集群,都能run,但是另一节点就加入不了集群。怀疑共享磁盘属性设置有问题,一查看:

1
2
lsattr -El hdisk12|grep -i reserve
reserve_policy  single_path     Reserve Policy    True

果真是,建议客户备份数据库,同时,不建议通过chdev直接修改磁盘属性,可以考虑通过删除磁盘组磁盘,再修改属性,再加进去。但是后来客户自己直接修改了磁盘属性,集群目前运行正常。

2.11g grid infrastructure时区配置文件导致sysdate输出不一致

这套系统也通过存储镜像进行迁移,但是更换了主机,同时存在10g和11g数据库。用select sysdate from dual查看时间,11g的服务端和客户端时间返回不一致,通过select dbtimezone from dual发现时区为+8:00,OS为AIX 7.1,时区为BEIST-8. AIX7已经没有BEIST-8的时区了,建议客户修改为Asia/Shanghai,修改完后还是不正确。这套11g的系统是用ASM管理的,就意味着存在GI,查看MOS ID 1209444.1,里面有提及

1
2. For 11.2.0.2 and above, TZ entry in $GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt sets to correct time zone.

查看该文件,发现TZ=CST6CDT,估计安装GI的时候OS时区不正确导致,修改成Asia/Shanghai,重启CRS,sysdate返回结果正常。

1
[root@oel6 ~]# cat `find / -name s_crsconfig_$HOSTNAME*.txt -print`

3.模拟sysdate server client返回不一致:

1
2
[grid@oel6:/home/grid]$ grep TZ `find $ORACLE_HOME -name s_crsconfig_$HOSTNAME*.txt`
TZ=CST6CDT

服务器上查询:

1
2
3
4
5
6
7
8
9
10
11
[grid@oel6:/home/grid]$ cat /etc/sysconfig/clock 
ZONE="Asia/Shanghai"
[oracle@oel6:/home/oracle]$ date
Thu Jun 11 19:03:20 CST 2015
[oracle@oel6:/home/oracle]$ exit
SQL> alter session set nls_date_format='yyyy-dd-mm hh24:mi:ss';
Session altered.
SQL> select sysdate,dbtimezone,current_date from dual;
SYSDATE             DBTIME CURRENT_DATE
------------------- ------ -------------------
2015-11-06 19:03:31 +08:00 2015-11-06 19:03:31

客户端查询:

1
2
3
4
5
6
SQL> alter session set nls_date_format='yyyy-dd-mm hh24:mi:ss';
会话已更改。
SQL> select sysdate,dbtimezone,current_date from dual;
SYSDATE             DBTIME CURRENT_DATE
------------------- ------ -------------------
2015-11-06 06:05:06 +08:00 2015-11-06 19:05:06

修改GI时区配置文件,TZ=Asia/Shanghai

1
[grid@oel6:/home/grid]$ sed -i 's/CST6CDT/Asia\/Shanghai/g' $ORACLE_HOME/crs/install/s_crsconfig_oel6_env.txt

重启crs,查看结果 client端:

1
2
3
4
5
6
SQL> alter session set nls_date_format='yyyy-dd-mm hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2015-11-06 19:23:52

服务器端:

1
2
3
4
5
6
SQL> alter session set nls_date_format='yyyy-dd-mm hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2015-11-06 19:24:30

Reference:
ID 1209444.1
如何诊断rac环境下sysdate 返回错误时间问题


EOF

Permalink: http://www.oraclema.com/oracle/sysdate-different-from-server-and-client.html