oracle 11g RAC 修改时区步骤,要注意什么
看MOS文档 How To Change Timezone for 11gR2 Grid Infrastructure (文档 ID 1209444.1)
创新互联是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,棕树数据中心,海外高防服务器,机柜大带宽、租用·托管,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。
AIX改时区必须重启。
我是全部节点停止, stop crs,然后 disable crs 让crs不自动启动 , 然后改AIX的时区,重启,时区生效,改grid时区,然后start crs 。
要改$GRID_HOME/crs/install/s_crsconfig_nodename_env.txt。
改时区没有什么大问题,数据库本身并不依赖时区,建议看看 Timestamps time zones - Frequently Asked Questions (文档 ID 340512.1)
吐槽一下,经常有人安装AIX的时候不注意选时区选择到 BST(Bering) 以为是BEIST(Beijing)。
如何设置oracle时间戳类型的时区
时间戳的概念:它是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
下图是从linux系统中获得当前时间戳的一种方式
在oracle使用时间戳,一般都是为了方便计算时间差的,我们要知道oracle中的date类型想减是不能友好的得到时间的差值的。所以使用时间戳来得到两个时间差。
首先来看oracle中如何获得当前时间的时间戳,我们用当前时间减去计算机元年后再经过换算得到了的从1970年来到当前时间的时间戳,单位是微妙。
另外oracle提供了另一种便捷得到两个时间差的方式,那就是使用timestamp数据类型,它类似date类型,但是存储的时间更为精确,显示的格式:yyyy-mm-dd hh24:mi:ss.ff AM,其中ff是小数秒。
timestamp类型的时间差可读性也比上面那种好一些,可以直观看出两个时间差。
在oracle中,两个date类型的数值想减也可以转换成上述的timestamp可以的类型,这里就要介绍一个函数:numtodsinterval(n,'x'),它能将一个数值转换成timestamp那种格式的数据。但要注意:后面的参数'x'是取'day'、'minute'、'hour'完全取决于前面的单位,这样才能获得正确的时间差
最后我们介绍一个函数extract,该函数可以从timestamp类型的时间里抽取想要hour,minute等
oracle时间戳设置
这个和数据库安装的时候选择的时区有关,一般国内安装都是选择北京时区。
查看timestamp
select current_timestamp,systimestamp from dual;
current_timestamp systimestamp
12-12月-18 04.24.02.427990 下午 +08:00 12-12月-18 04.24.02.427980 下午 +08:00
查看时区
select dbtimezone,sessiontimezone from dual;
dbtimezone sessiontimezone
+00:00 +08:00
对于显示是12小时制这个问题,和客户端的操作系统有关,与实际存储的数据无关。
如果想显示成24小时制,修改客户端操作系统的环境变量可以达到目的:
NLS_TIMESTAMP_FORMAT
YYYY-MM-DD HH24:MI:SS:FF6
按照上图设置后,重启plsql,查询后我们能看到时间显示成“2018-12-12 16:16:35:877000”这样的格式了。
但是,如果建库时,时间设置错误或者是将来要改变时区时,表中的值会不会变化呢?因此引用官方的回答:
对于time zone数据类型的数据,即使你更新了数据库时区,原数据也不会进行对应调整,只能你导出数据,然后调整数据库时区,再把原始数据导入即可。所以,一般情况下,一定不要调整数据库时区。官方建议数据库时间采用UTC,因为这种时区性能好。如果没有显式指定数据库时区,数据库会使用操作系统的时区,但是如果操作系统时区不是一个合理的数据库时区,数据库则会使用默认的时区UTC,且UTC的取值范围为-12:00 to +14:00。等等,为什么会有+14?百度一下基里巴斯。这是一个神奇的网站国度。
$ORACLE_HOME\db_1\$HOSTNAME\sysman\config\emd.properties中怎么设置时区
agentTVRegion=后面改成你想要的时区
时区列表参考10.2.0/db_1/sysman/admin/supportedtzs.lst
oracle修改会话时区后,重启数据库后时区又变成原来的了
首先确认会话时区是否正确,会话时区可能和数据库时区不一致
SQL SELECT SESSIONTIMEZONE FROM DUAL;
SESSIONTIMEZONE
---------------------------------------------------------------------------
+08:00
会话时区是北京时区
SQL SELECT DBTIMEZONE FROM DUAL;
DBTIME
------
+00:00
DB是世界时区
SQL SELECT TZ_OFFSET(SESSIONTIMEZONE), TZ_OFFSET(DBTIMEZONE) FROM DUAL;
TZ_OFFS TZ_OFFS
------- -------
+08:00 +00:00
1.检查数据库是否有这样的字段类型 TIMESTAMP WITH LOCAL TIME ZONE
SQLselect c.owner || '.' || c.table_name || '(' || c.column_name || ') -'
|| c.data_type || ' ' col
from dba_tab_cols c, dba_objects o
where c.data_type like '%WITH LOCAL TIME ZONE'
and c.owner=o.owner
and c.table_name = o.object_name
and o.object_type = 'TABLE'
order by col
/
SQLselect u.name || '.' || o.name || '.' || c.name TSLTZcolumn
from sys.obj$ o, sys.col$ c, sys.user$ u
where c.type# = 231
and o.obj# = c.obj#
and u.user# = o.owner#;
2.检查当前数据库时区
SQL select * from database_properties where property_name='DBTIMEZONE';
行将被截断
PROPERTY_NAME PROPERTY_VALUE
------------------------------ -------------------------------------------------
DBTIMEZONE 00:00
3.改变数据库时区
SQL ALTER DATABASE SET TIME_ZONE = '+8:00';
数据库已更改。
SQL shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL startup
ORACLE 例程已经启动。
Total System Global Area 272629760 bytes
Fixed Size 1248528 bytes
Variable Size 92275440 bytes
Database Buffers 171966464 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
SQL select dbtimezone from dual;
DBTIME
------
+08:00
4.检查时间
SQL select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual
SQL SELECT SYSTIMESTAMP FROM dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
23-7月 -09 11.50.25.750000 上午 +08:00
如何更新rds oracle 时区
您可以通过修改AWS参数组的参数:time_zone修改MySQL的时区。关于如何修改亚马逊AWS参数:AWS参数是动态的,所以修改后立即生效。
对于已经建立的连接,不生效;对于新建立的连接才生效。
如果您创建了只读副本,您可以为主库和读从库设置不同的时区。
如果是从快照恢复数据库,时区将会被设置成UTC
如果是恢复到时间点,时区将会保持和原库一致
分享标题:oracle时区如何更改 oracle 时区
本文路径:http://lswzjz.com/article/hhhhdh.html