数据库数据文件和控制文件恢复 一次数据库数据文件和控制文件丢失或未创建恢复数据库启动方法 该文档适用数据恢复: 数据库安装的时候丢失控制文件和数据文件 或者数据库故障的数据、控制文件丢失 或者数据库的本来数据、控制文件丢失有备份文件,用备份文件恢复 本文的环境变量 ORACLE_BASE=/oo/oracle ORACLE_HOME=/oo/oracle/11g

1.数据库启动报错 数据库启动时报错:

报错1:
SQL> startup
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory
报错2:
通过手动制定启动数据库init.ora文件
SQL> startup mount pfile='/oo/oracle/11g/dbs/init.ora'
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 9925

根据init.ora文件中的信息进行创建目录,并给权限 将init.ora文件中ORACLE_BASE换成环境变量中的绝对路径 路径:/oo/oracle/11g/dbs 解决方案: 把init.ora中的目录都创建并且添加权限 mkdir -p /oo/oracle/flash_recovery_area mkdir -p /oo/oracle/admin/orcl/adump chmod 755 /oo/oracle/flash_recovery_area chmod 755 /oo/oracle/admin/orcl/adump chown oracle:oinstall /oo/oracle/admin/orcl/adump chown oracle:oinstall /oo/oracle/flash_recovery_area/ 注:这两个报错信息都是目录文件不存在 2.手动启动数据库 创建目录并给权限后通过手动制定启动数据库init.ora文件 SQL> startup mount pfile='/oo/oracle/11g/dbs/init.ora' ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2220200 bytes Variable Size 616566616 bytes Database Buffers 444596224 bytes Redo Buffers 5554176 bytes ORA-00205: error in identifying control file, check alert log for more info /oo/oracle/11g/dbs

SQL> create pfile='/oo/oracle/11g/dbs/initorcl.ora' from spfile;
File created.
SQL> create spfile from pfile='/oo/oracle/11g/dbs/initorcl.ora';
File created.

使用了如上方法创建spfile文件但是启动还是报错,错误原因就是这个目录下面没有如下这些文件导致的报错,并且这些文件都没有是个空的目录。 如果数据库没有备份,可以去其他正常的oracle数据库中找两个控制文件 具体控制文件放在的位置可以查看系统日志文件alert_orcl.log 路径:/oo/oracle/diag/rdbms/orcl/orcl/trace 找两个控制文件放到该目录下面/oo/oracle/11g/dbs 然后再次创建并重启数据库 create spfile from pfile='/oo/oracle/11g/dbs/init.ora'; startup mount pfile='/oo/oracle/11g/dbs/initorcl.ora' 注:每次再SQL中startup 后,再次启动前要先停shutdown

3.控制文件恢复后 有控制文件后再次启动数据库时报错信息变为系统数据文件system01.db找不到 报错3: SQL> startup ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2220200 bytes Variable Size 616566616 bytes Database Buffers 444596224 bytes Redo Buffers 5554176 bytes Database mounted. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: '/oracle/oracle/oradata/orcl/system01.dbf' 去到目录下面查看时确实没有system01.dbf该文件并且这些文件都没有是个空的目录 没有日志文件和数据库文件使用recover恢复时一定会报如下错的。 上面的文件是从其他oracle数据库服务器复制的 报错4: SQL> startup ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2220200 bytes Variable Size 616566616 bytes Database Buffers 444596224 bytes Redo Buffers 5554176 bytes Database mounted. ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/oracle/oracle/oradata/orcl/system01.dbf'

alter database datafile '/oracle/oracle/oradata/orcl/system01.dbf' offline drop; 报错5: ORA-01147: SYSTEM tablespace file 1 is offline ORA-01110: data file 1: '/oracle/oracle/oradata/orcl/system01.dbf' 住:该报错信息就是上面的命令导致的在重新online就可以了 alter database datafile '/oracle/oracle/oradata/orcl/system01.dbf' online ; 然后使用recover命令进行恢复 recover datafile '/oracle/oracle/oradata/orcl/system01.dbf'; --恢复数据库文件 recover tablespace system; --恢复表空间 recover database; --恢复数据库 操作: SQL>recover datafile '/oracle/oracle/oradata/orcl/system01.dbf'; SQL> ALTER DATABASE OPEN; ALTER DATABASE OPEN * ERROR at line 1: ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: '/oracle/oracle/oradata/orcl/test_data01.dbf' 因为是从其他机器上面复制的dbf数据文件和redo日志没有复制完全,将报错的这个文件复制进去后再次使用该命令后,数据库启动了 报错的原因是复制别的数据库的文件时没有复制完全,表中有数据所以复制的数据库服务器中的数据文件需要都复制过去,建议复制初始化的数据库服务器中的文件。 SQL> ALTER DATABASE OPEN;

Database altered.

SQL> select STATUS from v$instance;

STATUS ------------ OPEN

SQL> select * from all_tables; select * from all_tables * ERROR at line 1: ORA-01775: looping chain of synonyms 但是使用简单查询时报错了 重启一下数据库就可以了shutdown startup 再次启动后就和正常的一样了

oracle导入sql文件 SQL>@/oo/PC_CORE01.sql 导入sql语句