下午时连接数据库突然发现连不上了,监听报错找不到服务,于是登录数据库所在服务器,查看监听状态,
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;

数据库已更改。

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

oracle控制文件问题的更多相关文章

  1. Oracle控制文件

    一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...

  2. oracle 控制文件的重建

    目录 oracle 控制文件的重建 NORESETLOGS RESETLOGS oracle 控制文件的重建 不到最后时刻,如三个控制文件都已损坏,又没有控制文件的备份.还是不要重建控制文件,处理不好 ...

  3. Oracle 控制文件(CONTROLFILE)

    一.Oracle 控制文件 为二进制文件,初始化大小由CREATE DATABASE指定,可以使用RMAN备份 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等 ...

  4. Oracle 控制文件损坏解决方案

    Oracle 控制文件损坏解决方案 故障一:丢失(损坏)一个控制文件 前台报错:ORA-00205:error in identifying control file,check alert log ...

  5. Oracle控制文件多路复用以及Oracle备份重建控制文件

    控制文件中记录了oracle数据库的物理结构,也就是记录了数据库数据文件和日志文件的位置,控制文件中还记录了多种SCN,用这些SCN来确定数据文件和日志文件是否是正确的.如果不正确那么数据库就需要恢复 ...

  6. oracle控制文件丢失恢复

    在学习群里有个同学误删除了控制文件,于是我也把自己数据库的控制文件删除了,看看能不能进行恢复,以下是整个实验的过程~~在做之前,先看看控制文件的备份方式:1.生成可以重建控制文件的脚本.2.备份二进制 ...

  7. Oracle控制文件丢失,日志文件丢失

    控制文件丢失: alter database backup controlfile to traces; shutdown immediate; @j:\db\script\orcl_ora_ctl_ ...

  8. ORACLE控制文件一致性【weber出品】

    一.首先控制文件有什么作用呢? 控制文件记录了如下信息:1.数据库的创建时间2.数据文件的位置3.日志文件的位置等作用是指导数据库 找到数据文件,日志文件并将数据库启动到 open 状态. 与其用文字 ...

  9. Oracle控制文件操作

    控制文件是连接instance和 database的纽带.记录了database的结构信息. 控制文件是1个2进制文件.记录的是当前database的状态. 控制文件可以有多个,在参数文件中通过con ...

随机推荐

  1. python简介和python工具的选择

    Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有 ...

  2. dva,清除模块数据

    前言: 在项目中,模块过多,dva使用namespace分离模块后,若没有在模块卸载后清除对应的数据,下次进入时,有可能会有上一次数据的残留. 比如详情页,从A商品的详情页离开后,返回选择B商品进入, ...

  3. union 和struct大小计算

    一.字节对齐 现代计算机的内存空间是按照字节(byte)来划分的,字节对齐的意思是在给特定变量类型分配内存空间的时候,变量的内存地址是它本身变量类型大小的整数倍.比如,给int类型的变量a分配地址空间 ...

  4. 对弈win32笔记

    对弈的win32笔记   一:Windows程序运行原理 一.Windows四大模块程序 1.1控制台程序 没有自己的窗口,dos-显示或者运行程序,入口mian() 1.2窗口程序 有自己的窗口,w ...

  5. C# WebAPI分页实现分享

    第一次分享代码,不足或不对之处请指正.. 需求:微信端传递不同的参数调用WebAPI进行分页查询菜谱计划点评结果 思路:基于视图来查询,根据传递的不同参数拼接分页查询Sql来查询. 分页的sql如下 ...

  6. Oracle数据库表的一些宏处理

    比如现在,有个数据库表,我想要知道这个数据库已经建了多少张表?每个表有多少条数据?每个表都有哪些字段?以及字段的说明? 下面就用SQL一一解决上面的问题: --所有已存在的表名和说明 select t ...

  7. 查询总耗CPU最多与平均耗CPU最多的SQL语句

    总耗CPU最多的前20个SQL total_worker_time AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time AS ...

  8. 机器学习之朴素贝叶斯&贝叶斯网络

    贝叶斯决决策论       在所有相关概率都理想的情况下,贝叶斯决策论考虑基于这些概率和误判损失来选择最优标记,基本思想如下: (1)已知先验概率和类条件概率密度(似然) (2)利用贝叶斯转化为后验概 ...

  9. Python 在已创建的数据表添加字段报错问题

    django.db.utils.IntegrityError: (1062, “Duplicate entry ’1234567891011’ for key_’dingdanid’”) 这个错误是之 ...

  10. Problem 8: Largest product in a series

    先粘实现代码,以后需要再慢慢补充思路 s = ''' 73167176531330624919225119674426574742355349194934 9698352031277450632623 ...