管理时区
控制台和 API 中的时区字段允许您启动时区不是 UTC(默认值)的数据库系统资源。
创建数据库系统时指定的时区应用于主机和 Oracle Grid Infrastructure(如果系统具有 Grid Infrastructure),并控制数据库日志文件的时区。数据库本身的时区不受影响。但是,数据库的时区仅影响 timestamp
数据类型。您可以手动更改数据库时区,但 Oracle 建议将其保留为 UTC(默认值),以避免在数据库之间传输数据时进行数据转换并提高性能。此配置对于分布式数据库、复制以及导出和导入操作尤为重要。
虽然建议使用 UTC 时区,但为数据库客户端和应用程序主机设置公共时区可以简化数据库管理员的管理和故障排除。
注意:
时区主要用于显示目的或处理用户输入。更改时区不会更改系统时钟上的时间。相关主题
时区选项
无论使用控制台还是 API,您可以从中选择的时区选项都以指定的区域格式表示,例如 America/Los_Angeles 。通过控制台,您可以选择 UTC、在浏览器中检测到的时区(如果您的浏览器支持时区检测)或备用时区。
要指定替代时区(选择另一个时区选项),请首先在区域或国家/地区字段中选择一个值,以缩小要在时区字段中选择的时区列表。在 America/Los_Angeles 示例中, America 是时间区域,Los_Angeles 是时区。在这两个字段中看到的选项与 Java.util.TimeZone
类和 Linux 操作系统上支持的时区大致相关。如果未看到要查找的时区,请尝试在区域和国家/地区字段中选择“其他”。
提示:
如果您使用 API 并希望查看支持的时区的列表,则可以在控制台中查看时区选项。选择数据库系统配置后,当显示高级选项时,这些选项会显示在创建数据库系统页面上。查看当前时区
执行以下步骤可查看时区信息。
-
以网格用户身份登录到主机。
示例:[opc@rc ~]$ sudo su - grid
-
使用以下命令查看时区。
timedatectl
示例:[grid@rc ~]$ timedatectl Local time: Thu 2023-03-16 08:00:25 UTC Universal time: Thu 2023-03-16 08:00:25 UTC RTC time: Thu 2023-03-16 08:00:21 Time zone: UTC (UTC, +0000) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
请注意,系统当前处于 UTC 时区。
-
登录数据库。
示例:[grid@rc ~]$ sqlplus / as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on Thu Mar 16 08:00:33 2023 Version 21.9.0.0.0 Copyright (c) 1982, 2022, Oracle. All rights reserved. Connected to: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 -Production Version 21.9.0.0.0
-
可以使用以下命令查看当前数据库时间。
sysdate
示例:SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'DD- -------------------- 16-MAR-2023 08:00:40
-
退出。
更改数据库系统的时区
执行以下步骤可设置数据库系统的时区。
-
以 root 用户身份登录主机。
示例:[opc@rc ~]$ sudo su -
-
使用以下命令确定要设置的正确时区 (TZ) 值。例如,如果要确定美国东部时区 (EST/EDT) 的正确 TZ 值,可以使用
tzselect
命令并选择 Americas/United States/Eastern。tzselect
示例:[root@rc ~]# tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format. #? 2 Please select a country. 1) Anguilla 19) Dominican Republic 37) Peru 2) Antigua & Barbuda 20) Ecuador 38) Puerto Rico 3) Argentina 21) El Salvador 39) St Barthelemy 4) Aruba 22) French Guiana 40) St Kitts & Nevis 5) Bahamas 23) Greenland 41) St Lucia 6) Barbados 24) Grenada 42) St Maarten (Dutch) 7) Belize 25) Guadeloupe 43) St Martin (French) 8) Bolivia 26) Guatemala 44) St Pierre & Miquelon 9) Brazil 27) Guyana 45) St Vincent 10) Canada 28) Haiti 46) Suriname 11) Caribbean NL 29) Honduras 47) Trinidad & Tobago 12) Cayman Islands 30) Jamaica 48) Turks & Caicos Is 13) Chile 31) Martinique 49) United States 14) Colombia 32) Mexico 50) Uruguay 15) Costa Rica 33) Montserrat 51) Venezuela 16) Cuba 34) Nicaragua 52) Virgin Islands (UK) 17) Curaçao 35) Panama 53) Virgin Islands (US) 18) Dominica 36) Paraguay #? 49 Please select one of the following time zone regions. 1) Eastern (most areas) 16) Central - ND (Morton rural) 2) Eastern - MI (most areas) 17) Central - ND (Mercer) 3) Eastern - KY (Louisville area) 18) Mountain (most areas) 4) Eastern - KY (Wayne) 19) Mountain - ID (south); OR (east) 5) Eastern - IN (most areas) 20) MST - Arizona (except Navajo) 6) Eastern - IN (Da, Du, K, Mn) 21) Pacific 7) Eastern - IN (Pulaski) 22) Alaska (most areas) 8) Eastern - IN (Crawford) 23) Alaska - Juneau area 9) Eastern - IN (Pike) 24) Alaska - Sitka area 10) Eastern - IN (Switzerland) 25) Alaska - Annette Island 11) Central (most areas) 26) Alaska - Yakutat 12) Central - IN (Perry) 27) Alaska (west) 13) Central - IN (Starke) 28) Aleutian Islands 14) Central - MI (Wisconsin border) 29) Hawaii 15) Central - ND (Oliver) #? 1 The following information has been given: United States Eastern (most areas) Therefore TZ='America/New_York' will be used. Local time is now: Thu Mar 16 04:01:39 EDT 2023. Universal Time is now: Thu Mar 16 08:01:39 UTC 2023. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ='America/New_York'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /bin/tzselect command in shell scripts: America/New_York [root@rc ~]#
从
tzselect
命令中,我们已将 EDT 时区的 TZ 值标识为America/New_York
。 -
更新以下命令以设置新时区。
timedatectl set-timezone <new_time_zone>
示例:[root@rc ~]# timedatectl set-timezone America/New_York
-
使用以下命令验证时区是否已更新。
timedatectl
示例:[root@rc ~]# timedatectl Local time: Thu 2023-03-16 04:02:15 EDT Universal time: Thu 2023-03-16 08:02:15 UTC RTC time: Thu 2023-03-16 08:02:10 Time zone: America/New_York (EDT, -0400) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: yes Last DST change: DST began at Sun 2023-03-12 01:59:59 EST Sun 2023-03-12 03:00:00 EDT Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2023-11-05 01:59:59 EDT Sun 2023-11-05 01:00:00 EST
请注意,系统现在处于 America/New_York (EDT) 时区。
-
退出。
更改使用网格基础结构的数据库系统上的主机的时区
Oracle Grid Infrastructure 的时区确定数据库日志文件的时区。
执行以下步骤可更新使用网格基础结构进行存储管理的数据库系统主机的时区信息。
注意:
- 应在 RAC 集群中的所有节点上执行步骤 1 到 10。
- 可以在 RAC 群集中的任何节点上执行步骤 11 到 15。
- 此过程不适用于快速预配的数据库系统,这些系统使用逻辑卷管理器而不是网格基础结构来进行存储管理。
-
以
grid
用户身份登录到主机。示例:[opc@rc ~]$ sudo su - grid
-
使用以下命令确定要设置的正确时区 (TZ) 值。例如,如果要确定 US Pacific 时区 (PST/PDT) 的正确 TZ 值,可以使用
tzselect
命令并选择 Americas/United States/Pacific。tzselect
示例:[grid@rc ~]$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format. #? 2 Please select a country. 1) Anguilla 19) Dominican Republic 37) Peru 2) Antigua & Barbuda 20) Ecuador 38) Puerto Rico 3) Argentina 21) El Salvador 39) St Barthelemy 4) Aruba 22) French Guiana 40) St Kitts & Nevis 5) Bahamas 23) Greenland 41) St Lucia 6) Barbados 24) Grenada 42) St Maarten (Dutch) 7) Belize 25) Guadeloupe 43) St Martin (French) 8) Bolivia 26) Guatemala 44) St Pierre & Miquelon 9) Brazil 27) Guyana 45) St Vincent 10) Canada 28) Haiti 46) Suriname 11) Caribbean NL 29) Honduras 47) Trinidad & Tobago 12) Cayman Islands 30) Jamaica 48) Turks & Caicos Is 13) Chile 31) Martinique 49) United States 14) Colombia 32) Mexico 50) Uruguay 15) Costa Rica 33) Montserrat 51) Venezuela 16) Cuba 34) Nicaragua 52) Virgin Islands (UK) 17) Curaçao 35) Panama 53) Virgin Islands (US) 18) Dominica 36) Paraguay #? 49 Please select one of the following time zone regions. 1) Eastern (most areas) 16) Central - ND (Morton rural) 2) Eastern - MI (most areas) 17) Central - ND (Mercer) 3) Eastern - KY (Louisville area) 18) Mountain (most areas) 4) Eastern - KY (Wayne) 19) Mountain - ID (south); OR (east) 5) Eastern - IN (most areas) 20) MST - Arizona (except Navajo) 6) Eastern - IN (Da, Du, K, Mn) 21) Pacific 7) Eastern - IN (Pulaski) 22) Alaska (most areas) 8) Eastern - IN (Crawford) 23) Alaska - Juneau area 9) Eastern - IN (Pike) 24) Alaska - Sitka area 10) Eastern - IN (Switzerland) 25) Alaska - Annette Island 11) Central (most areas) 26) Alaska - Yakutat 12) Central - IN (Perry) 27) Alaska (west) 13) Central - IN (Starke) 28) Aleutian Islands 14) Central - MI (Wisconsin border) 29) Hawaii 15) Central - ND (Oliver) #? 21 The following information has been given: United States Pacific Therefore TZ='America/Los_Angeles' will be used. Local time is now: Thu Mar 16 01:08:57 PDT 2023. Universal Time is now: Thu Mar 16 08:08:57 UTC 2023. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ='America/Los_Angeles'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /bin/tzselect command in shell scripts: America/Los_Angeles [grid@rc ~]$
从
tzselect
命令中,我们已将 PDT 时区的 TZ 值标识为America/Los_Angeles
。 -
运行以下命令以获取主机名。
hostname
示例:[grid@rc ~]$ hostname rc
-
运行以下命令以获取数据库名称。
srvctl config database -v
示例:[grid@rc ~]$ srvctl config database -v SMDB0316_iad1cx /u01/app/oracle/product/21.0.0.0/dbhome_1 21.0.0.0.0
-
以网格用户身份注销,并以 root 用户身份登录。
示例:[grid@rc ~]$ exit logout [opc@rc ~]$ sudo su -
-
导航到以下目录。
cd $GRID_HOME/crs/install
示例:[root@rc ~]# cd /u01/app/21.0.0.0/grid/crs/install/
-
编辑以下文件的 TZ 内容。在编辑后保存并关闭该文件。
vim s_crsconfig_<hostname>_env.txt
示例:[root@rc install]# vim s_crsconfig_rc_env.txt
-
验证文件中的 TZ 条目是否已更新。
cat s_crsconfig_<hostname>_env.txt
示例:[root@rc install]# cat s_crsconfig_rc_env.txt ######################################################################### #This file can be used to set values for the NLS_LANG and TZ environment #variables and to set resource limits for Oracle Clusterware and #Database processes. #1. The NLS_LANG environment variable determines the language and # characterset used for messages. For example, a new value can be # configured by setting NLS_LANG=JAPANESE_JAPAN.UTF8 #2. The Time zone setting can be changed by setting the TZ entry to # the appropriate time zone name. For example, TZ=America/New_York #3. Resource limits for stack size, open files and number of processes # can be specified by modifying the appropriate entries. # #Do not modify this file except as documented above or under the #direction of Oracle Support Services. ######################################################################### TZ=America/Los_Angeles NLS_LANG=AMERICAN_AMERICA.AL32UTF8 CRS_LIMIT_STACK=2048 CRS_LIMIT_OPENFILE=65536 CRS_LIMIT_NPROC=65536 TNS_ADMIN= [root@rc install]#
-
使用以下命令设置新时区。
timedatectl set-timezone <new_time_zone>
示例:[root@rc install]# timedatectl set-timezone America/Los_Angeles
注意:
- 应在 RAC 集群中的所有节点上执行步骤 1 到步骤 9。
- 可以在 RAC 群集中的任何节点上执行步骤 10 到 15。
-
导航到以下目录。
cd $GRID_HOME/bin
示例:[root@rc install]# cd /u01/app/21.0.0.0/grid/bin/
-
使用以下命令将数据库级别的 TZ 值更改为所需的时区。
srvctl setenv database -d <database_name> -t "TZ=<new_time_zone>"
示例:[root@rc bin]# ./srvctl setenv database -d SMDB0316_iad1cx -t "TZ=America/Los_Angeles"
-
使用以下命令验证 TZ 值集。
srvctl getenv database -d <database_name>
示例:[root@rc bin]# ./srvctl getenv database -d SMDB0316_iad1cx SMDB0316_iad1cx: TZ=America/Los_Angeles
-
停止所有计算节点上的 CRS 堆栈。
crsctl stop cluster
示例:[root@rc bin]# ./crsctl stop cluster CRS-2673: Attempting to stop 'ora.crsd' on 'rc' . . . CRS-2673: Attempting to stop 'ora.cssd' on 'rc' CRS-2677: Stop of 'ora.cssd' on 'rc' succeeded [root@rc bin]#
-
在所有计算节点上启动 CRS 堆栈。
crsctl start cluster
示例:[root@rc bin]# ./crsctl start cluster CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rc' . . . CRS-2672: Attempting to start 'ora.crsd' on 'rc' CRS-2676: Start of 'ora.crsd' on 'rc' succeeded [root@rcbin]#
-
使用以下命令验证时区是否已更新。
timedatectl
示例:[root@rc bin]# timedatectl Local time: Thu 2023-03-16 01:19:15 PDT Universal time: Thu 2023-03-16 08:19:15 UTC RTC time: Thu 2023-03-16 08:19:10 Time zone: America/Los_Angeles (PDT, -0700) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: yes Last DST change: DST began at Sun 2023-03-12 01:59:59 PST Sun 2023-03-12 03:00:00 PDT Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2023-11-05 01:59:59 PDT Sun 2023-11-05 01:00:00 PST
请注意,系统现在处于 America/Los_Angeles (PDT) 时区。