zoukankan      html  css  js  c++  java
  • Oracle 阅读器-刚看完表空间回复的详细解释

    (一) 当使用一个控制文件的备份恢复,例如下面的附图。使用备份控制文件恢复位置

     

    1) 创建測试表空间ts1及相关測试表(表空间为ts1

    SYS@ORCL>create tablespace ts1 datafile '/u01/app/oracle/oradata/ORCL/ts1.dbf' size 10m;

    Tablespace created.

    SYS@ORCL>create table scott.t(x int) tablespace ts1;

    Table created.

    SYS@ORCL>insert into scott.t select rownum from dual connect by rownum<=10;

    10 rows created.

    SYS@ORCL>commit;

    Commit complete.

    SYS@ORCL>

    2) 通过RMAN备份ts1表空间和控制文件

    RMAN> backup tablespace ts1 include current controlfile;

    Starting backup at 17-JAN-13

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=141 devtype=DISK

    channel ORA_DISK_1: starting full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    input datafile fno=00006 name=/u01/app/oracle/oradata/ORCL/ts1.dbf

    channel ORA_DISK_1: starting piece 1 at 17-JAN-13

    channel ORA_DISK_1: finished piece 1 at 17-JAN-13

    piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646 comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

    channel ORA_DISK_1: starting full datafile backupset

    channel ORA_DISK_1: specifying datafile(s) in backupset

    including current control file in backupset

    channel ORA_DISK_1: starting piece 1 at 17-JAN-13

    channel ORA_DISK_1: finished piece 1 at 17-JAN-13

    piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp tag=TAG20130117T101646 comment=NONE

    channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

    Finished backup at 17-JAN-13

    RMAN> 

    3) 删除t表部分记录

    SYS@ORCL>delete scott.t where x>=6;

    5 rows deleted.

    SYS@ORCL>commit;

    Commit complete.

    SYS@ORCL>

    4) 切换几次日志。让上面的动作归档(对于測试来说,意义不是特别的大)

    SYS@ORCL>alter system switch logfile;

    System altered.

    SYS@ORCL>/

    System altered.

    SYS@ORCL>/

    System altered.

    SYS@ORCL>/

    System altered.

    SYS@ORCL>

    5) 在users表空间上创建t1

    SYS@ORCL>create table scott.t1(x int) tablespace users;

    Table created.

    SYS@ORCL>insert into scott.t1 select rownum from dual connect by rownum<=2;

    2 rows created.

    SYS@ORCL>commit;

    Commit complete.

    SYS@ORCL>

    6) 将表ts1改动为仅仅读模式

    SYS@ORCL>alter tablespace ts1 read only;

    Tablespace altered.

    SYS@ORCL>select tablespace_name,status from dba_tablespaces where tablespace_name='TS1';

    TABLESPACE_NAME              STATUS

    ------------------------- ---------

    TS1                            READ ONLY

    SYS@ORCL>select file_id,file_name,status,online_status from dba_data_files where tablespace_name='TS1';

        FILE_ID FILE_NAME                                            STATUS     ONLINE_

    ---------- --------------------------------------------- --------- -------

               6 /u01/app/oracle/oradata/ORCL/ts1.dbf            AVAILABLE ONLINE

    SYS@ORCL>

    7) 删除ts1表空间数据文件和全部控制文件

    SYS@ORCL>!rm /u01/app/oracle/oradata/ORCL/ts1.dbf

    SYS@ORCL>!rm /u01/app/oracle/oradata/ORCL/*.ctl

    8) 重新启动数据库到nomount状态

    SYS@ORCL>shutdown abort;

    ORACLE instance shut down.

    SYS@ORCL>

    SYS@ORCL>startup nomount;

    ORACLE instance started.

    Total System Global Area  285212672 bytes

    Fixed Size                  1218992 bytes

    Variable Size              96470608 bytes

    Database Buffers          184549376 bytes

    Redo Buffers                2973696 bytes

    SYS@ORCL>

    9) 通过RMAN备份的控制文件完毕控制文件的恢复,恢复完毕,数据库改动为mount

    RMAN> restore controlfile from '/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp';

    Starting restore at 17-JAN-13

    using target database control file instead of recovery catalog

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=157 devtype=DISK

    channel ORA_DISK_1: restoring control file

    channel ORA_DISK_1: restore complete, elapsed time: 00:00:05

    output filename=/u01/app/oracle/oradata/ORCL/control01.ctl

    output filename=/u01/app/oracle/oradata/ORCL/control02.ctl

    output filename=/u01/app/oracle/oradata/ORCL/control03.ctl

    Finished restore at 17-JAN-13

    RMAN> alter database mount;

    database mounted

    released channel: ORA_DISK_1

    RMAN> 

    10) 恢复ts1表空间

    RMAN> restore tablespace ts1;

    Starting restore at 17-JAN-13

    Starting implicit crosscheck backup at 17-JAN-13

    allocated channel: ORA_DISK_1

    channel ORA_DISK_1: sid=157 devtype=DISK

    Crosschecked 2 objects

    Finished implicit crosscheck backup at 17-JAN-13

    Starting implicit crosscheck copy at 17-JAN-13

    using channel ORA_DISK_1

    Finished implicit crosscheck copy at 17-JAN-13

    searching for all files in the recovery area

    cataloging files...

    cataloging done

    List of Cataloged Files

    =======================

    File Name: /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_ncnnf_TAG20130117T101646_8hgqrhvd_.bkp

    using channel ORA_DISK_1

    channel ORA_DISK_1: starting datafile backupset restore

    channel ORA_DISK_1: specifying datafile(s) to restore from backup set

    restoring datafile 00006 to /u01/app/oracle/oradata/ORCL/ts1.dbf

    channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp

    channel ORA_DISK_1: restored backup piece 1

    piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2013_01_17/o1_mf_nnndf_TAG20130117T101646_8hgqrg9h_.bkp tag=TAG20130117T101646

    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01

    Finished restore at 17-JAN-13

    RMAN> 

    11) 表空间恢复完成。尝试open数据库

    --当然。我们知道一定是无法open数据库的,由于控制文件恢复的是老版本号的

    SYS@ORCL>!ls /u01/app/oracle/oradata/ORCL/ts1.dbf

    /u01/app/oracle/oradata/ORCL/ts1.dbf

    SYS@ORCL>alter database open;

    alter database open

    *

    ERROR at line 1:

    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

    --提示resetlogs方式打开

    SYS@ORCL>alter database open resetlogs;

    alter database open resetlogs

    *

    ERROR at line 1:

    ORA-01194: file 1 needs more recovery to be consistent

    ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'

    --提示须要恢复1号数据文件

    SYS@ORCL>recover datafile 1;

    ORA-00283: recovery session canceled due to errors

    ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

    --提示using BACKUP CONTROLFILE方式完毕恢复

    SYS@ORCL>

    12) using backup controlfile恢复数据库

    注:假设要恢复到控制文件SCN以后的时间。这时候。就须要用using backup controlfile. 恢复就不会受“当前controlfile所纪录的SCN”的限制。

    这时候的限制就来自于你的语句(until time , until scn),或者可用的archive log(until cancel)

    SYS@ORCL>recover database using backup controlfile until cancel;

    ORA-00279: change 493760 generated at 01/16/2013 17:10:46 needed for thread 1

    ORA-00289: suggestion :

    /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_01_16/o1_mf_1_7_%u_.arc

    ORA-00280: change 493760 for thread 1 is in sequence #7

    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

    --此处回车则是利用下一个归档日志文件进行恢复。只是在这里也能够输入CANCEL,表示恢复到此结束,不再使用后面的归档日志文件

    ……

    --在恢复的过程中又出现了例如以下警告

    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below

    ORA-01194: file 1 needs more recovery to be consistent

    ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'

    SYS@ORCL>

    13) 尝试再次resetlogs打开数据库

    SYS@ORCL>alter database open resetlogs;

    alter database open resetlogs

    *

    ERROR at line 1:

    ORA-01194: file 1 needs more recovery to be consistent

    ORA-01110: data file 1: '/u01/app/oracle/oradata/ORCL/system01.dbf'

    SYS@ORCL>

    14) 採用极端办法

    注:此时仅仅能採取极端手段:隐含參数_allow_resetlogs_corruption强制启动数据库,设置此參数之后,在数据库Open过程中。Oracle会跳过某些一致性检查。从而使数据库可能跳过不一致状态,Open打开:

    --查看隐藏參数_allow_resetlogs_corruption。默认值为false

    SYS@ORCL>SELECT ksppstvl, ksppdesc  

      2    FROM x$ksppi x, x$ksppcv y  

      3   WHERE x.indx = y.indx 

      4    AND ksppinm = '_allow_resetlogs_corruption';  

    KSPPSTVL   KSPPDESC

    ---------- --------------------------------------------------

    FALSE      allow resetlogs even if it will cause corruption

    SYS@ORCL>

    --将隐藏參数设置为true

    SYS@ORCL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

    System altered.

    SYS@ORCL>

    --因为是静态參数,重新启动数据库使其生效

    SYS@ORCL>shutdown immediate;

    ORA-01109: database not open

    Database dismounted.

    ORACLE instance shut down.

    SYS@ORCL>

    --数据库启动到mount状态

    SYS@ORCL>startup mount;

    ORACLE instance started.

    Total System Global Area  285212672 bytes

    Fixed Size                  1218992 bytes

    Variable Size              83887696 bytes

    Database Buffers          197132288 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    SYS@ORCL>

    15) 再次尝试open数据库。提示RESETLOGS方式open

    SYS@ORCL>alter database open;

    alter database open

    *

    ERROR at line 1:

    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

    SYS@ORCL>

    16) 数据库成功以resetlogs方式open

    SYS@ORCL>alter database open resetlogs;

    Database altered.

    SYS@ORCL>

    SYS@ORCL>select count(*) from scott.t;

      COUNT(*)

    ----------

             5

    SYS@ORCL>select count(*) from scott.t1;

    select count(*) from scott.t1

                               *

    ERROR at line 1:

    ORA-00942: table or view does not exist

    SYS@ORCL>

    17) 恢复參数,重新启动数据库

    SYS@ORCL>alter system set "_allow_resetlogs_corruption"=false scope=spfile;

    System altered.

    SYS@ORCL>startup force;

    ORACLE instance started.

    Total System Global Area  285212672 bytes

    Fixed Size                  1218992 bytes

    Variable Size              88082000 bytes

    Database Buffers          192937984 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    Database opened.

    SYS@ORCL>

    5.1.1. 小结

    假设在生产中使用了仅仅读表空间,那么切记,在改动为仅仅读以后,第一件事情就是备份的孩子,这将节省不必要的麻烦和损失。

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    vue项目打包发布
    jap和mybatis比较
    前端常用js插件
    【知乎问题】如何让不懂编程的人感受到编程的魅力
    「MoreThanJava」Day 3:构建程序逻辑的方法
    「MoreThanJava」Day 1:环境搭建和程序基本结构元素
    PHPExecl导出大量数据卡顿问题解决(Laravel实现)
    互联网协议入门(二)(转)
    互联网协议入门(一)(转)
    Mysql创建用户与授权
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4851564.html
Copyright © 2011-2022 走看看