조회 수 18649 추천 수 0 댓글 0

(8I) 특정 테이블을 제외(SKIP)하고 EXPORT 하는 방법
====================================

PURPOSE
--------
Fine-Grained Access (FGAC) control이 특정 테이블을 제외하고 Export하는데
사용이 되는데 여기서는 FGAC에 대한 설명은 하지 않을것이며 자세한 사항은 관련
문서들을 참고하기 바란다.

Explanation & Example
----------------------
이 방법은 FGAC을 지원하는 Oracle Version에서만 가능하다. Oracle 8i에서부터
FGAC을 지원하며 Standard Edition을 제외한 Enterprise Edition 과 Personal
Edition에서 지원한다.
아래는 Scott User에서 EMP,DEPT 테이블을 제외하고 export받는 예제이다.

1. SYSTEM user로 database에 접속한다.

SQL> connect system/manager
Connected.

2. 새로운 DBA user를 만든다. 이 User로 export을 받을 것이다.

SQL> Create user EXP_DB identified by EXP_DB;

User created.

( default tablespace가 필요하다면 명시한다.)

SQL> Grant DBA to EXP_DB;

Grant succeeded.

3. Fine-Grained Access Control.

3.1. 2에서 만든 EXP_DB user로 접속한다.

SQL> connect exp_db/exp_db
Connected.

3.2 predicate function을 만든다.

CREATE or REPLACE FUNCTION exclude_table
(obj_schema VARCHAR2, obj_name VARCHAR2)
RETURN VARCHAR2 IS d_predicate VARCHAR2(2000);

BEGIN
if sys_context ('USERENV', 'SESSION_USER') = 'EXP_DB' THEN
d_predicate := '1=2';
else
d_predicate := '';
end if;
RETURN d_predicate;
END exclude_table;
/

( 1=2 조건은 EXP_DB user에게 항상 어떤 row도 return하지 않도록 하기 위한 것이다)

3.2 EXPORT에서 제외하기를 TABLE에 대해 각각의 Policy를 만든다.

execute dbms_rls.add_policy ('SCOTT','EMP','POL_EMP','EXP_DB','EXCLUDE_TABLE')
execute dbms_rls.add_policy ('SCOTT','DEPT','POL_DEPT','EXP_DB','EXCLUDE_TABLE')

참고 : 'SCOTT' --> 제외하고자 하는 테이블의 Owner.
'EMP' --> 제외하고자 하는 테이블.
'POL_EMP' --> policy의 이름(임의).
'EXP_DB' --> predicate function의 Owner(3.2에서 만듬).
'EXCLUDE_TABLE' --> predicate function.

ex) 위와 같이 policy에 add하면 그때부터 EXP_DB user는 emp table을 query할때
어떤 row도 return하지 않는다.

SQL> execute dbms_rls.add_policy ('SCOTT','EMP','POL_EMP','EXP_DB','EXCLUDE_TABLE')

PL/SQL procedure successfully completed.

SQL> select * from scott.emp;

no rows selected

SQL> execute dbms_rls.add_policy ('SCOTT','DEPT','POL_DEPT','EXP_DB','EXCLUDE_TABLE')

PL/SQL procedure successfully completed.

SQL> select * from scott.dept;

no rows selected

SQL> connect scott/tiger
Connected.
SQL> select count(*) from scott.emp;

COUNT(*)
----------
14

SQL> select count(*) from scott.dept;

COUNT(*)
----------
4


4. EXP_DB user로 database 또는 schema level로 export한다.

여기서 우리는 제외하고자 하는 각가의 테이블에서는 아래와 같은 warnings
을 발견할 것이다.

EXP-00079: Data in table "EMP" is protected. Conventional path may only be
exporting partial table.


ex) exp exp_db/exp_db file=scott.dmp owner=scott

. .
. .
. . exporting table CHESS_SAVE_CAPTURED 0 rows exported
. . exporting table CHESS_SAVE_PLAYER 0 rows exported
. . exporting table CITIES 205 rows exported
. . exporting table CLOB_TEST 1 rows exported
. . exporting table CODE 2 rows exported
. . exporting table COMPANY_SUMMARY 3 rows exported
. . exporting table CONCLASS 9 rows exported
. . exporting table CONLABEL 6 rows exported
. . exporting table CONTAINERS 169 rows exported
. . exporting table CREATE$JAVA$LOB$TABLE 1 rows exported
. . exporting table CUST 6 rows exported
. . exporting table CUSTOMER 9 rows exported
. . exporting table CUSTOMERS 14 rows exported
. . exporting table C_TEST1 8 rows exported
. . exporting table DAYS 7 rows exported
EXP-00079: Data in table "DEPT" is protected. Conventional path may only be expo
rting partial table.
. . exporting table DEPT 0 rows exported
. . exporting table DEPT2 4 rows exported
. . exporting table DTEST 0 rows exported
. . exporting table DUMMY 1 rows exported
EXP-00079: Data in table "EMP" is protected. Conventional path may only be expor
ting partial table.
. . exporting table EMP 0 rows exported
EXP-00091: Exporting questionable statistics.
. . exporting table EMP1 14 rows exported
. . exporting table EMPTEST 12 rows exported
. . exporting table EMP_UNRECOVER 15 rows exported
. . exporting table EMP_GQ1[ 26 rows exported
. . exporting table ESJO_DEPT 3 rows exported
. . exporting table EXECUTABLES 1 rows exported
. . exporting table FLRPEOPLE 65 rows exported
. . exporting table FUNDS 5 rows exported
. . exporting table FUND_CONTRIB 16 rows exported
. . exporting table
. .
. .
Export terminated successfully with warnings.


5. 제외하거나 다시 export list에 더하거나 할때.

5.1 다시 export list에 넣으려면

execute dbms_rls.drop_policy ('SCOTT','EMP','POL_EMP');

참고 : 'SCOTT' --> 제외하고자 했던 테이블의 Owner.
'EMP' --> 제외하고자 했던 테이블.
'POL_EMP' --> policy의 이름.

5.2 제외하고자 하는 table list에 있는지 알아보고자 할때는 DBA/USER/ALL_POLICIES
view을 이용한다.

SQL> select POLICY_NAME, OBJECT_NAME, FUNCTION
from DBA_POLICIES
where PF_OWNER='EXP_DB';

POLICY_NAME OBJECT_NAME
------------------------------ ------------------------------
FUNCTION
------------------------------
POL_DEPT DEPT
EXCLUDE_TABLE

POL_EMP EMP
EXCLUDE_TABLE


RELATED DOCUMENTS
-----------------
<Note 67977.1> Oracle8i Fine Grained Access Control - Working Examples


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84839
20 자료 instance 여러개인 경우 profile 보기 편하게 수정 1 유주환 2010.04.18 8634
19 자료 Data_Pump 세미나자료 file 고구마 2010.04.09 7658
18 자료 Flashback 10g 1 file 고구마 2010.04.09 6289
17 자료 ASM 1 file 고구마 2010.04.09 6765
16 자료 solaris sparc 64bit oracle 10.2.0.1 file 김준호 2010.03.29 6975
15 Q&A import후 simple_size 0일때 고구마 2014.01.13 3194
14 Q&A [답변] 테이블 수정, 삭제 및 LOB에 대해 알려주세요 Tech1 2012.03.26 10635
13 Q&A ORACLE_BASE, ORACLE_HOME 각각의 위치에 대한 설명 부탁드립니다 Tech1 2012.03.20 10823
12 Q&A 파티션 테이블에 대해서 몇가지 궁금합니다. 1 고구마 2011.06.13 11694
11 Q&A Local Prefixed와 Local Non-Prefixed index 차이 ? 1 고구마 2011.06.13 9595
10 Q&A 파티션 테이블 종류가 뭐가 있나요? 1 고구마 2011.06.13 10338
9 Q&A RAC 쿼리 속도 관련 질문입니다. 3 고구마 2011.05.20 8967
8 Q&A ORA--04031 에러에 대해 질문합니다. 4 고구마 2011.05.17 12586
7 Q&A 오라클 프로세스에 대해서 궁금합니다. 4 고구마 2011.05.04 11170
6 Q&A 패키지 BODY 관련 질문 3 고구마 2011.05.03 10162
5 Q&A alert_log는 5 perfstat 2011.04.22 8071
4 Q&A RHEL5에 11gR2 RAC 구성시 ASM 관련 에러 file 송기성 2010.12.11 17670
3 Q&A 서버교체에 관해서.. 1 명랑여행 2010.08.20 9641
2 Q&A 오라클 유저 삭제가 안될시? 4 명랑여행 2010.05.27 11534
1 Q&A 업그레이드 이후 안됨 3 유주환 2010.04.23 10382
Board Pagination Prev 1 ... 3 4 5 6 7 8 Next
/ 8