管理时区

控制台和 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 并希望查看支持的时区的列表,则可以在控制台中查看时区选项。选择数据库系统配置后,当显示高级选项时,这些选项会显示在创建数据库系统页面上。

查看当前时区

执行以下步骤可查看时区信息。

  1. 以网格用户身份登录到主机。

    示例:
    [opc@rc ~]$ sudo su - grid
  2. 使用以下命令查看时区。
    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 时区。

  3. 登录数据库。

    示例:
    [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
  4. 可以使用以下命令查看当前数据库时间。
    sysdate
    示例:
    SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual; 
    
    TO_CHAR(SYSDATE,'DD-
    --------------------
    16-MAR-2023 08:00:40
  5. 退出。

更改数据库系统的时区

执行以下步骤可设置数据库系统的时区。

  1. 以 root 用户身份登录主机。

    示例:
    [opc@rc ~]$ sudo su -
  2. 使用以下命令确定要设置的正确时区 (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

  3. 更新以下命令以设置新时区。
    timedatectl set-timezone <new_time_zone>
    示例:
    [root@rc ~]# timedatectl set-timezone America/New_York
  4. 使用以下命令验证时区是否已更新。
    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) 时区。

  5. 退出。

更改使用网格基础结构的数据库系统上的主机的时区

Oracle Grid Infrastructure 的时区确定数据库日志文件的时区。

执行以下步骤可更新使用网格基础结构进行存储管理的数据库系统主机的时区信息。

注意:

  • 应在 RAC 集群中的所有节点上执行步骤 1 到 10。
  • 可以在 RAC 群集中的任何节点上执行步骤 11 到 15。
  • 此过程不适用于快速预配的数据库系统,这些系统使用逻辑卷管理器而不是网格基础结构来进行存储管理。
  1. grid 用户身份登录到主机。

    示例:
    [opc@rc ~]$ sudo su - grid
  2. 使用以下命令确定要设置的正确时区 (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

  3. 运行以下命令以获取主机名。
    hostname
    示例:
    [grid@rc ~]$ hostname 
    rc
  4. 运行以下命令以获取数据库名称。
    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
  5. 以网格用户身份注销,并以 root 用户身份登录。

    示例:
    [grid@rc ~]$ exit 
    logout 
    [opc@rc ~]$ sudo su -
  6. 导航到以下目录。
    cd $GRID_HOME/crs/install
    示例:
    [root@rc ~]# cd /u01/app/21.0.0.0/grid/crs/install/
  7. 编辑以下文件的 TZ 内容。在编辑后保存并关闭该文件。
    vim s_crsconfig_<hostname>_env.txt
    示例:
    [root@rc install]# vim s_crsconfig_rc_env.txt
  8. 验证文件中的 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]#
  9. 使用以下命令设置新时区。
    timedatectl set-timezone <new_time_zone>
    示例:
    [root@rc install]# timedatectl set-timezone America/Los_Angeles

    注意:

    • 应在 RAC 集群中的所有节点上执行步骤 1 到步骤 9。
    • 可以在 RAC 群集中的任何节点上执行步骤 10 到 15。
  10. 导航到以下目录。
    cd $GRID_HOME/bin
    示例:
    [root@rc install]# cd /u01/app/21.0.0.0/grid/bin/
  11. 使用以下命令将数据库级别的 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"
  12. 使用以下命令验证 TZ 值集。
    srvctl getenv database -d <database_name>
    示例:
    [root@rc bin]# ./srvctl getenv database -d SMDB0316_iad1cx 
    SMDB0316_iad1cx: 
    TZ=America/Los_Angeles
  13. 停止所有计算节点上的 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]#
  14. 在所有计算节点上启动 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]#
  15. 使用以下命令验证时区是否已更新。
    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) 时区。