案例环境:
操作系统:RedHat EL5
Oracle: Oracle 11gR2
当在做Media Recover的不完全恢复时,通过resetlogs打开库,则Incarnation(数据库对应物)表示这个数据库的特定的逻辑生存期。当作为DBA可能面临这样的还原:需要使用上次执行resetlogs命令打开数据库前生成的一个备份来进行还原数据库,或者可能需要还原到执行上一个resetlogs命令之前的时间点。
案例1:(不完全恢复1)
1、table被误删除,进行不完全恢复
17:12:11 SYS@ prod>select current_scn from v$database;
CURRENT_SCN
-----------
2123790
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
17
:
12
:
24
SYS@ prod>conn scott/tiger
Connected.
17
:
12
:
43
SCOTT@ prod>select count(*)
from
emp1;
COUNT(*)
----------
28
Elapsed:
00
:
00
:
00.05
17
:
12
:
53
SCOTT@ prod>
delete
from
emp1;
28
rows deleted.
Elapsed:
00
:
00
:
00.08
17
:
13
:
12
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.04
17
:
13
:
17
SCOTT@ prod>
insert
into
emp1 select *
from
emp
where
empno=
7788
;
1
row created.
Elapsed:
00
:
00
:
00.04
17
:
13
:
28
SCOTT@ prod>update emp set empno=
9999
where
empno=
7788
;
1
row updated.
Elapsed:
00
:
00
:
00.03
17
:
13
:
43
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.04
17
:
13
:
45
SCOTT@ prod>select *
from
emp1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7788
SCOTT ANALYST
7566
19
-APR
-87
3000
20
Elapsed:
00
:
00
:
00.02
|
2、执行不完全恢复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
RMAN> run {
2
> set until scn
2123790
;
3
> shutdown immediate;
4
> startup mount;
5
> restore database;
6
> recover database;
7
> alter database open resetlogs;
8
> sql
'alter system switch logfile'
;
9
> }
executing command: SET until clause
using target database control file instead of recovery catalog
database closed
database dismounted
Oracle instance shut down
connected to target database (
not
started)
Oracle instance started
database mounted
Total System Global Area
835104768
bytes
Fixed Size
2217952
bytes
Variable Size
775948320
bytes
Database Buffers
54525952
bytes
Redo Buffers
2412544
bytes
Starting restore
at
15
-JUL
-14
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=
18
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
00001
to /u01/app/oracle/oradata/prod/system01.dbf
channel ORA_DISK_1: restoring datafile
00002
to /u01/app/oracle/oradata/prod/sysaux01.dbf
channel ORA_DISK_1: restoring datafile
00003
to /u01/app/oracle/oradata/prod/undotbs1.dbf
channel ORA_DISK_1: restoring datafile
00004
to /u01/app/oracle/oradata/prod/users01.dbf
channel ORA_DISK_1: restoring datafile
00005
to /u01/app/oracle/oradata/prod/example01.dbf
channel ORA_DISK_1: restoring datafile
00006
to /u01/app/oracle/oradata/prod/tbs1.dbf
channel ORA_DISK_1: restoring datafile
00007
to /u01/app/oracle/oradata/prod/undotbs2.dbf
channel ORA_DISK_1: restoring datafile
00008
to /u01/app/oracle/oradata/prod/perftbs01.dbf
channel ORA_DISK_1: reading
from
backup piece /u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1 tag=TAG20140703T171545
channel ORA_DISK_1: restored backup piece
1
channel ORA_DISK_1: restore complete, elapsed time:
00
:
01
:
16
Finished restore
at
15
-JUL
-14
Starting recover
at
15
-JUL
-14
using channel ORA_DISK_1
starting media recovery
archived log
for
thread
1
with
sequence
17
is already
on
disk
as
file /dsk4/arch1/arch_1_17_851265252.log
archived log
for
thread
1
with
sequence
18
is already
on
disk
as
file /dsk4/arch1/arch_1_18_851265252.log
archived log
for
thread
1
with
sequence
19
is already
on
disk
as
file /dsk4/arch1/arch_1_19_851265252.log
archived log file name=/dsk4/arch1/arch_1_17_851265252.log thread=
1
sequence=
17
media recovery complete, elapsed time:
00
:
00
:
09
Finished recover
at
15
-JUL
-14
database opened
|
3、验证
1
2
3
4
5
6
7
8
9
10
11
12
|
[oracle@rh6 ~]$ sqlplus
'/as sysdba'
SQL*Plus: Release
11.2.
0.1.
0
Production
on
Tue Jul
15
17
:
26
:
10
2014
Copyright (c)
1982
,
2009
, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release
11.2.
0.1.
0
- 64bit Production
With the Partitioning, OLAP, Data Mining
and
Real Application Testing options
17
:
26
:
10
SYS@ prod>select count(*)
from
scott.emp1;
COUNT(*)
----------
28
Elapsed:
00
:
00
:
00.03
17
:
27
:
09
SYS@ prod>
|
数据被恢复!
5、查看Incarnation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
RMAN> list incarnation;
using target database control file instead of recovery catalog
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
CURRENT
2123791
15
-JUL
-14
RMAN>
RMAN> list backup of database;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
17
Full
1.
13G DISK
00
:
01
:
21
03
-JUL
-14
BP Key:
17
Status: AVAILABLE Compressed: NO Tag: TAG20140703T171545
Piece Name: /u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1
List of Datafiles
in
backup set
17
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/system01.dbf
2
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/sysaux01.dbf
3
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/undotbs1.dbf
4
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/users01.dbf
5
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/example01.dbf
6
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/tbs1.dbf
7
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/undotbs2.dbf
8
Full
2066885
03
-JUL
-14
/u01/app/oracle/oradata/prod/perftbs01.dbf
|
案例2:(不完全恢复2)
1、table被误删除,通过不完全恢复进行恢复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
17
:
42
:
24
SYS@ prod>conn scott/tiger
Connected.
17
:
42
:
28
SCOTT@ prod>
insert
into
emp1 select *
from
emp
where
rownum <
4
;
3
rows created.
Elapsed:
00
:
00
:
00.05
17
:
42
:
42
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.01
17
:
42
:
44
SCOTT@ prod>
insert
into
emp1 select *
from
emp
where
rownum <
5
;
4
rows created.
Elapsed:
00
:
00
:
00.02
17
:
42
:
52
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.05
17
:
42
:
55
SCOTT@ prod>conn /
as
sysdba
Connected.
|
17:43:01 SYS@ prod>select current_scn from v$database;
CURRENT_SCN
-----------
2124840
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
17
:
43
:
13
SYS@ prod>alter system switch logfile;
System altered.
Elapsed:
00
:
00
:
00.10
17
:
43
:
38
SYS@ prod>conn scott/tiger
Connected.
17
:
43
:
42
SCOTT@ prod>select count(*)
from
scott.emp1;
COUNT(*)
----------
35
Elapsed:
00
:
00
:
00.02
17
:
43
:
48
SCOTT@ prod>
delete
from
emp1;
35
rows deleted.
Elapsed:
00
:
00
:
00.04
17
:
43
:
56
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.01
17
:
43
:
58
SCOTT@ prod>
insert
into
emp1 select *
from
emp
where
empno=
7788
;
1
row created.
Elapsed:
00
:
00
:
00.01
17
:
44
:
09
SCOTT@ prod>update emp1 set empno=
8888
;
1
row updated.
Elapsed:
00
:
00
:
00.01
17
:
44
:
16
SCOTT@ prod>commit;
Commit complete.
Elapsed:
00
:
00
:
00.02
17
:
44
:
17
SCOTT@ prod>select *
from
emp1;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
8888
SCOTT ANALYST
7566
19
-APR
-87
3000
20
Elapsed:
00
:
00
:
00.03
|
2、通过rman做不完全恢复
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
RMAN> run {
set until scn
2124840
;
2
> shutdown immediate;
3
>
4
> startup mount;
5
> restore database;
6
> recover database;
7
> alter database open resetlogs;
8
> sql
'alter system switch logfile'
;
9
> }
executing command: SET until clause
database closed
database dismounted
Oracle instance shut down
connected to target database (
not
started)
Oracle instance started
database mounted
Total System Global Area
835104768
bytes
Fixed Size
2217952
bytes
Variable Size
775948320
bytes
Database Buffers
54525952
bytes
Redo Buffers
2412544
bytes
Starting restore
at
15
-JUL
-14
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=
18
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
00001
to /u01/app/oracle/oradata/prod/system01.dbf
channel ORA_DISK_1: restoring datafile
00002
to /u01/app/oracle/oradata/prod/sysaux01.dbf
channel ORA_DISK_1: restoring datafile
00003
to /u01/app/oracle/oradata/prod/undotbs1.dbf
channel ORA_DISK_1: restoring datafile
00004
to /u01/app/oracle/oradata/prod/users01.dbf
channel ORA_DISK_1: restoring datafile
00005
to /u01/app/oracle/oradata/prod/example01.dbf
channel ORA_DISK_1: restoring datafile
00006
to /u01/app/oracle/oradata/prod/tbs1.dbf
channel ORA_DISK_1: restoring datafile
00007
to /u01/app/oracle/oradata/prod/undotbs2.dbf
channel ORA_DISK_1: restoring datafile
00008
to /u01/app/oracle/oradata/prod/perftbs01.dbf
channel ORA_DISK_1: reading
from
backup piece /u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1 tag=TAG20140703T171545
channel ORA_DISK_1: restored backup piece
1
channel ORA_DISK_1: restore complete, elapsed time:
00
:
01
:
25
Finished restore
at
15
-JUL
-14
Starting recover
at
15
-JUL
-14
using channel ORA_DISK_1
starting media recovery
archived log
for
thread
1
with
sequence
17
is already
on
disk
as
file /dsk4/arch1/arch_1_17_851265252.log
archived log
for
thread
1
with
sequence
18
is already
on
disk
as
file /dsk4/arch1/arch_1_18_851265252.log
archived log
for
thread
1
with
sequence
19
is already
on
disk
as
file /dsk4/arch1/arch_1_19_851265252.log
archived log
for
thread
1
with
sequence
20
is already
on
disk
as
file /dsk4/arch1/arch_1_20_851265252.log
archived log
for
thread
1
with
sequence
1
is already
on
disk
as
file /dsk4/arch1/arch_1_1_853003284.log
archived log file name=/dsk4/arch1/arch_1_17_851265252.log thread=
1
sequence=
17
archived log file name=/dsk4/arch1/arch_1_18_851265252.log thread=
1
sequence=
18
archived log file name=/dsk4/arch1/arch_1_19_851265252.log thread=
1
sequence=
19
archived log file name=/dsk4/arch1/arch_1_20_851265252.log thread=
1
sequence=
20
media recovery complete, elapsed time:
00
:
00
:
10
Finished recover
at
15
-JUL
-14
database opened
|
3、验证
1
2
3
4
5
6
7
8
9
10
11
|
[oracle@rh6 ~]$ sqlplus
'/as sysdba'
SQL*Plus: Release
11.2.
0.1.
0
Production
on
Tue Jul
15
17
:
48
:
52
2014
Copyright (c)
1982
,
2009
, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release
11.2.
0.1.
0
- 64bit Production
With the Partitioning, OLAP, Data Mining
and
Real Application Testing options
17
:
48
:
52
SYS@ prod>select count(*)
from
scott.emp1;
COUNT(*)
----------
35
Elapsed:
00
:
00
:
00.03
|
数据恢复成功!
4、查看Incarnation:
1
2
3
4
5
6
7
8
9
10
11
|
RMAN> list incarnation;
using target database control file instead of recovery catalog
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
PARENT
2123791
15
-JUL
-14
6
6
PROD
239333010
CURRENT
2124841
15
-JUL
-14
|
注意:2124841 为当前Incarnation !
案例3:(不完全恢复3)
1、将数据库再次恢复到当前Incarnation前
RMAN> run {
set until scn 2122840;
3> shutdown immediate;
4> startup mount;
5> restore database;
6> recover database;
7> alter database open resetlogs;
8> }
executing command: SET until clause
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of shutdown command at 07/15/2014 17:51:17
RMAN-20208: UNTIL CHANGE is before RESETLOGS change
---恢复出错,不能再恢复到当前Incarnation前 !
2、查看Incarnation
1
2
3
4
5
6
7
8
9
10
|
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
PARENT
2123791
15
-JUL
-14
6
6
PROD
239333010
CURRENT
2124841
15
-JUL
-14
|
3、重新执行恢复
1、关闭数据库
1
2
3
4
|
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down
|
2、启动数据库到nomount
1
2
3
4
5
6
7
8
9
|
RMAN> startup mount;
connected to target database (
not
started)
Oracle instance started
database mounted
Total System Global Area
835104768
bytes
Fixed Size
2217952
bytes
Variable Size
775948320
bytes
Database Buffers
54525952
bytes
Redo Buffers
2412544
bytes
|
3、恢复Incarnation到前一个
RMAN> reset database to incarnation 5;
database reset to incarnation 5
1
2
3
4
5
6
7
8
9
10
|
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
CURRENT
2123791
15
-JUL
-14
6
6
PROD
239333010
ORPHAN
2124841
15
-JUL
-14
|
4、restore数据库
RMAN> restore database until scn 2124835;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Starting restore
at
15
-JUL
-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=
21
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
00001
to /u01/app/oracle/oradata/prod/system01.dbf
channel ORA_DISK_1: restoring datafile
00002
to /u01/app/oracle/oradata/prod/sysaux01.dbf
channel ORA_DISK_1: restoring datafile
00003
to /u01/app/oracle/oradata/prod/undotbs1.dbf
channel ORA_DISK_1: restoring datafile
00004
to /u01/app/oracle/oradata/prod/users01.dbf
channel ORA_DISK_1: restoring datafile
00005
to /u01/app/oracle/oradata/prod/example01.dbf
channel ORA_DISK_1: restoring datafile
00006
to /u01/app/oracle/oradata/prod/tbs1.dbf
channel ORA_DISK_1: restoring datafile
00007
to /u01/app/oracle/oradata/prod/undotbs2.dbf
channel ORA_DISK_1: restoring datafile
00008
to /u01/app/oracle/oradata/prod/perftbs01.dbf
channel ORA_DISK_1: reading
from
backup piece /u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/
11.2.
0
/db_1/dbs/0lpcfu61_1_1 tag=TAG20140703T171545
channel ORA_DISK_1: restored backup piece
1
channel ORA_DISK_1: restore complete, elapsed time:
00
:
01
:
15
Finished restore
at
15
-JUL
-14
|
5、Recover 数据库
RMAN> recover database until scn 2124835;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Starting recover
at
15
-JUL
-14
using channel ORA_DISK_1
starting media recovery
archived log
for
thread
1
with
sequence
17
is already
on
disk
as
file /dsk4/arch1/arch_1_17_851265252.log
archived log
for
thread
1
with
sequence
18
is already
on
disk
as
file /dsk4/arch1/arch_1_18_851265252.log
archived log
for
thread
1
with
sequence
19
is already
on
disk
as
file /dsk4/arch1/arch_1_19_851265252.log
archived log
for
thread
1
with
sequence
20
is already
on
disk
as
file /dsk4/arch1/arch_1_20_851265252.log
archived log
for
thread
1
with
sequence
1
is already
on
disk
as
file /dsk4/arch1/arch_1_1_853003284.log
archived log file name=/dsk4/arch1/arch_1_17_851265252.log thread=
1
sequence=
17
archived log file name=/dsk4/arch1/arch_1_18_851265252.log thread=
1
sequence=
18
archived log file name=/dsk4/arch1/arch_1_19_851265252.log thread=
1
sequence=
19
archived log file name=/dsk4/arch1/arch_1_20_851265252.log thread=
1
sequence=
20
archived log file name=/dsk4/arch1/arch_1_1_853003284.log thread=
1
sequence=
1
media recovery complete, elapsed time:
00
:
00
:
08
Finished recover
at
15
-JUL
-14
|
6、查看Incarnation
1
2
3
4
5
6
7
8
9
10
|
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
CURRENT
2123791
15
-JUL
-14
6
6
PROD
239333010
ORPHAN
2124841
15
-JUL
-14
|
7、打开数据库(resetlogs)
RMAN> alter database open resetlogs;
database opened
1
2
3
4
5
6
7
8
9
10
11
|
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1
1
PROD
239333010
PARENT
1
15
-AUG
-09
2
2
PROD
239333010
PARENT
945184
30
-SEP
-13
3
3
PROD
239333010
PARENT
1087512
18
-MAY
-14
4
4
PROD
239333010
PARENT
1857377
26
-JUN
-14
5
5
PROD
239333010
PARENT
2123791
15
-JUL
-14
7
7
PROD
239333010
CURRENT
2124836
15
-JUL
-14
6
6
PROD
239333010
ORPHAN
2124841
15
-JUL
-14
|
8、验证
1
2
3
4
5
6
7
8
9
10
11
|
[oracle@rh6 ~]$ sqlplus
'/as sysdba'
SQL*Plus: Release
11.2.
0.1.
0
Production
on
Tue Jul
15
18
:
01
:
11
2014
Copyright (c)
1982
,
2009
, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release
11.2.
0.1.
0
- 64bit Production
With the Partitioning, OLAP, Data Mining
and
Real Application Testing options
18
:
01
:
11
SYS@ prod>select count(*)
from
scott.emp1;
COUNT(*)
----------
35
Elapsed:
00
:
00
:
00.05
|
@至此,数据恢复完成!