Oracle의 DB Link 생성 및 사용법

1. 권한
DB Link를 생성 권한이 있어야 함.

– 공용 데이터베이스 링크생성 권한부여

GRANT CREATE PUBLIC DATABASE LINK TO [사용자 계정] ;

– 공용 데이터베이스 링크삭제 권한부여

GRANT DROP PUBLIC DATABASE LINK TO [사용자 계정] ;

– 데이터베이스 링크생성 권한부여

GRANT CREATE DATABASE LINK TO [사용자 계정] ;

※ 공용이 아닌 단순 데이터베이스 링크의 경우 삭제권한이 별도로 없다

(생성권한 만으로도 삭제 가능)

 

2.생성및 삭제
 – 생성 1

CREATE [SHARED][PUBLIC] DATABASE LINK LINK_NAME
[CONNECT TO CURRENT_USER]
[USING ‘connect_string’]

CREATE DATABASE LINK <LINK_NAME>
CONNECT TO <연결하고자 하는 user> IDENTIFIED BY <연결하고자 하는 user password>
USING <TNS정의명>

 – 생성 2
– TNS에 정의하지 않고 생성
– ORA-12154: TNS:could not resolve the connect identifier specified. 해당 오류 발생시 사용

CREATE PUBLIC DATABASE LINK LINK_NAME
CONNECT TO <연결하고자 하는 user>
IDENTIFIED BY <연결하고자 하는 user password>
USING ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)’

;

3. 사용방법
SELECT COUNT(*) FROM TABLE_NAME@DATA_LINK

# 생성시 권한 오류

SYSDBA 계정으로 권한 추가 : PUBLIC 명시 여부 체크
— PUBLIC DB LINK 생성  권한
SYS@ORACLE11> GRANT CREATE PUBLIC DATABASE LINK TO SCOTT;

— 생성권한 제거
SYS@ORACLE11> REVOKE CREATE PUBLIC DATABASE LINK FROM SCOTT;

— PUBLIC 링크 제거 권한
SYS@ORACLE11> GRANT DROP PUBLIC DATABASE LINK TO SCOTT;

— PUBLIC 링크 제거
DROP PUBLIC DATABASE LINK “링크명” ;


# DB 링크 사용시 에러
ORA-01017 invalid username
ORA-02063 line가 선행됨

# 해결방법 참고사이트 :http://www.happytomorrow.net/103
1) 11g에서 대소문자를 구분하지 않도록 설정.
– 다음의 명령어로 대소문자를 구분하지 않도록 설정할 수 있다.(11g서버에서 설정해줘야 함)

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

하지만… 저 값이 true로 되어있는 것은 다 이유가 있고… true가 default값인데… 난 default값을 바꾸는게 너무 찜찜하다…
그래서 다음 방법이 있다.

2) DB링크 생성시 접속 사용자 패스워드 부분에 “pass” 요런식으로 쌍따옴표를 붙인다.
create database link dblink
connect to SUNSHINY identified by “pass”
using ‘<TNS정의명>’;

 

# 아래 내용 출처 : 오라클 클럽

☞ 데이터베이스 링크(Database Link)데이터베이스 링크는 클라이언트 또는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에
접속하기 위한 접속 설정을 정의하는 오라클 객체 입니다.

◈ 우선 고려되어야 사항은 ORACLE INSTANCE가 두개이상이고 각각의 HOST NAME과 ORACLE_SID는
다르고  NLS_CHARACTER_SET은 동일하게 되어 있어야 합니다.

– 만약 같은 MECHINE에서  INSTANCE의 ORACLE_SID가 같다면 TNS ERROR가 발생 합니다.
– 또한 미래를 위해 다른 MECHINE이라 할지라도 ORACLE_SID는 규칙에 의해 다르게 가져가는
것이 좋습니다.
– 그리고 NLS_CHARACTER_SET이 동일하게 되어 있지 않으면 DATA 입출력시 ?????로 나타납니다.
– 데이터베이스 링크로 연결되는 서버에 리스너가 꼭 띄어져 있어야 됩니다

[Syntax]

– PUBLIC : 오라클 시노님과 마찬가지로 PUBLIC 옵션을 사용하면 공용 데이터베이스 링크를 생성
할 수 있습니다.  PUBLIC 옵션을 사용하지 않으면 링크를 생성한 자신만 사용 할 수 있습니다.

– link_name : 데이터베이스 링크의 이름을 지정 합니다.

– service_name : 네트워크 접속에 사용할 오라클 데이터베이스 네트워크 서비스명을 지정 합니다.

– username, password : 오라클 사용자명과 비밀번호를 지정 합니다.

☞ 데이터베이스 링크의 사용

— 데이터베이스 링크 생성 예제

SQL>CREATE DATABASE LINK test_server
CONNECT TO scott IDENTIFIED BY tiger USING ’testdb’;

이 데이터베이스 링크 생성 문장에서 USING다음에 오는 testdb는 tnsnames.ora파일에 정의되어
있어야 합니다.

# 아래의 tnsnames.ora 파일은 오라클이 설치된 서버의 파일을 말합니다.
====== tnsnames.ora =====
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.109.12.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle)
)
)
=========================

— 데이터베이스 링크를 통한 데이터의 조회..
SQL>SELECT ename FROM emp@test_server;

–시노님을 생성해서 사용하면 더욱더 편리하게 사용 할 수 있습니다.
SQL> CREATE SYNONYM emplink FOR emp@test_server;

— 시노님을 통한 조회
SQL>SELECT ename FROM emplink;

데이터베이스 링크의 삭제..
SQL>DROP DATABASE LINK test_server;