Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 DISTRIBUTION QUERY 의 EXECUTION PLAN
PURPOSE
---------
DISTRIBUTION QUERY 의 EXECUTION PLAN 생성 방법에 대해 알아본다.

EXPLANATION
-----------

remote query 의 trace 를 얻기 위해 V7.1 에서는 instance level 에서
sql_trace=true 를 설정후 dbms_session_set_sql_trace(sql_trace boolean)
이 실행되어야 했다.

그러나 Oracle 7.2 부터 remotedatabase 에대한 sql trce 를 위해 session
level 의 package가 제공된다.

이 package 는 반드시 local database 에서 참조 되는 remote database 에서
실행되어져야 한다.

이는 dbms_system.set_sql_trace_in_session(sid number, serial# number,
sql_trace boolean) 처럼 call 된다.

DBMS_SYSTEM 은 install 시 sys user 에만 허용되므로 이의 실행 권한을 다른
user 에게 부여하여야 한다.

이 trace 를 얻기 위한 process 는
:

1. SYS user 에서 :

GRANT EXECUTE ON dbms_system TO ;

:

1.database link 를 remote database에 생성한다:

SQLPLUS /

CREATE DATABASE LINK
CONNECT TO
IDENTIFIED BY
USING '';

2. db link 를 사용하여 sql 문을 query 한다.
SELECT * FROM @;

:

1. db link 를 사용한 sid, serial# 를 다음 query 문을 이용하여 얻는다.

SQLPLUS /

COLUMN machine FORMAT a15
SELECT sid, serial#, username, machine
FROM v$session
WHERE machine='';

여기에서 username 은 이다.

2. 위에서 얻어진 sid, serial# 를이용하여 다음의 package 를 실행한다.
SQLPLUS /

EXECUTE sys.dbms_system.set_sql_trace_in_session(,,TRUE)

:

1.distributed query 를 실행한다.

:

1. user_dump_dest에서 ora_.trc file 을 check 한다..

2. TKPROF 에서 EXPLAIN option 을 이용하여 explain plan 을 얻는다.
tkprof ora_.trc explain.out
explain=/


query 안의 모든 object 가 remote 이고, 같은 db link 를 사용하면 Oracle은
이 query 문 수행을 위해 complete query 를 remote database 에 보낸다.

만일 일부만이 remote object 를 사용하고, 일부는 local 을 사용하는 경우
oracle은 query 문을 나누어 개별의 sql 문을 remote database 에 보낸다.
또한 관련된 where 조건문도 가능한한 remote 로 보낸다.

remote joins는 기본적으로 수행되지 않는다.

만일 remote join 을 하고자 하는 경우는 remote site 에 view 를 생성해서
이 view 를 reference 하도록 해야 한다.
또한 이 view 안에는 local 과 remote 가 join 되는 where 절이 포함되지
않아야 한다.


EXAMPLE
--------

다음 예제는 demobld.sql 을 이용하여 생성된 3rd table 을 이용한 것이다.

CREATE TABLE location
(loc)
AS
SELECT loc FROM dept;

<예제1> 2 remote tables 과 1 local table:
--------------------------------------------

EXPLAIN PLAN
SET statement_id='A'
FOR
SELECT e.empno, e.ename, d.dname, l.loc, d.deptno
FROM emp@ e, dept@ d, location l
WHERE d.deptno = e.deptno
AND d.loc = l.loc
AND e.empno = 7934
/

remote_plan.sql을 수행후 나타난 결과는 다음과 같다.

OPERATION OPTIONS OBJECT_NAM OBJEC OTHER
---------------------- -------- ---------- ----- -----
SELECT STATEMENT
NESTED LOOPS
NESTED LOOPS
REMOTE ROSE. SELECT "EMPNO","ENAM
WORLD E","DEPTNO" FROM
"EMP" E WHERE
"EMPNO"=7934

REMOTE ROSE. SELECT "DEPTNO","DNA
WORLD ME","LOC" FROM "DEPT
"D WHERE "DEPTNO"=:1


TABLE ACCESS FULL LOCATION ANALYZED

remote tables에 대해서는 OPERATION='REMOTE' 가 setting 되고 other
column 에 해당 sql 문이 저장된다.
Comment
등록된 코멘트가 없습니다.