# 创建主库备份 rman target / RMAN> BACKUP DATABASE PLUS ARCHIVELOG; RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY;
# 或使用更详细的备份命令 RMAN> RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; BACKUP DATABASE FORMAT '/backup/db_%U'; BACKUP ARCHIVELOG ALL FORMAT '/backup/arch_%U'; BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/backup/standby_control_%U'; RELEASE CHANNEL ch1; }
5.2.2 备库还原
1 2 3 4
# 在备库服务器上还原 rman target / RMAN> RESTORE DATABASE FROM BACKUP; RMAN> RESTORE CONTROLFILE FROM '/backup/standby_control_xxx';
5.2.3 备库配置
1 2 3 4 5 6 7 8
-- 启动备库到mount状态 STARTUP MOUNT;
-- 启动应用日志进程 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECTFROM SESSION;
-- 在备库执行 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ALTER DATABASE ACTIVATE STANDBY DATABASE; SHUTDOWN IMMEDIATE; STARTUP;
6.2.2 完整故障切换流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- 步骤1:停止MRP进程 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 步骤2:应用所有可用的重做日志 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
-- 步骤3:激活备库 ALTER DATABASE ACTIVATE STANDBY DATABASE;
-- 步骤4:重启数据库 SHUTDOWN IMMEDIATE; STARTUP;
-- 步骤5:验证数据库状态 SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;
7. 监控和维护
7.1 关键监控指标
7.1.1 传输延迟监控
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
-- 创建监控视图 CREATEOR REPLACE VIEW DG_LAG_MONITOR AS SELECT NAME, VALUE, DATUM_TIME, CASE WHEN NAME ='transport lag'AND TO_NUMBER(SUBSTR(VALUE,1,INSTR(VALUE,' ')-1)) >300 THEN'WARNING' WHEN NAME ='apply lag'AND TO_NUMBER(SUBSTR(VALUE,1,INSTR(VALUE,' ')-1)) >600 THEN'WARNING' ELSE'OK' ENDAS STATUS FROM V$DATAGUARD_STATS WHERE NAME IN ('transport lag', 'apply lag');
-- 定期检查 SELECT*FROM DG_LAG_MONITOR;
7.1.2 同步状态监控
1 2 3 4 5 6 7 8 9 10 11 12 13
-- 创建同步监控脚本 SELECT ds.dest_id, ds.status, ds.error, al.sequence# as last_archived_seq, als.sequence# as last_applied_seq, al.sequence# - als.sequence# as lag_sequences FROM v$archive_dest ds, (SELECT sequence# FROM v$archived_log WHERE dest_id=1AND ROWNUM=1ORDERBY sequence# DESC) al, (SELECT sequence# FROM v$archived_log WHERE dest_id=2AND applied='YES'AND ROWNUM=1ORDERBY sequence# DESC) als WHERE ds.dest_id =2;
7.2 日常维护任务
7.2.1 归档日志管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
-- 检查归档日志空间使用 SELECT dest_name, status, binding, name_space, used_space, space_limit, ROUND(used_space/space_limit*100,2) as usage_pct FROM V$RECOVERY_AREA_USAGE;
-- 自动清理过期归档日志 RMAN> CROSSCHECK ARCHIVELOG ALL; RMAN>DELETE EXPIRED ARCHIVELOG ALL; RMAN>DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';