Oracle Database在Linux环境下的备份主要分为物理备份(基于文件系统的直接复制)和逻辑备份(基于数据的导出导入),其中物理备份是核心,逻辑备份适用于数据迁移或精细化恢复。
RMAN(Recovery Manager)是Oracle官方提供的物理备份工具,支持全量备份、增量备份、归档日志备份,并能自动跳过未使用的数据块,节省存储空间。
rman target /
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
BACKUP DATABASE PLUS ARCHIVELOG; # 备份数据库及归档日志
RELEASE CHANNEL c1;
}
该命令会将数据文件、控制文件、归档日志打包备份,确保恢复时数据库一致性。rman target /
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
BACKUP INCREMENTAL LEVEL 1 DATABASE; # 1级增量备份(基于最近全量或更高增量备份)
RELEASE CHANNEL c1;
}
crontab设置定时任务,例如每天凌晨2点执行全量备份:crontab -e
添加以下内容:0 2 * * * /bin/bash /path/to/backup_script.sh # 脚本需包含RMAN备份命令
逻辑备份通过expdp(导出)和impdp(导入)工具实现,适用于数据迁移、表级恢复或跨数据库传输。
system用户(或其他有足够权限的用户)执行:expdp system/password@SID directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=expdp_full.log full=y
其中DATA_PUMP_DIR是Oracle创建的逻辑目录(需提前配置),full=y表示全库备份。impdp system/password@SID directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_full.log full=y
冷备份需在数据库关闭状态下进行,适用于对一致性要求极高的场景(如数据库迁移)。
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
cp -R /u01/oradata/DBNAME /backup/DBNAME_backup
SQL> STARTUP;
恢复流程需根据故障类型(如数据文件损坏、误删除、归档日志丢失)选择合适的方法,优先使用RMAN进行物理恢复,逻辑恢复用于数据导入。
RMAN恢复分为全量恢复(恢复至最近备份点)和时间点恢复(恢复至特定时间点),适用于数据库崩溃、数据文件损坏等场景。
rman target /
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
RESTORE DATABASE; # 恢复数据文件、控制文件
RECOVER DATABASE; # 应用归档日志,使数据库一致
ALTER DATABASE OPEN; # 打开数据库
RELEASE CHANNEL c1;
}
rman target /
RUN {
ALLOCATE CHANNEL c1 TYPE DISK;
RESTORE DATABASE;
RECOVER DATABASE UNTIL TIME "TO_TIMESTAMP('2025-09-20 18:00:00', 'YYYY-MM-DD HH24:MI:SS')"; # 恢复至指定时间
ALTER DATABASE OPEN RESETLOGS; # 重置日志序列(必须步骤)
RELEASE CHANNEL c1;
}
注:OPEN RESETLOGS会清空重做日志,恢复后数据库将从恢复点开始新的生命周期。逻辑恢复用于导入之前导出的逻辑备份,适用于表级数据恢复或跨数据库迁移。
impdp system/password@SID directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_full.log full=y
TABLES参数:impdp system/password@SID directory=DATA_PUMP_DIR dumpfile=full_backup.dmp logfile=impdp_table.log TABLES=SCHEMA.TABLE1,SCHEMA.TABLE2
Flashback是Oracle的高级恢复功能,无需依赖备份,适用于误删除表、误更新数据、数据库闪回等场景。
SELECT * FROM USER_RECYCLEBIN WHERE ORIGINAL_NAME = 'DELETED_TABLE';
FLASHBACK TABLE DELETED_TABLE TO BEFORE DROP;
SHOW PARAMETER DB_FLASHBACK_RETENTION_TARGET; # 默认保留1天
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-09-20 18:00:00', 'YYYY-MM-DD HH24:MI:SS');
ALTER DATABASE OPEN RESETLOGS;
DB_FLASHBACK_RETENTION_TARGET参数(单位:分钟),并确保归档日志可用。