프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)

 

DB 환경 : Oracle Database 11.2.0.4

 

방법 : 오라클 11g R2 hot 백업 후 until scn 을 이용한 복구 방법

hot 백업을 이용해 full 백업 후 데이터 생성 삭제 후 원하는 scn으로 이동하는 시나리오

 

 

hot 백업

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SQL> alter database begin backup;
 
Database altered.
 
$ cd /shcsw/oracle/app/oracle/oradata/ORCL11/
$ mkdir -p ../hot
$ cp -av ./* ../hot/
`./afiedt.buf' -> `../hot/afiedt.buf'
`./control01.ctl' -> `../hot/control01.ctl'
`./control02.ctl' -> `../hot/control02.ctl'
`./redo01.log' -> `../hot/redo01.log'
`./redo02.log' -> `../hot/redo02.log'
`./redo03.log' -> `../hot/redo03.log'
`./sysaux01.dbf' -> `../hot/sysaux01.dbf'
`./system01.dbf' -> `../hot/system01.dbf'
`./temp01.dbf' -> `../hot/temp01.dbf'
`./temp02.dbf' -> `../hot/temp02.dbf'
`./undotbs01.dbf' -> `../hot/undotbs01.dbf'
`./users01.dbf' -> `../hot/users01.dbf'
 
SQL> alter database end backup;
 
Database altered.

 

 

테이블 생성 및 count, scn 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQL> create table reco as select * from dba_objects;
 
Table created.
 
SQL> select count(*from reco;
 
  COUNT(*)
----------
     13632
 
SQL> select current_scn from v$database;
 
CURRENT_SCN
-----------
   12234813

 

 

데이터 delete 및 count, scn 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> delete reco where rownum <= 10000;
 
10000 rows deleted.
 
SQL> commit;
 
Commit complete.
 
SQL> select count(*from reco;
 
  COUNT(*)
----------
      3632
 
SQL> select current_scn from v$database;
 
CURRENT_SCN
-----------
   12234830

 

 

데이터 insert 및 count, scn 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> insert into reco select * from dba_objects;
 
13632 rows created.
 
SQL> commit;
 
Commit complete.
 
SQL> select count(*from reco;
 
  COUNT(*)
----------
     17264
 
SQL> select current_scn from v$database;
 
CURRENT_SCN
-----------
   12234839

 

 

db 강제종료

1
2
SQL> shutdown abort
ORACLE instance shut down.

 

 

db를 데이터 delete 이후 시점으로 복구하고자함

 

 

hot 백업본 restore

1
2
3
4
5
6
7
8
$ cd /shcsw/oracle/app/oracle/oradata/hot/
$ cp -av ./*.dbf ../ORCL11/
`./sysaux01.dbf' -> `../ORCL11/sysaux01.dbf'
`./system01.dbf' -> `../ORCL11/system01.dbf'
`./temp01.dbf' -> `../ORCL11/temp01.dbf'
`./temp02.dbf' -> `../ORCL11/temp02.dbf'
`./undotbs01.dbf' -> `../ORCL11/undotbs01.dbf'
`./users01.dbf' -> `../ORCL11/users01.dbf'

 

 

mount 기동

1
2
3
4
5
6
7
8
$ cd /shcsw/oracle/app/oracle/oradata/hot/
$ cp -av ./*.dbf ../ORCL11/
`./sysaux01.dbf' -> `../ORCL11/sysaux01.dbf'
`./system01.dbf' -> `../ORCL11/system01.dbf'
`./temp01.dbf' -> `../ORCL11/temp01.dbf'
`./temp02.dbf' -> `../ORCL11/temp02.dbf'
`./undotbs01.dbf' -> `../ORCL11/undotbs01.dbf'
`./users01.dbf' -> `../ORCL11/users01.dbf'

 

 

recover database until scn 실행(delete 이후 시점 scn 12234830)

1
2
3
4
5
6
7
8
9
10
11
RMAN> recover database until scn 12234830;
 
Starting recover at 23-APR-21
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
 
starting media recovery
media recovery complete, elapsed time: 00:00:01
 
Finished recover at 23-APR-21

 

 

sqlplus 에서 alter database open resetlogs 로 기동

1
2
3
SQL> alter database open resetlogs;
 
Database altered.

 

 

데이터 확인

1
2
3
4
5
SQL> select count(*from reco;
 
  COUNT(*)
----------
      3632

정상적으로 delete 후 시점으로 와짐

 

 

참조 : positivemh.tistory.com/720