Oracle数据库控制文件丢失 重建方法 数据库问题
ORACLE数据库应该避免重启 服务器频繁重启会导致 数据库异常 丢失控制文件(*.ctl)
目前11.2以上的数据库基本上 在DATA目录下 会存在一个控制文件
现在分两种情况来处理:
1 若数据库的控制文件没有损毁
直接拷贝本库的可以使用的那个控制文件或备份数据库的控制文件 复制两份,此时拥有三个控制文件 名称修改为 01.ctl 02.ctl 03.ctl
启动服务即可
sql>connect / as sysdba [;] 数据库版本不同 后面的这个分号 需要区别对待
sql>startup
sql>select status from v$instance;
注意:不要使用别的数据的控制文件 是不能恢复数据库的,原因 控制文件里的 实例ID不是一个 ,数据文件无法挂载
2 若控制文件完全丢失 则需要我们重新创建控制文件后 才可以启动数据服务
过程稍微复杂一些:
第一步:登录数据库服务
第二步:切换到管理员 dba权限 connection / as sysdba;
第三步:获取默认字符集 获取 数据库名(若没有更改过 一般默认为 'ORCL')
获取字符集
sql> startup nomount;
sql> select userenv('language') from dual;
==》 SIMPLIFIED CHINESE_CHINA.US7ASCII
获取数据库名称:
sql>create pfile from spfile;
创建文件存在 默认的初始化位置: D:\app\Administrator\product\11.2.0\dbhome_1\dbs\ 下 init.ora文件 里面存储了 dbname
第四步:关闭数据库 shutdown immediate; 根据 orapath\data的文件列表 创建控制文件创建脚本 ctl.sql
内容如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 4
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 300
LOGFILE
GROUP 1 'D:\app\Administrator\oradata\orcl\redo01.log' SIZE 50M,
GROUP 2 'D:\app\Administrator\oradata\orcl\redo02.log' SIZE 50M,
GROUP 3 'D:\app\Administrator\oradata\orcl\redo03.log' SIZE 50M
DATAFILE
'D:\app\Administrator\oradata\orcl\system01.dbf',
'D:\app\Administrator\oradata\orcl\sysaux01.dbf',
'D:\app\Administrator\oradata\orcl\undotbs01.dbf',
'D:\app\Administrator\oradata\orcl\users01.dbf',
CHARACTER SET US7ASCII; --》默认字符
说明:example01.dbf 不是必须的 temp01.dbf 不是必须的
sql>@d:\orapath\data\ctl.sql; 如此就重新创建了控制文件
第五步:启动数据库实例 sql>alter database open; -->修改数据库实例状态
检查实例状态 sql>select status from v$instance; -->open 表示数据服务正常启动
注意点:若启动出现错误,则表示数据文件需要介质恢复 恢复后在重启
恢复命令: sql> set autorecovery on;
sql>recover database; //等待一会 若恢复某个dbfile sql>revover datafile 'd:\orapath\data\xx.dbf';
到此,数据库的恢复就完成了 已经可以正常提供数据查询服务了。
如有疑问 请留言 欢迎提供建议
评论已有 0 条