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

我们这次着重来看看第1种方式。
        查看控制文件,发现我自己只有一个控制文件,记得老师说过,有些数据库有好几个控制文件,每个控制文件的内容都是一样的,如果一个丢了或者坏了,从别的控制文件拷贝复制下就ok,结果我只有一个,不能使用这种方式进行恢复了,只能通过重建控制文件的方式来修复。
        如何获得重建控制文件的脚本呢?

SQL> select status from v$instance;

STATUS
------------
OPEN SQL> alter database backup controlfile to trace; 数据库已更改。 SQL> select d.value||b.bias||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid|
|'.trc' trace_file_name from ( select p.spid from sys.v$mystat m,sys.v$session s
,sys.v$process p where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr)
p, ( select t.instance from sys.v$thread t,sys.v$parameter v where v.name = 'thr
ead' and (v.value = 0 or t.thread# = to_number(v.value))) i, ( select value from
sys.v$parameter where name = 'user_dump_dest') d,(select DECODE(count(BANNER),0
,'/','\') bias from v$version where upper(banner) like '%WINDOWS%') b; TRACE_FILE_NAME
-------------------------------------------------------------------------------- d:\app\fx\diag\rdbms\orcl\orcl\trace\orcl_ora_3800.trc

  

以上两个语句,就能获得控制文件的生成语句和该语句所在的位置啦~~我们现在过去看看这个创建语句长什么样?在上述路径下,我们顺利找到了该文件,在文件中,我们发现了以下内容,黑色加粗部分就是我们需要的创建控制文件的语句了~
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'D:\APP\FX\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 2 'D:\APP\FX\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'D:\APP\FX\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 4 'D:\APP\FX\ORADATA\ORCL\REDO04.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'D:\APP\FX\ORADATA\ORCL\SYSTEM01.DBF',
  'D:\APP\FX\ORADATA\ORCL\SYSAUX01.DBF',
  'D:\APP\FX\ORADATA\ORCL\UNDOTBS01.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS01.DBF',
  'D:\APP\FX\ORADATA\ORCL\EXAMPLE01.DBF',
  'D:\APP\FX\ORADATA\ORCL\UNDOTBS02.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS02.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS04.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS06.DBF'
CHARACTER SET ZHS16GBK
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'D:\APP\FX\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_01_20\O1_MF_1_1_%U_.ARC';
-- ALTER DATABASE REGISTER LOGFILE 'D:\APP\FX\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2014_01_20\O1_MF_1_1_%U_.ARC';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;

现在创建语句已经有了,我们就开始试验吧~~
1、我们先关闭数据库,将控制文件删除,分阶段启动数据库,先是到nomount,这个阶段需要参数文件,不需要控制文件,启动应该没问题:

SQL> startup nomount;
ORACLE 例程已经启动。 Total System Global Area 535662592 bytes
Fixed Size 1375792 bytes
Variable Size 285213136 bytes
Database Buffers 243269632 bytes
Redo Buffers 5804032 bytes
SQL> select status from v$instance; STATUS
------------------------
STARTED

  

2、接下来,启动到mount状态肯定就不行啦,因为我们已经把控制文件给删除啦~~既然这样,我们就要尝试进行控制文件的重建了~把上文中的创建语句在sys用户下执行一下吧~~

SQL> alter database mount;
alter database mount
*
第 1 行出现错误:
ORA-00205: ?????????, ??????, ??????? SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 16
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 100
5 MAXINSTANCES 8
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 'D:\APP\FX\ORADATA\ORCL\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
9 GROUP 2 'D:\APP\FX\ORADATA\ORCL\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
10 GROUP 3 'D:\APP\FX\ORADATA\ORCL\REDO03.LOG' SIZE 50M BLOCKSIZE 512,
11 GROUP 4 'D:\APP\FX\ORADATA\ORCL\REDO04.LOG' SIZE 50M BLOCKSIZE 512
12 DATAFILE
13 'D:\APP\FX\ORADATA\ORCL\SYSTEM01.DBF',
14 'D:\APP\FX\ORADATA\ORCL\SYSAUX01.DBF',
15 'D:\APP\FX\ORADATA\ORCL\UNDOTBS01.DBF',
16 'D:\APP\FX\ORADATA\ORCL\USERS01.DBF',
17 'D:\APP\FX\ORADATA\ORCL\EXAMPLE01.DBF',
18 'D:\APP\FX\ORADATA\ORCL\UNDOTBS02.DBF',
19 'D:\APP\FX\ORADATA\ORCL\USERS02.DBF',
20 'D:\APP\FX\ORADATA\ORCL\USERS04.DBF',
21 'D:\APP\FX\ORADATA\ORCL\USERS06.DBF'
22 CHARACTER SET ZHS16GBK
23 ; 控制文件已创建。 SQL>

  

3、噢耶~~控制文件重建好了~~我们打开数据库试试~

SQL> ALTER DATABASE OPEN;

数据库已更改。

  

数据库打开了,我的数据库是归档模式,我重建了控制文件之后,需要再次对数据库进行备份。
如果还没有来得及生成重建控制文件的脚本,控制文件就坏了,那我们可以仿写这个重建语句,把自己数据库的相关信息填进去,一个崭新的重建语句就诞生啦~~~
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG  ----数据库名称
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'D:\APP\FX\ORADATA\ORCL\REDO01.LOG'  SIZE 50M BLOCKSIZE 512,   -----日志文件组和路径信息
  GROUP 2 'D:\APP\FX\ORADATA\ORCL\REDO02.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 3 'D:\APP\FX\ORADATA\ORCL\REDO03.LOG'  SIZE 50M BLOCKSIZE 512,
  GROUP 4 'D:\APP\FX\ORADATA\ORCL\REDO04.LOG'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  'D:\APP\FX\ORADATA\ORCL\SYSTEM01.DBF',          -----数据文件信息
  'D:\APP\FX\ORADATA\ORCL\SYSAUX01.DBF',
  'D:\APP\FX\ORADATA\ORCL\UNDOTBS01.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS01.DBF',
  'D:\APP\FX\ORADATA\ORCL\EXAMPLE01.DBF',
  'D:\APP\FX\ORADATA\ORCL\UNDOTBS02.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS02.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS04.DBF',
  'D:\APP\FX\ORADATA\ORCL\USERS06.DBF'
CHARACTER SET ZHS16GBK
;

oracle控制文件丢失恢复的更多相关文章

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

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

  2. RMAN - "丢失控制文件的恢复"

    OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - ...

  3. RMAN备份之丢失数据文件及控制文件的恢复

    About Recovery with a Backup Control FileIf all copies of the current control file are lost or damag ...

  4. oracle控制文件问题

    下午时连接数据库突然发现连不上了,监听报错找不到服务,于是登录数据库所在服务器,查看监听状态,oracle:lsnrctl status 监听状态正常,登入数据库查看[oracle@frkdb1 ~] ...

  5. Oracle控制文件

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

  6. Oracle 控制文件(CONTROLFILE)

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

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

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

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

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

  9. Oracle控制文件操作

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

随机推荐

  1. 转<%%>、<%=%>、<%$%>、<%@%>的区别

    1. 未定义的命名空间前缀“xsd” 上周在项目开发中遇到这样的一个问题,在一个页面用到了自定义的Picker控件,在IE6.7.8.9以及IE10兼容模式下都没有任何问题,但是一换到IE10时已选择 ...

  2. VS2010 添加服务引用以后点不出引用服务的命名空间

    声明:本次我遇到的仅是这类情况中的其中一个个例,不要拘泥于些噢! 问题描述: 1.我建了一个新项目,不引用服务前是好的,可以打点点出任何已有有命名空间,但是引用服务以后就是点不出服务的命名空间. 2. ...

  3. java 代理的三种实现方式

    Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...

  4. 如何在CentOS 7上安装Percona服务器

    在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品.InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比 ...

  5. PHP分页做法

    1.分页封装类 <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 priv ...

  6. php数据库封装与引用方法

    1.做封装类 <?php class DBDA { //成员变量 数据库的四个条件 public $host="localhost"; public $uid = " ...

  7. 获取数据库里面最新的ID

    你如果新插入的一段资料,你想获取它的ID,就用   “mysql_insert_id()”; 并且要重新定义一个名称

  8. android 总结(样式)—跑马灯 button的点击效果 RadioGroup 实现滑动的效果 button 下面有阴影 卡片样式

    <Button android:layout_width="wrap_content" android:layout_height="wrap_content&qu ...

  9. java的eclipse操作和常用类Object的使用

    1.eclipse的快捷键: (1)alt + /   内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...

  10. C++异常处理的问题

    一般在C语言中,是通过返回值或者设置errno的方式来标识错误的 但在C++里面,构造函数是没有返回值的,于是发明了异常的方式:为了正确的向使用者表明 异常抛出的原因,你必须弄清楚异常抛出的原因(比如 ...