代码改变世界

11.2.0.4 RAC测试环境修改时区

2017-06-19 12:48  AlfredZhao  阅读(1964)  评论(0编辑  收藏  举报

当前问题: 系统时区修改后,集群数据库各个日志发现显示的还是之前时区的时间。

依据Linux (RHEL)修改时区更改了系统的时区后,集群数据库的各个日志还是显示之前的时区时间。

查找MOS资料
How To Change Timezone for Grid Infrastructure (文档 ID 1209444.1)

该文档中提到:

For 11.2.0.2 and above, TZ entry in $GRID_HOME/crs/install/s_crsconfig_nodename_env.txt sets to correct time zone.

也就是说,对于11.2.0.2及以上版本的RAC,TZ条目在 $GRID_HOME/crs/install/s_crsconfig_<nodename>_env.txt 文件中。
实际我的环境中,该文件当前的时区设置是:

TZ=America/New_York

需要修改为:

TZ=Asia/Shanghai

以上是集群各个节点都需要更改的,更改完成后重启crs后发现各日志的时间已经显示正确。

但是数据库时区还是不匹配,会话和数据库的时区查询:

SQL> SELECT TZ_OFFSET(SESSIONTIMEZONE), TZ_OFFSET(DBTIMEZONE) FROM DUAL;

TZ_OFFS TZ_OFFS
------- -------
+08:00  +00:00

修改数据库时区:

ALTER DATABASE SET TIME_ZONE = '+8:00';

注意:如果数据库中已经有TIMESTAMP WITH LOCAL TIME ZONE的数据类型,是不允许更改的,除非将这些列删除。我这里没有,可直接修改。

重启数据库:

srvctl stop database -d jyzhao
srvctl start database -d jyzhao

再次查询:

SQL> SELECT TZ_OFFSET(SESSIONTIMEZONE), TZ_OFFSET(DBTIMEZONE) FROM DUAL;

TZ_OFFS TZ_OFFS
------- -------
+08:00  +08:00

至此,修改时区工作已完成。