对Oracle中时区及时间的认识

作者:范俊  2013-03-24

前几天遇到一个服务问题,是关于时间同步的。处理过程中我们对Oracle的时区及时间的理解感觉有点模糊,所以专门又查询资料并做了相关验证,强化了一下对相关概念和知识的理解。

摘要

我们通常都清楚以下这点——同样是当前的时间,但在不同时区所显示的时间是有差别的。如,我们所处的时区是" GTM+08:00北京,重庆,香港特别行政区,乌鲁木齐",当前时间是15:00,那么时区为" GTM-04:00 大西洋时间"则当前时间为3:00,相差整12个小时。

那么针对时区的差异,Oracle是如何支持的呢?这次我们就来对Oracle中的时区和时间做个了解。

一、Oracle中时区/时间相关的类型和函数

1、Oracle中时间相关的类型

时间相关的类型主要有四种:DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE。

DATE:存储日期和时间信息,精确到秒。

TIMESTAMP:DATE类型的扩展,保留小数级别的秒(默认为小数点后6位),不保存时区和地区信息。

TIMESTAMP WITH TIME ZONE:TIMESTAMP类型的一种扩展,存储时区信息。

TIMESTAMP WITH LOCAL TIME ZONE:TIMESTAMP类型的另一种扩展,用于存储一个转换为数据库设置的本地时区的时间戳。与TIMESTAMP WITH TIME ZONE类型的区别在于:数据库不保存时区相关信息,而是把客户端输入的时间转换为基于数据库时区的时间进行存储。

2、Oracle中时区/时间相关的函数

DBTIMEZONE:返回数据库时区(Returns the value of the database time zone. The value is a time zone offset or a time zone region name)

SESSIONTIMEZONE: 返回当前会话的时区(Returns the value of the current session's time zone)

SYSDATE:返回数据库所在操作系统的时间,类型为Date(Returns the date and time of the operating system on which the database resides, taking into account the time zone of the database server's operating system that was in effect when the database was started.)

CURRENT_DATE: 返回基于当前会话时区的时间,类型为Date(Returns the current date in the session time zone in a value in the Gregorian calendar, of the DATE datatype.)

SYSTIMESTAMP:返回数据库所在操作系统时间,类型为TIMESTAMP WITH TIME ZONE (Returns the system date, including fractional seconds and time zone of the system on which the database resides.)

CURRENT_TIMESTAMP:返回基于当前会话时区的时间,类型为TIMESTAMP WITH TIME ZONE(Returns the current date and time in the session time zone as a TIMESTAMP WITH TIME ZONE value)

二、对Oracle中时区/时间的理解

在了解以上类型和函数后,并经过了实际验证(大部分的验证网上都有现成的文章,本次就直接在最后附上相关文章链接),基本对Oracle中的’时区信息’以及’时区信息对时间类型数据的影响’有个了解。以下就是整理得出的一些结论:

1、时间相关的类型中,DATE、TIMESTAMP、TIMESTAMP WITH LOCAL TIME ZONE 这三种不存储时区信息,仅 TIMESTAMP WITH TIME ZONE 存储时区信息;

2、数据库时区(即SELECT DBTIMEZONE FROM DUAL;查询出的结果)只会对 TIMESTAMP WITH LOCAL TIME ZONE 类型的数据有影响;

补充说明:

a) 并且当数据库包含该类型时,是不允许更改数据库时区的(修改 时会报ORA-30079错误);     b) TIMESTAMP WITH LOCAL TIME ZONE 类型是把客户端输入的时间转换为基于数据库时区的时间后存入数据库;当用户请求此类型信息时,Oracle把数据转换为用户会话(session)的时区时间返回给用户。所以说——更改数据库时区对已经存入数据库的数据不会有影响(更改前后,已存储的数据都不会改变)。

3、如果数据库类型是DATE,TIMESTAMP类型,则数据值是按传入时间为准(不管时区);

例如:假定当前时间为 GTM+08:00  10:00:00

机器A时间为  GTM+08:00  10:00:00   存入数据库,值将是10:00:00

机器B时间为  GTM+00:00  2:00:00    存入数据库,值将是2:00:00

4、SYSDATE和SYSTIMESTAMP的返回信息是数据库所在操作系统的信息,与当前用户会话(session)的时区无关;

5、数据库所在操作系统的时间或时区有更改,需要重启数据库才会对SYSDATE和SYSTIMESTAMP生效;

6、当前用户会话(session)的时区缺省为会话访问者操作系统的时区,但可以通过语句(ALTER SESSION SET TIME_ZONE='+8:00';)修改,且修改后不会改变操作系统的时区设置;

结语

以上结论基本都是经过查询官方资料或经验证得出,但也不排除有因理解有误造成的错误。所以如果大家发现有不正确的地方,请及时给予纠正。我将非常感激!谢谢!

注意:转载请保留文章完整,并注明出处!谢谢!

oracle监听时区,对Oracle中时区及时间的认识相关推荐

  1. 手动更改oracle监听,详解Oracle数据库手动注册监听的方法

    本文主要介绍了为一个Oracle数据库(t02)配置多个监听(listener)的实验,过程有点小曲折.通过这个实验让我们来学习一下如何手动注册监听.以下是演示的过程. 1.新增两个测试的监听,lis ...

  2. oracle监听 客户 实例,oracle 数据库实例 监听

    创建Oracle数据库.数据库名与实例名与SID之间的关系(图文详解) 目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名inst ...

  3. oracle 监听报错,Oracle EBS系统数据库监听报错TNS-12547、TNS-12560和TNS-00517解决方法...

    记得有一次Oracle EBS系统中止运行3小时,实在比较一次惨痛的教训,让我至今记忆犹新. 问题症状:用户反映提交的请求全部是红色错误 开始意为是并发管理"标准管理器"的问题,在 ...

  4. 查看oracle监听服务器,处理Oracle 监听文件listener.log问题

    如果连接时候变得较慢 查看Oracle日志记录,可能是因为此文件太大,超过2G, 需要定期清理,(如果多用户,记得用root,可能没权限) 查看listener.log? find / -name l ...

  5. oracle监听的日志,Oracle监听日志定期清理

    环境: Oracle 11.2.0 Win Server 2008 R2 Enterprise 原因:Oracle监听日志文件大小超过4G,oracle监听连接时断时续 解决办法:重新建立新的日志文件 ...

  6. aix oracle监听配置_AIX系统中安装ORACLE,客户端连接时,监听会宕掉的问题

    一次做实验,在AIX5300-06系统中安装ORACLE10.2.0.1数据库,安装过程都正常,在服务器上不加@实例名连接时也很正常,可是客户端一连接,监听就会宕掉.故障现象如下: LSNRCTL&g ...

  7. oracle监听静态注册,oracle监听器动态注册于静态注册的区别

    1, oracle 10g 用netca方式建立的都默认为动态注册方式 2,如果想改为静态注册的方式则在listener.ora 中加入如下内容即可 SID_LIST_LISTENER = (SID_ ...

  8. oracle监听服务丢失,Oracle监听服务无法启动或丢失的解决办法

    1)使用了Cclear或鲁大师等注册表清理工具清理后导致无法启动 无法启动OracleOraDb10g_home1TNSListener服务 解决办法:①打开注册表编辑器,在HKEY_LOCAL_MA ...

  9. oracle监听管理工具,oracle监听器管理

    一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名一样,也有可能不一样. ...

  10. oracle监听怎么关闭,Oracle数据库启动监听、关闭

    数据库启动流程: 1.oracle用户登录或切换到oracle用户 linux-topana:~ # su - oracle oracle@linux-topana:~> 2.登录SQLPLUS ...

最新文章

  1. ubuntu没有interfaces文件_ubuntu里终端中eth0为何没有显示IP地址
  2. if you miss it, you can hope for future
  3. hdu5386(暴力)
  4. 【SICP练习】66 练习2.37
  5. 说真的,程序员相亲,真的太太太太太太难了 | IT巨能唠
  6. python进程的状态及创建
  7. 【生成器】PHP的生成器yield【原创】
  8. PAT乙级(1017 A除以B)
  9. 【Flink】TaskSubmissionException: No task slot allocated for job ID xx and allocation ID xx.
  10. linux文件服务器迁移方案,服务器之间文件备份方案、如何把服务器文件自动备份到另外一台服务器?...
  11. 韵达开放接口php代码,韵达快递订单运输状态查询接口
  12. HTML+JS调用摄像头
  13. 安川焊接机器人做圆弧运动编程_安川焊接机器人编程
  14. 利用阿里云oss实现上传视频和图片功能
  15. java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
  16. JavaScript随机方块
  17. N沟道和P沟道MOS管的四个不同点
  18. chrome浏览器调试时阻止图片的加载
  19. JAVA将英文字母的大写字母转换为小写字母。
  20. 调戏过114客服之后,我打开了新世界的大门

热门文章

  1. 2012百度招聘笔试题目
  2. linux虚拟磁盘服务,hintsoft Linux iscsi虚拟磁盘完全教程及优化攻略
  3. [初学笔记] pause 语句 的运用,.m文件中按任意键继续程序或者延迟秒数继续程序
  4. 教你使用JAVA代码重启路由器(TP-LINK)
  5. 史丰收速算-第五届蓝桥杯省赛
  6. python海龟画图函数汇总
  7. html旋转木马 代码,JavaScript实现旋转木马轮播图
  8. regedit 命令行参数
  9. “花瓣网”首页静态页面(仅供参考)
  10. linux 如何清理垃圾文件,Linux系统怎样清理垃圾文件