Clone DB
한 서버에 인스턴스를 여러개 띄우는 것
많은 목적으로 사용하지만 여기서는 복구용 목적으로 사용
Clone DB 생성개념
Clone DB를 사용한 복구 방법
어떤 장애더라도 대략적인 내용은 다 똑같다.
1. Clone DB용 파라미터 파일 생성 (수정 가능한 pfile로)
2. pfile 수정
3. 백업되어있는 데이터파일 임시경로로 restore
4. 컨트롤 파일 재생성을 위한 스크립트 생성
5. 스크립트 수정
6. Clone DB로 접속한 후 스크립트로 DB MOUNT
7. 장애난 시간 전까지로 해서 장애 복구
8. resetlogs로 DB OPEN
9. 복구 확인 후 export/import나 DB LINK를 통해 운영 DB로 복구 데이터 보내기
10. 복구 확인
※ 마무리 작업 ※
복구 끝나면 Clone DB shutdown 하고 관련 파일들 삭제해주기
파라미터 파일 삭제는 (clone DB SID=testdb2라고 했을 때)
$ORACLE_HOME/dbs/ 에서 inittestdb2.ora, lkTESTDB2 hc_testdb2.dat 이렇게 3개 지워주면 됨
데이터 복구 후 Exp/Imp로 옮기기
[실습1- drop table 복구]
백업파일경로: /data/backup/close
운영서버SID: testdb
복구서버SID: testdb2
복구서버 파일경로: /data/temp/clone
> !
$ cd /app/oracle/product/11g/dbs
$ cp inittestdb.ora inittestdb2.ora
$ vi inittestdb2.ora
control file 경로 수정
db_name 수정
memory_target 주석처리
$ cp /data/backup/close/*.dbf /data/temp/clone
$ exit
> alter database backup controlfile to trace as '/home/oracle/rectl.sql' ;
> !
$ vi /home/oracle/rectl.sql
수정
$ export ORACLE_SID=testdb2
$ sqlplus / as sysdba
> @/home/oracle/rectl.sql
Log Miner로 복구시간 찾아내기
$ export ORACLE_SID=testdb
$ sqlplus / as sysdba
> alter database add supplemental log data ;
> exec dbms_logmnr_d.build('dict099.dat','/data/logmnr') ;
> exec dbms_logmnr.add_logfile('/data2/vol3/redo01_a.log',1) ;
> @arc_logmnr (아카이브로그 추가하는 스크립트)
> exec dbms_logmnr.start_logmnr(dictfilename=>'/data/logmnr/dict099.dat') ;
> select timestamp, username, operation, sql_red from v$logmnr_contents
where seg_name='GOGAK9' and seg_owner='SCOTT' ;
$ export ORACLE_SID=testdb2
$ sqlplus / as sysdba
> recover database until time 'time' using backup controlfile ;
> alter database open resetlogs ;
>!
$ export ORACLE_SID=testdb2
$ exp scott/tiger file=gogak9.dmp tables=gogak9
$ export ORACLE_SID=testdb
$ imp scott/tiger file=gogak9.dmp ignore=y
[작업내용]
[실습2- drop tablespace 복구]
백업파일경로: /data/backup/open
운영서버SID: testdb
복구서버SID: testdb2
복구서버 파일경로: /data/temp/clone
> !
$ cd /app/oracle/product/11g/dbs
$ cp inittestdb.ora inittestdb2.ora
$ vi inittestdb2.ora
control file 경로 수정
db_name 수정
memory_target 주석처리
$ cp /data/backup/open/*.dbf /data/temp/clone
$ exit
> alter database backup controlfile to trace as '/home/oracle/recont.sql' ;
> !
$ vi /home/oracle/recont.sql
수정
$ export ORACLE_SID=testdb2
$ sqlplus / as sysdba
> @recont
> recover database until time 'time' using backup controlfile ;
> alter database create datafile '/app/oracle/product/11g/dbs/UNNAMED00006' as '/data/temp/clone/test01.dbf' ;
> recover database until time 'time' using backup controlfile ;
ORA-01195: online backup of file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data/temp/clone/system01.dbf'
> shutdown immediate ;
$ vi /app/oracle/product/11g/dbs/inittestdb2.ora
_allow_resetlogs_corruption=true
$ exit
> startup mount ;
> alter database open resetlogs ;
>!
$ export ORACLE_SID=testdb2
$ exp scott/tiger file=gogak123.dmp tables=gogak123
$ export ORACLE_SID=testdb
$ imp scott/tiger file=gogak123.dmp ignore=y
clone DB에서 복구 성공한 후에 DB LINK 생성 과정
1. tnsnames.ora와 listener.ora 파일 수정
tnsnames.ora 수정
기존 내용에서 아래 내용 추가하면 됨
cloneDB이름(임의로정해도상관없음) =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = clonedb로접속할ip주소 및 서버이름)(PORT = 포트번호))
)
(CONNECT_DATA =
(SERVICE_NAME = clonedb의SID)
)
)
listener.ora 수정
기존 내용에서 아래 내용 추가하면 됨
LISTENER# =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = clonedb로접속할ip주소 및 서버이름)(PORT = 포트번호))
)
)
SID_LIST_LISTENER# =
(SID_LIST=
(SID_DESC =
(SID_NAME = clonedb의SID)
(ORACLE_HOME = /app/oracle/product/11g)
)
)
주의!
(HOST = clonedb로접속할ip주소 및 서버이름) 여기서 서버이름으로 쓸경우 /etc/hosts에 입력이 되어있어야만 쓸 수있음
tnsnames.ora 와 listener.ora에 쓰는 PORT=포트번호는 서로 같아야 접속 가능함!
2. 운영 서버에서 clone DB로 연결하는 DB LINK 생성
운영 서버에서!!!! 만들어야 한다!! 잊지 말기!
> CREATE DATABASE LINK 링크이름
CONNECT TO 유저이름 IDENTIFIED BY 암호
USING 'tnsname.ora에서쓴cloneDB이름' ;
3. clone DB로 접속 테스트
$ lsnrctl --> 리스너 관리 명령어
> status listerner# --> 해당 리스너 상태 조회
> stop listerner# --> 해당 리스터 중지
> start listerner# --> 해당 리스터 시작
Service Summary 내용에
Service "cloneDB의SID" has # instance(s).
라고 나와야 정상적으로 접속 된 것임. unknown으로 나오면 다시 해야함
$ tnsping 'tnsname.ora에서쓴cloneDB이름'
에러가 나지 않는다면 접속이 잘 된것.
4. clone DB로 조회 및 데이터 복사해오기
clone DB에 있는 테이블 조회
> SELECT * FROM 테이블명@DBLINK이름 ;
CTAS로 clone DB에서 복구한 데이터를 운영DB로 복사
> CREATE TABLE 테이블명 AS SELECT * FROM 테이블명@DBLINK이름 ;
'오라클 백업/복구' 카테고리의 다른 글
백업 파일 / 아카이브 로그에 문제가 있을 때 복구 (0) | 2013.02.13 |
---|---|
SQL Loader (0) | 2013.02.11 |
Datapump (1) | 2013.02.06 |
IMPORT (0) | 2013.02.05 |
EXPORT (0) | 2013.02.04 |