oracle ADG主备切换

本文详细描述了Oracle数据库从主库切换到备库,以及备库切换回为主库的过程,包括检查状态、执行SQL命令、解决错误(如媒体恢复需要)和调整日志应用等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.主库切换备库

SQL> select name,open_mode,switchover_status from v$database;

NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
PROD1 READ WRITE TO STANDBY

SQL> alter system switch logfile;

System altered.

SQL> alter system archive log current;

System altered.

SQL> alter database commit to switchover to physical standby with session shutdown;

Database altered.

SQL> shutdown abort
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 849530880 bytes
Fixed Size 1348244 bytes
Variable Size 511708524 bytes
Database Buffers 331350016 bytes
Redo Buffers 5124096 bytes
Database mounted.
SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
RECOVERY NEEDED

SQL> alter database open;

Database altered.

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

2.备库切换主库

这里可能会出现错误:
ORA-16139: media recovery required。
下面有解决方法
解决完后,可以不要再次执行了。直接执行下面的命令。
SQL>  alter database commit to switchover to primary with session shutdown;                       
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required

怀疑可能是由于有日志未应用造成的,执行如下语句查询:
SQL> select APPLIED,SEQUENCE# from v$archived_log;

APPLIED    SEQUENCE#
--------- ----------
YES                8
YES                9
YES               12
YES               13
YES               15
YES               16
YES               17
YES               10
YES               14
YES               11
YES               19

APPLIED    SEQUENCE#
--------- ----------
YES               18
NO                20
NO                21
NO                22
NO                23

16 rows selected.

正确步骤:

SQL> ALTER  DATABASE RECOVER MANAGED STANDBY  DATABASE DISCONNECT FROM SESSION;

Database altered.

SQL> alter database commit to switchover to primary;

Database altered.


SQL> alter database open;

Database altered.

SQL> select name,open_mode,switchover_status from v$database;

NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
PROD1 READ WRITE TO STANDBY

3. 新备库(原主库)启用实时日志应用

SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
SQL> select name,open_mode,switchover_status from v$database;

NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ ONLY RECOVERY NEEDED

4.新主库切换日志

SQL> alter system switch logfile;

System altered.

5、分别查看当前主备库切换后当前日志序列号

主库:

SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 52
Next log sequence to archive 54
Current log sequence 54

备库:

SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oracle/archive
Oldest online log sequence 53
Next log sequence to archive 0
Current log sequence 54

6、查看当前主备库状态

主库:

SQL> select name,open_mode,switchover_status from v$database;

NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ WRITE TO STANDBY

 

备库:

SQL> select name,open_mode,switchover_status from v$database;

NAME OPEN_MODE SWITCHOVER_STATUS
--------- -------------------- --------------------
RMANPRI READ ONLY WITH APPLY NOT ALLOWED
### 配置 ADG 切换 ADG(Active Data Guard)切换Oracle Data Guard 架构中的一项关键功能,用于在主库发生故障时将数据库提升为新的主库。以下是配置和执行切换的详细步骤: #### 1. 使用 DGMGRL 工具进行切换 DGMGRL 是 Oracle 提供的一个命令行工具,专门用于管理 Data Guard 配置。通过该工具可以轻松实现切换。 示例操作如下: ```bash DGMGRL> CONNECT SYS/password@primary_db AS SYSDBA; DGMGRL> SWITCHOVER TO standby_db; ``` 此命令将主库 `primary_db` 切换 `standby_db`,并将其提升为主库[^3]。 #### 2. 使用 SQL*Plus 命令进行手动切换 如果未使用 DGMGRL,也可以通过 SQL*Plus 执行切换操作。以下是一个典型的切换流程: - **步骤 1:检查主库的状态** ```sql SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE; ``` 确保主库处于 `PRIMARY` 角色且为 `READ WRITE` 模式,而处于 `PHYSICAL STANDBY` 角色且为 `READ ONLY` 模式。 - **步骤 2:在主库上停止日志传输** ```sql ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; ``` - **步骤 3:在上应用所有未完成的日志** ```sql ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; ``` - **步骤 4:将提升为主库** ```sql ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; ``` - **步骤 5:重新启动原主库作为** 如果原主库仍然可用,则需要将其转换为以继续参与 Data Guard 配置: ```sql ALTER DATABASE CONVERT TO PHYSICAL STANDBY; ``` #### 3. 自动故障切换配置 为了实现自动故障切换,需启用 Fast-Start Failover(FSFO)。FSFO 允许在主库不可用时自动将数据库提升为主库,而无需人工干预。 - **启用 FSFO 的基本步骤:** ```bash DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXIMUM AVAILABILITY; DGMGRL> ENABLE FAST_START FAILOVER; DGMGRL> START OBSERVER; ``` 这些命令将启用快速启动故障切换,并由观察器监控主库状态,一旦检测到主库不可用,将自动触发切换操作[^2]。 --- ### 故障解决 #### 1. 日志传输中断 **问题描述:** 无法接收来自主库的归档日志。 - **解决方案:** - 检查网络连接是否正常。 - 确认主库的 `LOG_ARCHIVE_DEST_n` 参数是否正确配置。 - 在上查询 `V$ARCHIVED_LOG` 视图,查看是否有缺失的日志文件。 - 如果发现日志缺失,可以通过 RMAN 手动恢复并同步日志: ```bash RMAN> RECOVER DATABASE NOREDO; ``` #### 2. 数据库角色切换失败 **问题描述:** 在执行切换时提示角色转换失败。 - **解决方案:** - 检查当前数据库角色是否匹配预期目标。 - 确保在切换前关闭所有活动会话。 - 如果切换失败,尝试重新执行切换命令或重启数据库实例。 #### 3. 同步延迟过大 **问题描述:** 主库之间的数据同步存在较大延迟。 - **解决方案:** - 增加 `MRP` 进程的数量以加速日志应用: ```sql ALTER DATABASE RECOVER MANAGED STANDBY DATABASE PARALLEL 4; ``` - 调整 `LOG_ARCHIVE_CONFIG` 和 `FAL_SERVER` 参数,优化日志传输效率。 #### 4. 自动故障切换未触发 **问题描述:** 即使主库不可用,系统仍未触发自动故障切换。 - **解决方案:** - 确认 FSFO 已正确启用。 - 检查观察器是否正在运行。 - 查看 `DGMGRL` 中的配置是否包含正确的故障切换目标。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值