✨ 3.3 Oracle备份检查
Oracle 数据库备份检查是确保数据可恢复性的核心环节。以下是系统的备份检查方法,涵盖 RMAN、数据泵(expdp)、归档日志及备份验证等方面。
一、RMAN 备份检查
1. 检查最近的备份记录
-- 查询最近的备份集(全库、数据文件、归档日志等)
SELECT session_key, input_type, status, start_time, end_time,
ROUND(elapsed_seconds/60,2) AS duration_min,
input_bytes/1024/1024/1024 AS input_gb,
output_bytes/1024/1024/1024 AS output_gb
FROM v$rman_backup_job_details
WHERE start_time > SYSDATE - 7
ORDER BY start_time DESC;
status:COMPLETED 表示成功,FAILED表示失败。input_type:DB FULL(全库)、DATAFILE FULL(数据文件全备)、ARCHIVELOG(归档日志备份)。
2. 检查备份集中是否包含必要的文件
-- 查看备份集中的数据文件、控制文件、参数文件
SELECT recid, bs_key, bp_key, handle, media, file_type,
ROUND(bytes/1024/1024,2) AS mb
FROM v$backup_piece
ORDER BY recid DESC;
3. 检查备份是否完整
-- 查看最后一次全库备份的SCN
SELECT MAX(completion_time) AS last_full_backup,
checkpoint_change# AS scn
FROM v$backup_set
WHERE input_type = 'DB FULL'
AND status = 'A'
GROUP BY checkpoint_change#;
4. 检查控制文件和参数文件的自动备份
-- 查询控制文件自动备份记录
SELECT name, status, completion_time
FROM v$autobackup
ORDER BY completion_time DESC;
5. 验证备份集是否可用(不实际恢复)
# 使用 RMAN 验证备份
RMAN> RESTORE DATABASE PREVIEW;
RMAN> VALIDATE BACKUPSET <backupset_key>;
二、数据泵(expdp)备份检查
1. 检查数据泵导出作业日志
-- 查看最近的导出作业
SELECT job_name, operation, job_mode, state,
attached_sessions, start_time, end_time
FROM dba_datapump_jobs
ORDER BY start_time DESC;
2. 检查导出文件是否存在及大小
# 在操作系统层面查看文件
ls -lh /backup/expdp/*.dmp
3. 验证导出文件完整性
# 使用 impdp 的 SQLFILE 参数验证(不实际导入)
impdp directory=DATA_PUMP_DIR dumpfile=expfull.dmp sqlfile=check.sql
三、归档日志备份检查
1. 检查归档日志是否已备份
-- 查看未备份的归档日志数量
SELECT COUNT(*) AS unbacked_archivelogs
FROM v$archived_log
WHERE backup_count = 0;
2. 检查归档日志备份的连续性
-- 检查最近备份的归档日志范围
SELECT MIN(sequence#) AS min_seq, MAX(sequence#) AS max_seq
FROM v$backup_piece
WHERE file_type = 'ARCHIVELOG';
四、备份完整性验证
1. 使用 RMAN 验证所有备份
RMAN> RESTORE DATABASE VALIDATE;
RMAN> RESTORE ARCHIVELOG ALL VALIDATE;
2. 检查备份是否过期
-- 查看备份保留策略
RMAN> SHOW RETENTION POLICY;
3. 检查备份日志中的错误
# 查看 RMAN 日志文件(通常位于 $ORACLE_BASE/diag/rdbms/*/*/trace/)
grep -i "error\|fail\|ORA-" rman.log
五、备份报告与告警
1. 使用 RMAN 生成备份报告
RMAN> LIST BACKUP SUMMARY;
RMAN> REPORT OBSOLETE;
RMAN> REPORT UNRECOVERABLE;
2. 设置备份失败告警
- 监控
v$rman_backup_job_details 中status 为FAILED的记录。 - 检查
alert.log中备份相关错误。
六、恢复测试(关键)
定期执行恢复演练是验证备份可用性的最佳方式:
- 在测试环境恢复数据库到最新时间点(或指定时间)。
- 验证数据一致性(如通过
dbv或业务逻辑)。 - 记录恢复耗时,优化备份策略。
七、备份检查脚本示例(SQL*Plus + RMAN)
以下脚本可生成备份状态报告:
-- 1. 最近3天备份成功率
SELECT TRUNC(start_time) day,
COUNT(*) total,
SUM(CASE WHEN status='COMPLETED' THEN 1 ELSE 0 END) completed,
ROUND(100 * SUM(CASE WHEN status='COMPLETED' THEN 1 ELSE 0 END) / COUNT(*),2) success_pct
FROM v$rman_backup_job_details
WHERE start_time > SYSDATE - 3
GROUP BY TRUNC(start_time);
-- 2. 未备份的归档日志数量
SELECT COUNT(*) unbacked_archivelogs FROM v$archived_log WHERE backup_count=0;
-- 3. 最后一次全备时间
SELECT MAX(completion_time) last_full_backup
FROM v$backup_set WHERE input_type='DB FULL' AND status='A';
将以上输出纳入日常巡检报告。
八、总结
| 检查项 | 方法 | 频率 |
|---|---|---|
| 备份记录 | v$rman_backup_job_details |
每日 |
| 归档日志备份完整性 | v$archived_log 的 backup_count |
每日 |
| 备份集有效性 | RESTORE VALIDATE |
每周 |
| 恢复演练 | 测试环境恢复 | 每月 |
| 备份日志错误 | 扫描日志文件 | 每日 |
通过定期执行上述检查,可以确保在灾难发生时能够快速、完整地恢复数据。
阅读:148
发布时间: