oracle数据库中的时间依赖操作系统中的时间,如果操作系统中的时间不准确,
会导致数据库时间超前或拖后。
会导致单机数据库数据紊乱,RAC服务器由于时间 不同步重启等,下面通过实例来演示一下如何调整时间数据库
服务器时间,分两种 情况说明:
1)数据库时间比当前时间快
修改的思路是我们先确认一下数据库时间和当前时间差(以下称时间差),
然后关闭数据库一段时间(比时间差稍长一点)修改操作系统时间为正确时间, 启动数据库,验证SCN和当前时间是否一致。
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
fromdual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1220:40:40
2010-11-1220:40:38
系统时间和SCN转换后的时间很接近,我们可以认为当前数据库SCN和系统时间是一致的
查询服务器操作系统时间和当前的时间差
当前时间:
2010-11-1220:12:08
操作系统(数据库)时间:
[oracle@localhost~]$ date
FriNov 12 20:41:19 CST 2010
可以看到服务器时间比当前时间快29分钟,同样数据库时间比当前时间快29分钟
关闭数据库
SQL>
shutdown immediate
修改操作系统时间为当前时间
[root@localhost~]# date -s 20:20:08
29分钟后打开数据库(约20:49:00)
SQL>startup
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
from dual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1220:49:20
2010-11-1220:49:17
[root@localhost~]# date
FriNov 12 20:49:41 CST 2010
可以看到当前数据库SCN转换成时间,与数据库时间,和操作系统时间基本一致
2)数据库时间比当前时间慢
如果数据库时间比当前时间慢,这种情况处理起来相对比较简单
查询服务器操作系统时间和当前的时间差
当前时间:
2010-11-1221:20:08
操作系统(数据库)时间:
[root@localhost~]# date
FriNov 12 20:59:31 CST 2010
可以看到服务器时间比当前时间慢21分钟
关闭数据库
SQL>
shutdown immediate
修改操作系统时间为当前时间
[root@localhost~]# date -s 21:25:08
直接打开数据库
SQL>startup
验证数据库当前SCN是否与操作系统时间是否一致
SQL>
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') current_time,
to_char(scn_to_timestamp(dbms_flashback.get_system_change_number),'yyyy-mm-ddhh24:mi:ss') scn_time
fromdual;
CURRENT_TIME
SCN_TIME
----------------------------------------------------------------------------
2010-11-1221:26:27
2010-11-1221:26:27
[root@localhost~]# date
FriNov 12 21:26:41 CST 2010
可以看到当前数据库SCN转换成时间,与数据库时间,和操作系统时间基本一致
时间修改完成
|