[img]http://dl2.iteye.com/upload/attachment/0098/6251/acab11b5-74f0-3798-ae3d-c78296841dd2.jpg[/img]
前段时间,发现一套新装载的Rac数据库所在操作系统时间不对,查询dbtimezone发现为-06:00,说明时区不对;
select dbtimezone from dual;
DBTIME
---------
-06:00
OK,先将rac停掉,再在一段启动数据库,更改time_zone参数:
alter database set time_zone='+08:00';
更改参数后,将数据库shutdown,再将Rac数据库启动起来;
接着分别运行以下SQL,查看时间是否校准:
select sysdate from dual;
select current_date from dual;
select current_timestamp from dual;
host date
select systimestamp from dual;
在sqlplus中发现时间一致,但是开发反应使用pl/sql查询的时候显示时间不一致。即sysdate,systimestamp很current_date,current_timestamp的时间不一致。
都知道sysdate,systimestamp取的是系统的时间,为什么sqlplus中查询的值是准确的值,而通过pl/sql连接查询的值就不是准确的?
为了定位是不是数据库的问题,在该操作系统上使用DBCA重新创建一个test DB,之后查看该test数据库,发现问题依旧,从此处可以大概估算下应该不是数据库的问题,是操作系统的问题。
在AIX操作系统下date看到操作系统时区为BEIST-8,由于是测试库,将操作系统时区改为CST(Asia/shanghai)之后,重启操作系统,使用pl/sql连接数据库,发现问题解决,所有时间均一致,且都在东八区。
前段时间,发现一套新装载的Rac数据库所在操作系统时间不对,查询dbtimezone发现为-06:00,说明时区不对;
select dbtimezone from dual;
DBTIME
---------
-06:00
OK,先将rac停掉,再在一段启动数据库,更改time_zone参数:
alter database set time_zone='+08:00';
更改参数后,将数据库shutdown,再将Rac数据库启动起来;
接着分别运行以下SQL,查看时间是否校准:
select sysdate from dual;
select current_date from dual;
select current_timestamp from dual;
host date
select systimestamp from dual;
在sqlplus中发现时间一致,但是开发反应使用pl/sql查询的时候显示时间不一致。即sysdate,systimestamp很current_date,current_timestamp的时间不一致。
都知道sysdate,systimestamp取的是系统的时间,为什么sqlplus中查询的值是准确的值,而通过pl/sql连接查询的值就不是准确的?
为了定位是不是数据库的问题,在该操作系统上使用DBCA重新创建一个test DB,之后查看该test数据库,发现问题依旧,从此处可以大概估算下应该不是数据库的问题,是操作系统的问题。
在AIX操作系统下date看到操作系统时区为BEIST-8,由于是测试库,将操作系统时区改为CST(Asia/shanghai)之后,重启操作系统,使用pl/sql连接数据库,发现问题解决,所有时间均一致,且都在东八区。