下午时连接数据库突然发现连不上了,监听报错找不到服务,于是登录数据库所在服务器,查看监听状态,
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. 将VS项目提交至SVN时,怎样忽略bin和obj目录中的文件

    方法一: 通过设置SVN的Global ignore pattern值. 使用下面的设定值: *.o *.lo *.la *.al .libs *.so *.so.[0-9]**.a *.pyc *. ...

  2. 关于人人网的form查找和打印

    from lianxi import sessionimport json# urlurl = 'http://www.renren.com/ajaxLogin/login?1=1&uniqu ...

  3. JavaWeb+SVN+Maven+Tomcat +jenkins实现自动化部署

    网址:https://blog.csdn.net/liyong1028826685/article/details/88289218 在日常开发项目中常见的开发模式是使用代码库来存放我们的项目例如:S ...

  4. java编写ID3决策树

    说明:每个样本都会装入Data样本对象,决策树生成算法接收的是一个Array<Data>样本列表,所以构建测试数据时也要符合格式,最后生成的决策树是树的根节点,通过里面提供的showTre ...

  5. Java判断当前时间是否在某一时间段内

    今天有一个任务,判断现在的时间是否在某一个时间段内 遇到的第一个问题 Date类获取日期时间大的方法失效了 问题描述: 在学习Date类时,习惯性的用get方法调用Date()的年月日,发现不怎么好用 ...

  6. python简单爬虫 用beautifulsoup爬取百度百科词条

    目标:爬取“湖南大学”百科词条并处理数据 需要获取的数据: 源代码: <div class="basic-info cmn-clearfix"> <dl clas ...

  7. 试试Markdown哈

    目录 一级标题 二级标题 三级标题 二级标题? 我擦了? 这什么语法.文字下面加-号,实现二级标题? 看看是几级标题 还真的是二级标题. ...... # 看来四个空格是个,嗯,默认的东西 ??中间是 ...

  8. 【转】git - 简易指南

    原文链接:http://www.bootcss.com/p/git-guide/ 作者:罗杰·杜德勒 感谢:@tfnico, @fhd and Namics 其他语言 english, deutsch ...

  9. git 命令提交项目到github

    git 命令提交项目到github步骤如下: 1.使用git 命令客户端进入项目根路径,输入 git init  命令,创建github本地根目录 2.把文件加入到本地项目 git add .  ,如 ...

  10. Problem 6: Sum square difference

    The sum of the squares of the first ten natural numbers is, 12 + 22 + ... + 102 = 385 The square of ...