oracle控制文件问题

下午时连接数据库突然发现连不上了,监听报错找不到服务,于是登录数据库所在服务器,查看监听状态,
oracle:lsnrctl status
监听状态正常,登入数据库查看
[oracle@frkdb1 ~]$ sqlplus /nolog
SQL*Plus: Release 9.2.0.8.0 - Production on Fri Nov 13 19:45:59 2015
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
SQL>  conn /as sysdba
Connected to an idle instance.
连接到了空闲线程--(0.0数据库居然宕机了)
发现数据库宕机进行重启
SQL> startup
ORACLE instance started.
Total System Global Area 1595480056 bytes
Fixed Size                   452600 bytes
Variable Size             402653184 bytes
Database Buffers         1191182336 bytes
Redo Buffers                1191936 bytes
ORA-00221: error on write to controlfile
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control01.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
阿西吧,这都是什么···控制文件出错了?!/找不到?!
请教大神。。。大神说如果现在mount是没有问题的,那最大的可能就是控制文件损坏了。
控制文件坏了,要重建控制文件~作为一个小白完全不会啊。
大神说先用命令把原来的控制文件备份一下,然后去网上找一下重建的命令(只能QQ问大神,并不在身边T T)
 中间自己脑洞大开,将control01.ctl删掉,把control02.ctl复制出一个改名成control01.ctl,但是然并卵,报错如下:ORA-03113: end-of-file on communication channel
查看告警日志,control02.ctl和control03.ctl也在报错
Errors in file /oracle/admin/frk/bdump/frk_lgwr_16354.trc:
ORA-00221: error on write to controlfile
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control03.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/oracledata/frk/control02.ctl'
ORA-27072: skgfdisp: I/O error
Linux Error: 5: Input/output error
Additional information: 2
好吧,没有完全没有任何备份来恢复控制文件,只能去网上找控制文件恢复语句了;
找到了这个:http://blog.sina.com.cn/s/blog_69e7b8d701014j2m.html
很好用,正文如下:

如果数据库控制文件做过镜像,比如一个数据库有3个控制文件,丢失一个控制文件的恢复非常的容易,如果所有控制文件的丢失,那么恢复起来就要相对的麻烦一些。

如果注意观察我下面的例子你会发现,即使没有控制文件的备份也是可以把数据库恢复的。

当然了,一个优秀的DBA最好不要把自己置于复杂和未知的环境,对数据库做控制文件的备份是一个很容易的事情。

我们这里通过用户管理的方法来创建控制文件的备份:

1.生成重建控制文件和修复数据库的脚本,脚本会放在$ORACLE_BASE/admin/sid/udump路径下,其中sid是数据库实例名。

alter database backup controlfile to trace;
--注:在数据库起不来的情况下完全没办法备份,只能用语句

2.生成控制文件的镜像拷贝

alter database backup controlfile to '/home/oracle/c.bak' ----引号部分是目录和备份文件名

SQL> create table demo (x number,y number);
表已创建。

SQL> insert into demo values(1,100);
已创建 1 行。

SQL> insert into demo values(2,200);
已创建 1 行。

SQL> commit;
提交完成。

SQL> select * from demo;

X Y
---------- ----------
1 100
2 200

SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

删掉所有的控制文件!!

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 100663976 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
ORA-00205: ?????????, ??????, ???????

SQL> select status from v$instance;

STATUS
------------------------
STARTED

SQL> CREATE CONTROLFILE REUSE DATABASE "DB01" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO01.LOG' SIZE 50M,
9 GROUP 2 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO02.LOG' SIZE 50M,
10 GROUP 3 'E:\ORACLE\PRODUCT\ORADATA\DB01\REDO03.LOG' SIZE 50M
11 -- STANDBY LOGFILE
12 DATAFILE
13 'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSTEM01.DBF',
14 'E:\ORACLE\PRODUCT\ORADATA\DB01\UNDOTBS01.DBF',
15 'E:\ORACLE\PRODUCT\ORADATA\DB01\SYSAUX01.DBF',
16 'E:\ORACLE\PRODUCT\ORADATA\DB01\USERS01.DBF',
17 'E:\ORACLE\PRODUCT\ORADATA\DB01\EXAMPLE01.DBF'
18 CHARACTER SET ZHS16GBK
19 ;

控制文件已创建。

SQL> select status from v$instance;

STATUS
------------
MOUNTED
 --到这步问题来了,执行了一下select status from v$instance;状态还是STARTED;
并且不管什么命令都报这个错: 
SQL> shutdown immediate
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> shutdown
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> startup
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
SQL> shutdown abort
ORA-24324: service handle not initialized
ORA-01041: internal error. hostdef extension doesn't exist
 网上查半天没查出所以然,退出重登了一下服务器,然后再启动数据库,居然好了!!!!

SQL> recover database;
ORA-00283: ??????????
ORA-00264: ?????

数据库不需要恢复的操作,所以报了上边的错误。

SQL> alter database open;

数据库已更改。

通过这次事件,我得到了重要的一点警示:备份!!一定要备份,不管什么东西都要定时备份!本次就是没有最新的备份,以至于很是麻烦。

上一篇:Content-Disposition的使用方法


下一篇:Iphone CPU 架构类型