본문 바로가기

ORACLE

오라클 export/import

* export

- 전체 데이터베이스가 export 방법

ex.) C:>exp userid=system/manager file='C:/full.dmp' full=y
- 서비스명 포함
ex.) C:>exp userid=system/manager@서비스명 file='c:/full.dmp' full=y
- exp-00091 불완전한 통계를 엑스포트 중입니다. 메시지 출력시 (oracle 버전 확인과 NLS_LANG가 달라서 발생)
ex.) C:>exp userid=system/manager@서비스명 file='c:/full.dmp' full=y statistics=none
이관 데이터에는 상관없고 실행 후 dbms_stats.gather_schema_stats 를 사용하여 통계정보를 생성하면 됨


- user별 EXPORT하는 방법.
ex.) C:>exp userid=scott/tiger file='C:scott.dmp'
- SYSTEM/MANAGER로 접속한 DBA가 여러 user소유의 오브젝트들을 EXPORT 하는 방법
ex.) C:>exp userid=system/manager owner=scott file='C:scottuser.dmp'
- system user로 다른 유저의 table 몇 개만 Export하는 방법
C:>exp userid=system/manager file='C:exp.dmp' tables=(scott.EMP, scott.DEPT)
=> 위와 같이 table의 schema(user)명까지 지정해야만 export가 성공합니다.
- scott user로 table 몇 개만 EXPORT하는 예
C:>exp userid=scott/tiger file='C:exp.dmp' tables=(EMP, DEPT) log=exp.log
추가 옵션
full=y : 전체 데이터 추출 여부 (기본값 n)
direct : 직접경로 방식으로 export(기본값 n)
indexs : 인덱스 포함 여부(기본값 y)
triggers : 트리거 포함 여부(기본값 y)
rows=n : 오브젝트에 대한 정의만 export (테이블의 저장된 데이터는 export 제외)
buffer : 작업 단위 크기 설정
compress : 익스텐트 통합여부 지정(기본값 y)
grants : 오브젝트 권한 설정에 대한 정보 추출 여부(기본값 y)
log : 로그를 저장할 파일 지정
row : 테이블의 데이터 추출 여부(기본값 y)
consistents : 대상 테이블의 읽기 일관성 지정(기본값 n)
prfile : 필요한 옵션을 파라미터 파일에 설정한 후 해당 파라미터 파일을 export 시 적용
query : 쿼리 조건에 맞는 데이터만 적용 ex) query=\"where id\=100\"

Export 활용

TIP1.COMPRESS 옵션은 모든 익스텐트를 하나의 익스텐트로 통합하여 구성하는 옵션이다. 이 경우 하나의 데이터 파일로만 모든 데이터가

적재되기 때문에 I/O분산 측면에서 분리하다. 그러므로 실제 운영에서는 이와 같이 익스텐트들이 통합되는 것은 좋지 않으므로 Export를 수행할

경우 반드시 COMPRESS 옵션을 N으로 설정하기를 권장한다.

TIP 2. DIRECT 옵션은 오라클 메모리 영역인 SGA를 사용하지 않고 Export를 수행하는 옵션이다. 직접 경로로 수행하여 추출된 파일은

Import시에도 기본적으로 직접 경로로 적재된다. 그러므로 DIRECT옵션을 Y로 설정하면 추출 및 적재 잡업시 보다 빠른 속도를 보장받을

수 있다.

TIP 3.CONSISTENTS 옵션은 Export를 수행한 시점의 데이터를 추출하게 된다. Export 중 변경된 데이터는 언두 데이터를 이용하여 이전 값을

추출하게 되는데 이때 'Snap Shot Too Old' 에러가 발생하기 쉽다. 그래서 CONSISTENTS옵션을Y로 설정하기를 권장한다.

TIP 4. STATISTICS 옵션은 oracle 9i버전에서 특수 통계정보를 수집하는 옵션이다. "EXP-00091: 불완전한 통계를 엑스포트 중입니다." 에러가

발생하지 않게 하기 위해서는STATISTICS옵션을NONE으로 설정하기를 권장한다.


* import
-전체 데이터베이스가 IMPORT됩니다. (Full Level)
C:>imp userid=system/manager file='C:full.dmp' full=y

- scott의 유저 IMPORT를 실행 합니다.(User Level)
C:>imp userid=scott/tiger file='C:scott.dmp'

- 다른 계정으로 IMPORT하기
scott유저의 데이터를 EXPORT받아서 test 유저에게 IMPORT하는 예제 입니다.
C:>exp userid=system/manager file='C:scott.dmp' owner=scott
C:>imp userid=system/manager file='C:scott.dmp' fromuser=scott touser=test

- 테이블 스페이스 늘리기

SQL> alter database datafile 'C:\app\Administrator\oradata\orcl\TBNDMB_DATA01.DBF'

resize 2000M ;

ALTER DATABASE DATAFILE 'C:\app\Administrator\oradata\orcl\TBNDMB_DATA01.DBF’ AUTOEXTEND ON
MAXSIZE UNLIMITED;

- 사용자에 속한 모든 테이블 삭제

Begin

   for c in (select table_name from user_tables) loop

  execute immediate ('drop table '||c.table_name||' cascade constraints purge');

  end loop;

  End;

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

오라클 홈디렉토리 또는 Base 디렉토리에 가시면 bin 디렉토리가 있습니다.
bin 디렉토리 안에는 여러가지 툴이 있는데 그중에 exp 와 imp 가 mysql dump 와 같은 기능을
가지고 있습니다.
exp help=y 하시면 도움말이 나옵니다.
대화형식으로 백업 하시려면 exp 만 치시면 순서대로 필요한 사항을 입력하시면 dump 가능하
구요
예제) exp scott/tiger file=/home/backup/daily_backup.dmp
log=/home/backup/daily_backup.log grants=y
물론 위의 디렉토리에는 oracle user의 쓰기 권한이 있어야 겠지요.
imp 인경우도 도움말을 보시면 편합니다.
예제) imp scott/tiger file=/home/backup/daily_backup.dmp
log=/home/backup/daily_backup_imp.log ignore=y grants=y buffer=2048000 full=y
여기서 log 는 imp , exp 시 남는 log 입니다. table 이 정상적으로 export 또는 import 되는지
보여주는 옵션입니다.
========================================================================================================================
========================================================================================================================

Export / Import 이용한 백업과 복구 | 오라클 2005/12/28 10:12

http://blog.naver.com/active9819/40020684261

Export와 Import는 가장 유용하게 그리고 자주 사용되는 백업관련 DBA ToolKit 입니다.


SQL*Loader는 외부 데이터를 오라클 서버로 업로드 하는 역할을 수행 하지만 Export/Import는 오라클 서버의 데이터를 다른 오라클 서버(이때

플랫폼과는 무관하다. 예를 들어 윈도우용 오라클에서 Export 받은 파일을 Unix/Linux 서버 기반의 오라클로 Import 하는것이 가능하다) 또는 같은

서버의 다른 사용자로 Import 하는 것이 가능 하다.


먼저 Export부터 그 사용법에 대해 알아 보기로 하자.

1. Export
- EXport는 데이터베이스의 논리적인 백업을 제공 한다. 즉 테이블, 데이블스페이스, 데이터를 포함한 사용자, 그리고 사용자가 만든 스키마

오브젝트(Index, View, Synonym, Trigger, DataBase Link, sequence, stored code 등등)등을 백업 받을 수 있는 것이다.

- Export 유틸리티의 Output은 export dump 파일 이다. 이 파일은 import Utility를 통해 읽혀져 다른 데이터베이스등으로 복구 되는 것이다.

- Export 파라미터
많은 파라미터중 UserID라는 파라미터는 꼭 가져야 한다는 것을 기억 하자. Exp 명령 입력하고 아무 파라미터도 주지 않는 경우

기본(Default) 값을 제공하면서 입력을 위한 프롬프트를 보여준다.(이때 사용자 ID와 ORD)는 반드시 입력해야 한다.

USERID : username/password를 값으로 입력 한다. 반드시 입력해야 한다. 만약 전체 데이터베이스를 백업 받기 위해 서는 기술된

User는 명시적으로 exportfull database 롤(Role)을 부여 받아야 한다.


FILE : 출력 파일의 이름(Export후 생기는 dump 파일 이름)


ROWS : Export Dump 파일에 테이블 행(데이터) 포함 여부 표시: (Y)es/(N)o 만약 여러분이 테이블 구조만 export하고 실제 row data는

백업을 원하지 않는 경우에는 rows=n 이라고 명시 해야 한다.(default값은 y)


Query : 테이블의 특정 부분만을 Export 하기 위해서 사용 한다.
(exp userid=scott/tiger tables=emp query=\"where sal \> 2000 \
-----------------------------------------
Export Mode와 관련된 파라미터

FULL : DataBase 레벨의 Export를 수행할지 여부를 표시, 전체 데이터베이스 익스포트 여부를 표시: (Y)es/(N)o
(exp userid=system/manager full=y)


OWNER : Schema Level의 EXport를 수행 할지의 여부를 표시 Export를 원하는 사용자이름을 기술 한다.
(exp userid=system/manager owner=(scott)
TABLES : export할 테이블 테이블 리스트 또는 (Y)es/(N)o
(exp userid=system/manager tables=(emp, dept, salgrade)
(exp userid=system/manager tables=(scott.emp%)
TABLESPACE : export를 원하는 테이블스페이스(TableSpace)를 기술
(exp yserid=system/manager tablespaces = (users) )
-----------------------------------------------------------------------------
INDEXES, CONSTRAINTS, GRANTS, TRIGGERS : Index, Constraints, grant,
triggers등을 export할지의 여부를 지정 (Y)es/(N)o, 기본적으로 앞 4개의 스
키마 오브젝트는 Export 됨
(exp userid=scott/tiger indexes=n constraints=n grants=n triggers=n)

DIRECT : Direct 모드 익스포트 유무 (Y)es/(N)o
INCTYPE : 익스포트 레벨 유형
PARFILE : 파라미터가 명시된 파일의 이름, Export인자들이 많을 경우 별도의 파일로
서 관리 가능
HELP : 대화식 모드에서 익스포트 파라미터 디스플레이 (Y)
LOG : 로깅 메시지를 위한 파일이름을 기술 한다.
CONSISTENT : 익스포트 동안 데이터 갱신시 데이터베이스의 읽기 일관성 뷰 제공
유무: (Y)es/(N)o
BUFFER : 바이트로된 데이터 버퍼 크기: (정수)
COMPRESS : 하나의 익스텐트(Extent)에 모든 데이터를 포함시킬지 명시, (Y)es/(N)o

* Direct Path 익스포트 개념
Direct Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 export할 수 있다.

* Direct-Path 익스포트의 구조
export시 direct 모드의 사용은 파라미터 DIRECT=Y라고 기술함으로써 설정될 수 있다
Direct Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않으며 세션에 의해 사용
되는 private area로 데이터베이스 블록을 읽어 들인다.
행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동되며 이 TTC 버퍼
내의 데 이터는 Export의 형식으로 되어 있다.

---------------------------------------------------------------
Export의 예 1 : exp 라는 명령만 입력 함으로서 대화식으로 export 처리
---------------------------------------------------------------
D:\backup>exp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 22:51:41 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


사용자명: scott
암 호:

다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
배열 인출 버퍼 크기 입력: 4096 >

엑스포트 파일: EXPDAT.DMP >

(2)U(사용자), 또는 (3)T(테이블): (2)U >

권한부여 엑스포트 (yes/no): yes >

테이블 데이터 엑스포트 (yes/no): yes >

확장 영역 압축 (yes/no): yes >

KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되
었습니다

. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 ADDRBOOK(를)을 엑스포트 중 3 행이 엑스포트됨
. . 테이블 EMP(를)을 엑스포트 중 15 행이 엑스포트됨
......
. 동의어 엑스포트 중
. 뷰 엑스포트 중
. 저장 프로시저 엑스포트 중
. 작업을 엑스포트합니다
. 참조 무결성 제약조건 엑스포트 중
. 트리거 엑스포트 중
. 인덱스유형을 엑스포팅합니다
. 비트맵, 함수, 기능과 확장 가능한 인덱스들을 엑스포트합니다
. 이후 테이블 처리를 엑스포트 중
. 구체화된 뷰 엑스포트 중
. 스냅샷 로그 엑스포트 중
. 작업 대기열을 엑스포트 중
. 리프레쉬 그룹과 자식 엑스포트 중
. 차원을 엑스포트합니다\
. 스키마 이후 단계의 객체와 작업을 엑스포트합니다\r

. 통계를 엑스포트합니다
엑스포트가 경고 없이 정상적으로 종료되었습니다.

D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11 11:07p

.
2004-01-11 11:07p
..
2004-01-11 11:08p 51,200 EXPDAT.DMP <-- 이름을 안주면 이 이름으로 생성
1개 파일 51,200 바이트
2 디렉터리 2,185,789,440 바이트 남음


---------------------------------------------------------------
Export의 예 2 : SCOTT 계정의 모든 오브젝트를 Export
---------------------------------------------------------------
D:\backup>exp userid=scott/tiger file=scott.dmp
또는 D:\backup>exp userid=system/manager owner=scott file=scott.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:24:38 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
\
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r

. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r

SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 ADDRBOOK(를)을 엑스포트 중 3 행이 엑스포트됨
. . 테이블 EMP(를)을 엑스포트 중 15 행이 엑스포트됨
.......................

엑스포트가 경고 없이 정상적으로 종료되었습니다.

D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11 11:24p

.
2004-01-11 11:24p
..
2004-01-11 11:08p 51,200 EXPDAT.DMP
2004-01-11 11:24p 51,200 scott.dmp
2개 파일 102,400 바이트
2 디렉터리 2,185,736,192 바이트 남음


---------------------------------------------------------------
Export의 예 3 : scott 계정의 emp, dept 테이블의 구조만 Export
---------------------------------------------------------------
D:\backup>exp userid=scott/tiger tables=(emp, dept) rows=n file=structure.dmp

Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:29:15 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다

경고: 테이블 데이터(행)가 엑스포트 되지 않습니다

지정된 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 EMP(를)을 엑스포트 중
. . 테이블 DEPT(를)을 엑스포트 중
엑스포트가 경고 없이 정상적으로 종료되었습니다.

D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11 11:29p

.
2004-01-11 11:29p
..
2004-01-11 11:24p 51,200 scott.dmp
2004-01-11 11:29p 4,096 structure.dmp <--------
3개 파일 59,392 바이트
2 디렉터리 2,185,781,248 바이트 남음

---------------------------------------------------------------
Export의 예 4 : 전체 데이터베이스 백업
---------------------------------------------------------------
D:\backup>exp userid=system/manager full=y file=full.dmp

========================Import =========================================
2. Import
Import Utility는 Export를 통해 생성된 덤프파일을 읽어 데이터베이스 복구를 진행
한다.

파라미터

USERID : Import를 수행 할 객체의 사용자이름/패스워드
FILE : 입력 파일 이름. Export를 통해 생성된 파일
IGNORE : Import시 테이블이나 인덱스와 같은 스키마 오브젝트는 기본적으로 만들려
고 시도한다. 이때 비록 비어있지만 객체가 이미 존재 한다면 존재함으로 인
한 생성 에러가 나타나는데 이를 무시한다는 의미 이다.(default n)
ROWS : Import시 테이블의 Row를 임포트 할것인지의 여부를 지정
(default y)
TABLES : 임포트시킬 테이블(default y)
INDEXES : 임포트시킬 인덱스(default y)
CONSTRAINTS : Constraint들을 import할 전지의 여부를 표시(default y)
GRANTS : GRANT들을 임포트 할건지의 여부(default y)
INCTYPE : 증분적 임포트 유형 명시. SYSTEM 및 RESTORE 옵션이 있음.
PARFILE : 파라미터 명시 파일, 파라미터등이 많아 복잡한 경우에 사용
HELP : 대화식 모드로 익스포트 파라미터 디스플레이.
LOG : 로그 파일명
INDEXFILE : Index-creation 명령을 수용할 파일 명시.
---------------------------------- Import Mode와 관련된 파라미터
FULL : 전체 데이터베이스를 임포트함.
Schema Level에서는 fromuser, touser를 사용한다.
DBA이거나 import full database role을 부여 받지 않았다면 import를 수행하는 사용
자의 스키마에서만 import를 할 수 있다. 이를 해결하기 위해 fromuser, touser를 사
용 한다.
- FROMUSER : 임포트시킬 객체를 포함하는 스키마 리스트.
- TOUSERS : 사용자의 스키마가 임포트될 사용자 리스트 명시.
Table level에서는 tables 파라미터를 사용한다.
- Tables : 기술된 테이블들이 임포트 된다.

예) $imp userid=system/manager full=y
$imp userid=system/manager fromuser=scott touser=test
$imp userid=system/manager tables=(scott.emp, scott.dept)
-----------------------------------------------------------------

DESTROY : Import 시 Import Utility는 필요하다면 어떠한 테이블 스페이스에 대해 만
들 수도 있다. 만약 destroy=y이면 export dump 파일안에 같은 이름을 가
진 data file명이 있다면 import되는 오라클 서버에 대해서 그 파일을
overwrite 한다는 것이다. (default는 n이다.)
($imp userid=scott/tiger destroy=y)

=========================================================================
import 예제 1 : scott 계정을 삭제 후 export 받은 백업본을 이용해 복구하기
=========================================================================

---> 아래는 SQL*Plus에서...
SQL> connect / as sysdba
연결되었습니다.
SQL> drop user scott cascade;
사용자가 삭제되었습니다.


---> 아래는 명령프롬프트에서...
D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50

D:\backup 디렉터리

2004-01-11 11:33p

.
2004-01-11 11:33p
..
2004-01-11 11:28p 4,096 EXPDAT.DMP
2004-01-11 11:36p 548,864 full.dmp
2004-01-11 11:24p 51,200 scott.dmp
2004-01-11 11:29p 4,096 structure.dmp
4개 파일 608,256 바이트
2 디렉터리 2,185,232,384 바이트 남음

D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:20:59 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
IMP-00003: ORACLE 오류 1435 가 발생했습니다
ORA-01435: 사용자가 존재하지 않습니다
경고와 함께 임포트가 정상 종료되었습니다.


---> 다음은 SQL*Plus에서...
SQL> create user scott identified by tiger
2 default tablespace users
3 temporary tablespace temp
4 quota 100m on users;

사용자가 생성되었습니다.

SQL> grant connect, resource to scott;
권한이 부여되었습니다.

SQL> connect scott./tiger;
연결되었습니다.

SQL> select * from tab;
선택된 레코드가 없습니다.


---> 다음은 명령 프롬프트에서...

D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:33:32 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다

경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.

KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블 "ADDRBOOK"(를)을 임포트 중 3 행이 임포트되었습니다.
. 테이블 "EMP"(를)을 임포트 중 15행이 임포트되었습니다.
............
............
임포트가 경고 없이 정상적으로 종료되었습니다.


SQL> select * from tab;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
ADDRBOOK TABLE
BONUS TABLE
CUSTOMER TABLE
CUSTOMER1 TABLE
CUSTOMER2 TABLE
DEPT TABLE
EMP TABLE
EMPLOYEE TABLE
EMP_HISTORY TABLE
KOR TABLE
LONGTEST TABLE

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
MYDEPT TABLE
MYEMP TABLE
MYTABLE TABLE
SALES TABLE
SALGRADE TABLE
SAWON TABLE
S_CUSTOMER TABLE
S_DEPT TABLE
S_EMP TABLE
S_IMAGE TABLE
S_INVENTORY TABLE

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
S_ITEM TABLE
S_LONGTEXT TABLE
S_ORD TABLE
S_PRODUCT TABLE
S_REGION TABLE
S_TITLE TABLE
S_WAREHOUSE TABLE
TEST TABLE
TIME_TAB TABLE

31 개의 행이 선택되었습니다.

=========================================================================
import 예제 2 : emp Table을 삭제 후 백업본을 이용해 복구하기
=========================================================================

--> SQL*Plus에서 ...
SQL> connect scott/tiger
연결되었습니다.
SQL> drop table emp;
drop table emp
*
1행에 오류:
ORA-02449: 외래 키에 의해서 참조된 테이블에 유일/기본 키입니다

SQL> drop table emp cascade constraint;
테이블이 삭제되었습니다.

SQL> select count(*) from emp;
select count(*) from emp
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

--> 명령프롬프트에서 실행

D:\backup>imp scott/tiger tables=(emp) file=scott.dmp <-- scott으로 export 받은 경우에...
D:\backup>imp userid=system/manager tables=(emp) file=scott.dmp fromuser=system
touser=scott <-- system으로 export 받은 경우에...

Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:43:45 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.


다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블 "EMP"(를)을 임포트 중 15 행이 임포트
되었습니다
사용 가능한 제약 조건에 관해서...
임포트가 경고 없이 정상적으로 종료되었습니다.

--> SQL*Plus에서 실행

SQL> select count(*) from emp;

COUNT(*)
----------
15

====================================================================================================================================
====================================================================================================================================
Oracle Charset 바꾸기

오라클 설치시 인스톨러에서 데이타베이스 자동 생성을 할 경우
OS 언어에 따라 자동으로 characterset 이 설정되어 설치되는데,
characterset을 임의로 변경하는 방법 입니다.

변경시나리오)
* 기존 개발용 오라클DB OLD_ORA 의 nls_characterset 은 US7ASCII 이다.
* 기존 클라이언트 nls_lang 은 AMERICAN_AMERICA.US7ASCII 이다.
* 새로운 한글windows OS에 오라클DB NEW_ORA 를 설치하였는데 nls_characterset 이 KO16MSWIN949 이다.
* OLD_ORA 의 데이타를 exp 유틸로 덤프를 떠서 NEW_ORA 에 imp 유틸로 복구하였는데,
일본및 중국 언어문자셋이 깨어져 버리고 ??? 등으로 바뀌어 유니크인덱스가 생성되지 않는다.
* 데이타 이전및 개발호환을 위해 nls_characterset 을 맞추기로 하였다.


새로 설치하지 않고 바꾸는 법 입니다.

절차 SQL> SHUTDOWN IMMEDIATE;
<만일의 사태를 대비해 풀백업을 한다>
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET US7ASCII;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

ALTER DATABASE CHARACTER SET US7ASCII 변경할때

큰집합이여야 된다는(superset) 등의 에러메세지 떨어질 경우
update SYS.PROPS$ set value$="US7ASCII" where name="NLS_CHARACTERSET";
shutdown immediate;
startup;

클라이언트 nls_characterset 셋팅 :
regedit
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1
- NLS_LANG = AMERICAN_AMERICA.US7ASCII


[nls 환경보기]
--DB
SELECT * FROM nls_database_parameters
WHERE parameter="NLS_CHARACTERSET" OR parameter="NLS_LANGUAGE"

-- session
SELECT * FROM v$nls_parameters

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

위와 같이 설정후 OLD_ORA 데이타 덤프를 NEW_ORA 로 Import 시킨후 한글이 정상적으로 들어와 졌습니다.
그런데 SQLTools,토드 등으로 접속후 객체브라우져로 객체 리스트 보기에서 아래와 같은 에러가 발생하면서

ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized
객체리스트가 보이지 않았습니다.

원인) 아래 쿼리를 날렸을때 데이터 타입이 중복되어서 나옴
쿼리)

select distinct(nls_charset_name(charsetid)) CHARACTERSET,
decode(type#, 1, decode(charsetform, 1, "VARCHAR2", 2, "NVARCHAR2","UNKOWN"),
9, decode(charsetform, 1, "VARCHAR", 2, "NCHAR VARYING", "UNKOWN"),
96, decode(charsetform, 1, "CHAR", 2, "NCHAR", "UNKOWN"),
112, decode(charsetform, 1, "CLOB", 2, "NCLOB", "UNKOWN")) TYPES_USED_IN
from sys.col$ where charsetform in (1,2) and type# in (1, 9, 96, 112)

order by types_used_in;

결과)

CHARACTERSET TYPES_USED_IN
------------------------------ -------------
KO16MSWIN949 CHAR
US7ASCII CHAR
KO16MSWIN949 CLOB
US7ASCII CLOB
AL16UTF16 NCHAR
AL16UTF16 NCLOB
AL16UTF16 NVARCHAR2
KO16MSWIN949 VARCHAR2
US7ASCII VARCHAR2

CHAR,CLOB,VARCHAR2 에 중복된 CHARACTERSET이 존재함.
위와 같은 경우 다음과 같이 조취합니다.


조치2) sysdba로 아래 구문들 실행

주의사항)
a) Make sure the parallel_server parameter in INIT.ORA is set to false or it is not set at all.
b) Run the next script in SQLPLUS connected "as sysdba"

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER="NLS_CHARACTERSET";
SQL> COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE
PARAMETER="NLS_NCHAR_CHARACTERSET";
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
SQL> ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
-- yes, 2 times startup/shutdown . This is not a typo
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;


만약 실행중 다음과 같은 오류발생시 아래단계 실행
오류가 안난다면 하지 않아도 됩니다.

ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE KO16KSC5601
==> ORA-12714: invalid national character set specified

원인)

NATIONAL CHARACTER SET 은 Oracle9i 이후에는 UTF8과 AL16UTF16 만 제공
확인)

SELECT VALUE
FROM NLS_DATABASE_PARAMETERS
WHERE PARAMETER in ("NLS_NCHAR_CHARACTERSET","NLS_CHARACTERSET")
결과)

PARAMETER VALUE
---------------------------------- ---------------
NLS_CHARACTERSET KO16KSC5601
NLS_NCHAR_CHARACTERSET KO16KSC5601

조치)
update sys.props$ set value$="AL16UTF16" where name="NLS_NCHAR_CHARACTERSET";


이후 위의 조치2)를 다시실행하면 아래와 같은 결과를 얻을수 있다..


문제해결)

CHARACTERSET TYPES_USED_IN
------------------------------ -------------
US7ASCII CHAR
US7ASCII CLOB
AL16UTF16 NCHAR
AL16UTF16 NCLOB
AL16UTF16 NVARCHAR2
US7ASCII VARCHAR2

이후 SQLTools 나 토드접속시 에러가 나지 않고 객체리스트가 정상적으로 나오게 됩니다.

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

====================export 시 에러

EXP-00003: 세그먼트( , )에 대한 저장 영역 정의가 없습니다

--> 일단 이건 오라클 버그다 ㅡㅡ;=============================================

1. $ exp compress=y 라는 인자를 붙여본다.

2. 만약 1번에서 LOB에서 같은 에러가 발생한다면..
a. Make a note of the export definition of exu9tne from $ORACLE_HOME/rdbms/admin/catexp.sql

b. Copy this to a new file and add:
"UNION ALL select * from sys.exu9tneb"
to the end of the definition

e.g. In the 9.2.0.5.0 or any higher release source database (e.g. 9.2.0.6.0 or 10.1.0.4.0), the workaround view would be:

CREATE OR REPLACE VIEW exu9tne (
tsno, fileno, blockno, length) AS
SELECT ts#, segfile#, segblock#, length
FROM sys.uet$
WHERE ext# = 1
UNION ALL
SELECT * from sys.exu9tneb
/

c. Run this as the SYS user against the database that needs to be exported.

d. Re-run the export as required.

e. Put back the original definition of exu9tne as obtained in step a.

Note: only use this workaround when absolutely necessary, and don't forget to put back the original definition of the view SYS.exu9tne as

mentioned in step e.

3. export하고자 하는 오라클보다 낮은버전의 오라클에서 원격으로 붙어서 exp 한다.

예) sqlplus scott/tiger@ORACH

sql> $ exp ...........

======================Imp할 때

IMP-00003 : OLACLE 오류 595 가 발생했습니다.

ORA-00959 : 테이블 영역 'DEMO_DATA'가 존재하지 않습니다.

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

먼저, 이관해야할 DB에서 export 로 dmp 파일을 생성합니다.

그리고, export 받은 dmp 파일에서 스크립트를 뽑아내는 것이죠.

export 받은 dmp 파일을 intranet.dmp 라고 합시다.

imp system/manager file=intranet.dmp fromuser=intranet touser=intra indexfiles=index.sqlconstraints=y full=y log=intra.log

이렇게 하면, index.sql이라는 스크립트를 하나 떨궈줍니다. 실제로 improt 를 하는 게 아니라 스크립트를 만드는 겁니다.

index.sql을 열어보면. 테이블과 인덱스를 생성하는 스크립트가 주욱 있습니다. 그곳에다가 오브젝트가 위치할 테이블스페이스 명을 다 바꿔줍니다.

오브젝트.유저이름도 주의하세요. intranet.employee 같은 거요.

유저명을 맞게 바꿔주셔야 되고요, . 주위으 공백도 제거

더블쿼테이션(") 은.. vi 같은데서 일괄적으로 지워 주시고요.

row 몇건 이런게 있다면 앞에 -- 로 주석처리 해줍니다.

rpm 같은 것이 붙는것도 모두 제거

editplus 같은데서 하시면 편해요 ^^;;

그리고, import 할 유저로 로긴해서, index.sql을 돌려줍니다.

그럼 테이블과 인덱스가 생성되겠지요. 원하시는 테이블스페이스에 말이죠. 물론, 미리 테이블스페이스는 다 만들어 놓으셨겠지요..

그리고, 마지막으로 intranet.dmp 파일에서 데이타만 때려 넣으면 되겠지요...

imp system/manager file=intranet.dmp fromuser=intranet touser=intra constraints=y commit=y ignore=y log=intra.log direct=y

commit 옵션은 롤백세그먼트가 작다면, 써주시구요.. ,direct 옵션은 써주면 빠르더라구요..

ignore 옵션이 가장 중요합니다. 데이타만 때려넣어야 되니까요..

확인해 보시면 스크립트에 변경한 테이블스페이스로 제대로 들어가 있을 겁니다.

===============================문자 집합 에러==================================

기본적으로 상위버전에서 exp한 파일은 하위버전에서 imp시 에러가 날 수 있다.

그러므로 하위버전에서 원격으로 exp하고자 하는 컴터의 오라클에 붙어서 exp

예) sqlplus scott/tiger@ORACH

sql> $ exp ...........

1. exp 할때

KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
서버는 KO16KSC5601 문자 집합을 사용합니다 (문자집합 변환이 가능합니다)
이 부분을 유심히 봐둔다

~~~문자 설정 : NLS_LANG

~~~NCHAR 문자 설정 : NLS_NCHAR_CHARACTERSET

서버는 ~~~ 문자 집합 : NLS_CHARACTERSET

내 컴터에서 문자셋 확인 후

select parameter, value from nls_database_parameters where parameter like '%CHAR%';

exp한 컴퓨터의 문자셋과 똑같이 설정한다.

SQL> conn /as sysdba
연결되었습니다.

SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.

SQL> startup mount;
ORACLE 인스턴스가 시작되었습니다.

데이터베이스가 마운트되었습니다.

SQL> alter system enable restricted session;

시스템이 변경되었습니다.

SQL> alter system set job_queue_processes=0;

시스템이 변경되었습니다.

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
시스템이 변경되었습니다.

SQL> alter database open;

데이타베이스가 변경되었습니다.


SQL> alter database character set 원하는NLS_CHARCTERSET;
alter database character set UTF8 -->에러가 난다면 강제로 변환(아래줄)
*
1행에 오류:
ORA-12712: 새로운 문자 집합은 이전 문자 집합의 대집합이어야 합니다


SQL> alter database character set internal_use 원하는NLS_CHARCTERSET;

데이타베이스가 변경되었습니다.

SQL> update sys.props$ set value$='원하는NLS_CHARCTERSET' where name='NLS_CHARACTERSET';

1 행이 갱신되었습니다.

SQL> update sys.props$ set value$='원하는NLS_NCHAR_CHARACTERSET' where name='NLS_NCHAR_CHARACTERSET';

SQL> commit;

SQL>shutdown immediate

SQL>startup

SQL> exit

c:> set NLS_LANG=KOREAN_KOREA.원하는 NLS_LANG

그 다음에 imp 실시

[출처]imp 또는 exp시의 주의점 / 에러|작성자joypheonix

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

NLS Parameter (NLS_LANG, CHARSET) 관련 팁

출처 : http://www.enjoydev.net/xe/en3_b_db/1578

참고(UTF8 vs AL32UTF8) : http://www.itmoa.co.kr/gzboard.php?code=techqna&mode=gz_read&Page=2&no=272

NLS_LANGUAGE 정보 조회 방법

  • SELECT PARAMETER , VALUE FROM V$NLS_PARAMETERS;

NLS_LANGUAGE 변경 방법

  • 오라클의 NLS_LANGUAGE 는 클라이언트의 세션값에 따라 결정 된다 즉, 서버설정값이 아닌 클라이언트의 세션에 의해 결졍되므로(레지스트리의값) 만약 NLS_LANGUAGE 타입이 일치하지 않을 경우(서버의 NLS_LANGUAGE 와 클라이언트의 NLS_LANGUAGE 가 일치하지 않을 경우) 다음과 같이 한글이 등록된다
    • Ex)"GQ1[ 5n7O EW=:F. @T4O4Y"
  • 변경 쿼리
    • update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
    • COMMIT;

NLS_CHARACTERSET 조회 방법

SELECT * FROM nls_database_parameters
WHERE parameter='NLS_CHARACTERSET' or parameter='NLS_LANGUAGE';

NLS_CHARACTERSET 변경 방법 (1)

  • Oracle 계정으로 로그인
    • sqlplus "ID/PASSWORD as sysdba"
  • NLS_CHARACTERSET 변경
    • SHUTDOWN IMMEDIATE;
    • STARTUP MOUNT;
    • ALTER SYSTEM ENABLE RESTRICTED SESSION;
    • ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
    • ALTER SYSTEM SET AQ_TM_PROCESSES=0;
    • ALTER DATABASE OPEN;
  • 아래처럼 변경한다. character set 은 KO16MSWIN949 도 사용가능 하다.
    • ALTER DATABASE CHARACTER SET KO16KSC5601;
  • 혹시 superset 이 틀리다는 오류가 나면 아래처럼 강제로 수정할 수 있다.
    • ALTER DATABASE CHARACTER SET INTERNAL_USE KO16KSC5601;
  • 모든 작업이 끝나면 디비를 재시작 해야 한다.
    • SHUTDOWN IMMEDIATE;
    • STARTUP;

NLS_CHARACTERSET 변경 방법 (2)

SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE OPEN;
  • ko16ksc5601
update sys.props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET'; 
update sys.props$ set value$='KO16KSC5601' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='AMERICAN_AMERICA.KO16KSC5601' where name='NLS_LANGUAGE';

or

update sys.props$ set value$='KOREAN_KOREA.KO16KSC5601.KO16KSC5601' where name='NLS_LANGUAGE'; 
  • ko16mswin949
update sys.props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET'; 
update sys.props$ set value$='KO16MSWIN949' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='KOREAN_KOREA.KO16MSWIN949' where name='NLS_LANGUAGE';
  • UTF8
update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET'; 
update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';
commit; SHUTDOWN IMMEDIATE; STARTUP; 
  • 확인
select * from v$nls_parameters; 
  • Linux의 경우 설치할 때 지정해 주었던 .bash_profile 파일에서 oracle 언어 환경변수를 아래와 같이 변경
export NLS_LANG = AMERICAN_AMERICA.KO16KSC5601 
  • Windows 사용자의 경우 regedit 에서
HKEY_LOCAL_MACHINE -> SOFTWARE -> HOME0 -> NLS_LANG 을 AMERICAN_AMERICA.KO16KSC5601로 수정한 후 재부팅 한다.
  • DB에 한국어만 사용되면 상관이 없는데...다국어 사용시 유용하리라 생각됩니다.


NLS_CHARACTERSET, NLS_NCHAR_CHARACTERSET의 차이?

  • NLS_CHARACTERSET는 char,varchar 같은 데이터 타입에서 사용하는 문자 집합이고, NLS_NCHAR_CHARACTERSET는 nchar, nvarchar 같은 데이터 타입에서 사용하는 문자 집합입니다. NLS_NCHAR_CHARACTERSET는 AL16UTF16를 포함하여 두가지 밖에 없습니다. 일반적으로 주로 사용하는 언어에 대하여 NLS_CHARACTERSET을 지정합니다. 한글과 영어만 사용하실 경우에는 KO16KSC5601, KO16MSWIN949가 있습니다. 한글과 영어를 제외한 언어를 사용하실 경우에는 UTF8과 같은 문자 집합이나, 각 나라 언어에 맞는 문자 집합을 설정하시면 됩니다. 가끔 한글을 사용하시는데 US7ASCII를 설정하시는 경우가 있는데 이것은 한글을 제대로 입력하지 못하기 때문에 자료이전 시에 큰 문제를 야기 시킬수 있습니다. 일반적으로 KO16KSC5601, KO16MSWIN949로 문자 집합을 설정하고, 한글과 영어를 제외한 다른 나라 언어 입력시에는 데이터 타입을 ncahr,nvarchar로 사용하시면 됩니다.
  • 단일 바이트 문자집합에서 각 문자는 1바이트를 차지합니다. 단일 바이트 7비트 인코딩 체계는 최대 128개의 문자를 정의할수 있으며 단일 바이트 8비트 인코딩 체계는 최대 256개의 문자를 정의할 수 있습니다.
<단일 바이트 체계의 예>7비트 문자 집합 : ASCII 7비트 미국 영어(US7ASCII) 8비트 문자 집합 : ISO 8859-1 서유럽어(WE8ISO8859P1) EBCDIC 코드 
페이지 500 8비트 서유럽어(WE8EBCDIC500) DEC 8비트 서유럽어(WE8DEC)
  • 멀티바이트 문자 집합은 문자당 하나 이상의 바이트로 표현되며, 일반적으로 아시아 언어 지원에 사용됩니다. 일부 멀티바이트 인코딩 체계는 MSB(최상위 비트)값을 사용하여 바이트가 단일 바이트를 나타내는지 아니면 문자를 나타내는 일련의 바이트중 일부인지를 나타냅니다. 그러나 다른 문자 인코딩 체계에서는 단일바이트가 멀티바이트 문자와 구별됩니다.
<멀티 바이트 체계의 예>가변 너비 멀티바이트 : 일본어 확장 UNIX코드(JEUC), 중국어 GB2312-80(CGB2312-80), AL32UTF8(UTF-8) 고정 너비 멀티바이트 : 
국가별 문자집합(AL16UTF16), 16비트 유니코드(고정 너비 2바이트 유니코드)


접속툴에서는 잘되는데 프로그램으로 실행하면 한글이 물음표로 나오는 경우

이상하게 클라이언트 접속툴(Golden 32, Toad) 에서는 Insert 시 정상적으로 한글이 입력이 되는데, ASP 페이지를 생성하여 인서트 처리를 하면 한글이 깨지는것이다.

그래서 레지스트리에서 캐릭터셋을

AMERICAN_AMERICA.US7ASCII KOREAN_KOREA.KO16KSC5601 KOREAN_KOREA.KO16MSWIN949 

을 차례대로 바꾸어 봤으나 계속 한글이 ??? 처럼 물음표표시로 나오는 것이다.

문제는 .. 어이가 없게도.. 오라클에 설정된 것이 ODBC , OraOLEDB 설정에 따라서 한글이 깨질수 있다는 것이다.

현재 서버에는 캐릭터셋이 AMERICAN_AMERICA.US7ASCII 으로 되어있으나 아날라이저에서 출력하면 한글이 정상적으로 출력이 되나, KOREAN_KOREA.KO16KSC5601 시리즈로 변경하면 계속 한글이 마구잡이로 깨져출력이 된다. 한글깨짐 현상은 방금 겪은 경험상 캐릭터셋도 연관이 있고, 서버 접속설정이 OraOleDB냐 ODBC 방식에도 밀접한 연관이 있다고 할수있다. 세부적으로 설명하긴 어렵지만, 방금 연결문자열에 Provider=OraOLEDB.Oracle.1; 이 놈을 삭제하니 정상적으로 입,출력이 된다.. 그러니 현재 설정된 DB 는 OraOLEDB 가 아니라는 것이 된다. 연결성공이 문제가 아니다. 연결성공안에 숨어있는 오류를 조심하자.

ConnectString = "User ID=아이디;Data Source=서비스명; PassWord=비밀번호" 'Provider=OraOLEDB.Oracle.1; 
  • 주인장 덧글: 이런 경우도 있지만 프로세스에서 처리하는 경우 유니코드처리를 하지 않아 물음표표시로 나오는 경우도 있습니다.

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

Export 할 때

About to export specified tables via Conventional Path ...
EXP-00008: ORACLE error 904 encountered
ORA-00904: "POLTYP": invalid identifier
EXP-00000: Export terminated unsuccessfully

에러 발생 시

원인 : client가 11g이고 백업 받을 서버가 10g 일 경우 발생 하는 듯..

해결 : http://www.kods.net/today-in-the-full-library-with-11gr2-client-version-of-the-database-export-10gr2-times-ora-00904-error/

SQL> exec dbms_monitor.serv_mod_act_trace_enable ('uatdb2', 'exp.exe');

위 쿼리를 날려주고 다시 exp 해보면 될 듯 하다.

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

서로 다른 VERSION의 ORACLE에서의 EXPORT & IMPORT (ORACLE7/8/8I/9I DATABASE)

Oracle7, Oracle8, Oracle8i 또는 Oracle9i databases를 사용하는
users들이 Oracle database release x로 부터 data를 export를
받아서 Oracle database release y로 import를 하려고 하는 경우
어떤 version의 utility가 사용되어야 하며 또한 data를 export
하기 전에 어떤 Oracle data dictionary가 준비되어야 하는지
알아 봅니다.



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

Oracle EXPORT와 IMPORT utilities를 사용하면 Oracle databases가
서로 다른 hardware와 software configurations을 가진 platforms에
있더라도 data objects를 서로 전달할 수 있습니다.

Oracle EXPORT utility는 Oracle database로부터 object
definitions 과 table data 를 추출하여 disk 또는 tape에 있는
Oracle binary-format인 export dump file에 저장합니다.
이 파일들은 FTP를 이용해서 전달될 수 있고 tape인 경우에는
다른 site로 이동시킬 수 있습니다.
network을 통해서 export dump file을 이동시키실 때에는 반드시
binary mode로 file을 전송하여야 합니다.
만일 export files들을 character mode (ASCII)로 전송할 경우에는
import시에 IMP-9 또는 IMP-10 에러가 발생하게 됩니다.

Oracle IMPORT utility는 export dump file로 부터 object
definitions과 table data를 추출하여 Oracle databse로 insert
합니다.


Data Dictionary Views.
----------------------
EXPORT 또는 IMPORT utility 를 사용하기 전에, 반드시 이
utilities 에 의해 서용될 Data Dictionary가 준비되어야만
합니다. 다음 script를 실행하면 됩니다.

UNIX : SQL> @$ORACLE_HOME/rdbms/admin/catexp.sql

Windows: SQL> @%ORACLE_HOME%rdbmsadmincatexp.sql

이 CATEXP.SQL script는 반드시 SYS user로 실행되어야만 합니다.
이 script는 CATALOG.SQL script에 의해 자동으로 호출됩니다.
CATEXP.SQL 와 CATALOG.SQL script는 하나의 database에 단지
한번만 실행되면 됩니다. 정상적인 상태라면 export나 import
전에 이 script를 실행해 줄 필요는 결코 없습니다.

CATEXP.SQL는 다음과 같은 일을 해서 database를 export와 import
에 대해 준비시켜 줍니다.

- data dictionary에 필요한 export와 import views들을 생성합니다.
- EXP_FULL_DATABASE role 과 IMP_FULL_DATABASE role을 생성합니다.
- EXP_FULL_DATABASE role 과 IMP_FULL_DATABASE role에
필요한 모든 privileges를 할당합니다.
- EXP_FULL_DATABASE 과 IMP_FULL_DATABASE 를 DBA role에 할당합니다.
- sys.props$ table을 export 와 import views의 version으로 update
합니다.
(이 문서의 마지막 부분을 보시기 바랍니다)

Oracle8/8i/9i database으로부터 Oracle7 export file를 만들려면
먼저 Oracle8/8i/9i database 쪽 SYS user에서 CATEXP7.SQL script를
실행해야 하며 Oracle8/8i/9i server에 대해서 Oracle7 EXPORT
utility를 실행해야 합니다.

UNIX : SQL> @$ORACLE_HOME/rdbms/admin/catexp7.sql

Windows: SQL> @%ORACLE_HOME%rdbmsadmincatexp7.sql

이 script는 database를 EXPORT에게 마치 Oracle7 release database
인것처럼 보이게 하는 export views를 생성시킵니다.
이 말은 여기서 만들어 지는 views는 Oracle8/8i/9i에 specific한
objects들을 볼수 없게 됩니다.
따라서 Oracle7 database에서 어떤 문제도 없이 import가 될 수 있게
됩니다.

CATEXP.SQL와 CATEXP7.SQL는 단지 한번만 실행되어야 한다는 것을
명심하시기 바랍니다. CATEXP.SQL는 Oracle8/8i/9i EXPORT utilities
가 사용하는 exu8% views를 만들고 CATEXP7.SQL는 Oracle7 EXPORT
utilities에서 사용하는 exu7% views를 만듭니다.
그렇기 때문에 SYS user로 두 scripts를 실행한 경우에는 그 scripts
들을 다시 실행할 필요가 없습니다.
이 database에 대해서는 Oracle7 또는 Oracle8/8i/9i EXPORT utility
를 모두 사용할 수 있습니다.

같은 방법으로 Oracle7 database로 부터 Oracle6 export file을
만들어 낼 수 있습니다.
이 경우에 Oracle7 database 에서 SYS user로 CATEXP6.SQL를
실행시켜 주어야 합니다.


Basic Compatibility.
--------------------
정의
Source database = data가 export된 database.
Target database = data를 import할 database.

1) 언제나 source 또는 target database 중에서 낮은 version의
EXPORT utility를 사용합니다.

a) 만일 높은 version의 database로 import하기 위해 export dump
file을 만드는 경우 (예: Oracle8i에서 Oracle9i로)
source database version과 같은 version의 EXPORT utility를
사용하라는 의미입니다. (예에서는 낮은 version이 Oracle8i가
됩니다.)
b) 만일 낮은 verion의 database로 import하기 위해 export dump
file을 만드는 경우 (예: Oracle9i에서 Oralce8i로)
target database version과 같은 version의 EXPORT utility를
사용하라는 의미입니다. (예에서는 낮은 version이 Oracle8i가
됩니다.)
(1) 만일 Oracle7 database로부터 Oracle6 export file을 만들
경우에 먼저 Oracle7 databas에서 SYS user로 CATEXP6.SQL를 실행
한 후 Oracle7 server에 대해 Oracle6 EXPORT utility를 실행
해야 합니다. 이 script는 database를 EXPORT에게 Oracle6 release
database인 것 처럼 보이게 합니다.
(2) Oracle8/8i/9i database로부터 Oracle7 export file을 만들
경우에 먼저 Oracle8/8i/9i database에서 SYS user로 CATEXP7.SQL
script를 실행하고 Oracle7 EXPORT utility를 Oracle8/8i/9i server
에 대해서 실행해야 합니다.
CATEXP7.SQL script는 database를 EXPORT에게 Oracle7 release
database처럼 보이도록 합니다.
(3) Oracle9i database로부터 Oracle8/8i export file을 만들때에는
특별한 작업이 필요합니다.
물론 Oracle9i server에 대해서 Oracle8/8i EXPORT utility를 실행
해야 합니다.
그리고 Oracle9i에 specific한 기능들은 export할 수 없으며 support
할 수 없습니다. ( 예를 들어 LOBs나 objects들은 DIRECT=YES를
주었을때 export 되지 않습니다. 이러한 제약 사항들은 "Oracle9i
Database Utilities" 메뉴얼에서 참조하실 수 있습니다. )

2) IMPORT utility는 항상 target database와 같은 version의 것을 사용해
야 합니다.

제약 사항들
-----------
다음 제약 사항들은 EXPORT 와 IMPORT utilities에 적용이 됩니다.
자세한 사항은 아래의 matrix를 참조하시기 바랍니다.

1. dump files들은 특별한 Oracle-binary format으로 저장되어 있기 때문에
Oracle export dump files은 Oracle IMPORT utility에 의해서만 읽어질
수 있습니다.
2. 모든 export dump file은 향후 Oralce major, patch, maintenace
releases에서 import 가능합니다.
3. export dump files은 이전 maintenance releases 와 version에서의
IMPORT utilities로는 읽어질 수 없습니다.
따라서 version 9 export dump file은 version 8i IMPORT utility
를 이용해서 import될 수 없습니다.
그리고 version 8 export dump file은 version 7 IMPORT utility
로 import될 수 없습니다.
4. IMPORT는 EXPORT release 5.1.22와 그 이상의 version(최고 같은
version까지)으로 만들어진 export dump files을 읽을 수 있습니다.
5. IMPORT는 더 높은 version 이나 maintenance releases의 EXPORT
utility로 만들어진 export dump files들을 읽을 수 없습니다.
따라서 release 8.1 export dump file은 release 8.0 IMPORT utility
로 import되어 질 수 없으며, version 8 export dump file은
version 7 IMPORT utility로 import될 수 없습니다.
6. Oracle6 (또는 그 이전의) EXPORT utility는 Oracle8 이나 Oracle8i
database 에 대해서 사용되어 질 수 없습니다.
7. 더 낮은 EXPORT utility 가 더 높은 version의 Oracle server와
실행될 경우, 낮은 version에서 존재하지 않는 database objects의
categories는 export에서 제외됩니다.
예를 들어 partitioned tables은 version 7 EXPORT utility로는
export되어 지지 않습니다.
만일 version 8 partitioned table을 version 7 database를 이동
할려면 먼저 table을 non-partitioned table로 재구성하셔야 합니다.




Matrix 1: Oracle7 이나 더 낮은 database 로 import할때에 사용할
EXPORT utility
(IMPORT utility 는 항상 target database의 것을 사용):

+----------+-----------------------------------------------------+
| EXPORT | IMPORT to |
| from +--------+--------+--------+--------+--------+--------+
| / | 5.x | 6.x | 7.0.x | 7.1.x | 7.2.x | 7.3.x |
+----------+--------+--------+--------+--------+--------+--------+
| 5.x 1) 2)| EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | EXP5x |
| 6.x 2)| N/S | EXP6x | EXP6x | EXP6x | EXP6x | EXP6x |
+----------+--------+--------+--------+--------+--------+--------+
| 7.0.x 3)| N/S | EXP6x | EXP70x | EXP70x | EXP70x | EXP70x |
| 7.1.x 3)| N/A | EXP6x | EXP70x | EXP71x | EXP71x | EXP71x |
| 7.2.x 3)| N/S | EXP6x | EXP70x | EXP71x | EXP72x | EXP72x |
| 7.3.x 3)| N/S | EXP6x | EXP70x | EXP71x | EXP72x | EXP73x |
+----------+--------+--------+--------+--------+--------+--------+
| 8.0.x 4)| not supported | EXP70x | EXP71x | EXP72x | EXP73x |
| 8.1.x 4)| not supported | EXP70x | EXP71x | EXP72x | EXP73x |
+----------+--------+--------+--------+--------+--------+--------+
| 9.0.x 4)| not supported | EXP70x | EXP71x | EXP72x | EXP73x |
+----------+-----------------+--------+--------+--------+--------+

주의:
1) IMPORT는 EXPORT release 5.1.22와 그 이상의 version(최고 같은
version까지)으로 만들어진 export dump files을 읽을 수 있습니다.
2) Oracle5 나 Oracle6 export dump를 Oracle7 IMPORT에서 사용할때:
특별히 신경써야 하는 것들이 Oracle Utilities Manual,
Chapter 2 "Import"에 나와 있습니다.
3) Oracle7으로부터 export해서 Oracle6 database로 이동시킬때는
먼저 Oracle7 database쪽 SYS user에서 CATEXP6.SQL script를
실행해야 합니다.
(이 script는 version6 views를 만들기 위해
단 한번만 실행되면 됩니다.)
4) Oracle8, Oracle8i 또는 Oracle9i 에서 export해서 Oracle7
database에 이도할 경우 먼저 Oracle8/8i/9i database쪽에서
SYS user로 CATEXP7.SQL script를 수행해야 합니다.
(이 script는 version7 views를 만들기위해 단 한번만 실행되면
됩니다.)

Matrix 2: Oracle8 이나 더 높은 database 로 import할때에 사용할
EXPORT utility
(IMPORT utility 는 항상 target database의 것을 사용):

+----------+--------------------------------------------------------------+
| EXPORT | IMPORT to |
| from +--------+--------+--------+--------+--------+--------+--------+
| / | 8.0.4 | 8.0.5 | 8.0.6 | 8.1.5 | 8.1.6 | 8.1.7 | 9.0.1 |
+----------+--------+--------+--------+--------+--------+--------+--------+
| 5.x 1) 2)| EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | EXP5x | EXP5x |
| 6.x 2)| EXP6x | EXP6x | EXP6x | EXP6x | EXP6x | EXP6x | EXP6x |
| 7.x 3)| EXP7x | EXP7x | EXP7x | EXP7x | EXP7x | EXP7x | EXP7x |
+----------+--------+--------+--------+--------+--------+--------+--------+
| 8.0.4 | EXP804 | EXP804 | EXP804 | EXP804 | EXP804 | EXP804 | EXP804 |
| 8.0.5 | EXP804 | EXP805 | EXP805 | EXP805 | EXP805 | EXP805 | EXP805 |
| 8.0.6 | EXP804 | EXP805 | EXP806 | EXP806 | EXP806 | EXP806 | EXP806 |
+----------+--------+--------+--------+--------+--------+--------+--------+
| 8.1.5 | EXP804 | EXP805 | EXP806 | EXP815 | EXP815 | EXP815 | EXP815 |
| 8.1.6 | EXP804 | EXP805 | EXP806 | EXP815 | EXP816 | EXP816 | EXP816 |
| 8.1.7 | EXP804 | EXP805 | EXP806 | EXP815 | EXP816 | EXP817 | EXP817 |
+----------+--------+--------+--------+--------+--------+--------+--------+
| 9.0.1 | EXP804 | EXP805 | EXP806 | EXP815 | EXP816 | EXP817 | EXP901 |
+----------+--------+--------+--------+--------+--------+--------+--------+

주의:
1) IMPORT는 EXPORT release 5.1.22와 그 이상의 version(최고 같은
version까지)으로 만들어진 export dump files을 읽을 수 있습니다.
2) Oracle5 이나 Oracle6 export dump 를 Oracle8/8i/9i IMPORT와 사용할 경우:
중요: 특별히 주의해야 할 부분이 있습니다. Oracle Utilities Manual
에서 Chapter 2 "Import"를 보시기 바랍니다.
3) Oracle7 export dump를 Oracle8/8i/9i IMPORT와 사용할 경우:
constraint에서 TO_DATE function이 사용되지 않은 경우 DATE columns의
constraints들이 invalid로 됩니다. ( 이작업은 이전 version에는 필요하지
않습니다. )


Example
--------


1. From 7.3.3 to 8.1.6 => EXPORT 7.3.3를 사용해서 7.3.3 database로부터
export하고 IMPORT 8.1.6를 사용해서 8.1.6
database로 import합니다.
2. From 8.1.6 to 8.1.6 => EXPORT 8.1.6를 사용해서 8.1.6 database로부터
export하고 IMPORT 8.1.6를 사용해서 8.1.6
database로 import합니다.
3. From 8.1.5 to 8.0.6 => EXPORT 8.0.6를 사용해서 8.1.5 database로부터
export하고 IMPORT 8.0.6를 사용해서 8.0.6
database로 import합니다.
4. From 8.1.7 to 8.1.6 => EXPORT 8.1.6를 사용해서 8.1.7 database로부터
export하고 IMPORT 8.1.6를 사용해서 8.1.6
database로 import합니다.
5. From 9.0.1 to 8.0.6 => EXPORT 8.0.6를 사용해서 9.0.1 database로부터
export하고 IMPORT 8.0.6를 사용해서 8.0.6
database로 import합니다.
6. From 8.1.7 to 7.3.4 => CATEXP7.SQL이 실행된 적이 없다면 Oracle7
data dictionary views를 만들기 위해 8.1.7
database에서 SYS user로 CATEXP7.SQL를 실행하고
난 후에
EXPORT 7.3.4를 사용해서 8.1.7 database로부터
export하고 IMPORT 7.3.4를 사용해서 7.3.4
database로 import합니다.
7. From 8.1.7 to 9.0.1 => EXPORT 8.1.7를 사용해서 8.1.7 database로부터
export하고 IMPORT 9.0.1를 사용해서 9.0.1
database로 import합니다.


주의사항
--------

1. EXPORT를 사용하기위해서는 Oracle database에 CREATE SESSION privilege
권한이 있어야 합니다. 다른 user가 소유한 tables들을 export하기 위해
서는 EXP_FULL_DATABASE role를 사용가능하게 만들어야 합니다.
이 role은 모든 DBA에게 부여되어 있습니다.

2. 새 버전의 database release에서 오래된 EXPORT를 사용하기 위해서는
database에 접속하기 위해서 SQL*Net 이나 Net8 를 사용해야 합니다.

EXP /@...

3. 새 버전의 database release에서 오래된 EXPORT를 사용하기 위해서는
default인 CONVENTIONAL path export를 사용해야 합니다
(즉: export명령에 DIRECT=YES를 주어서는 안됩니다.)
conventional path export는 table에서 data를 추출하기위해 SQL SELECT
statement를 사용합니다.
direct path export는 data를 직접 바로 읽어 SQL Command Processing
layer(evaluating buffer)를 거치지 않습니다.

4. export 와 import views의 version을 확인하려면
다음처럼 sys.props$를 조회해서 알 수 있습니다.

SQL> SELECT * FROM sys.props$ WHERE name LIKE 'EXPORT%';

NAME VALUE$ COMMENT$
------------------------- ----------- ------------------------
EXPORT_VIEWS_VERSION 8 Export views revision #

EXPORT_VIEWS_VERSION의 의미는 다음과 같습니다.

+-------------------------------+
| EXPORT_VIEWS_VERSION |
+-------+-----------------------+
| Value | Introduced in Release |
+-------+-----------------------+
| *)| 7.0.* | *) no compatibility - assume zero
| 1 | 7.1.3 |
| 2 | 7.2.1 |
| 3 | 7.2.3 |
| 4 | 8.0.1 |
| 5 | 8.0.2 |
| 6 | 8.0.3 |
| 7 | 8.0.4 |
| 8 | 8.1.6 |
+-------+-----------------------+