043-4 不完全恢复Controlfile损坏恢复

--***************************
模拟控制文件损坏的不完全恢复
--***************************
create table T_con(ID  NUMBER,Name Varchar2(20));
RMAN> Delete noprompt Backup;      --清空备份
RMAN> Backup Database;             --全库备份

Insert Into t_con Values(1,'a');   --插入数据
Commit

Select * From v$log;            --current group#2
Alter System Switch Logfile;    --切换6次

Insert Into t_con Values(2,'b');
Commit

--**模拟控制文件损坏
方法1:脚本重建控制文件,见(06天1-2 RMAN配置catalog)
/*重建控制文件过程
sqlplus sys/oracle@testDB as sysdba
alter database backup controlfile to trace;   --将控制文件备份到trace中,trace位置在UDUMP文件夹下,找到重建的脚本 NORESETLOG是联机日志未损坏的重建  RESETLOG是联机日志损坏的重建
或者alter database backup controlfile to trace as  'c:\controlfile.txt';
--**********创建控制文件语句
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16                --日志文件的最大组数
    MAXLOGMEMBERS 3               --每组日志的最多镜像数,10g以后控制不住该数量
    MAXDATAFILES 100              --控制文件中为数据文件预留了100个空间,即数据文件在100以内时,数据文件为7M不变,超过100才会扩大
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\REDO01.LOG'  SIZE 50M,
  GROUP 2 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\REDO02.LOG'  SIZE 50M,
  GROUP 3 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\REDO03.LOG'  SIZE 50M
-- STANDBY LOGFILE

DATAFILE
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\SYSTEM01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\UNDOTBS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\SYSAUX01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\USERS01.DBF',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\A.ORA',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\A1.ORA',
  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\UNDOTBS02.DBF'
CHARACTER SET ZHS16GBK
;
--**********
startup nomount
执行脚本重新创建控制文件
alter database open   --控制文件创建完会自动启动到mount,打开数据库就可以
*/

Select Group#,members From v$log    --每组的member都是1
--members 成员,即每组日志的镜像数量

Select * From v$logfile             --查看每组对应的member
col Member formart a50              --在SQLPLUS中将v$logfile的Member列定义成每行显示50个宽度 a代表字符类型

--增加镜像,同一group的镜像,最好不要放在同一物理磁盘上
Alter Database Add Logfile Member 'C:\oracle\product\10.2.0\oradata\testDB\member\REDO01.LOG' To Group 1;
Alter Database Add Logfile Member 'C:\oracle\product\10.2.0\oradata\testDB\member\REDO02.LOG' To Group 2;
Alter Database Add Logfile Member 'C:\oracle\product\10.2.0\oradata\testDB\member\REDO03.LOG' To Group 3;
Select Group#,members From v$log    --每一组的member都变成2
Select * From v$logfile             --刚创建好的镜像是INVALID,日志切换到改镜像后才会用到
Alter System Switch Logfile;        --手动切换3次
Select * From v$controlfile_record_section    --DATAFILE:records_total 100,records_used 7  即预留100,使用7

Select * From v$archived_log;       --归档日志的记录
Select * From v$log_history;        --日志切换的记录(非归档模式也可切换)
--控制文件的脚本,应定期生成trace,没有备份脚本时,可以根据经验手动写成该脚本

方法2:没有脚本的控制文件恢复
--**模拟控制文件丢失
Shutdown Immediate
删除C:\oracle\product\10.2.0\oradata\testDB\下的CONTROL01.CTL,CONTROL02.CTL,CONTROL03.CTL
startup nomount
RMAN> Connect target /
RMAN-06004: ORACLE error From Recovery catalog Database:RMAN-20005:target Database Name Is ambiguous    --由于控制文件不存在,当catalog数据库中存在多个targetDB时,会出现target歧义

C:\>rman target sys/oracle@testdb catalog rman/rman@catalogdb
/*Recovery Manager: Release 10.2.0.1.0 - Production on Fri Feb 14 12:45:25 2014
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
connected to target database: testDB (not mounted)
connected to recovery catalog database*/

先找到DBID--之前连接RMAN后的信息  connected to target database: TESTDB (DBID=2614920292)
RMAN> Set dbid=2614920292
executing command: Set DBID
Database Name Is "TESTDB" And DBID Is 2614920292

RMAN> list backup;
/*
List of Backup Sets
===================

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
97      Full    966.38M    DISK        00:01:04     14-FEB-14
        BP Key: 99   Status: AVAILABLE  Compressed: NO  Tag: TAG20140214T103644
        Piece Name: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\BACKUPSET\2014_02_14\O1_MF_NNNDF_TAG20140214T103644_9HV09WQX_.BKP
  List of Datafiles in backup set 97
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 715411     14-FEB-14 C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\SYSTEM01.DBF
  2       Full 715411     14-FEB-14 C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\UNDOTBS01.DBF
  3       Full 715411     14-FEB-14 C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\SYSAUX01.DBF
  4       Full 715411     14-FEB-14 C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\USERS01.DBF
  5       Full 715411     14-FEB-14 C:\TABLESPACE\A.ORA

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
98      Full    6.80M      DISK        00:00:04     14-FEB-14
        BP Key: 100   Status: AVAILABLE  Compressed: NO  Tag: TAG20140214T103644
        Piece Name: C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\BACKUPSET\2014_02_14\O1_MF_NCSNF_TAG20140214T103644_9HV0D04W_.BKP
  Control File Included: Ckp SCN: 715437       Ckp time: 14-FEB-14
  SPFILE Included: Modification time: 14-FEB-14
*/
RMAN> Restore Controlfile;
/*
Starting restore at 14-FEB-14
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK

channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: reading from backup piece C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\BACKUPSET\2014_02_14\O1_MF_NCSNF_TAG20140214T103644_9HV0D04W_
channel ORA_DISK_1: restored backup piece 1
piece handle=C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\BACKUPSET\2014_02_14\O1_MF_NCSNF_TAG20140214T103644_9HV0D04W_.BKP tag=TAG20140214T103644
channel ORA_DISK_1: restore complete, elapsed time: 00:00:04
output filename=C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\CONTROL01.CTL
output filename=C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\CONTROL02.CTL
output filename=C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\CONTROL03.CTL
Finished restore at 14-FEB-14
*/
show parameter control_files;   --oracle通过该参数确定控制文件恢复的位置
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      C:\ORACLE\PRODUCT\10.2.0\ORADA
                                                 TA\TESTDB\CONTROL01.CTL, C:\OR
                                                 ACLE\PRODUCT\10.2.0\ORADATA\TE
                                                 STDB\CONTROL02.CTL, C:\ORACLE\
                                                 PRODUCT\10.2.0\ORADATA\TESTDB\
                                                 CONTROL03.CTL
Select status From v$instance;   --查看数据库状态 nomount
Alter Database Mount;           

SQL> select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             715411
         2             715411
         3             715411
         4             715411
         5             715411

SQL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             719184
         2             719184
         3             719184
         4             719184
         5             719184
--控制文件中的SCN比文件头的小,无法打开数据库
Select checkpoint_change# From v$database;   --713514 restore controlfile后的数据库SCN

SQL> recover database;   --尝试恢复数据库,报错
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done --添加using backup controlfile语句让oracle知道控制文件是新恢复的

select sequence#,first_change#,next_change# from v$archived_log   --查看归档日志列表

SQL> recover database using backup controlfile;
ORA-00279: change 715437 generated at 02/14/2014 09:58:45 needed for thread 1    --715437 控制文件备份时的SCN
ORA-00289: suggestion : C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\ARCHIVELOG\2014_02_14\O1_MF_1_59_%U_.ARC
ORA-00280: change 715437 for thread 1 is in sequence #59

Specify log: {=suggested | filename | AUTO | CANCEL}
回车
/*ORA-00308: cannot open archived log 'C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TESTDB\ARCHIVELOG\2014_02_14\O1_MF_1_59_%U_.ARC'
ORA-27041: unable to open File    --由于控制文件丢失,oracle不知道59是否归档,实际上只归档到58,所以需要手动指定联机日志去查找进行恢复的SCN点715437
*/
Specify log: {=suggested | filename | AUTO | CANCEL}
C:\oracle\product\10.2.0\oradata\testDB\REDO01.LOG
/*ORA-00328: archived log ends at change 713512, need later change 715437
ORA-00334: archived log: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TESTDB\REDO01.LOG'
*/
SQL> recover database using backup controlfile;
Specify log: {=suggested | filename | AUTO | CANCEL}
C:\oracle\product\10.2.0\oradata\testDB\REDO02.LOG
/*Log applied.
Media recovery complete.*/
--上面是挨个尝试联机日志,看是否是current,也可以使用dump,进行查看:
Alter System Dump Logfile 'C:\oracle\product\10.2.0\oradata\testDB\REDO02.LOG';
--查看UDUMP下的最新日志  C:\oracle\product\10.2.0\admin\testDB\udump
Next scn: 0xffff.ffffffff 01/01/1988 00:00:00   --next scn是无穷大,代表是current

SQL> alter database open resetlogs;    --恢复之后默认为不完全恢复,要加resetlogs
Database altered.

--************************* 
备份的总结
--*************************
1.Create consistend Database backups         --创建一致性数据备份
指shutdown之后的冷备份

2.Backup your Database Without shutting it down   --热备份
除了shutdown之后的冷备份,以外的都是热备份

3.Create incremental Backups    --增量备份
见 06天2 RMAN的增量备份

4.automate Database backups     --自动备份
间 06天1-2 RMAN配置catalog    --写批处理文件进行自动备份

5.Mointor The flash Recovery area         --监控闪回恢复区
恢复区满后,备份日志没位置写,会造成宕机

Select * From v$flash_recovery_area_usage  --闪回区可以存储的6种文件  
--IMAGECOPY:RMAN发出的在线copy命令 
RMAN> copy datafile 4 to 'c:\users01.dbf'; --RMAN的COPY原样拷贝
RMAN> List coppy Of Datafile 4;            --查看RMAN COPY的列表

Select * From v$recovery_file_dest         --另一个可以监控闪回恢复区的视图

--********************
不完全恢复
--********************

1.控制文件丢失的恢复

2.redo日志文件丢失的恢复

3.数据文件丢失的恢复

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15810196/viewspace-1146678/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15810196/viewspace-1146678/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值