이번에는 DB Link로 데이터베이스에 직접 붙어서, 마이그레이션 하는 방법을 알아보자

 

그 전에, (1) data pump를 통한 데이터 이관과의 차이를 알아보려한다.

2021.07.06 - [DB/Oracle] - 마이그레이션 (1) expdp/impdp

 

1) F/S  VS  Network

 

먼저, data pump 방식은 File System을 통해 이관하기떄문에

 

데이터 크기에 준하는 F/S 용량이 필요하다. ( .dmp 파일만큼 크기 필요 )

 

export 하는 시스템은, 원본데이터 + .dmp 만큼의 F/S 크기가 필요한 셈이다.

 

이는 import 쪽에도 해당되는 얘기로, 데이터의 크기가 크다면 임시 스토리지 할당등의 추가적인 작업이 필요하며,

 

큰 용량의 .dmp 파일을 import 하는쪽으로 옮기기도 쉽지가 않다.

 

 

반면에 DB Link를 통한 마이그레이션은 네트워크를 통하기 떄문에

 

연결만 가능하다면, export 하는 시스템에 추가로 필요한 사항이 없다.

 

또한 import 하는쪽도 데이터 크기의 용량만큼만 필요하다.

 

2) 속도

 

DB Link를 사용하는 쪽이 훨씬 빠르다.

 

로그를 남기지 않고, 직접적으로 데이트를 쓰기 때문이다.

 

Data pump와 DB Link 속도 비교를 한 블로그가 있는데

 

data pump로 90분이 걸리던 것을, DB Link로는 20분만에 끝낼만큼 성능차이가 심하다

 

데이터 환경
서비스 DBMS 버전 : Oracle 9i
전체 데이터 파일 사이즈 : 120G (인덱스 포함)
타겟 테이블 데이터 사이즈 : 26G (인덱스 제외)
네트워크 속도 : 100Mbps (max: 12.5MB/s)

 

https://gywn.net/2012/04/migration_with_dblink_exp_imp/

 

DB Link와 Export/Import를 활용한 데이터 이관 성능 리포트 | gywndi's database

안녕하세요. 한동안 MySQL에 빠져 있다가, 최근 Oracle 데이터 이관 작업 도중 재미난 사례 공유 합니다. DB Link를 통한 CTAS(Create Table As Select)와 Export/Import를 통한 데이터 이관 비교입니다. 서비스 요

gywn.net

 


※ DB Link 란?

네트워크를 통해 다른 데이터베이스 접속 설정을 정의하는 오라클 객체

 

 

조건

 

1) Host Name이나 Oracle SID 가 다를것

 -> 동일 Host에서 Oracle SID마저 같으면 TNS Error 발생

 

2) NLS_CHARACTER_SET 통일

 -> 데이터 이관 시 Character Set 이 다르면 깨질 가능성이 있다.

 

3) 연결 하려는 데이터베이스의 리스너가 켜져있을 것

 

 

문법

 

CREATE (Public) DATABASE LINK [Link 명] CONNECT TO [접속유저] IDENTIFIED BY [유저 패스워드]
USING [네트워크 서비스명-tnsname.ora 內];

 

- Public 옵션을 통해 모든 유저가 링크 사용가능

- tnsname.ora 파일에는 연결하려는 DB 정보가 하기와 같이 있어야한다.

 

====== tnsnames.ora =====
testdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracle)
    )
  )
=========================

 

 

사용

 

생성

SQL>CREATE DATABASE LINK testlink CONNECT TO scott IDENTIFIED BY tiger
USING testdb

 

조회

SQL>SELECT ename FROM table1@testlink;

 

SYNONYM 생성 및 조회

SQL> CREATE SYNONYM synolink FOR table1@testlink;

SQL> SELECT ename FROM synolink;

 

DB 링크 삭제

SQL> DROP DATABASE LINK test_server;

 

as select를 사용한 마이그레이션 ( 테이블구조까지 복사 )

SQL> DROP TABLE new_table ( 기존 테이블 삭제 )

SQL> CREATE TABLE new_table AS SELECT * FROM table1@testlink;

 

※ Large Object인 LOB타입 데이터가 있는경우는 dblink로 불가능.

   원격 DB간의 LOB 조회,삽입이 안되기 떄문.

-> 중간에 임시 DB를 하나 거쳐서 수행할수는 있음 ( https://ooz.co.kr/280 )

 

출처 : [구루비] http://www.gurubee.net/lecture/1560

'DB > Oracle' 카테고리의 다른 글

데이터 Reorg  (2) 2021.08.03
마이그레이션 (1) expdp/impdp  (0) 2021.07.06

+ Recent posts