跳至内容

如何解决我的 Amazon RDS for Oracle 数据库实例中的时区选项问题?

2 分钟阅读
0

我想在适用于 Oracle 数据库实例的亚马逊关系数据库服务 (Amazon RDS) 中使用时区选项。或者我想解决我在数据库实例中使用时区选项时遇到的问题。

简短描述

您可以使用时区选项来更改 RDS for Oracle 数据库实例使用的系统时区。例如,您可以更改数据库实例的时区,使之与本地环境或旧式应用程序兼容。

时区选项会在主机级别更改时区。如果您更改实例的时区,则时区选项会影响所有日期列和值。其中包括 SYSDATESYSTIMESTAMP

解决方法

注意事项和限制

在使用时区选项之前,请查看以下内容以了解时区选项的限制:

  • 当您创建 RDS for Oracle 数据库实例时,数据库会自动设置数据库时区。数据库时区也称为夏令时 (DST) 时区。数据库时区不同于系统时区。
  • Oracle Database 版本更新时,补丁集或单个补丁中通常包括新的 DST 版本。这些补丁会反映不同时区区域过渡规则的变化。对 DST 规则的更改可能会影响 TIMESTAMP WITH TIME ZONE 数据类型的现有数据。
  • 如果您升级 RDS for Oracle 数据库实例,则 Amazon RDS 不会自动升级数据库时区文件。要自动升级时区文件,请在引擎版本升级期间或之后,将 TIMEZONE_FILE_AUTOUPGRADE 选项添加到实例的选项组中。

将您的数据库实例恢复到之前的时区设置

**注意:**时区选项是一个永久性的选项。这意味着在添加该选项后,您无法从选项组中移除该选项。同样,在添加该选项组后,您无法将其从实例中移除。您也无法将该选项的时区设置修改为其他时区。有关更多信息,请参阅永久性选项

如果时区设置不正确,则必须将数据库实例恢复到之前的时区设置。

如果您的数据库实例使用默认选项组,请按照以下步骤操作:

  1. 拍摄数据库实例的快照。有关更多信息,请参阅为单可用区数据库实例创建数据库快照
  2. 将时区选项添加到您的数据库实例。

如果您的数据库实例当前使用非默认选项组,请按照以下步骤操作:

  1. 拍摄数据库实例的快照。
  2. 使用时区选项创建新的选项组。
  3. 将选项组添加到您的数据库实例。

**注意:**添加时区选项时,使用系统日期添加日期或时间的表可能会出现问题。最佳实践是先在测试数据库实例上测试时区选项,然后再将其添加到生产数据库实例。分析您的数据和应用程序,以评估更改时区的影响。

将时区选项添加到数据库实例

Timezone(时区)选项会在主机级别更改时区并影响所有日期列和值,例如 SYSDATE。使用以下步骤向数据库实例添加时区选项:

  1. 创建新的选项组,或者复制或修改现有选项组。
  2. 将时区选项添加到选项组。
  3. 将选项组与数据库实例关联。

**注意:**当您添加时区选项时,您的数据库实例将自动重启并发生短暂中断。

示例

要在修改 TIMEZONE(时区)选项之前和之后验证列的值,请运行类似于以下的命令:

SYS.ORCL> select sysdate,systimestamp from dual;

使用 DB(数据库)时区选项

使用 alter_db_time_zone 过程来更改某些数据类型的时区。这不会更改 SYSDATE。运行 alter_db_time_zone 后,重启数据库实例以使更改生效。

以下示例将时区更改为 UTC 加 10 小时

EXEC rdsadmin.rdsadmin_util.alter_db_time_zone(p_new_tz => '+10:00');

以下示例将时区更改为澳大利亚/悉尼时区:

EXEC rdsadmin.rdsadmin_util.alter_db_time_zone(p_new_tz => 'Australia/Sydney');

以下示例在实例重启完成后验证 DB TIMEZONE(数据库时区)设置。

select (select name from v$database) dbname,dbtimezone from dual;

对有关时区和时区升级文件更改的问题进行故障排除

将时区设置修改为其他时区后出现 API 调用错误

您在新选项组中请求的时区选项与现有选项组的时区选项不同。设置数据库实例的时区后,您无法更改为其他时区。

要解决此问题,请使用所需时区创建一个新实例。然后使用原生 Oracle 实用程序导出/导入功能,将数据从现有实例迁移到新实例。

在使用不同版本的时区文件的数据库之间传输数据后出现问题

尝试在使用不同时区文件版本的数据库之间传输数据后,出现类似以下内容的错误消息:

“ORA-39405: Oracle Data Pump 不支持从 TSTZ 版本 41 的源数据库导入到 TSTZ 版本 39 的目标数据库。”

要解决此问题,请使用 SQL 客户端连接到 Oracle 数据库,并检查当前使用的时区文件版本。运行类似以下示例的命令:

SELECT * FROM V$TIMEZONE_FILE;

确定数据库实例上可用的最新时区文件版本。仅当您使用 Oracle Database 12c Release 2 (12.2) 或更高版本时,此步骤才适用。运行类似以下示例的命令:

SELECT DBMS_DST.GET_LATEST_TIMEZONE_VERSION FROM DUAL;

您可以升级数据库引擎并独立更新时区文件。根据您是同时升级数据库和时区文件还是一次升级其中一个,您的升级策略会有所不同。

  • 您尚未将 TIMEZONE_FILE_AUTOUPGRADE 添加到数据库实例使用的选项组中。
  • 您的数据库实例版本 19.0.0.0.ru-2022-10.rur-2022-10.r1 使用数据库时区文件 DSTv39。
  • 版本更新 19.0.0.0.ru-2023-01.rur-2023-01.r2 中包括 DSTv41。

要更新您的时区文件,请使用以下策略之一。

相关信息

设置数据库时区

添加时区文件自动升级选项