oracle通过DBF恢复数据

 

前一段客户运行的项目数据库突然崩溃,并且没有进行数据备份。解决办法:

 1,安装oracle 10g数据库并创建一个要恢复的数据库相同一的实例(注意:最好是新安装的数据库,并且安装的数据库尽量和要恢复的数据库的版本一致,并且实例必须一致);

2,sysdba身份登录:对控制文件进行备份;

sqlplus /nolog;(此处不能加分号,否则黑屏窗口会一闪而过)

  oracle通过DBF恢复数据

conn /as sysdba;登录

oracle通过DBF恢复数据

2,备份控件文件到udmp目录的trace文件 alter database backup controlfile to trace;

oracle通过DBF恢复数据

找到oracle的安装目录:..oracleproduct10.2.0db_1admin实例名udump文件夹下(其中10.1的文件路径为 E:oracleproduct10.1.0adminorcl,此处可在oracle的文件夹下搜索.trc进行查找),按修改时间降序,找到最近的trace文件。备份好。
oracle通过DBF恢复数据
3,shutdown immediate停止数据库实例;
oracle通过DBF恢复数据
4,备份..oracleproduct10.2.0oradata目录下的该实例文件夹(例如:orcl),接着将该实例文件夹删除(必须是全部删除吧要恢复的实例文件夹放到此位置,不能只把要恢复的DBF直接替换原来orcl,否则创建控制文件时会报如下错误),把需恢复的数据库的oradata目录下所有文件拷到此目录下。

oracle通过DBF恢复数据

5,sysdba进入并执行startup nomount。把数据库启动到nomount状态。
oracle通过DBF恢复数据

6,从第2步备份出来trace文件中拷贝CREATE CONTROLFILE部分语句来重建控制文件:

oracle通过DBF恢复数据

注意:1,改为ARCHIVELOG;2,增加你的DBF文件,只增加*_DATA.DBF,*_TEMP.DBF不能在这添加

oracle通过DBF恢复数据

此处应根据实际情况增删表空间文件记录,如以下黑体部分则为新增记录。

 

CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 454

LOGFILE

  GROUP 1 'D:ORACLEPRODUCT10.1.0ORADATAORCLREDO01.LOG'  SIZE 10M,

  GROUP 2 'D:ORACLEPRODUCT10.1.0ORADATAORCLREDO02.LOG'  SIZE 10M,

  GROUP 3 'D:ORACLEPRODUCT10.1.0ORADATAORCLREDO03.LOG'  SIZE 10M

— STANDBY LOGFILE

DATAFILE

  'D:ORACLEPRODUCT10.1.0ORADATAORCLSYSTEM01.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLUNDOTBS01.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLSYSAUX01.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLUSERS01.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLEXAMPLE01.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLYC_DATA.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLPE_DATA.DBF',

  'D:ORACLEPRODUCT10.1.0ORADATAORCLHS.ORA'

CHARACTER SET ZHS16GBK

;

create controlfile reuse database ZYRISDB noarchivelog noresetlogs

maxlogfiles 16

maxlogmembers 3

maxdatafiles 100

maxinstances 8

maxloghistory 292

datafile

'E:appAdministratororadata2ZYRISDBSYSAUX01.DBF',

'E:appAdministratororadata2ZYRISDBSYSTEM01.DBF',

'E:appAdministratororadata2ZYRISDBUNDOTBS01.DBF',

'E:appAdministratororadata2ZYRISDBUSERS01.DBF',

'E:appAdministratororadata2ZYRISDBTP_PATIENT_REPORT.DBF',

'E:appAdministratororadata2ZYRISDBZYPACSDB_OFFLINE.DBF',

'E:appAdministratororadata2ZYRISDBZYPACSDB_OFFLINE_CT.DBF',

'E:appAdministratororadata2ZYRISDBZYPACSDB_ONLINE.DBF',

'E:appAdministratororadata2ZYRISDBZYPACSDB_ONLINE_CT.DBF',

'E:appAdministratororadata2ZYRISDBZYRISDB_BASIC.DBF'

logfile

GROUP 1 'E:appAdministratororadata2ZYRISDBREDO01.LOG' SIZE 50M,

GROUP 2 'E:appAdministratororadata2ZYRISDBREDO02.LOG' SIZE 50M,

GROUP 3 'E:appAdministratororadata2ZYRISDBREDO03.LOG' SIZE 50M

character set AL32UTF8;

7,RECOVER DATABASE;

oracle通过DBF恢复数据

(这个地方错误暂时不用理会。)

8ALTER DATABASE OPEN;

oracle通过DBF恢复数据

恢复完成,登录数据库进行测试。

 

(设置sqlplus粘贴)

oracle通过DBF恢复数据

Leave a Reply