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 查询确认。

  • 相关阅读:
    一则Entity Framework 学习中的问题
    用于主题检测的临时日志(861e835361d543a9b1b4e055dac9cf39 3bfe001a32de4114a6b44005b770f6d7)
    同一数据库如果处理多个完全不同的业务?
    swif debounce实现
    SQL Server 2008 下载地址(微软官方网站)
    fastreport 3的安装步骤
    修改windows server 2008 时间和日期格式 IIS配置后显示错误
    SQL server2000数据库备份和还原语句
    安装oracle,创建并启动oracle实例(创建克隆数据库,进度条在45%)就进行不下去了
    使用poi读写excel文件
  • 原文地址:https://www.cnblogs.com/maruidong/p/6394192.html
Copyright © 2011-2022 走看看