--***************************
模拟控制文件损坏的不完全恢复
--***************************
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/