[转帖]How to check the session time zone_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3851 | 回复: 0   主题: [转帖]How to check the session time zone        下一篇 
derek
注册用户
等级:中校
经验:1550
发帖:209
精华:0
注册:2011-7-21
状态:离线
发送短消息息给derek 加好友    发送短消息息给derek 发消息
发表于: IP:您无权察看 2011-8-3 17:04:12 | [全部帖] [楼主帖] 楼主

1. How to check the session time zone ?

=======================================

Answer

------

The new SESSIONTIMEZONE built-in SQL function returns the value of the current

session's time zone.

SQL> SELECT SESSIONTIMEZONE FROM DUAL;

SESSIONTIMEZONE

---------------

+01:00

2. How to set the session time zone ?

=====================================

Answer

------

The session time zone can be set to:

- O/S local time zone

- Database time zone

- An absolute offset

- A named region

1. The first method consists to use one of the following ALTER SESSION SET

TIME_ZONE statements:

SQL> ALTER SESSION SET TIME_ZONE = local;

SQL> ALTER SESSION SET TIME_ZONE = dbtimezone;

SQL> ALTER SESSION SET TIME_ZONE = '-05:00';

SQL> ALTER SESSION SET TIME_ZONE = 'Europe/London';

2. As an alternative, the operating system environment variable ORA_SDTZ can

also be used to set the session time zone:

ORA_SDTZ = 'OS_TZ' | 'DB_TZ' | '[+ | -] hh:mm' | 'timezone_region'

Example:

$ ORA_SDTZ='OS_TZ'

$ export ORA_SDTZ

$ ORA_SDTZ='-05:00'

$ export ORA_SDTZ

3. How to check the database time zone ?

========================================

Answer

------

The DBTIMEZONE SQL function returns the value of the database time zone.

SQL> SELECT DBTIMEZONE FROM DUAL;

DBTIMEZONE

--------------

Europe/Lisbon

@ Note that the database timezone is also included in both database_properties

@ and props$ views:

@ SQL> SELECT property_name, property_value

@ FROM database_properties

@ WHERE property_name='DBTIMEZONE';

@ and

@ SQL> SELECT name, value$

@ FROM props$

@ WHERE name='DBTIMEZONE';

@ Be aware that you should not rely on these views because in case of db time zone

@ change, these views reflect the new db time zone too early: they should reflect

@ it only after database shutdown and restart.

4. How to set the database time zone ?

======================================

Answer

------

Note that the database time zone is only relevant for TIMESTAMP WITH LOCAL TIME ZONE

columns.

1. At creation time

SQL> CREATE DATABASE ...

SET TIME_ZONE='Europe/London';

If not specified with the CREATE DATABASE statement, the database time zone

defaults to the serverO/S timezone offset.

2. After database creation, use the ALTER DATABASE SET TIME_ZONE statement and

then shut down and restart the database.

SQL> ALTER DATABASE SET TIME_ZONE = '-05:00';

SQL> ALTER DATABASE SET TIME_ZONE = 'Europe/Lisbon';

The change will not take effect until the database is bounced.

5. How to list the valid time zone regions ?

============================================

Answer

------

SQL> SELECT * FROM v$timezone_names;

TZNAME TZABBREV

------------------------------ ----------

Pacific/Tahiti LMT

Poland LMT

US/Pacific PST

Europe/Zurich CET

...

The result will depend on which timezone file is currently in use.

See Q&A 7-8 for further details.

6. How to retrieve the time zone offset corresponding to a time zone region ?

=============================================================================

The new 9i TZ_OFFSET() SQL function returns the time zone offset displacement

to the input time zone region.

SQL> SELECT TZ_OFFSET('Europe/London') FROM DUAL;

TZ_OFFS

-------

+01:00

The returned offset depends on the date this statement is executed.

For example, in the 'US/Pacific' time zone, it may return '-07:00' or '-08:00'

whether daylight saving is in effect or not.

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

returns the time zone offset corresponding to the time zone set for session

and database.

TZ_OFFS TZ_OFFS

------- -------

+01:00 +00:00

7. How to use a larger set of defined time zones ?

==================================================

2 different time zone files contain for each zone the offset from UTC,

the transition times for daylight savings and abbreviation :

- ORACLE_HOME/oracore/zoneinfo/timezone.dat

This is the default and contains the most commonly used time zones.

This is the smallest file.

- ORACLE_HOME/oracore/zoneinfo/timezlrg.dat

This file contains the larger set of defined time zones and can be used

if you require time zones that are not defined in the default time zone file.

To enable the use of this larger time zone data file :

1. Shutdown the database

2.1 On UNIX platforms :

set the ORA_TZFILE environment variable to the full pathname of

the location for the timezlrg.dat. By default, this should be

$ORACLE_HOME/oracore/zoneinfo/timezlrg.dat:

$ setenv ORA_TZFILE $ORACLE_HOME/oracore/zoneinfo/timezlrg.dat

2.2 On Windows systems :

You should add an ORA_TZFILE registry subkey for each of your Oracle Homes

with the Windows Registry Editor:

Start -> Run...

Type "regedit", and click "ok"

Add or edit the following registry entry:

HKEY_LOCAL_MACHINE>SOFTWARE>ORACLE>HOMEid>ORA_TZFILE

where ID is the unique number identifying the Oracle home.

Set the ORA_TZFILE to the full pathname of the location for the timezlrg.dat:

By default, the value should be %ORACLE_HOME%oracorezoneinfotimezlrg.dat

3. Restart the database

Once the larger timezlrg.dat is used, it must continue to be used unless the

user is sure that none of the non-default zones are used for data that is stored

in the database.

Also, all databases that share information should use the same time zone data

file.

Be aware that you can neither create nore alter these timezone definition files !

8. Which timezone-set is currently used ?

=========================================

Beside checking the UNIX ORA_TZFILE parameter or the Windows registry subkey,

you can easily check whether you are using the large or the default timezone

file with the following query:

SQL> SELECT COUNT(*) FROM v$timezone_names;

If the default-smallest timezone region file is in use, it will return:

COUNT(*)

----------

616 (in 9.0.1.x and 9.2.x)

or

COUNT(*)

----------

1250 (in 9.0.1.x and 9.2.x)

if the largest file is in use.

9. Can customers rely on Oracle time zones ?

============================================

Timezone.dat and timezlrg.dat are based on information maintained by the U.S. Navy

Observatory.




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论