Oracle Data Guard(物理备库)搭建
症状
目标:使用物理备库(Data Guard)为 Oracle 搭建灾难恢复和高可用;在主库故障时能够切换到备库。
1. 将主库置于 FORCE LOGGING 和 ARCHIVELOG 模式
为使备库与主库保持一致,所有变更都必须写入 redo。FORCE LOGGING 会记录包括 NOLOGGING 操作在内的所有操作。开启 ARCHIVELOG 模式时,数据库需在 MOUNT 状态下启动。
Oracle
ALTER DATABASE FORCE LOGGING;
-- For ARCHIVELOG:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;2. 添加 standby redo log 文件
standby redo log(SRL)的组数应比 online redo log 多一组,且大小相同。它们需在主库和备库上都创建;实时应用需要它们。示例中,若 online redo 为 200M,则 SRL 也为 200M。
Oracle
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl01.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl02.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl03.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/oradata/srl04.log') SIZE 200M;3. 设置 log_archive_dest 及相关参数
在主库上定义 dest_2,将 redo 传输到备库。设置 DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG(两端的 db_unique_name)、FAL_SERVER 和 STANDBY_FILE_MANAGEMENT=AUTO。这样文件会在备库上自动创建。
Oracle
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_prim,orcl_stby)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=orcl_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby';
ALTER SYSTEM SET FAL_SERVER='orcl_stby'; -- for role changes; on the standby FAL_SERVER='orcl_prim'
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;4. 用 RMAN DUPLICATE FOR STANDBY 创建备库
在备库服务器上设置好密码文件和静态 listener/tnsnames 后,RMAN 连接到主库和备库(AUXILIARY)。FROM ACTIVE DATABASE 无需备份即可通过网络复制;DORECOVER 应用 redo。
Oracle
rman TARGET sys/password@orcl_prim AUXILIARY sys/password@orcl_stby
RUN {
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE
DORECOVER
NOFILENAMECHECK;
}5. 启动 redo 应用(MRP)并验证
在备库处于 MOUNT 状态时启动托管恢复;使用 USING CURRENT LOGFILE 实现实时应用。通过 v$managed_standby 确认应用进程(MRP0)正在运行。
Oracle
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SELECT process, status, sequence# FROM v$managed_standby WHERE process LIKE 'MRP%';6. 启用 Data Guard Broker
broker 集中管理配置,将故障转移/主备切换简化为一条命令。在两个实例上设置 DG_BROKER_START=TRUE,然后用 dgmgrl 创建并启用配置。在 12c+ 中,broker 负责管理 redo 传输:若 LOG_ARCHIVE_DEST_2 是手动设置的,ADD DATABASE 会因 ORA-16698 失败;请先用 ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='' 将其清空。
Oracle
ALTER SYSTEM SET DG_BROKER_START=TRUE;
-- In dgmgrl:
CREATE CONFIGURATION dgconf AS PRIMARY DATABASE IS orcl_prim CONNECT IDENTIFIER IS orcl_prim;
ADD DATABASE orcl_stby AS CONNECT IDENTIFIER IS orcl_stby;
ENABLE CONFIGURATION;7. 监控同步差距并完成测试
必须持续监控主库与备库之间的 sequence 差异;差距不断扩大表明存在网络/应用瓶颈。dgmgrl SHOW CONFIGURATION 应显示 'SUCCESS'。可选地通过主备切换测试角色变更。
Oracle
-- dgmgrl (SHOW DATABASE shows the Transport Lag / Apply Lag values):
SHOW CONFIGURATION;
SHOW DATABASE orcl_stby;
-- SQL (standby): SELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag';