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) → 에러 안나고 성공
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-실습 끝


Posted by 딩구르
,