ASM 기반에서는 RMAN으로 복구
뗄레야 뗄 수 없는 관계
***
복구 실습 전 해야 할 일
* archive log mode로 바꾸기
--> online redo log를 옮길 수 없기 때문에 archive log mode로 작업해야한다.
> alter system set log_archive_dest_1='location=/data/arc1' ;
> alter system set log_archive_dest_2='location=/data/arc2' ;
> shutdown immediate ;
> startup mount ;
> alter database archivelog ;
> alter database open ;
* rman 처음 시작시
# which rman
# cp /home/oracle/product/10g/bin/rman /usr/X11R6/bin/
cp: overwrite `/usr/X11R6/bin/rman'? y
* 전체백업
RMAN> backup as compressed backupset
2> format '/data/backup/rman/%U_%T'
3> database ;
1. 잘못된 update후 commit으로 인한 장애 복구
파일 시스템 기반에서의 복구 방법은
백업된 Data File 임시 경로로 복사 --> 현재 쓰고 있던 Redo Log File과 Control File 임시경로로 복사
--> Parameter file 에서 Control File 위치 변경 --> MOUNT -->Data File, Redo Log File 위치 변경
--> 장애난 시점 전으로 recovery --> resetlogs로 DB OPEN
파일 시스템 기반과는 조금 다르지만 복구되는 원리는 동일
임시경로로 복구 (/data/temp)
1) 현재 장애를 저장하고 있는 리두로그를 아카이브 로그로 만들어서 저장
why? online redo log를 복사할 수 없기 때문에 아카이브 로그로 만들어서 복구에 사용한다.
> alter system switch logfile ;
여러번 일으키기
2) 현재 scn 정보를 저장하고 있는 사용중인 current control file 백업 -> 복원
> alter database backup controlfile to '/data/temp/control01.ctl' ;
(다시 돌려놓을 때 현재 쓰고있는 controlfile 필요하니까 경로 알아두기!)
> alter system set control_files='/data/temp/control01.ctl' scope=spfile ;
임시경로의 컨트롤 파일로 바꿔주기
shutdown -> mount
3) 마운트 상태에서 복구 작업
RMAN> run {
2> allocate channel ch1 device type disk ;
3> allocate channel ch2 device type disk ;
4>
5> set newname for datafile 1 to '/data/temp/system01.dbf' ;
6> set newname for datafile 2 to '/data/temp/undotbs01.dbf' ;
7> set newname for datafile 3 to '/data/temp/sysaux01.dbf' ;
8> set newname for datafile 4 to '/data/temp/users01.dbf' ;
9> set newname for datafile 5 to '/data/temp/ts_new01.dbf' ;
10> set newname for datafile 6 to '/data/temp/ts_new02.dbf' ;
11>
12> restore database ;
13>
14> switch datafile all ;
15> }
데이터파일이랑 컨트롤파일은 임시경로에 있는 파일들을 사용하지만
리두로그는 asm 기반의 현재 운영중인 파일을 사용하고 있음
나중에 resetlogs로 오픈하는데 이러면 redolog 초기화되면서 운영중인 db에 문제가 생기게 됨
가장 좋은 방법은 원래 하던데로 리두 파일을 임시 경로로 복사해
rename 하면 되지만 10g asm까지는 cp 명령어 지원이 안됨
rman도 online redo log 백업 복사 불가능
그래서 복구해야 되는 내용을 archive log로 들어가게 만든 후
4) control file을 재생성해서 redo log file 경로를 임시경로로 만든 후 복구, resetlogs로 open
> alter database backup controlfile to trace as '/data/temp/re.sql' ;
> shutdown immediate ;
$ vi /data/temp/re.sql
redolog가 없기 때문에 resetlogs case로 생성, redolog 경로만 바꿔주기
REUSE 로 그대로, 공백 조심하기 공백 있으면 안됨
>@/data/temp/re.sql
5) RMAN 으로 접속 후 시간 기반으로 복구
RMAN> run {
2> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"' ;
3> set until time='2013-02-25:10:06:36' ;
4> recover database ;
5> alter database open resetlogs ;
6> }
$ sqlplus / as sysdba
복구 되었는지 조회해보기
6) 임시경로에서 복구한 거니까 원래있던 곳으로 옮겨주기
export로 해당 테이블만
$ exp scott/tiger tables=tt100 file=tt100.dmp
controlfile 원래 쓰던걸로 바꿔주기
>alter system set control_files='+DATA/testdb/controlfile/current.256.808019505',
'+FRA/testdb/controlfile/current.256.808019511' scope=spfile ;
shutdown -> open
테이블 조회해보면 잘못된 update가 나옴 당근이지
이 테이블을 drop 또는 truncate 해주고
> drop table scott.tt100 ;
import로 해당 테이블 부어주기
$ imp scott/tiger file=tt100.dmp ignore=y
조회하면 살아나있음! 얏호
[실습]
2. 잘못된 drop table 장애 복구
drop table 장애 복구도 update 장애와 방법은 똑같음 --> 시간 기반으로 복구
> alter system switch logfile ;
여러번 일으키기
>alter database backup controlfile to '/data/temp2/control01.ctl' ;
(다시 돌려놓을 때 현재 쓰고있는 controlfile 필요하니까 경로 알아두기!)
> alter system set control_files='/data/temp2/control01.ctl' scope=spfile ;
임시경로의 컨트롤 파일로 바꿔주기
shutdown -> mount
마운트 상태에서 복구 작업
control file 위치 한번더 확인해보기 임시경로에 있는 걸로
RMAN에서 restore 작업
RMAN> run {
2> allocate channel ch1 device type disk;
3> allocate channel ch2 device type disk;
4>
5> set newname for datafile 1 to '/data/temp2/system01.dbf' ;
6> set newname for datafile 2 to '/data/temp2/undotbs01.dbf' ;
7> set newname for datafile 3 to '/data/temp2/sysaux01.dbf' ;
8> set newname for datafile 4 to '/data/temp2/users01.dbf' ;
9> set newname for datafile 5 to '/data/temp2/ts_new01.dbf' ;
10> set newname for datafile 6 to '/data/temp2/ts_new02.dbf' ;
11>
12> restore database ;
13> switch datafile all ;
14> }
컨트롤 파일 재생성 resetlogs로
> alter database backup controlfile to trace as '/data/temp2/re.sql' ;
> shutdown immediate ;
$ vi /data/temp2/re.sql
redolog가 없기 때문에 resetlogs case로 생성, redolog 경로만 바꿔주기
REUSE 로 그대로, 공백 조심하기 공백 있으면 안됨
>@/data/temp/re.sql
RMAN에서 시간 이용해서 복구
RMAN> run {
2> sql 'alter session set nls_date_format="YYYY-MM-DD:HH24:MI:SS"' ;
3> set until time='2013-02-25:12:22:39' ;
4> recover database ;
5> alter database open resetlogs ;
6> }
복구 됬는지 조회해보고
export로 해당 테이블 받아놓기
$ exp scott/tiger tables=tt200 file=tt200.dmp
controlfile 원래대로 돌리고
>alter system set control_files='+DATA/testdb/controlfile/current.256.808019505',
'+FRA/testdb/controlfile/current.256.808019511' scope=spfile ;
import로 테이블부어주고
>! imp scott/tiger file=tt200.dmp ignore=y
복구 되었는지 조회
※ 필요없는 데이터파일 오프라인 시키고 작업해봤음
대략적인 순서는 똑같음
RMAN> run {
2> shutdown immediate ;
3> startup mount ;
4>
5> allocate channel ch1 type disk ;
6> allocate channel ch2 type disk ;
7>
8> set newname for datafile 1 to '/data/temp4/system01.dbf' ;
9> set newname for datafile 2 to '/data/temp4/undotbs01.dbf' ;
10> set newname for datafile 5 to '/data/temp4/ts_new01.dbf' ;
11> set newname for datafile 6 to '/data/temp4/ts_new02.dbf' ;
12> sql "alter database datafile ''+DATA/testdb/datafile/sysaux.262.808019599'' offline drop" ;
13> sql "alter database datafile ''+DATA/testdb/datafile/users.264.808019635'' offline drop" ;
14>
15> restore database skip tablespace 'sysaux','users' ;
16> switch datafile all ;
17> }
Redo Log 경로 변경을 위해서 현재 상태의 Control file 재생성 할 때
필요없는 sysaux와 users tablespace는 offline drop 한 상태이므로
스크립트에서 datafile 목록에서 지워준다.
그다음 똑같이 복구 시간 사용해서 복구
다시 원래 경로로 다 바꾸고 db open 하려고 하면 offline drop한 tablespace들 때문에 안됨
recover tablespace (recover datafile # 해도 됨)
백업이랑 아카이브 로그 있으니까 복구 가능.
복구 해주고 import로 부어주면 된다.
이 방법이 맞는지 확신은 없음..
항상 후처리를 어떻게 해야하는지 고민이 많음
[실습]
'오라클 백업/복구' 카테고리의 다른 글
RAC Backup과 OCR file 관리 (0) | 2013.03.05 |
---|---|
ASM 관리 (0) | 2013.02.24 |
ASM - Automatic Storage Management (0) | 2013.02.23 |
RMAN 백업으로 다른 서버에서의 DB 응급 복구 (0) | 2013.02.21 |
RMAN - Block Corruption Recovery + 11g New Features (0) | 2013.02.20 |