完成 Google Cloud NetApp Volumes 上 Data Guard 的备用数据库
通过创建备用重做日志文件、启用闪回数据库、激活重做传送和验证 Data Guard 状态,最终完成 Google Cloud NetApp Volumes 上 Oracle Data Guard 备用数据库的配置。
特定于层级: 此过程仅适用于 Prod HA (Data Guard + FSFO) 层级。
步骤 1:创建备用重做日志文件
在两个数据库主机上创建备用重做日志文件,以支持 Fast-Start Failover。大小必须大于或等于最大的主在线重做日志,且计数应等于(每个线程的在线组数)+ 1。完成 GCNV 播种后,在备用数据库上删除并重新创建备用重做日志,以修复复制的路径。
-
在主数据库上创建备用重做日志文件(
orcl):ALTER SYSTEM SET db_create_file_dest='+DATA' SCOPE=BOTH; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 ('+DATA') SIZE 1024M; -- repeat (online log groups + 1) times -
在 GCNV 播种后,在备用数据库上删除并重新创建备用重做日志文件 (
orcls)。在+DATA/ORCL/…下的复制路径会导致ORA-19527/ORA-16086,直到重建为止:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER SYSTEM SET standby_file_management=MANUAL SCOPE=BOTH; -- DROP STANDBY LOGFILE GROUP for each group# in v$standby_log; ALTER SYSTEM SET db_create_file_dest='+DATA' SCOPE=BOTH; ALTER SYSTEM SET standby_file_management=AUTO SCOPE=BOTH; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 ('+DATA') SIZE 1024M; -- repeat (online groups + 1) times; one member per group ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
步骤 2:启用闪回并开始恢复
在备用数据库上启用闪回数据库,以支持故障转移后的自动恢复,然后使用实时应用启动托管恢复。必须在启动托管恢复之前启用闪回,因为在 MRP 处于活动状态时无法启用闪回。
-
关闭备用数据库,在 MOUNT 模式下重新启动,并在以下位置启用闪回数据库
oracdb2:# On oracdb2 sudo -u oracle bash -c ' . ~/.bash_profile export ORACLE_SID=orcls sqlplus / as sysdba <<SQL SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM SET db_flashback_retention_target=1440 SCOPE=BOTH; ALTER DATABASE FLASHBACK ON; EXIT SQL' -
使用实时应用启动托管恢复:
sudo -u oracle bash -c ' . ~/.bash_profile export ORACLE_SID=orcls sqlplus / as sysdba <<SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; EXIT SQL'USING CURRENT LOGFILE启用实时应用(重做在到达 SRL 时应用)。
步骤 3:启用 redo shipping
通过激活 LOG_ARCHIVE_DEST_STATE_2 启用从主库到备库的 redo 传输,该参数在备库初始化步骤的 第 2 步 中被刻意设置为 DEFER,以抑制备库创建过程中的 ORA-12154 错误。
-
切换 `LOG_ARCHIVE_DEST_STATE_2`到 `ENABLE`并强制日志切换以启动重做日志传送:
sudo -u oracle bash -c ' . ~/.bash_profile sqlplus / as sysdba <<SQL ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=BOTH; ALTER SYSTEM SWITCH LOGFILE; ALTER SYSTEM ARCHIVE LOG CURRENT; EXIT SQL' -
验证 redo shipping 是否正常工作:
sudo -u oracle bash -c ' . ~/.bash_profile sqlplus / as sysdba <<SQL SELECT dest_id, status, error FROM v\$archive_dest_status WHERE dest_id IN (1,2); EXIT SQL' # Expected: dest_id=2, STATUS=VALID, ERROR null.如果
dest_2`显示 `ORA-12154,则弹跳主节点。在步骤 1:在两个数据库上启用 broker之后,通过 DGMGRL 管理传输。
步骤 4:验证 Data Guard 状态
验证主数据库是否处于 READ WRITE 模式,以及备用数据库是否已通过应用重做日志的托管恢复进行挂载。
-
验证主数据库角色和打开模式(位于
oracdb1):sudo -u oracle sqlplus -s / as sysdba \ <<<"SELECT database_role || ' | ' || open_mode FROM v\$database;" # Expected: PRIMARY | READ WRITE -
验证备用数据库角色、打开模式和托管恢复状态(位于
oracdb2):gcloud compute ssh oracdb2 --tunnel-through-iap --zone=us-west1-b sudo -u oracle bash <<'BASH' . ~/.bash_profile export ORACLE_SID=orcls sqlplus -s / as sysdba <<'SQL' SELECT database_role || ' | ' || open_mode FROM v$database; SELECT process, status, sequence# FROM v$managed_standby WHERE process IN ('MRP0','RFS'); EXIT SQL BASH待机时应为:
PHYSICAL STANDBY | MOUNTED;MRP0withAPPLYING_LOG。 -
如果备用节点报告 `MOUNTED`但 apply 未运行,请在 `oracdb2`上重新启动托管恢复:
sudo -u oracle bash -c ' . ~/.bash_profile export ORACLE_SID=orcls sqlplus / as sysdba <<SQL ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; EXIT SQL'
下一步是什么?
要激活自动角色管理和故障转移保护,请继续 配置 Oracle Data Guard Broker、快速启动故障转移和 Observer。