一、首先控制文件有什么作用呢?

  1. 控制文件记录了如下信息:
    1、数据库的创建时间
    2、数据文件的位置
    3、日志文件的位置

    作用是指导数据库 找到数据文件,日志文件并将数据库启动到 open 状态。

与其用文字来描述,不如我们来看看control_file里面有些什么好了。然后在一一分析:

  1. SQL> show parameter control_file
  2.  
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. control_file_record_keep_time integer
  6. control_files string /u01/app/oracle/oradata/orcl/c
  7. ontrol01.ctl, /u01/app/oracle/
  8. oradata/orcl/control02.ctl, /u
  9. /app/oracle/oradata/orcl/con
  10. trol03.ctl

可以看出来control_file的位置在 /u01/app/oracle/oradata/orcl/这目录下。

  1. SQL> alter database backup controlfile to trace;

我们到这个目录去:/u01/app/oracle/admin/orcl/udump

  1. [oracle@oracle udump]$ ls -l
  2. total
  3. -rw-r----- oracle oinstall Sep : orcl_ora_10453.trc
  4. -rw-r----- oracle oinstall Sep : orcl_ora_14205.trc
  5. -rw-r----- oracle oinstall Sep : orcl_ora_21120.trc
  6. -rw-r----- oracle oinstall Sep : orcl_ora_21124.trc
  7. -rw-r----- oracle oinstall Sep : orcl_ora_23699.trc
  8. -rw-r----- oracle oinstall Sep : orcl_ora_23743.trc

找到一个时间是今天的以.trc结尾的文件。用vi来打开它。

  1. CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS NOARCHIVELOG
  2. MAXLOGFILES
  3. MAXLOGMEMBERS
  4. MAXDATAFILES
  5. MAXINSTANCES
  6. MAXLOGHISTORY
  7. LOGFILE
  8. GROUP '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M,
  9. GROUP '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M,
  10. GROUP '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M
  11. -- STANDBY LOGFILE
  12. DATAFILE
  13. '/u01/app/oracle/oradata/orcl/system01.dbf',
  14. '/u01/app/oracle/oradata/orcl/undotbs01.dbf',
  15. '/u01/app/oracle/oradata/orcl/sysaux01.dbf',
  16. '/u01/app/oracle/oradata/orcl/users01.dbf',
  17. '/u01/app/oracle/oradata/orcl/example01.dbf'
  18. CHARACTER SET AL32UTF8

可以看到里面记录着数据文件和日志文件的存放位置。

二、控制文件有三个,三个控制文件都是一模一样的。这是用来冗余备份,如果其中一个坏了,可以用另外的一个给重新覆盖。我们接下来模拟一个环境。我们把其中一个控制文件给破干掉:

  1. [oracle@oracle orcl]$ ls
  2. control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
  3. control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
  4. [oracle@oracle orcl]$ mv control03.ctl ./control03.ctl.bak
  5. [oracle@oracle orcl]$ ls
  6. control01.ctl control03.ctl.bak redo01.log redo03.log system01.dbf undotbs01.dbf
  7. control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf

然后我们登入启动一下:

  1. SQL> startup
  2. ORACLE instance started.
  3.  
  4. Total System Global Area bytes
  5. Fixed Size bytes
  6. Variable Size bytes
  7. Database Buffers bytes
  8. Redo Buffers bytes
  9. ORA-: error in identifying control file, check alert log for more info

我们打开报警文件看看:

  1. [oracle@oracle bdump]$ pwd
  2. /u01/app/oracle/admin/orcl/bdump
  3.  
  4. vi 查看一下:alert_orcl.log
  5. Wed Sep :: CST
  6. ORA-: cannot open the specified control file
  7. ORA-: control file: '/u01/app/oracle/oradata/orcl/control03.ctl'
  8. ORA-: unable to obtain file status
  9. Linux Error: : No such file or directory

很明显的说是打不开,废话,肯定打不开,我都给干掉了你找得到才怪了。

这个是有我给大家指出两条解决思路:

方法一:修改spfile,不是说spfile里面记录着参数文件的位置嘛,而且肯定是记录着3条位置,那么我们就把其中第三个控制文件干掉

过程:

  1. 创建一个pfile,因为spfile是二进制文件,不可以修改
    SQL> create pfile='/u01/pfile.ora' from spfile;
  2.  
  3. File created.

然后编辑一下参数文件pfile:

  1. [ora10g@first-oracle dbs]$ cd /u01
  2. [ora10g@first-oracle u01]$ ls
  3. oracle pfile.ora
  4. [ora10g@first-oracle u01]$ vi pfile.ora
  5.  
  6. *.control_files=tl','/u01/oracle/oradata/orcl/control02.ctl','/u01/oracle/oradata/orcl/control03.ctlorcl.__db_cache_size=
  7. orcl.__java_pool_size=
  8. orcl.__large_pool_size=
  9. orcl.__shared_pool_size=
  10. orcl.__streams_pool_size=
  11. *.audit_file_dest='/u01/oracle/admin/orcl/adump'
  12. *.background_dump_dest='/u01/oracle/admin/orcl/bdump'
  13. *.compatible='10.2.0.1.0'
  14. *.control_files='/u01/oracle/oradata/orcl/control02.ctl','/u01/oracle/oradata/orcl/control01.ctl' ----亮点在这里,原先是有01,02,03个控制文件,我给删了就可以让数据库启动的时候不去找第三个,丢了就丢了吧。
  15. *.core_dump_dest='/u01/oracle/admin/orcl/cdump'
  16. *.db_block_size=
  17. *.db_domain=''
  18. *.db_file_multiblock_read_count=
  19. *.db_name='orcl'
  20. *.db_recovery_file_dest='/u01/oracle/flash_recovery_area'
  21. *.db_recovery_file_dest_size=
  22. *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
  23. *.job_queue_processes=
  24. *.open_cursors=
  25. *.pga_aggregate_target=
  26. *.processes=
  27. *.remote_login_passwordfile='EXCLUSIVE'
  28. *.sga_target=
  29. *.undo_management='AUTO'
  30. *.undo_tablespace='UNDOTBS1'
  31. *.user_dump_dest='/u01/oracle/admin/orcl/udump'

重新创建一下就好spfile了:

  1. SQL> create spfile from pfile='/u01/pfile.ora';
  2.  
  3. File created.
  4.  
  5. SQL> startup;
  6. ORACLE instance started.
  7.  
  8. Total System Global Area bytes
  9. Fixed Size bytes
  10. Variable Size bytes
  11. Database Buffers bytes
  12. Redo Buffers bytes
  13. Database mounted.
    Database opened.

  14. --看到没有,数据库只用2个控制文件也是可以启动的。
  15. SQL> show parameter control
  16.  
  17. NAME TYPE VALUE
  18. ------------------------------------ ----------- ------------------------------
  19. control_file_record_keep_time integer
  20. control_files string /u01/oracle/oradata/orcl/contr
  21. ol02.ctl, /u01/oracle/oradata/
  22. orcl/control01.ctl

方法二:不是说3个控制文件都一模一样的嘛,那为何不拷贝后重命名不就可以了呢

过程:

  1. [oracle@oracle orcl]$ cp control01.ctl control03.ctl
  2. [oracle@oracle orcl]$ ls
  3. control01.ctl control03.ctl.bak redo02.log system01.dbf users01.dbf
  4. control02.ctl example01.dbf redo03.log temp01.dbf
  5. control03.ctl redo01.log sysaux01.dbf undotbs01.dbf

启动一下:

  1. SQL> show parameter control_file
  2.  
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. control_file_record_keep_time integer
  6. control_files string /u01/app/oracle/oradata/orcl/c
  7. ontrol01.ctl, /u01/app/oracle/
  8. oradata/orcl/control02.ctl, /u
  9. /app/oracle/oradata/orcl/con
  10. trol03.ctl

  还是一样可以。

ORACLE控制文件一致性【weber出品】的更多相关文章

  1. Oracle控制文件

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

  2. Oracle 控制文件(CONTROLFILE)

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

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

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

  4. oracle 控制文件的重建

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

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

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

  6. ORACLE复制数据库【weber出品】

    一.概述 在公司中,我们会经常面临着一种情况.我们制定了对数据库的操作方案后,还不可以在真正的数据库上执行,需要在备用数据库进行测试,这个时候就需要备用数据上的数据和真正数据库的数据是一模一样的.我们 ...

  7. oracle控制文件丢失恢复

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

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

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

  9. Oracle控制文件操作

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

随机推荐

  1. <display:table>属性解释

    参考官方网站:http://www.displaytag.org/1.2/displaytag/tagreference.html 所有属性: cellpadding,cellspacing,clas ...

  2. linux下登录出现-bash-3.2#解决办法

    1:下载 安装 csh yum  install csh   2:再切换即可  

  3. [BZOJ3561] DZY Loves Math VI

    (14.10.28改) 本来只想写BZOJ3739:DZY Loves Math VIII的,不过因为和VI有关系,而且也没别人写过VI的题解,那么写下. 不过我还不会插公式…… http://www ...

  4. C++ Primer 5th 第4章 表达式

    表达式是运算对象及运算符组成的式子,表达式求值将得到一个结果,单独的变量或者字面值也算表达式,结果是其本身. 运算符分为:一元运算符.二元运算符.三元运算符.一元即一个作用对象,二元两个作用对象,以此 ...

  5. python中的redis定义

    redis官方介绍,python的redis客户端可以一处定义,处处使用.到底是不是这样呢?是不是只要在配置文件里定义一次,不管在哪都可以使用了? 下面用代码说明: import redis impo ...

  6. 关于Linux平台malloc的写时拷贝(延迟分配)【转】

    Linux内核定义了“零页面”(内容全为0的一个物理页,且物理地址固定),应用层的内存分配请求,如栈扩展.堆分配.静态分配等,分配线性地址后,就将页表项条目指向“零页面”(指定初始值的情况除外),这样 ...

  7. 从事web前端的这些日子

    不知不觉从事web前端快要一年了,在这一年的时间,自己的技术也得到了不小的进步,但毕竟还是停留在摸索的阶段,前端的这条路还有很长的路要走,前端要掌握的东西太多,知识也在频繁的更新.每天在群里和别人的交 ...

  8. spring动画-iOS-备

    最后停止在终点: 如果给位置移动的动画添加弹簧效果,那么视图的运动轨迹应该像下图中展现的一样: 这会使你的动画看起来更逼真.更真实.更贴近现实.在某些情况下带给用户更好的用户体验.那么让我们开始学习吧 ...

  9. 漫游Ruby

    Ruby是一门完全面向对象的编程语言,Ruby中的每个值都是对象(nil是Ruby总的特殊值代表null),以下是在irb中的案例. 在Ruby中,圆括号通常都是可选的而且一般都被省略掉. Ruby中 ...

  10. xdebug及webgrind的联用

    参考URL: http://www.tuicool.com/articles/ERFNva http://blog.sina.com.cn/s/blog_635833b3010127q5.html h ...