Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-08
제목 EXPORT/IMPORT Q & A

EXPORT/IMPORT Q & A
===================

PURPOSE
--------
다음은 EXPORT와 IMPORT에 관한 주요 질문과 답변에 관한 내용이다.


Explanation
------------

[질문1] RDBMS와 EXPORT, IMPORT의 연관 관계는(catexp.sql 이란)?

Export, Import시 이미 생성된 OBJECT의 정보를 데이타 딕셔너리에서 쿼리를
하는데 이러한 OBJECT의 정보가 data dictionary내의 여러 테이블에 나누어져 있다.
필요한 데이타 딕셔너리 정보를 편리하게 이용하기 위해 여러 가지의 뷰를
catexp.sql에 Script되어 있다.
이 스크립트 화일은 $ORACLE_HOME/rdbms/admin에 있으며 Install시 수행되도록
되어 있다.


[질문2] Export 시 OBJECT의 백업 순서는 있는가 ?

Export하는 OBJECT의 순서는 존재하며 이는 Oracle의 Version Up 등에 의한
새로운 OBJECT가 만들어지거나 하면 Export되는 OBJECT의 순서는 변할 수 있다.

OBJECT의 Export순서는 다음과 같다.

1. Tablespaces
2. Profiles
3. Users
4. Roles
5. System Privilege Grants
6. Role Grants
7. Default Roles
8. Tablespace Quotas
9. Resource Costs
10. Rollback Segments
11. Database Links
12. Sequences( includes Grants )
13. Snapshots ( includes grants, auditing )
14. Snapshot logs
15. Job Queues
16. Refresh Groups
17. Cluster Definitions
18. Tables(includes grants,column grants,comments,indexes,
constraints,auditing)
19. Referential Integrity
20. POSTTABLES actions
21. Synonyms
22. Views
23. Stored Procedures
24. Triggers
25. Default and System Auditing

[질문3] Export 시 BUFFER와 RECORDLENGTH는 무엇인가?

-BUFFER
Export시 OBJECT 내에 있는 여러 개의 Row가 한꺼번에 Fetch된다.
디스크에서 Fetch된 정보는 화일에 Write하기 전에 메모리를 거치게 되며,
이때 할당되는 메모리의 양이 Buffer 파라미터의 값이다.

-RECORDLENGTH
메모리에 있는 Export할 자료를 화일에 Write하기 위해 한번에 운반되는
양을 결정하는 파라미터이다.

[주의] 위의 BUFFER와 RECORDLENGTH는 O/S의 Block Size의 배수가 되도록
하는 것이 효율적이다.

[질문4] 다량의 Row를 Export, Import 시 어느 정도의 Row가 처리되었는지
알수 있는가?

알 수 있다. V 7.1까지는 다량의 Row를 Export, Import시 처리된 정도를 알
수가 없어 현재 작업 중인지 시스템이 Hang인지 파악되지 않았으나 V 7.2
부터는 FEEDBACK이라는 옵션을 이용하여 체크가 가능하다.


[질문5] Export 시 한번에 몇 개의 Row가 Fetch되는가?

한번에 Fetch되는 Row의 수는 Buffer Size와 연관 관계가 있다. 하나의 row가
Export 시 차지하는 양은 (각 Column Size의 합) + 4*(Column의 수)로 구할 수
있다. 한번 Fetch되는 Row의 수는 Buffer Size / 한 Row의 Export시 Size이다.
이를 이용하면 Export된 Output File의 Size는 대략 한 Row의 Export 시
Size * Row 수 이다.


[질문6] Export, Import의 호환성은 어떻게 되는가?

Export, Import의 호환성은 Oracle의 버젼과 직접적인 연관관계를 갖고 있다.
호환성은 4가지로 나누어 설명할 수 있으며 이를 아래의 가정을 이용해
설명하겠다.
가령 A라는 기계에 Oracle V 7.0, B 라는 기계에 Oracle V 7.1이 설치되어
운영 중이라 가정하자.
Oracle V7.0을 X라 하고 Oracle V7.1을 Y라고 하자.

- Base Compatibility : X의 exp를 이용해 X DB를 export하여 X의 imp를
이용해 X DB에 import하는 것을 말한다. 이는 당연히 지원한다.

- Upward Compatibility : X의 exp를 이용해 X DB를 export하여 Y DB에 Y의
imp를 이용해 import하는 것을 말한다.

이도 Oracle에서는 지원한다.

- Downward Compatibility : Y exp를 이용해 Y DB를 export하여 X DB에 X의
imp로 import하는 것을 말한다.
이는 지원될 수도 안될 수도 있다.

- Cross Compatibility : X exp를 이용해 Y DB를 export(SQL*Net 이용)하여
X 또는 Y DB에 import(imp는 적정한 것을 활용)하는 것을 말한다.
이는 지원될 수도 안될 수도 있다.


[질문7] 어떤 경우에 Downward Compatibility가 실패하는가?

V7.2에 hash cluster expressions라는 옵션이 있는데, 이를 이용해서 클러스터를
생성하여 사용 후 export한 것을 V7.0 또는 V7.1로 downward시 create cluster문에
옵션이 맞지않아 실패하게 된다.


[질문8] EXP-37 에러(export views not compatible with database version)
발생의 원인은 무엇인가 ?

이 에러는 Cross Compatibility에서 발생하는 문제로 이는 Export가 이용
하는 View(Catexp.sql에 의해 생성된)가 Oracle Version내에 일치하지 않아
발생한 문제로 이를 해결하기 위해 Exp에서 이용 가능한 View를 설치한다.


[질문9] Full Export는 DBA 권한을 갖고 있는 유저만 할 수 있는가 ?

Version 6 에서는 DBA권한을 갖고 있는 유저만 Full Export를 할 수 있으며,
V7에서는 DBA가 아니더라도 EXP_FULL_DATABASE Role이 Grant되면 Full
Export가 가능하다.


[질문10] 테이블 Import 시에 DEFAULT tablespace가 아닌 곳으로 들어가는 경우는
왜 발생하는가?

예를 들어서 scott 유저의 DEFAULT TABLESPACE가 users 인데 임포트를 해보면
tools TABLESPACE에 테이블이 만들어졌다고 하자. 그 이유는 다음과 같다.
즉, 임포트 하는 테이블이 원래 tools TABLESPACE에 있었고 scott가 현재
tools 테이블스페이스에 대한 Quota 를 가지고 있거나 아니면 Unlimited
Tablespace 권한(Resource Role에 포함)을 부여받았기 때문이다.

Import 시에 테이블을 DEFAULT TABLESPACE에 만들려면 DEFAULT TABLESPACE
외의 TABLESPACE 에 대한 모든 Quota 를 0 로 만들고 UNLIMITED TABLESPACE
권한을 Revoke시킨 다음에 임포트를 수행해야 한다.
그리고, DEFAULT TABLESPACE 에 대한 Quota만 Unlimited 로 한다.

예를 들면 다음과 같다.

$ sqlplus system/manager

SQL> alter user scott
quota 0 on system
quota 0 on tools
.......
quota 0 on data
quota unlimited on users;

SQL>revoke unlimited tablespace from scott;


이렇게 한 다음 Import 를 수행하면 된다. 물론 유저를 만들 때 quota 를 주지
않은 TABLESPACE는 상관 없으며 UNLIMITED TABLESPACE 권한(또는 RESOURCE ROLE)을
주지 않았다면 Revoke 명령도 사용할 필요가 없다.


[질문11] Import 시에 Core Dump/Segmentation Fault 가 발생하는 경우

오라클에는 Character Set이 있다. 국내에서는 US7ASCII 또는 KO16KSC5601을
주로 사용하는데 Export 받은 곳과 Import 하는 곳의 Character Set이 다르면
Import시에 Core Dump 가 발생하거나 원인 불명의 에러가 발생하면서 IMPORT가
중단되는 경우가 발생한다.
이 경우에는 Export 받은 dump file 을 convert 프로그램을 이용하여 Import 하는
곳의 Character Set 으로 변환시킨 다음 Import를 하는 방법이 있고, 아니면 어느
한 쪽 DB 의 Character Set 자체를 바꿔서 동일하게 맞춘 다음 Export/Import하는
방법이 있다. 이 중에서 Convert 프로그램을 이용하는 방법이 간단한데 이
프로그램은 Unix 상에서 cc로 컴파일하여서 사용하면 된다.

출처 : Technical Bulletin (Korean)
Comment
등록된 코멘트가 없습니다.