由于数据库服务器崩溃,造成了无法进入系统进行数据库备份,只能把oracle相关文件拷贝出来。对于拷贝出来的文件在测试机上进行一次不完全恢复,具体流程如下所示:
1、安装oracle 10g服务端并创建一个与要进行恢复的数据库相同名称的实例(db_name,sid,字符集一样,因为在创建控制文件时,会判断你要恢复的dbf文件中文件头信息中的数据库名是否与所在的实例名是否一样)
2、以sysdba身份进行备份控件文件到udmp目录的trace文件(语句:
alter database backup controlfile to trace
)
3、Shutdown immediate停止数据库,备份当前~\oracle\product\10.2.0\oradata目录中的文件,
接着删除这些文件并把需恢复的数据库的所有.dbf文件拷到此目录下。其中 system01.dbf,sysaux01.dbf和存储真实数据的.dbf文件是必要的
(只要DBF就可以了,日志和控制文件不要)。
4、以sysdba进入并执行startup nomount。把数据库启动到nomount状态。
5、从第2步备份出来trace文件中拷贝CREATE CONTROLFILE部分语句来重建控制文件。此处应根据实际情况增删表空间文件记录,如以下黑体部分则为新增记录。
CREATE CONTROLFILE set Database ocp Resetlogs MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 'C:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M, GROUP 2 'C:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M, GROUP 3 'C:\oracle\product\10.2.0\oradata\ocpRED003.LOG'SIZE 50M DATAFILE 'D:\oradata\SYSTEM01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\UNDOTBS01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\SYSAUX01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\USERS01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\EXAMPLE01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\HYGEIA01.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\HYGEIA02.DBF',--要恢复的数据所在的dbf文件 'D:\oradata\HYGEIA03.DBF'--要恢复的数据所在的dbf文件 CHARACTER SET ZHS16GBK
6
alter database open resetlogs;
7 重新创建临时表空间
8 查看恢复后结果
第二种情况(其实要恢复数据库只要system01.dbf,sysaux01.dbf和存储真实数据的.dbf文件)
1、安装oracle 10g服务端并创建一个与要进行恢复的数据库相同名称的实例(db_name,sid,字符集一样,因为在创建控制文件时,会判断你要恢复的dbf文件中文件头信息中的数据库名是否与所在的实例名是否一样)
2、以sysdba身份进行备份控件文件到udmp目录的trace文件(语句:alter database backup controlfile to trace)
3、Shutdown immediate停止数据库,备份当前~\oracle\product\10.2.0\oradata目录中的文件,接着删除这些文件并把需恢复的数据库的所有.dbf文件拷到此目录下。其中 system01.dbf,sysaux01.dbf和存储真实数据的.dbf文件是必要的
(只要DBF就可以了,日志和控制文件不要)。
4、以sysdba进入并执行startup nomount。把数据库启动到nomount状态。
5、从第2步备份出来trace文件中拷贝CREATE CONTROLFILE部分语句来重建控制文件。此处应根据实际情况增删表空间文件记录,如以下黑体部分则为新增记录。
CREATE CONTROLFILE set Database ocp resetlogs MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 'D:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M, GROUP 2 'D:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M, GROUP 3 'D:\oracle\product\10.2.0\oradata\ocp\RED003.LOG'SIZE 50M DATAFILE 'D:\oracle\product\10.2.0\oradata\ocp\SYSTEM01.DBF',--损坏的数据库的system表空间的数据文件 'D:\oracle\product\10.2.0\oradata\ocp\SYSAUX01.DBF',--损坏的数据库的sysaux表空间的数据文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA01.DBF',--要恢复的数据所在的dbf文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF', --要恢复的数据所在的dbf文件 'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA03.DBF' --要恢复的数据所在的dbf文件 CHARACTER SET ZHS16GBK
6、
Shutdown immediate
7、在admin\pfile目录下的init.ora里加入隐含参数:
_allow_resetlogs_corruption=true _allow_terminal_recovery_corruption=true undo_tablespace='SYSTEM' undo_management='MANUAL'
8、执行
startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora(文件名和目录按照实际情况而定)' mount force;
9、
Recover database\ recover database until cancel
进行介质恢复。
10、
Alter database open resetlogs
打开数据库可能不成功:此处出现了ORA-03113 ” ORA-03113: 通信通道的文件结尾”的错误提示。
11、 重新启动数据库(startup) ,结果出现以下错误提示:
ora-01113:文件1需要介质恢复
ora-01110:数据文件1:’D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF’
12、 从新恢复表空间文件
recover datafile D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
(其它表空间文件可能也需要恢复)
13、
alter database open;
数据库已更新
14.重新创建UNDOTBS1表空间
create undo tablespace undotbs1 DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\undotbs01.dbf' SIZE 200M
15、
Shutdown immediate
16、在admin\pfile目录下的init.ora里删除隐含参数:
删除_allow_resetlogs_corruption=true
删除_allow_terminal_recovery_corruption=true
undo_tablespace=’UNDOTBS1′
undo_management=’AUTO’
17.
startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora
18、 full export备份数据库。
19 重新创建临时表空间
20 查看恢复后结果