DB Link
: 원격지의 데이터베이스를 마치 local db인 것처럼 연결해 주는 기술
: 물리적으로 장비가 떨어져 있는 경우로 생각하고 실습해보기 - DB별로 리스너 따로 구성해보기
Ex. 리스너 하나 고장났을경우, 리스너 여러개 만들어 놓은 상황
: 살아있는 리스너에 고장난쪽 정보 추가하는 것으로 바로 조치할수 있다.
Cf. 하나의물리적 장비안에 DB 2개생성한 상황
: 리스너 하나로 여려개의 DB관리 하려면 listener.ora 파일에 DB이름 하나만 더 추가해주면 바로 적용된다.
※ 주의
양쪽에 서로 지정해준 SID, IP, 포트번호가 같아야 연결이 된다.
운영DB 복구 DB
Client Server
tnsnames.ora listener.ora
!! tnsnames.ora 파일이 없다면?
OS 그래픽모드에서 새터널 열어서 $netca 입력후 설정
1. 로컬 네트 서비스 이름 구성 선택 - 다음
2. 추가 선택 - 다음
3. 접속할 db이름 입력 - 다음
4. TCP(기본 값) 선택 - 다음
5. 접속할 IP 입력 - 다음
6. 테스트 수행 아니오 선택 - 다음
7. 네트 서비스 이름 확인(3번과 같음) - 다음
8. 다른 네트 서비스 구성 아니오 선택 - 다음
9. 네트 서비스 이름 구성 완료 - 다음
10. 완료 선택
참고 사이트 Link
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습 시작
장애 발생 --------------------------->>>>>>>>>>>>>>>>>>>>
1. 현재 상태 확인 후 전체 begin backup 수행
SYS> archive log list;
SYS> create tablespace clone_test
2 datafile '/home/oracle/oradata/testdb/clone_test01.dbf' size 5M
3 autoextend on;
SYS> @dd
clone_test 테이블스페이스 생성확인
- 현재 데이터 파일 begin backup 받기
alter tablespace clone_test begin backup;
!cp -av /home/oracle/oradata/testdb/clone_test01.dbf /data/backup/open/
alter tablespace clone_test end backup;
alter tablespace system begin backup;
!cp -av /home/oracle/oradata/testdb/system01.dbf /data/backup/open/
alter tablespace system end backup;
alter tablespace sysaux begin backup;
!cp -av /home/oracle/oradata/testdb/sysaux01.dbf /data/backup/open/
alter tablespace sysaux end backup;
alter tablespace undotbs1 begin backup;
!cp -av /home/oracle/oradata/testdb/undotbs01.dbf /data/backup/open/
alter tablespace undotbs1 end backup;
alter tablespace example begin backup;
!cp -av /home/oracle/oradata/testdb/example01.dbf /data/backup/open/
alter tablespace example end backup;
alter tablespace users begin backup;
!cp -av /home/oracle/oradata/testdb/users01.dbf /data/backup/open/
alter tablespace users end backup;
2. 테이블 생성하고 데이터 입력
SYS> create table scott.ctest01
2 (no number, name varchar2(10), address varchar2(20)) tablespace clone_test;
SYS> begin
2 for i in 1..100000 loop
3 insert into scott. ctest01 values (i,dbms_random.string('A',10),dbms_random.string('A',20));
4 emd loop;
5 commit;
6 end;
7 /
SYS> select count(*) from scott.ctest01;
100000건 있음
SYS> select to_char(sysdate, 'YYYY-MM-DD:HH24:MI:SS') from dual;
복구 시간 확인
3. Drop table ctest01 장애 발생
SYS> drop table scott.ctest01 purge;
SYS> select count(*) from scott.ctest01;
에러
SYS> alter system switch logfile;
SYS> /
SYS> /
SYS> /
SYS> /
SYS> /
SYS> /
로그스위치 충분히 발생시켜서 복구할 내요이 아카이브로그에 저장되도록 하기.
복구 과정 --------------------------->>>>>>>>>>>>>>>>>>>>
- clone db 의 SID = clone1
- 복구경로 : /data/temp/clone1
1. clone db용 파라미터파일 생성
$ cd /home/oracle/product/10g/dbs/
$ cp inittestdb.ora initclone1.ora
db_name=clone1
컨트롤파일경로 변경
2. 데이터파일 복구 후 clone db용 컨트롤파일 생성
SYS> alter database backup controlfile to trace as '/home/oracle/ctl_clone.sql';
$ cp /data/backup/open/*.dbf /data/temp/clone1/
$ vi /home/oracle/ctl_clone.sql
SET 변경 CLONE1 변경
파일 경로 변경
$ export ORACLE=SID=clone1
$ sqlplus / as sysdba;
SYS> @/home/oracle/ctl_clone.sql
3. 복구하기
SYS> recover database until time '시간' using backup controlfile;
auto
SYS> alter database open resetlogs;
SYS> select count(*) rom scott.ctest01;
clone1 db에서 복구 완료 됨.
복구데이터 이동 과정 --------------------------->>>>>>>>>>>>>>>>>>>>
복구용서버쪽의 리스너를 하나더 생성해서(lisener.ora 파일편집) 운영서버의 tnsnames.ora와 맞춰주기
1. 운영서버(testdb)=Client 에서 복구용서버(clone1)=Server 로 DB link 생성하기
- 운영서버의 /home/oracle/product/10g/network/admin/tnsnames.ora 수정하기
clonedb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = server122)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = clone1)
)
)
기존 내용 밑에 위 내용 추가
※ 참고 : HOST부분에 서버 이름을 써 주려면 /etc/hosts 파일에 해당 서버가 미리 등록 되어 있어야 한다.
등록되어 있지 않으면 IP주소를 써주면 된다.
- 복구용서버(clone1)=Server의 /home/oracle/product/10g/network/admin/listener.ora 수정하기
: Listener2 를 생성하고 서비스 port 를 1522 번으로 변경
: 운영서버 = 복구용서버 = 하나의머신 = 같은서버 를 의미
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = clone1)
(ORACLE_HOME = /home/oracle/product/10g)
)
)
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = server122)(PORT = 1522))
)
)
- 운영서버(testdb)=Client에서 clone db로 연결하는 db link 생성
SQL> create database link clink ← 링크이름(clink부분)은 마음대로 지정 가능
2 connect to scott identified by tiger ← clone db 로 연결할 계정과 암호 설정
3 using 'clonedb'; ← 이름('clonedb')부분은 tnsnames.ora 파일에 있는 이름으로 사용
2. 운영서버(testdb)=Client 에서 복구용서버(clone1)=Server 의 scott.ctest01 테이블 가져오기
- 운영서버(testdb)=Client에서 복구용서버(clone1)=Server에 있는 테이블 조회해보기
SQL> select count(*) from scott.ctest01@clink;
※ 사용법 참고 : 위에 생성한 dblink이름을 테이블이름뒤에 @를 붙여 지정하면 된다.
- 운영서버(testdb)=Client에 복구용서버(clone1)=Server에 있는 테이블 CTAS로 가져와 복구하기
SQL> create table scott.ctest01
2 as select * from scott.ctest01@clink;
SQL> select count(*) from scott.ctest01
조회해보면 생성 완료 되어 있다.
3. 참고 : Clone db 로 접속 테스트
: 서버쪽 listener 가 실행되고 있어야 한다. (clone db용 listener2 실행)
① 리스너 관리 접속
$ lsnrctl
② listener2 중지시키고 테스트
LSNRCTL> stop listener2
$ tnsping clonedb ← clonedb 이름은 tnsnames.ora 파일에 있는 이름이다.
TNS-12541: TNS:no listener → 에러
③ listener2 시작시키고 테스트
LSNRCTL> start listener2
LSNRCTL> status listener2
$ tnsping clonedb
OK (0 msec) → 에러 안나고 성공
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습 끝
'Oracle > Oracle - 백업&복구' 카테고리의 다른 글
백업&복구 Extra - SQL Loader 문자셋(character set)관련 - 문자셋이 맞지않아 SQL Loader 사용에 애로사항이 꽃핀다면?? (0) | 2012.02.16 |
---|---|
백업&복구 20 - SQL Loader (2) | 2012.02.16 |
백업&복구 18 - Clone DB : DB 무정지 상태에서의 복구 (2) | 2012.02.15 |
백업&복구 17 - Datapump (2) | 2012.02.15 |
백업&복구 16 - export / import (1) | 2012.02.13 |