Oracle数据库备份分为物理备份(直接复制数据库文件,如数据文件、控制文件、归档日志)和逻辑备份(导出数据库对象的结构与数据,如expdp/impdp)。物理备份是恢复的基础,逻辑备份适用于数据迁移或选择性恢复。
RMAN(Recovery Manager)是Oracle官方推荐的物理备份工具,支持全备、增量备份、压缩备份等功能,且能自动管理备份文件。
sqlplus / as sysdba
archive log list; -- 检查是否为归档模式
shutdown immediate; -- 关闭数据库
startup mount; -- 启动到mount状态
alter database archivelog; -- 开启归档模式
alter database open; -- 打开数据库
mkdir -p /u01/oracle/backup
chown -R oracle:oinstall /u01/oracle/backup
rman target /
run {
allocate channel ch1 type disk; -- 分配磁盘通道
backup database plus archivelog; -- 备份数据库及归档日志
release channel ch1; -- 释放通道
}
configure channel device type disk format '/u01/oracle/backup/%U'; -- 设置备份文件格式(%U为唯一标识符)
configure controlfile autobackup on; -- 开启控制文件自动备份
rman target /
run {
allocate channel ch1 type disk;
backup incremental level 1 database; -- 1级增量备份(基于最近的全备或1级增量备份)
release channel ch1;
}
编辑crontab文件(每天凌晨2点执行全备):
crontab -e
添加以下内容:
0 2 * * * /bin/bash -c 'source /home/oracle/.bash_profile; rman target / <<EOF
run {
allocate channel ch1 type disk;
backup database plus archivelog;
release channel ch1;
}
exit;
EOF'
恢复流程需根据故障类型调整,常见场景包括数据库损坏、数据文件丢失、误删除数据。
rman target / list backup;查看备份集)。sqlplus / as sysdba
shutdown immediate;
startup mount;
rman target /
run {
allocate channel ch1 type disk;
restore database; -- 恢复数据文件、控制文件
recover database; -- 应用归档日志,使数据库达到一致状态
alter database open; -- 打开数据库
release channel ch1;
}
若需恢复到某个具体时间(如2025-10-20 18:00),需先查询该时间点的SCN(系统改变号):
sqlplus / as sysdba
select timestamp_to_scn(to_timestamp('2025-10-20 18:00:00', 'YYYY-MM-DD HH24:MI:SS')) from dual;
得到SCN后,执行时间点恢复:
rman target /
run {
allocate channel ch1 type disk;
restore database;
recover database until scn 123456789; -- 替换为查询到的SCN
alter database open resetlogs; -- 打开数据库(需重置日志,因为恢复过程中会生成新日志)
release channel ch1;
}
rman target /
run {
allocate channel ch1 type disk;
restore datafile '/u01/oracle/oradata/ORCL/users01.dbf'; -- 指定丢失的数据文件路径
recover datafile '/u01/oracle/oradata/ORCL/users01.dbf';
sql 'alter database datafile 4 online'; -- 将数据文件状态改为online(4为数据文件编号,可通过desc v$datafile查看)
release channel ch1;
}
逻辑备份通过expdp(导出)和impdp(导入)工具实现,适用于选择性恢复(如恢复某个表、表空间)或跨数据库迁移。
sqlplus / as sysdba
create directory dpump_dir as '/u01/oracle/dump';
grant read, write on directory dpump_dir to system; -- 授权用户访问目录
expdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=expdp_full.log full=y
full=y表示全库导出,dumpfile指定导出文件名,logfile指定日志文件名。impdp system/password@ORCL directory=dpump_dir dumpfile=full_db.dmp logfile=impdp_full.log full=y
expdp system/password@ORCL directory=dpump_dir dumpfile=users_table.dmp logfile=expdp_users.log tables=users
impdp system/password@ORCL directory=dpump_dir dumpfile=users_table.dmp logfile=impdp_users.log tables=users
rman target / list backup;检查备份集完整性,或通过restore database validate;模拟恢复过程。configure retention policy to recovery window of 7 days;设置保留7天的备份(自动删除过期备份)。/u01/oracle/archive)需有足够空间,避免因空间不足导致数据库无法归档。