zoukankan      html  css  js  c++  java
  • 控制文件初探

    1、个数和位置的管理(因为控制文件时在参数文件定义的,所以可以直接修改参数文件)

    SPfile修改的步骤:
    a) 修改SPFILE参数control_files
    b) 一致性关闭数据库
    c) 增加或减少控制文件
    d) 启动数据库使用SPFILE
    e) 验证结果

    实验
    减少控制文件:
    a)SQL> show parameter control_f;
    b)Sql>alter system set control_files='/oracle/oradata/oracleto/control01.ctl' scope=spfile;
    c)Shutdown immediate
    d)Startup  完成

    增加控制文件:
    a)sql>show parameter control_f;  确认控制文件的路径等相关信息。
    b)Sql>alter system set  control_files='/oracle/oradata/oracleto/control01.ctl' ,'/oracle/oradata/oracleto/control02.ctl','/oracle/oradata/oracleto/control03.ctl' scope=spfile;
    c)Shutdown immediate;
    d)Startup 此时会报版本号错误,那么需要从高版本的拷贝至低版本。
    ORA-00214: control file '/oracle/oradata/oracleto/control01.ctl' version 771 inconsistent with file '/oracle/oradata/oracleto/control02.ctl' version 762
    e)sql>show parameter control_f;  确认控制文件的路径等相关信息。
    f)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control02.ctl
    g)SQL> ho cp /oracle/oradata/oracleto/control01.ctl /oracle/oradata/oracleto/control03.ctl
    h)Alter database mount;  检查是否解决问题。
    i)Startup   完成。


    Pfile修改的步骤:
    a) 一致性关闭数据库
    b) 修改Pfile参数
    c) 增加或减少控制文件
    d) 启动数据库使用PFILE
    e) 验证结果


    2、状态管理
    目的是看数据库使用的控制文件与参数定义控制文件是否吻合。
    文件。每到数据库启动到mount都读控制文件并把数据库的结构对应到实际的文件上去才能启动。
    存在状态:
    a) 找位置和个数   show parameter control_f 查处的结果在通过操作系统来对比
    Ho ll -h /路径 
    b) 需要查看磁盘空间使用情况  sql>ho df -H
    c) 查看文件的大小  sql>ho ls -lh /oracle/oradata/ora.ctl 
    控制文件尽量控制在100M以内,如果超过了,那么需要尽快采取措施,一般情况下需要重建控制文件。

    3、控制文件备份
    a) Sql>alter database backup controlfile to '/oracle/bakcup/control20120522.bak';    归档模式下这样备份才有作用 ,当控制文件出现问题是,可以直接在操作系统下拷贝过去就行。
    b) Sql>alter database backup controlfile to trace as '/oracle/....txt'  这样就得到一个重建控制文件的脚本。
    c) 通过rman备份  也需要归档模式才能使用rman
    Rman>backup current controlfile;  自动就在闪回目录下。
    或者rman>backup database include current controlfile; 备份数据库的同时也备份控制文件

    4、重建控制文件原则
    恢复管理:
    如果控制文件丢失和不一致了,需要DBA处理,首先确认控制文件交易号码那个比较新那个比较旧。复制新的给旧的或者直接更改参数文件control_file使用新的

    5、几种丢失情况的解决:
    确认数据库是否处于归档模式,不是归档,则先全备,然后建立新的控制文件即可。
    解决办法:
    a)、确认数据文件,默认的数据文件保存在$ORACLE_BASE/oradata//xxxx.dbf 文件。
    b)查看告警日志  vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log
    c)建立控制文件(有些相关的文件可以通过ALTER日志查询到相关的数据,数据文件,日志文件个数、路径、大小很重要,一定要搞清楚)
    CREATE CONTROLFILE REUSE DATABASE "ORACLETO" NORESETLOGS  NOARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 '/oracle/oradata/oracleto/redo01.log'  SIZE 50M,
      GROUP 2 '/oracle/oradata/oracleto/redo02.log'  SIZE 50M,
      GROUP 3 '/oracle/oradata/oracleto/redo03.log'  SIZE 50M
    -- STANDBY LOGFILE
    DATAFILE
      '/oracle/oradata/oracleto/system01.dbf',
      '/oracle/oradata/oracleto/undotbs01.dbf',
      '/oracle/oradata/oracleto/sysaux01.dbf',
      '/oracle/oradata/oracleto/users01.dbf',
      '/oracle/oradata/oracleto/example01.dbf'
    CHARACTER SET WE8ISO8859P1

    d)执行这个sql语句  控制文件就会建立
    e)Sql>alter database open;
    这里会提示数据库中有一个文件需要恢复
    f)Sql>recover database;  一定要执行这条语句 ,如果需要恢复的内容能在日志文件能找到,那么就可以恢复,如果不能恢复,那么就需要你加隐藏参数让数据库不进行一致性认证。(下面的情况就用到了)
    g)Sql>alter databas open;这样就可以打开数据了。


    归档和日志都在;先全备,然后再使用备份的控制文件恢复即可
    a) 在所有操作之前要做全备,很重要
    b) 同样查看警告日志 vi $ORACLE_BASE/admin/$ORACLE_SID/bdump/alter_orcl.log,确认问题所在
    c) 确认控制文件时候在,show parameter control_f 查路径,ls -l 查看
    d) 确定不在之后,那么就可以从备份文件恢复
    e)
    SQL> show parameter control_
    NAME                                 TYPE                   VALUE
    ------------------------------------ ---------------------- ------------------------------
    control_file_record_keep_time        integer                7
    control_files                        string                 /oracle/oradata/oracleto/contr
                                                                ol01.ctl, /oracle/oradata/orac
                                                         leto/control02.ctl, /oracle/or
                                                              adata/oracleto/control03.ctl

    SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control01.ctl
    SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control02.ctl
    SQL> ho cp /oracle/controlbak.ctl /oracle/oradata/oracleto/control03.ctl
    SQL> ho ls /oracle/oradata/oracleto/
    SQL> alter database mount;
    Database altered.
    SQL> alter database open;                  ------------恢复失败
    alter database open
    *
    ERROR at line 1:
    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open 
    SQL> alter database recover database using backup controlfile;  用备份的控制文件恢复
    alter database recover database using backup controlfile
    *
    ERROR at line 1:
    ORA-00279: change 792378 generated at 05/24/2012 07:32:41 needed for thread 1
    ORA-00289: suggestion : /oracle/flash_recovery_area/ORACLETONY/archivelog/2012_05_26/o1_mf_1_13_%u_.arc
    ORA-00280: change 792378 for thread 1 is in sequence #13

    SQL> shutdwon immediate  
    SQL> startup
    ORACLE instance started.
    Total System Global Area  167772160 bytes
    Fixed Size                  1218316 bytes
    Variable Size             130025716 bytes
    Database Buffers           33554432 bytes
    Redo Buffers                2973696 bytes
    Database mounted.   -----------仍然不能恢复
    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
    SQL> shutdonwn immediate
    在重做上面一步:
    SQL> alter database recover database using backup controlfile; 不行
    SQL> alter database recover database using backup controlfile until change 792378;                            ---------------也不行
    alter database recover database using backup controlfile until change 792378
    *
    ERROR at line 1:
    ORA-00275: media recovery has already been started
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01156: recovery in progress may need access to files

    SQL> shutdown immediate;
    SQL> startup
    SQL> alter database recover database using backup controlfile until change 792378;
    SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隐藏参数,不让数据库进行一致性验证。
    SQL> startup force
    SQL> alter database open resetlogs;  可以启动了
    Sql>startup
    最后要干掉隐藏参数,不然以后系统会出现ORA-600的内部错误。
    Sql>show parameter _allow
    Sql>alter database reset "_allow_resetlogs_corruption" scope=spfile sid='*';
    归档模式下使用正常的方式来恢复。上面那种方法错误的未执行alter database open resetlogs, 而先执行 alter database recover database using backup controlfile,最后还使用了不该用的隐藏参数。

    所以建议使用下面的办法:

    第一种方法
    SQL> startup

    ORACLE instance started.
    Total System Global Area  167772160 bytes
    Fixed Size                  1218316 bytes
    Variable Size             125831412 bytes
    Database Buffers           37748736 bytes
    Redo Buffers                2973696 bytes
    ORA-00205: error in identifying control file, check alert log for more info     查看告警日志。Vi $ORACLE_BASE/admin/alter.....log
    SQL> shwo parameter control_f
    SQL> ho ls /oracle/oradata/oracleto
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl          
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl
    SQL> shutdown immediate
    SQL> startup
    ORACLE instance started.
    Total System Global Area  167772160 bytes
    Fixed Size                  1218316 bytes
    Variable Size             125831412 bytes
    Database Buffers           37748736 bytes
    Redo Buffers                2973696 bytes
    Database mounted.
    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01092: ORACLE instance terminated. Disconnection forced  连接中断
    SQL> startup   可以正常启动了
    ORACLE instance started.

    ‚第一种方法出现第二种情况
    SQL>alter database open resetlogs;
    如果这里提示数据库一致性验证错误,那么需要做以下几步操作
    Sql>recover database;
    提示需要用老的控制文件。
    Sql>alter database recover  database using backup controlfile;
    还是不行。提示错误
    Sql>shutdown immediate
    Sql>startup
    Sql>alter database open resetlogs;
    Sql>recover database 同样提示需要老的控制文件
    Sql>alter database recover  database using backup controlfile;
    执行之后会提示归档日志找不到,需要从日志文件中找,所以指定日志文件,那么你可以挨个将日志文件的路径输入进去,
    $ORACLE_BASE/oradata/.....(需要绝对路径)
    Sql> alter database resetlogs;  这样就可以恢复了。

    ƒ第二种方法是用隐藏参数 (一般不用)
    SQL> startup
    ORACLE instance started.
    Total System Global Area  167772160 bytes
    Fixed Size                  1218316 bytes
    Variable Size             125831412 bytes
    Database Buffers           37748736 bytes
    Redo Buffers                2973696 bytes
    ORA-00205: error in identifying control file, check alert log for more info     查看告警日志。Vi $ORACLE_BASE/admin/alter.....log
    SQL> shwo parameter control_f
    SQL> ho ls /oracle/oradata/oracleto
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control01.ctl          
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control02.ctl
    SQL> ho cp /oracle/control2012.ctl /oracle/oradata/oracleto/control03.ctl
    SQL> shutdown immediate
    SQL> startup
    ORACLE instance started.
    Total System Global Area  167772160 bytes
    Fixed Size                  1218316 bytes
    Variable Size             125831412 bytes
    Database Buffers           37748736 bytes
    Redo Buffers                2973696 bytes
    Database mounted.
    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
    Sql>recover database;
    提示不能恢复,需要是用老的控制文件恢复
    Sql>alter database recover  database using backup controlfile; 还是不行
    SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile; 使用隐藏参数,不让数据库进行一致性验证。
    Sql>start force
    Sql>alter database open resetlog;  实例终端
    Sql>重新连接,startup
    最后去掉隐藏参数
    Sql>show parameter _allow
    Sql>alter database reset "_allow_resetlogs_corruption" scope=spfile sid='*';
    完成。
    归档但日志不全;先全备,然后建立新的控制文件。
    参考重建控制文件部分。

    新建控制文件语句:
    可以在在数据库运行在OPEN和mount的时候,可以执行alter database backup controlfile to trace as '<dir路径>'得到建立语句;,但要注意[no]archivelog [no]resetlogs 2个参数的区别。

    D、开启归档模式 (SQL> archive log list 数据库OPEN阶段可以查询)
    首先数据库要处于mount阶段才能开启, SQL> alter database archivelog;
    然后把数据打开 SQL> archive log list 查询确认。

  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/maruidong/p/6394192.html
Copyright © 2011-2022 走看看