数据库数据文件和控制文件恢复
一次数据库数据文件和控制文件丢失或未创建恢复数据库启动方法
该文档适用数据恢复:
数据库安装的时候丢失控制文件和数据文件
或者数据库故障的数据、控制文件丢失
或者数据库的本来数据、控制文件丢失有备份文件,用备份文件恢复
本文的环境变量
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文件br/>SQL>@/oo/PC_CORE01.sql
导入sql语句