zoukankan      html  css  js  c++  java
  • 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)



    为什么会使用备份的控制文件? 实际工作中主要有两种情况:


    第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件)。
    第二种:当前控制文件没有损坏,但想要恢复被删除的表空间。


    实验3 :全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>


    情形:用户使用正常操作命令删除了表空间及其数据文件,但之后又希望恢复删除的表空间。全备里有这个表空间的数据文件。


    分析:当用户使用drop tablesapce xxx including contents and datafiles 这条DDL语句后,数据库的结构发生了变更,涉及了三个地方。
    a)控制文件
    b)该表空间下的数据文件
    c)系统表空间(数据字典)


    特别提醒的是:当前的控制文件里已经没有该表空间的信息了,所以不能使用当前的控制文件做恢复。恢复这个表空间要满足三个条件:
    a)要有该表空间的数据文件备份
    b)使用不完全恢复(基于时间点或scn)
    c)使用备份的控制文件,而这个控制文件是删除该表空间前的控制文件,不是当前的控制文件。这个非常重要,该控制文件中的内容记录了你需要恢复数据库结构,重要的这个控制文件必须包括有你要恢复的那个表空间的信息。


    1)准备环境




    --生成要备份的数据文件的命令
    SQL>  select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;




    'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
    -------------------------------------------------------------------------
    ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak




    6 rows selected.




    SQL> shutdown immediate;
    Database closed.
    Database dismounted.
    ORACLE instance shut down.






    SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
    ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak




    SQL> startup;
    ORACLE instance started.




    Total System Global Area 1068937216 bytes
    Fixed Size    2220200 bytes
    Variable Size  729812824 bytes
    Database Buffers  331350016 bytes
    Redo Buffers    5554176 bytes
    Database mounted.
    Database opened.


    SQL> alter database backup controlfile to '/home/oracle/coldbak/ctl01.bak';


    Database altered.


    SQL> select name from v$tablespace;


    NAME
    ------------------------------
    SYSTEM
    SYSAUX
    UNDOTBS1
    USERS
    TEMP
    LZY
    GOLDGATE




    SQL>  create tablespace andy datafile '/home/oracle/app/oradata/orcl/andy01.dbf' size 1m;


    Tablespace created.


    SQL>  create table andy.andy(id int) tablespace andy;


    Table created.


    SQL>  insert into andy.andy values (101);


    1 row created.


    SQL> commit;


    Commit complete.


    SQL> select * from andy.andy;


            ID
    ----------
           101
    SQL> select current_scn from v$database;


    CURRENT_SCN
    -----------
        2042681




    2)模拟正常删除表空间


    SQL> drop tablespace andy including contents and datafiles;




    3) 关闭数据库


    SQL> shutdown immediate;


    4)还原所有数据文件,以老控制文件替换当前控制文件


    [oracle@11g orcl]$ rm -rf *.dbf
    [oracle@11g orcl]$ rm -rf /home/oracle/app/oradata/orcl/control01.ctl
    [oracle@11g orcl]$ rm -rf /home/oracle/app/flash_recovery_area/orcl/control02.ctl
    [oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/oradata/orcl/control01.ctl
    [oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/flash_recovery_area/orcl/control02.ctl
    [oracle@11g coldbak]$ cp *.dbf /home/oracle/app/oradata/orcl/


    5)启动数据库后,要做基于时间点(或SCN)的不完全恢复


    SQL> startup;
    ORACLE instance started.


    Total System Global Area 1068937216 bytes
    Fixed Size    2220200 bytes
    Variable Size  729812824 bytes
    Database Buffers  331350016 bytes
    Redo Buffers    5554176 bytes
    Database mounted.
    ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选


    SQL> recover database until change 2042681 using backup controlfile;




    6)resetlogs打开数据库


    SQL> alter database open resetlogs;


    Database altered.


    7)验证


    SQL> select * from andy.andy;


            ID
    ----------
           101


    OK,结束。 转载请标明出处。

  • 相关阅读:
    并行计算第一次作业(openmp)
    数据结构入门第二课(浙大mooc笔记)
    数据结构入门第一课(浙大mooc笔记)
    手把手教你用java实现syslog消息的收发,学不会你打我喽!
    单例模式你真的会了吗(上篇)?
    redis分布式锁,面试官请随便问,我都会
    快手面试归来篇一,希望你看后能过
    程序员不会理财,那跟咸鱼有什么区别?
    人生的康波周期,把握住一次,足以改变命运!
    各大公司面试题分类整理
  • 原文地址:https://www.cnblogs.com/andy6/p/6279564.html
Copyright © 2011-2022 走看看