본문 바로가기

카테고리 없음

ORACLE Creating Database Links v1.0


from OTN http://download.oracle.com/docs/cd/B10501_01/server.920/a96521/ds_admin.htm#12904
===============================================================================================

DB LINK의 사용은 다른 인스턴스의 객체를 사용하기 위함이다.




위에서 보면 ORCL USER는 PROD의 TEST SCHEMA가 가진 객체를 조회하고 싶은 상황이다.

일반적으로 자신이 가지고 있지 않은 객체를 조회하고 싶을때는 TNS 서비스를 통해
해당 객체를 소유한 USER로 접속하지 않으면 안된다.

DB LINK는 ORCL이 TEST를 소유한 것 같이 조회를 가능하게 한다.
DB LINK를 만들기 위해서는 CREATE SESSION ( 이 권한이 없으면 세션을 만들지도 못한다; ) 과
CREATE DATABSE LINK / CREATE PUBLIC DATABASE LINK 둘중에 하나를 가져야 한다.

Privilege Database Required For

CREATE DATABASE LINK

Local

Creation of a private database link.

CREATE PUBLIC DATABASE LINK

Local

Creation of a public database link.

CREATE SESSION

Remote

Creation

해당 권한의 조회는 role_sys_privs 의 privilege 의 조회로 확인 가능하다.

사용조건으로는 두 인스턴스 모두 네트워크가 연결이 되어야 하며 서로 패킷을
주고 받을 수 있어야 한다. (ping을 사용해 확인)

PROD 인스턴스는 LISTENER를 실행해야하며 ORCL에서는 TNSNAMES.ORA에
접속할 서비스를 등록해야 한다. (직접 파일 수정하거나 NETMGR 사용)

필자는 직접 수정하는 방법으로 진행해 보겠다.


PROD 에서 리스너를 실행하였다.
RH3@PROD : /home/oracle>lsnrctl start


ORCL 에서 TNSNAMES.ORA를 수정한다.

RH3@ORCL : /home/oracle>cd $ORACLE_HOME/network/admin
RH3@ORCL : /oracle/ora92/network/admin>vi tnsnames.ora

다음의 내용을 추가하였다.

PROD_LINK =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.100)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PROD)
        (SERVER = DEDICATED)
    )
  )



tnsping 명령어로 접근이 가능한지 확인해 본다.

RH3@RESP : /home/oracle>tnsping prod_link

TNS Ping Utility for Linux: Version 9.2.0.4.0 - Production on 09-NOV-2008 13:25:
13

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
/oracle/ora92/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.100.100)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = PROD) (S
ERVER = DEDICATED)))
OK (10 msec)
RH3@RESP : /home/oracle>

단순히 sqlplus로 접근해 확인해봐도 괜찮다

RH3@RESP : /home/oracle>sqlplus "test/test@prod_link"


접근해 볼 샘플 USER를 만들어 진행해 보겠다.

SQL> get te
  1  create user dblink identified by dblink
  2  default tablespace users
  3  temporary tablespace temp
  4* quota unlimited on users


dblink라는 user를 생성하였다.

SQL> /

User created.

dblink user에게 create session 과 create database link를 할당했다.

SQL> grant create session ,create database link to dblink;

Grant succeeded.

SQL> conn dblink/dblink
Connected.
SQL> select * from tab;

no rows selected

SQL> @dblink

Database link created.

아래는 dblink 생성할 때 사용한 구문이다.

SQL> get dblink
  1  create database link dblink
  2  connect to test identified by test
  3* using 'prod_link'

SQL> select * from tab;

no rows selected

객체명 뒤에 DATA BASE LINK 이름을 붙여 사용한다. 형태는 TNS를 통해 접근하는 모양새와 같다.

SQL> select * from tab@dblink;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
CHAINED                        TABLE
PLAN_TABLE                     TABLE
TEST                           TABLE

SQL> select count(*) from test@dblink
  2  ;

  COUNT(*)
----------
    500000

SQL>

/*+ OTN 문서에 아직 많은 내용이 남아있다. UPDATE 요망 */