SYSDBA权限的用户登录(如system或sys),避免权限不足导致恢复失败。.dbf)、控制文件(.ctl)、归档日志文件(位于归档日志目录)。备份文件需未被损坏且与当前数据库版本兼容。使用SQL*Plus以SYSDBA身份连接数据库,执行SHUTDOWN IMMEDIATE命令安全关闭数据库,防止数据进一步损坏:
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
将备份的数据文件复制到数据库原数据文件目录(如/u01/oracle/oradata/yourdb/datafiles/),覆盖现有损坏或丢失的文件:
cp /path/to/backup/datafiles/* /u01/oracle/oradata/yourdb/datafiles/
若仅部分数据文件损坏,可单独复制对应文件至原位置。
控制文件记录数据库结构信息,若损坏需从备份复制到原目录(如/u01/oracle/oradata/yourdb/control01.ctl):
cp /path/to/backup/controlfile/control01.ctl /u01/oracle/oradata/yourdb/control01.ctl
若控制文件版本与数据库不匹配,需用最新版本覆盖。
启动数据库但不打开,进入MOUNT状态以便进行恢复操作:
SQL> STARTUP MOUNT;
使用RECOVER DATABASE命令应用归档日志和当前重做日志,将数据库恢复至故障前的一致性状态:
SQL> RECOVER DATABASE;
若提示缺少归档日志,需将备份的归档日志复制到归档日志目录(如/u01/oracle/oradata/yourdb/archivelog/),再重新执行恢复命令。
恢复完成后,使用ALTER DATABASE OPEN命令打开数据库,恢复正常访问:
SQL> ALTER DATABASE OPEN;
若仅单个数据文件(如system01.dbf)损坏,可将备份文件复制到原位置,然后在MOUNT或OPEN状态下执行RECOVER DATAFILE命令:
-- 若数据文件属于SYSTEM表空间(关键表空间),需在MOUNT状态下恢复
SQL> STARTUP MOUNT;
SQL> RECOVER DATAFILE '/u01/oracle/oradata/yourdb/datafiles/system01.dbf';
-- 若数据文件属于非关键表空间(如USERS),可在OPEN状态下恢复
SQL> ALTER DATABASE OPEN;
SQL> RECOVER DATAFILE '/u01/oracle/oradata/yourdb/datafiles/users01.dbf';
若非关键表空间(如TEST)损坏,可先将表空间脱机,还原数据文件后再恢复:
-- 1. 将表空间脱机(避免影响其他业务)
SQL> ALTER TABLESPACE test OFFLINE IMMEDIATE;
-- 2. 还原表空间下所有数据文件
cp /path/to/backup/datafiles/test* /u01/oracle/oradata/yourdb/datafiles/
-- 3. 恢复表空间
SQL> RECOVER TABLESPACE test;
-- 4. 将表空间联机
SQL> ALTER TABLESPACE test ONLINE;
若数据文件被误删但数据库仍处于打开状态,可通过以下步骤恢复:
ps -ef|grep ora_dbw找到数据库写进程(ora_dbw)的PID,进入/proc/<PID>/fd目录查看带有(deleted)标记的文件(即被删除但仍被进程占用的文件)。SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
SQL> RECOVER DATAFILE '<原文件路径>';
SQL> ALTER DATABASE OPEN;