본문 바로가기

work/oracle

DB Link 2

일반적으로 DB link 를 생성하기 위해서는 Client 쪽의 tnsnames.ora 파일에

등록이 되어야 합니다. 하지만 다음과 같이 tnsnames.ora 에 등록할 내용을

직접 사용해서 db link 를 생성할 수 있습니다.

 

CREATE DATABASE LINK link_test

   CONNECT TO scott IDENTIFIED BY tiger
   USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.23.1.13)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=ORCL)))'

 

 

오라클 서버에 접속하기 위해서는 tnsnames 을 이용하거나 oracle names 를 이용할 수 있습니다.
이 방법은 오라클 서버에 접속하기 위해서 해당 tnsnames 나 oracle names 정보를 변경해야만 합니다.
하지만 JDBC 처럼 oracle 서버 아이피와 포트 그리고 service_name 만 가지고 접속할 수 있는 방법이 있습니다.
tnsnames.ora 안에 사용하는 설정을 그대로 사용하는 방법입니다.

 

SQL*PLUS 에서 사용하는 방법
ex) sqlplus
scott/tiger@”(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA)))”


DB LINK 생성시
ex) SQL> create database link l_dblink connect to scott identified by tiger using ‘(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORA)))’;

 

 

 

DATABASE LINK 사용 방법

먼저 한글 데이터간의 전달을 위해 두 DBMS간의 character set이 같아야 합니다.

character set을 확인하는 방법.
sqlplus system/manager
select * from v$nls_parameters;

nls_characterset에 대한 값이 나옵니다.

 

예를 위해 다음과 같은 환경을 가정하겠습니다.
HOST NAME: HP7 - SUN7      
ORACLE_SID: ORA7 - ORATEST  

1) HP7에서 SUN7로 DB LINK 생성하기.
  scott/tiger 로 Login
  SQL*NET V1의 경우
  SQL> create public database link  HP7TOSUN7
           connect to scott identified by tiger
           using 't:SUN7:ORATEST';
  (rdbms 7.3 이상은 SQL*NET v2 를 사용하십시오)

  SQL*NET V2의 경우
  SQL> create public database link HP7TOSUN7
           connect to scott identified by tiger
           using 'ORATEST';


  이 때 V2인 경우의 ORATEST는 $ORACLE_HOME/network/admin/ directory의 tnsnames.ora file 내에 지정된 service name입니다.

  tnsnames.ora의 service name이 잘 setting 되어 있는지 확인하는 방법.
  SQL*Plus scott/tiger@service name했을 때, SQL*Plus에 log-in이 되면 잘 setting이 된 것입니다.


2) SUN7에 있는 TABLE의 select 및 view(view는 필요에 따라 생성) 작성 - HP7에서 작업
  SQL> select * from emp@HP7TOSUN7;
  SQL> create view emp_view

           as

           select *
           from  
emp@HP7TOSUN7 a
           where a.deptno = 10;


3) HP7 에서 SYNONYM을 생성하여 사용하는 경우
  SQL> create synonym emp for emp@HP7TOSUN7;
  SQL> select * from emp;

  이렇게 하면 간단히 분산 DB의 환경에서 사용할 수 있습니다.

  select를 제외한 DML(insert, update, delete) 작업을 하려면, sql*plus log-in 시에 다음과 같은 option이 display 되어야 합니다.

  SQL*Plus: Release 3.3.3.0.0 - Production on Mon Jan 19 14:18:47 1998
  Copyright (c) Oracle Corporation 1979, 1996.  All rights reserved.

  Connected to:
  Oracle7 Server Release 7.3.3.4.0 with the 64-bit option - Production
  Release With the distributed, ...


  remote 작업의 예

  select * from table_name@HP7TOSUN7;
  insert into table_name@HP7TOSUN7;
  delete table_name@HP7TOSUN7;
  ...

  단, SERVER TO SERVER로 NETWORK 환경이 구축되어 있어야 하고, listener 가 반드시 떠 있어야 합니다.
     
출처 : OTN