在进行数据恢复前,请务必完成以下关键步骤:
sys)登录数据库,或通过sqlplus / as sysdba进入命令行。RMAN是Oracle官方推荐的物理备份与恢复工具,适用于数据库级数据丢失(如数据文件损坏、数据库崩溃等)。
rman target /
RUN {
RESTORE DATABASE; -- 恢复所有数据文件
RECOVER DATABASE; -- 应用归档日志和重做日志
ALTER DATABASE OPEN; -- 打开数据库
}
ALTER DATABASE OPEN RESETLOGS; -- 重建重做日志文件
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/u01/flash_recovery' SCOPE=SPFILE;设置)。NOMOUNT状态(STARTUP NOMOUNT),以便RMAN读取控制文件。若拥有逻辑备份文件(如expdp导出的.dmp文件),可通过Data Pump工具快速恢复表、用户或整个数据库。
CREATE DIRECTORY DPUMP_DIR AS '/u01/dumpfiles';
cp /path/to/backupfile.dmp /u01/dumpfiles/
impdp system/password@ORCL directory=DPUMP_DIR dumpfile=backupfile.dmp logfile=import.log FULL=Y
FULL=Y:恢复整个数据库;若仅需恢复特定用户,可替换为SCHEMAS=username。impdp的TABLE_EXISTS_ACTION参数处理冲突,如APPEND追加数据)。Flashback技术适用于误操作(如误删除数据、误更新表)或逻辑坏道场景,可快速将数据库或表恢复至指定时间点。
-- 1. 检查闪回日志可用时间范围
SELECT OLDEST_FLASHBACK_SCN, OLdest_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;
-- 2. 执行闪回数据库
FLASHBACK DATABASE TO TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
-- 3. 打开数据库(需重置日志)
ALTER DATABASE OPEN RESETLOGS;
-- 1. 启用表的行移动(若未启用)
ALTER TABLE schema.table_name ENABLE ROW MOVEMENT;
-- 2. 闪回表至指定时间点
FLASHBACK TABLE schema.table_name TO TIMESTAMP TO_TIMESTAMP('2025-09-20 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
ALTER DATABASE ARCHIVELOG;开启归档模式,再执行ALTER DATABASE FLASHBACK ON;)。V$FLASHBACK_DATABASE_LOG中的RETENTION_TARGET参数限制(默认为1小时,可通过ALTER SYSTEM SET RETENTION_TARGET=2880 SCOPE=BOTH;调整为8小时)。若数据库无法启动(如控制文件、数据文件严重损坏)或需要抢救表数据(如DROP TABLE、TRUNCATE TABLE),可使用ODU(Oracle Database Unloader)工具直接从数据文件中提取数据。
wget [ODU下载链接]
tar -xvf odu_linux_x86.tar.gz
chown -R oracle:oinstall odu
cd odu
CREATE TABLESPACE odu_ts DATAFILE '/u01/oradata/ORCL/odu_ts.dbf' SIZE 100M;
CREATE USER odu_user IDENTIFIED BY password DEFAULT TABLESPACE odu_ts QUOTA UNLIMITED ON odu_ts;
GRANT CONNECT, RESOURCE TO odu_user;
./odudmp username/password@ORCL tablespaces=odu_ts output=/u01/recovered_data
impdp或SQL*Loader导入数据库。Oracle Data Recovery Advisor是自动化诊断工具,可快速识别数据库故障(如数据文件丢失、归档日志缺失)并提供修复方案。
BEGIN
DBMS_RCVCAT.CREATE_RECOVERY_CATALOG(OWNER => 'rman_catalog_user',
CATALOG_DB => 'rman_catalog');
END;
/
RMAN> ADVISE FAILURE;
RMAN> LIST FAILURE;
RMAN> REPAIR FAILURE;
SELECT语句查询关键表,确认数据是否恢复至预期状态。import.log、rman.log),确认无错误提示。