Oracle手工完全恢复案例(归档模式)

在做案例之前,先查看v$archived_log记录,发现太多了,考虑清除这些归档然后生成一些再做实验。

在操作系统上删除这些归档并不会在控制文件中有记录,所以查看v$archived_log时还会有记录,考虑用RMAN来删除:

RMAN>delete archivelogall;

之后再查看v$archived_log发现还有记录。google了下怎么解决,有三种方法。

1.重建控制文件,例如 backup controlfileto trace后重建该控制文件,但要求有数据文件均存在。

2.设置control_file_record_keep_time=0 然后等待记录被重用,这样很不好。

3.使用包来清理,注意不要在生产库上这么做

PROCEDURE resetCfileSection(record_typeINbinary_integer);

– This procedure attemptsto reset the circular controlfilesection.

– Input parameters:

– record_type

– The circular record type whose controlfile sectionisto be reset.

execute sys.dbms_backup_restore.resetCfileSection(11); ==> 清理v$ARCHIVED_LOG对应的记录

execute sys.dbms_backup_restore.resetCfileSection(28); ==>清理v$rman_status对应的记录

手工完全恢复

案例一:media fuilure 丢失数据文件,其他文件不丢失

   模拟环境:

   首先做一个冷备。

   查看当前日志状态

    select group#,sequence#,archived,statusfrom v$log;

    GROUP#  SEQUENCE# ARC STATUS

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

         1          4 NO  CURRENT

         2          2 YES INACTIVE

         3          3 YES INACTIVE

   查看归档日志

    select name,sequence#from v$archived_log;

   NAME                                                                             SEQUENCE#

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

    /u01/fast_recovery_area/MIKE/archivelog/2013_06_28/o1_mf_1_1_8wtf58m4_.arc               1

    /u01/fast_recovery_area/MIKE/archivelog/2013_06_28/o1_mf_1_2_8wtf59cw_.arc               2

    /u01/fast_recovery_area/MIKE/archivelog/2013_06_28/o1_mf_1_3_8wtf5ctc_.arc               3 

   此时我用test用户创建一个t1表,使用的是TEST表空间

    create table t1(id number);

   写一个循环插入数据

    begin

    for i in 1..10

    loop

    insert into t1 values(i);

    end loop;

    end;

    /

   提交

    commit;

   查看下当前日志

    select group#,sequence#,archived,statusfrom v$log;

    GROUP#  SEQUENCE# ARC STATUS

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

         1          4 NO  CURRENT

         2          2 YES INACTIVE

         3          3 YES INACTIVE

   刚才的操作变化记录在了sequence4的日志中。下面切一组日志,让其归档。

    alter system switch logfile;

   现在模拟介质失败

   rm -/u01/oradata/mike/*.dbf

   关库

   shutdown abort

   起库

   startup

   出错

   ORA-01157: cannot identify/lockdatafile1- see DBWR tracefile

   ORA-01110:datafile1:'/u01/oradata/mike/system01.dbf'

   查看所需要恢复的文件

    select file#,error from v$recover_file;   

    FILE# ERROR

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

         1 FILENOTFOUND

         2 FILENOTFOUND

         3 FILENOTFOUND

         4 FILENOTFOUND

         5 FILENOTFOUND

         8 FILENOTFOUND

   现在开始还原

   cp /backup/cold/mike/*.dbf/u01/oradata/mike/

   再查看控制文件头部和数据文件头部SCN的差异

   sys@MIKE>selectfile#,checkpoint_change#from v$datafile;

         FILE# CHECKPOINT_CHANGE#

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

             1           1553122

             2            1553122

             3            1553122

             4            1553122

             5            1553122

             8            1553122

   sys@MIKE>selectfile#,checkpoint_change#from v$datafile_header;

        FILE# CHECKPOINT_CHANGE#

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

             1            1552527

             2            1552527

             3            1552527

             4            1552527

             5            1552527

             8           1552527

   下面恢复数据库

   recover database;

   ORA-00279: change1552528 generatedat06/28/201314:57:57 neededfor thread 1

   ORA-00289: suggestion:/u01/fast_recovery_area/MIKE/archivelog/2013_06_28/o1_mf_1_1_8wtf58m4_.arc

   ORA-00280: change1552528for thread1isinsequence #1

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

   一路回车下去,数据库使用归档日志来恢复数据库。最后打开数据库。

    alter databaseopen;

   最后用test用户连上查t1数据,数据回来了。

   再查select file#,checkpoint_change#from v$datafile;

        select file#,checkpoint_change#from v$datafile_header;

   发现控制文件和数据文件头部的SCN是同步的。

案例二:recover tablespace (恢复表空间)

模拟环境:

1.用test用户登录创建一个表再插入一些数据提交

create table t01(id int) tablespacetest;

insert into t01 values(1);

insert into t01 values(2);

insert into t01 values(3);

commit;

2.模拟介质失败

shutdown abort

rm -/u01/oradata/siqian11g/test01.dbf

3.起库

出错:

ORA-01157: cannot identify/lockdatafile6- see DBWRtracefile

ORA-01110:datafile6:'/u01/oradata/siqian11g/test01.dbf'

查看下要恢复的数据文件:

select file#,error from v$recover_file;

     FILE#ERROR

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

         1 UNKNOWN ERROR

         2 UNKNOWN ERROR

         3 UNKNOWN ERROR

         4 UNKNOWN ERROR

         5 UNKNOWN ERROR

         6 FILENOTFOUND

4.还原数据文件

cp /backup/cold/test01.dbf/u01/oradata/siqian11g/

5.将数据文件offline(模拟高可用性),然后起库

alter database datafile6offline;

起库

alter database open;

6.恢复表空间

recover tablespacetest;

ORA-00279: change2067764 generatedat06/29/201312:11:34 neededfor thread 1

ORA-00289: suggestion:/backup/arch/arch_1_819372290_12.log

ORA-00280: change2067764for thread1isin sequence #12

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

一路回车下去来恢复表空间。

7.将数据文件online

alter database datafile6online;

8.验证

conn test/test

test@SIQIAN11>select*from t01;

       ID

----------

         1

         2

         3

案例三:在database open状态下恢复表空间

----database open状态下恢复数据文件(除了system表空间)

模拟环境:

1.test用户登录

test@SIQIAN11>select*from t01;

        ID

----------

         1

         2

         3

插入一些数据:

insert into t01 values(4);

insert into t01 values(5);

insert into t01 values(6);

commit;

2.在database open状态下删除test01.dbf

[oracle@siqian siqian11g]$ rm-f/u01/oradata/siqian11g/test01.dbf

然后清除data buffer

sys@SIQIAN11>alter system flush buffer_cache;

sys@SIQIAN11>select*from test.t01;

select * from test.t01

*

ERROR at line 1:

ORA-01116: errorin opening databasefile6

ORA-01110:datafile6:'/u01/oradata/siqian11g/test01.dbf'

ORA-27041: unabletoopenfile

Linux Error: 2: No suchfileor directory

Additional information:3

3.将被损坏的datafile offline

alter database datafile6offline;

4.还原数据文件

[oracle@siqian siqian11g]$ cp/backup/cold/test01.dbf/u01/oradata/siqian11g/

5.恢复数据文件or表空间

recover datafile 6 或 recover tablespace test(这里我用的前者)

sys@SIQIAN11>recover datafile6;

ORA-00279: change2067764 generatedat06/29/201312:11:34 neededfor thread 1

ORA-00289: suggestion:/backup/arch/arch_1_819372290_12.log

ORA-00280: change2067764for thread1isinsequence #12

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

Log applied.

Media recovery complete.

6.将被脱机的数据文件online

alter database datafile6online;

7.验证

sys@SIQIAN11>select*from test.t01;

 

        ID

----------

         1

         2

         3

         4

         5

         6

6 rows selected.

案例四:恢复数据文件

----新建一个表空间,没有备份,数据文件被删除

1.新建一个表空间

create tablespace ts_no_test datafile'/u01/oradata/siqian11g/ts_no_test01.dbf'size10m;

此时控制文件中有了这个表空间的信息。

2.用test用户在新建表空间中加表

test@SIQIAN11>createtable t02(idint) tablespace ts_no_test;

insert into t02 values(1);

insert into t02 values(2);

insert into t02 values(3);

commit;

3.关库并删除该表空间的数据文件

shutdown abort

rm -f /u01/oradata/siqian11g/ts_no_test01.dbf

4.起库

startup

出错:

ORA-01157: cannot identify/lockdatafile7- see DBWR tracefile

ORA-01110:datafile7:'/u01/oradata/siqian11g/ts_no_test01.dbf'

查看需要恢复的文件:

sys@SIQIAN11>selectfile#,errorfrom v$recover_file;

     FILE# ERROR

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

         1 UNKNOWN ERROR

         2 UNKNOWN ERROR

         3 UNKNOWN ERROR

         4 UNKNOWN ERROR

         5 UNKNOWN ERROR

         6 UNKNOWN ERROR

         7 FILENOTFOUND

7 rows selected.

5.恢复数据文件

sys@SIQIAN11>alter database datafile7offline;

sys@SIQIAN11>alter databaseopen;(高可用性)

由于我没做备份,所以不能做还原(resotre),但控制文件中记录了刚才创建的表空间的信息,所以可以先创建一个原来的数据文件,然后再来恢复。

alter database create datafile '/u01/oradata/siqian11g/ts_no_test01.dbf';

sys@SIQIAN11>recover datafile7;

Media recovery complete.

sys@SIQIAN11>alter database datafile7online;

6.验证

sys@SIQIAN11>select*from test.t02;

        ID

----------

         1

         2

         3

案例五:将数据文件恢复到新的位置

模拟环境:

1.用test用户在t01表中插入一些数据

test@SIQIAN11>begin

  2  for iin 11..15

  3  loop

  4  insertinto t01 values(i);

  5  endloop;

  6  end;

  7  /

PL/SQLprocedure successfully completed.

2.关库删除相关数据文件模拟介质失败

[oracle@siqian siqian11g]$ rm-f /u01/oradata/siqian11g/test01.dbf

3.起库

startup

出错:

ORA-01157: cannot identify/lockdata file6 - see DBWR tracefile

ORA-01110:data file6:'/u01/oradata/siqian11g/test01.dbf'

查看所要恢复的文件信息

sys@SIQIAN11>selectfile#,errorfrom v$recover_file;

     FILE# ERROR

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

         1 UNKNOWN ERROR

         2 UNKNOWN ERROR

         3 UNKNOWN ERROR

         4 UNKNOWN ERROR

         5 UNKNOWN ERROR

         6 FILENOT FOUND

6 rows selected.

4.将失败的介质offline并还原到新位置

sys@SIQIAN11>alter database datafile6 offline;

sys@SIQIAN11>alter databaseopen;(高可用性)

[oracle@siqian siqian11g]$ cp/backup/cold/test01.dbf/u01/oradata/

5.将控制文件中的数据文件名重命名

alter database rename file'/u01/oradata/siqian11g/test01.dbf' to'/u01/oradata/test01.dbf';

6.恢复数据文件

sys@SIQIAN11>recover datafile6;

ORA-00279: change2067764 generated at06/29/201312:11:34 neededfor thread 1

ORA-00289: suggestion: /backup/arch/arch_1_819372290_12.log

ORA-00280: change2067764 for thread1 is in sequence #12

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

回车下去恢复。。。

7.将被offline的数据文件online

sys@SIQIAN11>alter database datafile6 online;

8.验证

sys@SIQIAN11>select* from test.t01;

        ID

----------

        11

        12

        13

        14

        15

         1

         2

         3

         4

         5

         6

11 rows selected.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值