[ Oracle - db link ]
1. 원격지에 서버와 로컬 서버간에 조인하려고 할 경우 사용
2. db link 설정 순서
a. 클라이언트 설정 하기
- 파일 위치 : C:\app\user\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
- 서버의 연결정보 하나 추가
- cmd에서 : c:\>tngping orcl2 5
(서버 연결이 잘 되는지 확인)
(아직 서버 방화벽 설정이 안되어 있기 때문에 연결이 안됨)
b. 서버 설정 (방화벽 열기)
- 시작 > [방화벽] -> Windows 방화벽 클릭
- 왼쪽 목록에서 [고급 설정]
- 왼쪽 목록에서 [인바운드 규칙]
- 오른쪽에서 [새규칙]
- 규칙종류 클릭
(o) 프로그램 > [다음]
(o)다음프로그램 경로 [%SystemDrive%\app\user\product\11.2.0\dbhome_1\BIN\oracle.exe]
(oracle 설치 파일 위치 찾기)
- [다음] > [다음] > [다음] > 이름[oracle]
c. 서버 설정 (방화벽 열기)
- 오른쪽에서 [새규칙]
- 규칙종류 클릭
(o) 프로그램 > [다음]
(o)다음프로그램 경로 [%SystemDrive%\app\user\product\11.2.0\dbhome_1\BIN\LSNRCTL.EXE]
[다음] > [다음] > [다음] > 이름[lsnrctl]
d. 서버설정 (port 열기)
- 규칙종류 클릭
(o) 포트 > [다음]
(o) 특정 로컬 포트 : 1521
name [oracleport]
e. 서버 db restart
f. 클라이언트에서 접속 확인
- cmd에서 : c:\>tngping orcl2 5
g. 클라이언트에서 서버 db 접속하기
- cmd창에서 : c:\scott/tiger@orcl2
h. 클라이언트에서 권한 부여
- 클라이언트에서 서버와 join하기 위해서는 아래처럼 권한을 수행 해 줘야 됨
system> GRANT CREATE PUBLIC DATABASE LINK TO SCOTT;
scott > CREATE PUBLIC DATABASE LINK SEOUL
CONNECT TO SCOTT
IDENTIFIED BY tiger
USING 'db1';
h. 클라이언트에서 원격지와 db 간 join하기
- SELECT e.ename, d.dname
FROM emp e, dept@SEOUL d
WHERE e.deptno = d.deptno;
. 원격지와 join하게 되는 원격지의 table은 항상 TABLE FULL SCAN하게 된다.
그래서 원격지에서 테이블을 가져오게 되면 속도가 너무 느린 현상이 존재 한다.
이 해결방법으로는 MATERIALIZED VIEW 를 이용하면 된다.
3. MATERIALIZED VIEW생성
system > grant create materialized view to scott;
scott > CREATE MATERIALIZED VIEW dept_sal
AS
SELECT a.deptno, SUM(a.sal) sum_sal
FROM emp a, dept@SEOUL b
WHERE a.deptno = b.deptno
GROUP BY a.deptno;
이와 같이 했을 경우에는
SELECT e.ename, d.deptno, d.sum_sal
FROM emp e, dept_sal d --local db와 join하게 됨
WHERE e.deptno = d.deptno;
문제점 : 원격지에 자료가 변경시 적용되지 않는다.
MATERIALIZED VIEW 갱신 방법
- 원격지에서 자료가 변경되었을 경우 자동으로 MATERIALIZED VIEW 자료가 변경되지 않는다.
- 옵션으로 변경시 언제 갱신할지를 지정할 수 있다.
- 생성시 OPTION 추가
REFRESH ON COMMIT --원격지에서 COMMIT하면 바로바로 변경됨
REFRESH ON DEMOND --요청(DBMS_MVIEW)이 있을 때 갱신
- REFRESH ON DEMOND option 적용 할 권한 부여
SYS>GRANT EXECUTE ON DBMS_MVIEW TO SCOTT;
SCOTT>EXEC DBMS_MVIEW.REFRESH('dept_sal');
. 이때 원격지에 변경된 레코드가 로컬 MATERIALIZED VIEW 에 자료가 적용된다.
최종 생성문장 예제)
- SCOTT>CREATE MATERIALIZED VIEW EMP_VW
REFRESH
ON COMMIT
AS
SELECT * FROM EMP;
- 참고 : EMP 테이블에 PK가 존재 하지 않는다면
'ORA-12054: 구체화된 뷰에 ON COMMIT 재생 속성을 설정할 수 없습니다'
라는 오류가 발생한다.
이유는 원본테이블에 자료가 변경 시 MATERIALIZED VIEW 간에 갱신되는 조건을
찾아가야 되는데 찾을 수 가 없기 때문이다.
원본테이블인 EMP 에 PK를 설정하면 'ORA-12054' 오류는 해결 할 수 있다.
'(DB) Oracle 튜닝 > 쌍용튜닝교육' 카테고리의 다른 글
Oracle SQL튜닝. 접근경로(Access Path) (0) | 2018.02.24 |
---|---|
Oracle 기본 내용 (0) | 2018.02.20 |
실행계획 - join (0) | 2018.02.10 |
자주 사용하는 SQL (0) | 2018.02.10 |
Oracle- Clustered Table (0) | 2018.02.10 |