测试在丢失归档日志的情况下,跳过部分归档日志进行数据恢复。
1 构建测试数据文件。
SQL> create tablespace arct datafile '/home/oracle/bbedt/oradata/YBBEDT/arct01.dbf' size 50m;
Tablespace created.
SQL> create user arct identified by oracle default tablespace arct;
User created.
SQL> grant dba to arct
2 ;
Grant succeeded.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/bbedt/backup
Oldest online log sequence 62
Next log sequence to archive 64
Current log sequence 64
SQL>
SQL> create table t1 (id number ,name varchar2(10));
Table created.
SQL> insert into t1 values(1,'ey');
1 row created.
SQL> commit;
Commit complete.
查看数据文件编号
1 /home/oracle/bbedt/oradata/YBBEDT/system01.dbf
2 /home/oracle/bbedt/oradata/YBBEDT/sysaux01.dbf
3 /home/oracle/bbedt/oradata/YBBEDT/undotbs01.dbf
4 /home/oracle/bbedt/oradata/YBBEDT/users01.dbf
5 /home/oracle/bbedt/oradata/YBBEDT/example01.dbf
6 /home/oracle/bbedt/oradata/YBBEDT/tbs16k001.dbf
7 /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf
7 rows selected.
Rman备份数据文件
[oracle@irac01 bbedt]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 22 16:30:05 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: YBBEDT (DBID=2362208854)
RMAN> backup datafile 7;
Starting backup at 2018/03/22 16:30:17
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=154 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00007 name=/home/oracle/bbedt/oradata/YBBEDT/arct01.dbf
channel ORA_DISK_1: starting piece 1 at 2018/03/22 16:30:19
channel ORA_DISK_1: finished piece 1 at 2018/03/22 16:30:20
piece handle=/u01/app/oracle/product/11.2.0/db_1/dbs/06suee4r_1_1 tag=TAG20180322T163018 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2018/03/22 16:30:20
RMAN>
查看归档信息:
-rw-r----- 1 oracle asmadmin 39093760 Mar 20 01:00 1_60_969623729.dbf
-rw-r----- 1 oracle asmadmin 41044480 Mar 20 22:24 1_61_969623729.dbf
-rw-r----- 1 oracle asmadmin 37861376 Mar 21 11:05 1_62_969623729.dbf
-rw-r----- 1 oracle asmadmin 41761792 Mar 21 22:25 1_63_969623729.dbf
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/bbedt/backup
Oldest online log sequence 62
Next log sequence to archive 64
Current log sequence 64
切换日志:
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
SQL> /
/
System altered.
SQL> /
System altered.
SQL>
System altered.
SQL> /
System altered.
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/bbedt/backup
Oldest online log sequence 68
Next log sequence to archive 70
Current log sequence 70
SQL>
目前归档日志:
-rw-r----- 1 oracle asmadmin 41761792 Mar 21 22:25 1_63_969623729.dbf
-rw-r----- 1 oracle asmadmin 1024 Mar 22 16:32 1_65_969623729.dbf
-rw-r----- 1 oracle asmadmin 2560 Mar 22 16:32 1_66_969623729.dbf
-rw-r----- 1 oracle asmadmin 30178816 Mar 22 16:32 1_64_969623729.dbf
-rw-r----- 1 oracle asmadmin 1024 Mar 22 16:32 1_67_969623729.dbf
-rw-r----- 1 oracle asmadmin 1024 Mar 22 16:32 1_68_969623729.dbf
-rw-r----- 1 oracle asmadmin 1024 Mar 22 16:32 1_69_969623729.dbf
SEQUENCE#
----------
60
61
62
63
65
66
64
67
68
69
43 rows selected.
2 破坏,删除归档日志:
[oracle@irac01 backup]$ rm -rf 1_64_969623729.dbf
[oracle@irac01 backup]$ rm -rf 1_65_969623729.dbf
[oracle@irac01 backup]$ rm -rf 1_66_969623729.dbf
[oracle@irac01 backup]$
将数据文件离线:
SQL> alter database datafile 7 offline;
Database altered.
SQL>
[oracle@irac01 backup]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Thu Mar 22 16:44:56 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: YBBEDT (DBID=2362208854)
RMAN> restore datafile 7;
Starting restore at 2018/03/22 16:45:03
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=27 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00007 to /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/11.2.0/db_1/dbs/06suee4r_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/11.2.0/db_1/dbs/06suee4r_1_1 tag=TAG20180322T163018
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2018/03/22 16:45:08
3 模拟报错现象,Online数据文件时出现报错:
SQL>
SQL> alter database datafile 7 online;
alter database datafile 7 online
*
ERROR at line 1:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '/home/oracle/bbedt/oradata/YBBEDT/arct01.dbf'
SQL> recover datafile 7;
ORA-00279: change 23812090 generated at 03/22/2018 16:30:19 needed for thread 1
ORA-00289: suggestion : /home/oracle/bbedt/backup/1_64_969623729.dbf
ORA-00280: change 23812090 for thread 1 is in sequence #64
Specify log: {=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log '/home/oracle/bbedt/backup/1_64_969623729.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
4 模拟恢复过程,使用BBED修改数据文件头跳过丢失的归档日志进行恢复:
本次实验跳过被删除的归档日志,直接通过更改数据文件块头,使数据库从低67号数据文件开始恢复。
SQL> select to_char(sequence#,'xxxxxxxxxxxxxx'),to_char(first_change#,'xxxxxxxxxxxxxx') from v$archived_log where sequence#=67;
TO_CHAR(SEQUENC TO_CHAR(FIRST_C
--------------- ---------------
43 16b5830
SQL>
BBED> set filename '/home/oracle/bbedt/oradata/YBBEDT/arct01.dbf';
FILENAME /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf
BBED> set block 1
BLOCK# 1
BBED> p kcvfhckp
struct kcvfhckp, 36 bytes @484
struct kcvcpscn, 8 bytes @484
ub4 kscnbas @484 0x016b57fa
ub2 kscnwrp @488 0x0000
ub4 kcvcptim @492 0x39e7389b
ub2 kcvcpthr @496 0x0001
union u, 12 bytes @500
struct kcvcprba, 12 bytes @500
ub4 kcrbaseq @500 0x00000040
ub4 kcrbabno @504 0x0000e627
ub2 kcrbabof @508 0x0010
ub1 kcvcpetb[0] @512 0x02
ub1 kcvcpetb[1] @513 0x00
ub1 kcvcpetb[2] @514 0x00
ub1 kcvcpetb[3] @515 0x00
ub1 kcvcpetb[4] @516 0x00
ub1 kcvcpetb[5] @517 0x00
ub1 kcvcpetb[6] @518 0x00
ub1 kcvcpetb[7] @519 0x00
BBED> set count 32
COUNT 32
BBED> dump
File: /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf (0)
Block: 1 Offsets: 484 to 515 Dba:0x00000000
------------------------------------------------------------------------
fa576b01 00000000 9b38e739 01000000 40000000 27e60000 10006c65 02000000
<32 bytes="" per="" line="">
a)修改检查点时间,修改一号块偏移量为484的位置:
BBED> modify /x 30586b01
File: /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf (0)
Block: 1 Offsets: 484 to 515 Dba:0x00000000
------------------------------------------------------------------------
30586b01 00000000 9b38e739 01000000 40000000 27e60000 10006c65 02000000
<32 bytes="" per="" line="">
BBED> sum apply
Check value for File 0, Block 1:
current = 0x8c20, required = 0x8c20
BBED>
BBED> set offset 500
OFFSET 500
BBED> dump
File: /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf (0)
Block: 1 Offsets: 500 to 531 Dba:0x00000000
------------------------------------------------------------------------
40000000 27e60000 10006c65 02000000 00000000 00000000 00000000 00000000
<32 bytes="" per="" line="">
b)修改序列号
BBED> modify /x 43
File: /home/oracle/bbedt/oradata/YBBEDT/arct01.dbf (0)
Block: 1 Offsets: 500 to 531 Dba:0x00000000
------------------------------------------------------------------------
43000000 27e60000 10006c65 02000000 00000000 00000000 00000000 00000000
<32 bytes="" per="" line="">
BBED> sum apply
Check value for File 0, Block 1:
current = 0x8c23, required = 0x8c23
完成恢复
SQL> recover datafile 7
ORA-00279: change 23812144 generated at 03/22/2018 16:30:19 needed for thread 1
ORA-00289: suggestion : /home/oracle/bbedt/backup/1_67_969623729.dbf
ORA-00280: change 23812144 for thread 1 is in sequence #67
Specify log: {=suggested | filename | AUTO | CANCEL}
Log applied.
Media recovery complete.
SQL> alter database datafile 7 online;
Database altered.