SYSDBA权限(如system或sys用户)。/u01/oracle/backup),并修改目录所有者为oracle:oinstall。RMAN(Recovery Manager)是Oracle官方提供的物理备份恢复工具,支持全库恢复、增量恢复、时间点恢复等场景。
# 1. 启动RMAN并连接目标数据库
rman target /
# 2. 关闭数据库(若未关闭)
SQL> SHUTDOWN IMMEDIATE;
# 3. 启动数据库至MOUNT状态(需恢复控制文件或数据文件时)
SQL> STARTUP MOUNT;
# 4. 恢复控制文件(若控制文件损坏,需指定备份路径)
RMAN> RESTORE CONTROLFILE FROM '/u01/oracle/backup/controlfile.ctl';
# 5. 恢复数据文件
RMAN> RESTORE DATABASE;
# 6. 恢复归档日志(应用归档日志至最新状态)
RMAN> RECOVER DATABASE;
# 7. 打开数据库(若使用了RESETLOGS,需指定)
SQL> ALTER DATABASE OPEN RESETLOGS;
# 1. 启动RMAN并连接目标数据库
rman target /
# 2. 关闭并启动数据库至MOUNT状态
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
# 3. 恢复数据库至指定时间点(如2025-10-20 10:00:00)
RMAN> RECOVER DATABASE UNTIL TIME "TO_DATE('2025-10-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
# 4. 打开数据库(需重置日志)
SQL> ALTER DATABASE OPEN RESETLOGS;
# 1. 将损坏的数据文件脱机
SQL> ALTER DATABASE DATAFILE '/u01/oracle/oradata/yourdb/system01.dbf' OFFLINE;
# 2. 恢复数据文件
RMAN> RESTORE DATAFILE '/u01/oracle/oradata/yourdb/system01.dbf';
# 3. 恢复归档日志
RMAN> RECOVER DATAFILE '/u01/oracle/oradata/yourdb/system01.dbf';
# 4. 将数据文件联机
SQL> ALTER DATABASE DATAFILE '/u01/oracle/oradata/yourdb/system01.dbf' ONLINE;
# 1. 关闭数据库
SQL> SHUTDOWN IMMEDIATE;
# 2. 启动数据库至NOMOUNT状态
SQL> STARTUP NOMOUNT;
# 3. 恢复控制文件(从备份路径)
RMAN> RESTORE CONTROLFILE FROM '/u01/oracle/backup/controlfile.ctl';
# 4. 挂载数据库
SQL> ALTER DATABASE MOUNT;
# 5. 恢复数据库
RMAN> RECOVER DATABASE;
# 6. 打开数据库(需重置日志)
SQL> ALTER DATABASE OPEN RESETLOGS;
# 1. 启动RMAN并连接目标数据库
rman target /
# 2. 恢复指定归档日志(如GROUP 1)
RMAN> RECOVER ARCHIVELOG GROUP 1 FROM '/u01/oracle/backup/archivelog';
逻辑备份通过expdp(导出)和impdp(导入)工具实现,适用于表级或用户级数据恢复。
# 导出整个数据库
expdp system/password DIRECTORY=DATA_PUMP_DIR dumpfile=full_db.dmp logfile=full_db.log
# 导出特定用户(如HR)
expdp hr/password directory=DATA_PUMP_DIR dumpfile=hr_user.dmp logfile=hr_user.log schemas=hr
# 导出特定表(如employees)
expdp hr/password directory=DATA_PUMP_DIR dumpfile=employees.dmp logfile=employees.log tables=employees
# 导入整个数据库(需目标数据库为空)
impdp system/password directory=DATA_PUMP_DIR dumpfile=full_db.dmp logfile=full_db_load.log
# 导入特定用户(覆盖现有数据)
impdp hr/password directory=DATA_PUMP_DIR dumpfile=hr_user.dmp logfile=hr_user_load.log schemas=hr remap_schema=hr:hr_new
# 导入特定表(追加数据)
impdp hr/password directory=DATA_PUMP_DIR dumpfile=employees.dmp logfile=employees_load.log tables=employees append
Flashback技术无需恢复备份,通过闪回日志或回收站快速回退数据到过去状态。
-- 开启归档模式
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
-- 设置闪回恢复区(大小根据需求调整)
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/oracle/flash_recovery_area' SCOPE=BOTH;
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=10G SCOPE=BOTH;
-- 开启Flashback数据库
SQL> ALTER DATABASE FLASHBACK ON;
-- 1. 创建恢复点(备份前)
SQL> CREATE RESTORE POINT before_delete GUARANTEE FLASHBACK DATABASE;
-- 2. 执行数据删除(模拟错误)
SQL> DELETE FROM employees WHERE department_id=10;
-- 3. 闪回数据库到恢复点
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> FLASHBACK DATABASE TO RESTORE POINT before_delete;
SQL> ALTER DATABASE OPEN RESETLOGS;
-- 1. 启用表的行移动(若未启用)
SQL> ALTER TABLE employees ENABLE ROW MOVEMENT;
-- 2. 闪回表到指定时间(如1小时前)
SQL> FLASHBACK TABLE employees TO TIMESTAMP SYSTIMESTAMP - INTERVAL '1' HOUR;
DELETE OBSOLETE命令实现)。