ORACLE使用数据文件恢复数据库
- 问题描述
Oracle控制文件丢失,数据文件完整,导致数据库实例不能启动。在修改数据库服务器的计算机名称、IP地址后,修改listener.ora和tnsnames.ora文件中的HOST地址后不能启动数据库实例或启动后不能登录使用数据,以及未能查找并解决数据库启动失败原因时可以通过重建控制文件的方式对数据库实例进行恢复。
- 恢复方法
- 恢复前准备工作
- 备份数据文件,文件路径为%ORACLE_NOME%/oradata/xxxx(xxxx为数据库实例)。
- 备份ORACLE安装路径下的Oracle\product\10.2.0\admin\xxxx\bdump\alert_xxxx.log(xxxx为数据库实例)。
- ORACLE安装文件
- 恢复步骤
- 安装oracle数据库,安装时不要创建数据库实例
- 创建数据库实例:安装完成后创建数据库实例,实例名与原数据库实例相同,并创建监听服务。
- 拷贝数据文件:停止oracle相关服务,拷贝备份的数据文件到新安装的oracle数据库安装位置对应路径下,删除新成的控制文件及日志文件(%ORACLE_NOME%/oradata/下所有文件)、完成后重启oracle相关服务。
- 准备重建控制文件脚本:打开事先备份的log文件,查找最后一个create controlfile语句并修改以下几部分。
- 若该语句中包含NORESETLOGS,则将其修改为RESETLOGS;原因是重做日志文件已经丢失。
- LOGFILE段是指定重做日志文件到期望的文件位置。
- DATAFILE段是指定到数据文件的实际文件位置。不能包含临时表空间用到的文件,否则报错(ora-01503,ora-01160,ora-01110)。
注意:create controlfile语句中如果包含NOARCHIVELOG,则为非归档模式,如为ARCHIVELOG,则为归档模式,没有则保持没有。
- 重建控制文件
- 打开sqlplus,使用DBA(sys)用户登录到数据库
示例:打开cmd,执行sqlplus /nolog 回车
SQL>Conn sys/password as sysdba
- 关闭数据库
示例:SQL>Shutdown immediate;
- 启动数据库,但不挂载数据文件
SQL>Startup nomount;
- 重建控制文件,执行准备好的重建控制文件脚本
示例:
Create controlfile reuse set database "cognos"
MAXINSTANCES 8
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
Datafile
'C:\oracle\product\10.2.0\oradata\cognos\COGNOS_61',
'C:\oracle\product\10.2.0\oradata\cognos\SYSTEM01.DBF',
'C:\oracle\product\10.2.0\oradata\COGNOS\UNDOTBS01.DBF',
'C:\oracle\product\10.2.0\oradata\COGNOS\SYSAUX01.DBF',
'C:\oracle\product\10.2.0\oradata\COGNOS\USERS01.DBF'
LOGFILE GROUP 1 ('C:\oracle\product\10.2.0\oradata\COGNOS\redo01.log') SIZE 51200K,
GROUP 2 ('C:\oracle\product\10.2.0\oradata\COGNOS\redo02.log') SIZE 51200K,
GROUP 3 ('C:\oracle\product\10.2.0\oradata\COGNOS\redo03.log') SIZE 51200K RESETLOGS
- 带resetlogs参数启动数据库,目的重新生成重做日志文件
SQL>Alter database open resetlogs
注意:执行启动数据库时报错(ORA-01194,ORA-01110),解决办法:recover重做日志文件。
示例:SQL>revcover database using backup controlfile until cancel;回车,当提示Specify log: {=suggested | filename | AUTO | CANCEL}
输入日志文件地址如C:\oracle\product\10.2.0\oradata\COGNOS\redo01.log
日志文建redo01.log还有错误,继续recover
SQL>revcover database using backup controlfile until cancel;回车,当提示Specify log: {=suggested | filename | AUTO | CANCEL}
输入日志文件地址如C:\oracle\product\10.2.0\oradata\COGNOS\redo02.log
提示:Log applied. Media recovery complete.完成recover重做日志文件,使用带resetlogs参数启动数据库
- 添加临时表空间
示例:
SQL> alter tablespace TEMP add tempfile
2 'C:\oracle\product\10.2.0\oradata\COGNOS\TEMP01.DBF' reuse;
- 测试:退出sqlplus ,重启数据库服务,可以使用原数据库普通用户的用户名密码登陆