本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon RDS 上为 Oracle PeopleSoft 应用程序过渡角色适用于 Oracle 定制
Sampath Kathirvel,Amazon Web Services
Summary
要在亚马逊网络服务 (AWS) 上运行 Oracle PeopleSoft 企业资源规划 (ERP) 解决方案,您可以使用亚马逊关系数据库服务 (Amazon RDS) 或 Ama zon RDS Custom for Oracle,后者支持需要访问底层操作系统 (OS) 和数据库环境的传统、定制和打包应用程序。有关规划迁移时需要考虑的关键因素,请参阅《AWS 规范指引》中的 Oracle 数据库迁移策略。
此模式侧重于为在 Amazon RDS Custom 上运行的 PeopleSoft 应用程序数据库执行 Oracle Data Guard 切换或角色过渡的步骤,该数据库是带有只读副本数据库的主数据库。该模式包括配置快速启动失效转移 (FSFO) 的步骤。在此过程中,Oracle Data Guard 配置中的数据库将继续以其新角色运行。Oracle Data Guard 切换的典型使用案例包括灾难恢复(DR)演练、数据库的定期维护活动以及备用优先补丁应用滚动补丁。有关更多信息,请参阅博客文章缩短 Amazon RDS Custom 中的数据库补丁停机时间。
先决条件和限制
先决条件
限制
产品版本
架构
技术堆栈
目标架构
下图显示了 Amazon RDS Custom 数据库实例和 Amazon RDS Custom 只读副本。Oracle Data Guard 在灾难恢复失效转移期间提供角色转换。
有关 PeopleSoft 在 AWS 上使用 Oracle 的代表性架构,请参阅在 AWS 上设置高可用 PeopleSoft 架构。
Amazon Web Services
适用于 Oracle 的 Amazon RDS Custom 是一种托管式数据库服务,适用于需要访问底层操作系统和数据库环境的旧版、自定义和打包应用程序。
AWS Secrets Manager 帮助您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 的 API 调用,以便以编程方式检索密钥。在此模式中,您需要使用密钥名称 do-not-delete-rds-custom-+<<RDS Resource ID>>+-dg,从 Secrets Manager for RDS_DATAGUARD 中检索数据库用户密码。
其他服务
最佳实践
对于生产部署,我们建议在与主节点和只读副本节点分开的第三个可用区中启动观察器实例。
操作说明
| Task | 说明 | 所需技能 |
|---|
暂停主数据库和副本数据库的自动化。 | 尽管 RDS Custom 自动化框架不会干扰角色转换过程,但在 Oracle Data Guard 切换期间暂停自动化是一种不错的做法。 要暂停和恢复 RDS Custom 数据库自动化,请按照暂停和恢复 RDS Custom 自动化中的说明进行操作。 | 云管理员、数据库管理员 |
检查 Oracle Data Guard 状态。 | 要检查 Oracle Data Guard 状态,请登录到主数据库。此模式包括用于使用多租户容器数据库(CDB)或非 CDB 实例的代码。 非 CDB -bash-4.2$ dgmgrl RDS_DATAGUARD@RDS_CUSTOM_ORCL_A
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon Nov 28 20:55:50 2022
Version 19.10.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Password:
Connected to "ORCL_A"
Connected as SYSDG.
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_a - Primary database
orcl_d - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 59 seconds ago)
DGMGRL>
CDB CDB-bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_A
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 18 06:13:07 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Password:
Connected to "RDSCDB_A"
Connected as SYSDG.
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_a - Primary database
rdscdb_b - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 52 seconds ago)
DGMGRL>
| 数据库管理员 |
验证实例角色。 | 打开 AWS 管理控制台,然后导航到 Amazon RDS 控制台。在数据库的复制部分的连接和安全选项卡上,验证主数据库和副本数据库的实例角色。 主角色应与 Oracle Data Guard 主数据库匹配,副本角色应与 Oracle Data Guard 物理备用数据库相匹配。 | 云管理员、数据库管理员 |
执行切换。 | 要执行切换,请从主节点连接至 DGMGRL。 非 CDB DGMGRL> switchover to orcl_d;
Performing switchover NOW, please wait...
Operation requires a connection to database "orcl_d"
Connecting ...
Connected to "ORCL_D"
Connected as SYSDG.
New primary database "orcl_d" is opening...
Operation requires start up of instance "ORCL" on database "orcl_a"
Starting instance "ORCL"...
Connected to an idle instance.
ORACLE instance started.
Connected to "ORCL_A"
Database mounted.
Database opened.
Connected to "ORCL_A"
Switchover succeeded, new primary is "orcl_d"
DGMGRL>
CDB DGMGRL> switchover to rdscdb_b
Performing switchover NOW, please wait...
New primary database "rdscdb_b" is opening...
Operation requires start up of instance "RDSCDB" on database "rdscdb_a"
Starting instance "RDSCDB"...
Connected to an idle instance.
ORACLE instance started.
Connected to "RDSCDB_A"
Database mounted.
Database opened.
Connected to "RDSCDB_A"
Switchover succeeded, new primary is "rdscdb_b"
| 数据库管理员 |
验证 Oracle Data Guard 连接。 | 切换后,验证 Oracle Data Guard 从主节点连接到 DGMGRL。 非 CDB DGMGRL> show configuration;
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_d - Primary database
orcl_a - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 60 seconds ago)
DGMGRL>
DGMGRL> show configuration lag;
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_d - Primary database
orcl_a - Physical standby database
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 44 seconds ago)
DGMGRL>
CDB DGMGRL> show configuration
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_b - Primary database
rdscdb_a - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 52 seconds ago)
DGMGRL>
DGMGRL> show configuration lag
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_b - Primary database
rdscdb_a - Physical standby database
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 53 seconds ago)
DGMGRL>
| 数据库管理员 |
在 Amazon RDS 控制台上验证实例角色。 | 执行角色切换后,Amazon RDS 控制台在数据库下的连接和安全选项卡的复制部分下显示新角色。复制状态可能需要几分钟才能从空升级至正在复制。 | 数据库管理员 |
| Task | 说明 | 所需技能 |
|---|
重置切换。 | 将切换设置回主节点。 | 数据库管理员 |
安装并启动观察器。 | 观察器过程是 DGMGRL 客户端组件,通常运行在与主数据库和备用数据库不同的计算机上。观察器的 ORACLE HOME 安装可以采用 Oracle Client Administrator 安装,也可以安装 Oracle 数据库企业版或个人版。有关数据库版本的观察器安装的更多信息,请参阅安装和启动观察器。要为观察器过程配置高可用性,您可能想要执行以下操作: 对于 Oracle 12c 版本 2 及更高版本,您最多可以部署三个观察器。其中一个观察器是主观察器,其余的则是备用观察器。当主观察器失效时,其中一个备用观察器将扮演主角色。 | 数据库管理员 |
从观察器主机连接到 DGMGRL。 | 观察器主机配有用于主数据库和备用数据库连接的 tnsnames.ora条目。只要数据丢失在FastStartFailoverLagLimit配置范围内(以秒为单位),您就可以启用具有最高性能保护模式的 FSFO。但是,您必须使用最大可用性保护模式才能实现零数据丢失(RPO=0)。 非 CDB DGMGRL> show configuration;
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_a - Primary database
orcl_d - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 58 seconds ago)
DGMGRL> show configuration lag
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_a - Primary database
orcl_d - Physical standby database
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 5 seconds ago)
DGMGRL>
CDB -bash-4.2$ dgmgrl C##RDS_DATAGUARD@RDS_CUSTOM_RDSCDB_A
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Wed Jan 18 06:55:09 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Password:
Connected to "RDSCDB_A"
Connected as SYSDG.
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_a - Primary database
rdscdb_b - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 18 seconds ago)
DGMGRL>
| 数据库管理员 |
将备用数据库修改为失效转移目标。 | 从主节点或观察器节点连接到一个备用数据库。(尽管您可能配有多个备用数据库,但此时您只需要连接到一个备用数据库。) 非 CDB DGMGRL> edit database orcl_a set property FastStartFailoverTarget='orcl_d';
Property "faststartfailovertarget" updated
DGMGRL> edit database orcl_d set property FastStartFailoverTarget='orcl_a';
Property "faststartfailovertarget" updated
DGMGRL> show database orcl_a FastStartFailoverTarget;
FastStartFailoverTarget = 'orcl_d'
DGMGRL> show database orcl_d FastStartFailoverTarget;
FastStartFailoverTarget = 'orcl_a'
DGMGRL>
CDB DGMGRL> edit database orcl_a set property FastStartFailoverTarget='rdscdb_b';
Object "orcl_a" was not found
DGMGRL> edit database rdscdb_a set property FastStartFailoverTarget='rdscdb_b';
Property "faststartfailovertarget" updated
DGMGRL> edit database rdscdb_b set property FastStartFailoverTarget='rdscdb_a';
Property "faststartfailovertarget" updated
DGMGRL> show database rdscdb_a FastStartFailoverTarget;
FastStartFailoverTarget = 'rdscdb_b'
DGMGRL> show database rdscdb_b FastStartFailoverTarget;
FastStartFailoverTarget = 'rdscdb_a'
DGMGRL>
| 数据库管理员 |
FastStartFailoverThreshold 为连接到 DGMGRL 进行配置。 | 在 Oracle 19c 中,默认值为 30 秒,最小值为 6 秒。较低的值可能会缩短失效转移期间的恢复时间目标(RTO)。较高的值有助于降低主数据库上出现不必要的失效转移瞬时错误的可能性。 适用于 Oracle 的 RDS Custom 自动化框架监控数据库运行状况并每隔几秒钟执行一次纠正操作。因此,我们建议将值设置 FastStartFailoverThreshold 为大于 10 秒的值。以下示例将阈值配置为 35 秒。 非 CBD 或 CDB DGMGRL> edit configuration set property FastStartFailoverThreshold=35;
Property "faststartfailoverthreshold" updated
DGMGRL> show configuration FastStartFailoverThreshold;
FastStartFailoverThreshold = '35'
DGMGRL>
| 数据库管理员 |
通过从主节点或观察器节点连接到 DGMGRL 来启用 FSFO。 | 如果数据库未启用闪回数据库,则会显示警告消息 ORA-16827。如果FastStartFailoverAutoReinstate配置属性设置为TRUE(这是默认值),则可选的闪回数据库有助于自动将出现故障的主数据库恢复到故障转移之前的时间点。 非 CDB DGMGRL> enable fast_start failover;
Warning: ORA-16827: Flashback Database is disabled
Enabled in Zero Data Loss Mode.
DGMGRL>
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_a - Primary database
Warning: ORA-16819: fast-start failover observer not started
orcl_d - (*) Physical standby database
Warning: ORA-16819: fast-start failover observer not started
Fast-Start Failover: Enabled in Zero Data Loss Mode
Configuration Status:
WARNING (status updated 29 seconds ago)
DGMGRL>
CDB DGMGRL> enable fast_start failover;
Warning: ORA-16827: Flashback Database is disabled
Enabled in Zero Data Loss Mode.
DGMGRL> show configuration;
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_a - Primary database
Warning: ORA-16819: fast-start failover observer not started
rdscdb_b - (*) Physical standby database
Fast-Start Failover: Enabled in Zero Data Loss Mode
Configuration Status:
WARNING (status updated 11 seconds ago)
DGMGRL>
| 数据库管理员 |
启动观察器进行 FSFO 监控,然后验证状态。 | 您可以在启用 FSFO 之前或之后启动观察器。如果 FSFO 已启用,则观察器会立即开始监控状态以及与主备用数据库和目标备用数据库的连接。如果未启用 FSFO,则观察器要等到 FSFO 启用后才会开始监控。 启动观察器时,将显示主数据库配置而不显示任何错误消息,前述 show configuration 命令就是明证。 非 CDB DGMGRL> start observer;
[W000 2022-12-01T06:16:51.271+00:00] FSFO target standby is orcl_d
Observer 'ip-10-0-1-89' started
[W000 2022-12-01T06:16:51.352+00:00] Observer trace level is set to USER
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_a - Primary database
orcl_d - (*) Physical standby database
Fast-Start Failover: Enabled in Zero Data Loss Mode
Configuration Status:
SUCCESS (status updated 56 seconds ago)
DGMGRL>
DGMGRL> show observer
Configuration - rds_dg
Primary: orcl_a
Active Target: orcl_d
Observer "ip-10-0-1-89" - Master
Host Name: ip-10-0-1-89
Last Ping to Primary: 1 second ago
Last Ping to Target: 1 second ago
DGMGRL>
CDB DGMGRL> start observer;
Succeeded in opening the observer file "/home/oracle/fsfo_ip-10-0-1-56.dat".
[W000 2023-01-18T07:31:32.589+00:00] FSFO target standby is rdscdb_b
Observer 'ip-10-0-1-56' started
The observer log file is '/home/oracle/observer_ip-10-0-1-56.log'.
DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
rdscdb_a - Primary database
rdscdb_b - (*) Physical standby database
Fast-Start Failover: Enabled in Zero Data Loss Mode
Configuration Status:
SUCCESS (status updated 12 seconds ago)
DGMGRL>
DGMGRL> show observer;
Configuration - rds_dg
Primary: rdscdb_a
Active Target: rdscdb_b
Observer "ip-10-0-1-56" - Master
Host Name: ip-10-0-1-56
Last Ping to Primary: 1 second ago
Last Ping to Target: 2 seconds ago
DGMGRL>
| 数据库管理员 |
验证失效转移。 | 在这种情况下,可以通过手动停止主 EC2 实例来执行故障转移测试。在停止 EC2 实例之前,请使用tail命令根据您的配置监控观察者日志文件。以用户 RDS_DATAGUARD 的身份使用 DGMGRL 登录备用数据库 orcl_d,并检查 Oracle Data Guard 状态。系统应当表明 orcl_d 是新的主数据库。 在此失效转移测试场景中,orcl_d 是非 CDB 数据库。 在失效转移之前,已在 orcl_a 上启用闪回数据库。在先前的主数据库恢复在线状态并以 MOUNT 状态启动后,观察器将其恢复到新的备用数据库中。恢复后的数据库充当新主数据库的 FSFO 目标。您可以在观察器日志中验证详细信息。 DGMGRL> show configuration
Configuration - rds_dg
Protection Mode: MaxAvailability
Members:
orcl_d - Primary database
Warning: ORA-16824: multiple warnings, including fast-start failover-related warnings, detected for the database
orcl_a - (*) Physical standby database (disabled)
ORA-16661: the standby database needs to be reinstated
Fast-Start Failover: Enabled in Zero Data Loss Mode
Configuration Status:
WARNING (status updated 25 seconds ago)
DGMGRL>
以下显示了 observer.log 中的示例输出。 $ tail -f /tmp/observer.log
Unable to connect to database using rds_custom_orcl_a
[W000 2023-01-18T07:50:32.589+00:00] Primary database cannot be reached.
[W000 2023-01-18T07:50:32.589+00:00] Fast-Start Failover threshold has expired.
[W000 2023-01-18T07:50:32.590+00:00] Try to connect to the standby.
[W000 2023-01-18T07:50:32.590+00:00] Making a last connection attempt to primary database before proceeding with Fast-Start Failover.
[W000 2023-01-18T07:50:32.591+00:00] Check if the standby is ready for failover.
[S002 2023-01-18T07:50:32.591+00:00] Fast-Start Failover started...
2023-01-18T07:50:32.591+00:00
Initiating Fast-Start Failover to database "orcl_d"...
[S002 2023-01-18T07:50:32.592+00:00] Initiating Fast-start Failover.
Performing failover NOW, please wait...
Failover succeeded, new primary is "orcl_d"
2023-01-18T07:55:32.101+00:00
[S002 2023-01-18T07:55:32.591+00:00] Fast-Start Failover finished...
[W000 2023-01-18T07:55:32.591+00:00] Failover succeeded. Restart pinging.
[W000 2023-01-18T07:55:32.603+00:00] Primary database has changed to orcl_d.
[W000 2023-01-18T07:55:33.618+00:00] Try to connect to the primary.
[W000 2023-01-18T07:55:33.622+00:00] Try to connect to the primary rds_custom_orcl_d.
[W000 2023-01-18T07:55:33.634+00:00] The standby orcl_a needs to be reinstated
[W000 2023-01-18T07:55:33.654+00:00] Try to connect to the new standby orcl_a.
[W000 2023-01-18T07:55:33.654+00:00] Connection to the primary restored!
[W000 2023-01-18T07:55:35.654+00:00] Disconnecting from database rds_custom_orcl_d.
[W000 2023-01-18T07:55:57.701+00:00] Try to connect to the new standby orcl_a.
ORA-12170: TNS:Connect timeout occurred
| 数据库管理员 |
| Task | 说明 | 所需技能 |
|---|
在主数据库中创建并启动该服务。 | 在配置中有一条 TNS 条目同时包含主数据库端点和备用数据库端点,使用此条目可以避免在角色转换期间更改应用程序配置。您可以定义两个基于角色的数据库服务来同时支持这两个工作负载 read/write 和只读工作负载。在以下示例中,orcl_rw是主数据库上处于活动状态的 read/write 服务。 orcl_ro是只读服务,在以只读模式打开的备用数据库上处于活动状态。 SQL> select name,open_mode from v$database;
NAME OPEN_MODE
--------- --------------------
ORCL READ WRITE
SQL> exec dbms_service.create_service('orcl_rw','orcl_rw');
PL/SQL procedure successfully completed.
SQL> exec dbms_service.create_service('orcl_ro','orcl_ro');
PL/SQL procedure successfully completed.
SQL> exec dbms_service.start_service('orcl_rw');
PL/SQL procedure successfully completed.
SQL>
| 数据库管理员 |
在备用数据库中启动服务。 | 要在只读备用数据库中启动该服务,请使用以下代码。 SQL> select name,open_mode from v$database;
NAME OPEN_MODE
--------- --------------------
ORCL READ ONLY WITH APPLY
SQL> exec dbms_service.start_service('orcl_ro');
PL/SQL procedure successfully completed.
SQL>
| 数据库管理员 |
在主数据库重新启动时自动启动服务。 | 要在主数据库重新启动时自动启动该服务,请使用以下代码。 SQL> CREATE OR REPLACE TRIGGER TrgDgServices after startup on database
DECLARE
db_role VARCHAR(30);
db_open_mode VARCHAR(30);
BEGIN
SELECT DATABASE_ROLE, OPEN_MODE INTO db_role, db_open_mode FROM V$DATABASE;
IF db_role = 'PRIMARY' THEN
DBMS_SERV 2 ICE.START_SERVICE('orcl_rw');
END IF;
IF db_role = 'PHYSICAL STANDBY' AND db_open_mode LIKE 'READ ONLY%' THEN
DBMS_SERVICE.START_SERVICE('orcl_ro');
END IF;
END;
/
Trigger created.
SQL>
| 数据库管理员 |
在 read/write 和只读数据库之间配置连接。 | 您可以为 read/write 和只读连接使用以下应用程序配置示例。 ORCL_RW = (DESCRIPTION =
(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=devpsftdb.******.us-west-2.rds.amazonaws.com)(PORT=1521))
(ADDRESS = (PROTOCOL = TCP)(HOST=psftread.******.us-west-2.rds.amazonaws.com)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME = orcl_rw))
)
ORCL_RO = (DESCRIPTION =
(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=devpsftdb.******.us-west-2.rds.amazonaws.com)(PORT=1521))
(ADDRESS = (PROTOCOL = TCP)(HOST=psftread.******.us-west-2.rds.amazonaws.com)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME = orcl_ro))
)
| 数据库管理员 |
相关的资源