본문 바로가기

DB/Oracle

[Oracle]다른 DB SELECT 하기

반응형
SMALL

2개의 서버 구성

 

---------

서버1

---------

IP : 1.1.1.1

SERVICE_NAME : ORCL

PORT : 1521

DB 접속 계정 : VFXX

DB 접속 PW : VFXX

 

테이블 : EMP_VFXX

 

 

---------

서버2 : 유저 2개 구성

---------

IP : 2.2.2.2

SERVICE_NAME : ORCL

PORT : 1521

DB 접속 계정 : VFXX1

DB 접속 PW : VFXX1

테이블 : EMP_VFXX1

 

DB 접속 계정 : VFXX2

DB 접속 PW : VFXX2

테이블 : EMP_VFXX2

 

-------------------

서버 1 DBLINK 구성

: 접속상태 : 서버1 / VFXX

-------------------

DBLINK 생성

CREATE DATABASE LINK "DBLINK_서버2"

    CONNECT TO VFXX1

    IDENTIFIED BY "VFXX1"

    USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 2.2.2.2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))';

 

 

-----------

참고로 쓰는 SELECT 문

: 접속상태 : 서버2 / VFXX1

-----------

접속 계정 VFXX1

DB 툴에서 테이블 가지고 올때 보면

 

SELECT *

  FROM VFXX1.EMP_VFXX1

 

로 뜬다.

 

보통 SELECT * FROM EMP_VFXX1: 내가 VFXX1 로 접속했기 때문에, VFXX1. 이라는 부분을 생략한거다.

 

정식은 SELECT * FROM VFXX1.EMP_VFXX1 가 맞다는 거겠지...

 

 

 

 

 

-----------

서버1 에서 서버2의 테이블 SELECT

: 접속상태 : 서버1 / VFXX

-----------

 

SELECT * FROM VFXX1.EMP_VFXX1@DBLINK_서버2

 

DBLINK 로 SELECT 할때 @DBLINK명 으로 테이블 명을 쓰면 된다.

이것은 함수, 프로시저에도 적용된다

 

SELECT FUNCTION_VFXX@DBLINK명 ( 변수, 변수, 변수)  FROM DUAL;

 

BEGIN

   PROCEDURE_VFXX@DBLINK명( 변수, 변수, 변수);

END;

 

DBLINK_서버2 는 생성할때 CONNECT TO "VFXX1" 로 연결하였다. [ 서버 1 DBLINK 구성 참조 

그래서 DBLINK_서버2 는 VFXX1 계정에 존재하는 모든 테이블, 함수, 프로시저 등에 권한을 가진다.

 

 

 

-----------

VFXX1 에서 VFXX2 테이블 SELECT

: 접속상태 : 서버2 / VFXX1

-----------

================================

방법1. 테이블 명 직접 선택

: 접속 변경 : 서버2 / VFXX2

 

-- SELECT 권한 부여 ==> GRANT 관련된건 다른 자료 찾아볼것

-- TABLE 에 SELECT, INSERT, UPDATE, DELETE 권한에 따라 다른 계정에서 처리 가능 권한이 변경됨

-- 사용법 : GRANT "권한" ON "부여될 OBJECT" TO "권한을 받을 계정";

GRANT SELECT ON EMP_VFXX2 TO VFXX1;

 

: 접속 변경 : 서버2 / VFXX1

SELECT * FROM VFXX2.EMP_VFXX2;

-- 설명했듯이 VFXX2 라는 테이블 소유자 명칭을 작성해 준다.

-- 함수, 프로시저에도 해당한다.

-- SELECT VFXX2.FUNCTION_VFXX2( 변수, 변수, 변수) FROM DUAL;

================================

================================

방법2. 동의어 사용

: 접속 변경 : 서버2 / VFXX2

 

GRANT SELECT ON VFXX2.EMP_VFXX2 TO VFXX1;

CREATE SYNONYM VFXX1.EMP_VFXX2 FOR VFXX2.EMP_VFXX2;

-- 동의어 생성 관련 따로 자료 찾아 볼것.

-- CREATE SYNONYM "생성될OBJECT의사용자"."생성될OBJECT의명" FOR "원본의사용자"."원본의OBJECT명"

-- FOR 뒷부분은 정확히 명시

-- CREATE SYNONYM VFXX1.VFXX2의테이블입니다 FOR VFXX2.EMP_VFXX2 도 가능

-- VFXX1 의 오브젝트 명은 사용하기 편한 방식으로 변경하여 사용 가능함.

-- 

응용하자면 CREATE SYNONYM VFXX1.직원테이블 FOR VFXX1.EMP_VFXX1 처럼

같은 사용자 내에서 테이블 명을 변경해서 사용하는것도 가능은 함. 

 

: 접속 변경 : 서버2 / VFXX1

SELECT * FROM EMP_VFXX2;

--> 동의어로 생성했기 때문에, 테이블 명 그대로 사용 가능.

 

================================

반응형
LIST