物理备份的本质是对数据库底层文件的直接复制,就像给整个数据库系统拍一张完整的X光片。它不同于逻辑备份(如expdp导出数据),而是直接操作数据文件、控制文件等二进制文件。这种备份方式最大的优势在于恢复速度快,特别是对于TB级别的大型数据库。
根据备份策略的不同,物理备份主要分为两大类:
全量备份(0级备份):相当于给数据库做全身CT扫描,备份所有数据块(包括空白块)。这是最基础的备份类型,恢复时只需要这一个备份集就能重建整个数据库。我们通常每周执行一次全量备份,作为增量备份的基准点。
增量备份:类似只检查身体有问题的部位,仅备份自上次备份以来发生变化的数据块。具体又分为:
重要提示:增量备份必须依赖全量备份,就像补丁需要原始安装包一样。如果基础的全量备份损坏,后续的增量备份将无法使用。
物理恢复就像拼图游戏,需要把所有备份碎片按照正确的顺序组装起来。恢复过程的关键是保证数据的一致性,这需要满足三个黄金法则:
恢复类型的选择取决于业务需求:
完全恢复:应用所有可用的归档日志和在线日志,确保数据零丢失。这是生产环境的标配方案,恢复完成后数据库可以直接OPEN。
不完全恢复:当部分日志丢失时,我们只能恢复到某个时间点或SCN。这种情况需要以RESETLOGS方式打开数据库,相当于给数据库一个新的"身份证",之前的备份将不能直接用于后续恢复。
冷备份就像给数据库做全身麻醉后的手术,需要在数据库完全关闭的状态下进行。这种备份方式简单可靠,特别适合可以接受停机维护的业务系统。
典型操作流程:
sql复制SQL> shutdown immediate;
bash复制# 创建备份目录
mkdir -p /backup/oracle/cold_$(date +%Y%m%d)
# 备份数据文件
cp $(sqlplus -S / as sysdba <<EOF
set heading off feedback off
select name from v\$datafile;
exit;
EOF
) /backup/oracle/cold_20240520/
# 备份控制文件(推荐使用SQL命令)
sqlplus / as sysdba <<EOF
alter database backup controlfile to '/backup/oracle/cold_20240520/controlfile.bak';
exit;
EOF
bash复制cp $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora /backup/oracle/cold_20240520/
cp $ORACLE_HOME/network/admin/*.ora /backup/oracle/cold_20240520/
冷备份恢复要点:
热备份是在数据库运行状态下进行的备份,就像给行驶中的汽车更换轮胎,需要特殊的技术手段保证一致性。
关键步骤解析:
sql复制SQL> alter database begin backup;
这个命令有两个重要作用:
bash复制cp /oradata/ORCL/*.dbf /backup/oracle/hot_backup/
sql复制SQL> alter database end backup;
热备份的注意事项:
alter tablespace users begin backup;alter database end backup;RMAN是Oracle推荐的备份工具,就像数据库的专业护理团队,提供全方位的备份恢复解决方案。
基础配置示例:
sql复制RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 4;
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/rman/%d_%T_%U.bak';
增量备份优化技巧:
启用块变更跟踪可以大幅提升增量备份速度:
sql复制SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/oradata/ORCL/rman_change_track.f';
备份压缩与加密:
sql复制RMAN> CONFIGURE COMPRESSION ALGORITHM 'MEDIUM'; -- 平衡压缩率和CPU消耗
RMAN> SET ENCRYPTION ON IDENTIFIED BY "Backup#1234";
数据文件丢失恢复流程:
sql复制SQL> SELECT file#, name, status FROM v$datafile WHERE status = 'OFFLINE';
sql复制SQL> ALTER DATABASE DATAFILE 5 OFFLINE;
sql复制RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
sql复制SQL> ALTER DATABASE DATAFILE 5 ONLINE;
基于时间点的恢复:
sql复制RMAN> RUN {
SET UNTIL TIME "TO_DATE('2024-05-20 14:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
SCN恢复示例:
sql复制RMAN> RUN {
SET UNTIL SCN 123456789;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
}
从自动备份恢复控制文件:
sql复制RMAN> STARTUP NOMOUNT;
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
RMAN> ALTER DATABASE MOUNT;
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
混合备份策略示例:
RMAN> VALIDATE BACKUPSET 123;)存储规划建议:
code复制/backup
├── /rman_full # 全量备份
├── /rman_incr # 增量备份
├── /arch_logs # 归档日志
└── /scripts # 备份脚本
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| ORA-01157 | 数据文件不可识别 | 检查控制文件和数据文件一致性 |
| ORA-01110 | 数据文件访问错误 | 验证文件权限和路径 |
| ORA-00283 | 恢复会话冲突 | 取消现有恢复会话再重试 |
| ORA-19600 | 备份文件无效 | 使用RMAN> VALIDATE检查备份 |
备份优化:
CONFIGURE BACKUP OPTIMIZATION ONSECTION SIZE参数并行备份大文件SKIP READONLY)恢复加速:
RECOVER ... PARALLEL并行恢复空间管理:
REPORT OBSOLETE和DELETE OBSOLETECONFIGURE ARCHIVELOG DELETION POLICY自动清理归档在实际运维中,我发现最容易被忽视的是备份验证环节。曾经遇到过备份全部成功但恢复时发现备份集损坏的情况,现在我们会定期执行:
sql复制RMAN> RESTORE DATABASE VALIDATE;
RMAN> RESTORE ARCHIVELOG ALL VALIDATE;
另一个血泪教训是控制文件自动备份配置。有次存储故障导致所有控制文件丢失,幸好配置了:
sql复制RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/cf/%F';
对于超大型数据库,采用多通道并行备份可以显著缩短时间窗口。例如:
sql复制RMAN> RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK RATE 100M;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK RATE 100M;
BACKUP DATABASE PLUS ARCHIVELOG;
}