oracle 11g从DBF文件恢复数据
oracle 11g从DBF文件恢复数据
因为C盘扩容,把临近的D盘数据备份到E盘,修改了注册表和服务,折腾了很久oracle实例还是无法启动,于是只能卸载重装oracle,从DBF文件恢复数据。
sqlplus登录数据库
sqlplus / as sysdba
备份控制文件
alter database backup controlfile to trace;
停止数据库
执行shutdown immediate命令停止数据库实例。
备份新数据库的DBF(实例名:XE)
把目录E:\oracle11g\app\oracle\oradata的实例XE备份
将需要还原的老数据库实例的所有DBF文件复制进去
找到刚刚备份的trc文件
一般在目录:E:\oracle11g\app\oracle\diag\rdbms\xe\xe\trace
打开trc后开始构建数据恢复命令
找到原来的log文件,老目录:E:\D_backup\oracle_11g\app\oracle\fast_recovery_area\XE\ONLINELOG
将原来的log文件复制到新的数据库相应的目录,E:\oracle11g\app\oracle\fast_recovery_area\XE\ONLINELOG
根据实际情况修改
CREATE CONTROLFILE REUSE DATABASE "XE" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\ORACLE11G\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_1_JGJ36F71_.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\ORACLE11G\APP\ORACLE\FAST_RECOVERY_AREA\XE\ONLINELOG\O1_MF_2_JGJ36FF6_.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSTEM.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSAUX.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\USERS.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSTEM2.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSTEM3.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSTEM4.DBF',
'E:\ORACLE11G\APP\ORACLE\ORADATA\XE\SYSTEM5.DBF'
CHARACTER SET AL32UTF8
;
开始恢复
执行startup nomount,启动数据库到nomount状态
执行创建控制文件的SQL语句
恢复数据库,然后开始执行下面的命令
> RECOVER DATABASE
> ALTER DATABASE OPEN;
错误排查
如果老数据库有TMP.DBF和CONTROL.BDF,可能导致控制文件的SQL执行失败。可以删除这两个DBF,然后修改sql重试。
参考
oracle10G-通过DBF文件恢复数据
作者:爱吃鱼的菲菲