* import/export.
데이터베이스의 백업(backup)과 복구(recovery), 다른 머신으로 데이터나 데이터 베이스를 옮기기 위해 사용된다. 오라클의 imp/exp 유틸은 오라클전용 binary file 형식으로 데이터를 가공하므로 오라클 사이에서만 쓸수 있다. 정리해 볼까?
import/export 유틸리티의 사용목적
- 백업과 복구 ( 작은 디비의 경우 )
- 데이터 재구성 ( re - fragmentation, organization )
- 디비가 날아갈 것에 대비해서.
- 디비간의 tablespace 이동.
* 사용법
imp/exp 라고 쳐도 아무 응답이 없는 경우... DBA등 시스템 관리자가 보안상의 이유로 막았을 수 있고( 이럴경우, 전화해야지), 아닌 경우는 path 에 추가되지 않아서 이다. path 에 $ORACLE_HOME/bin 를 추가한다. 도움말이 필요한 경우, "exp help=yes" 또는 "imp help=yes" 라고 친다.
* 테이블에서 특정 subset 만 옮기고 싶다.
oracle 8i 부터 지원되는데, 옵션에 'QUERY='를 추가한다.
예 ) exp scott/tiger tables=emp query=\"where deptno=10\"
* import 시에, 모니터링 하고 싶다면..
방법 1.
select substr(sql_text,instr(sql_text,'INTO "'),30) table_name,
rows_processed,
round((sysdate-to_date(first_load_time,'yyyy-mm-dd hh24:mi:ss'))*24*60,1) minutes,
trunc(rows_processed/((sysdate-to_date(first_load_time,'yyyy-mm-dd hh24:mi:ss'))*24*60)) rows_per_min
from sys.v_$sqlarea
where sql_text like 'INSERT %INTO "%'
and command_type = 2
and open_versions > 0;
방법 2.
FEEDBACK=n 이라는 옵션을 붙이면, N Row 가 들어가면 '.' 이 찍힌다.
* 다른 Tablespace 로 테이블을 이동시킬 수 있는가?
오라클에서 이것을 지원한 특별한 옵션이 있는 건 아니고... 다음 방법중 하나를 사용한다.
방법 1. 올바른 테이블스페이스에서 테이블을 다시 만들어 낸다.
1. INDEXFILE= 옵션을 통해서, 덤프파일을 import 한다.
2. 위의 인덱스 파일을 수정해서, 올바른 tablespace 로 수정한다.
3. 인덱스 파일을 실행한다. 이러면 테이블도 같이 만들어진다.
4. IGNORE=Y 옵션을 사용하여 테이블을 옮긴다.
방법 2. 사용자의 default tablespace 를 바꿔라.
1. 사용자에게 UNLIMITED TABLESPACE 권한을 없앤다.
2. export 된 테이블스페이스의 사용자 쿼터를 없앤다. 흠.. 이렇게 하믄, 사용자의 default tablespace 에 테이블을 만들게 된다고 한다.
3. tablespace 를 새로 만들고, 테이블을 import 한다.
* import 하기전에, sequence, index 는 drop해라.
* 다른 버전 사이에서 imp/exp
upwards compatible. 당연하게도,, 신버전은 구버전을 받아올 수 있다. 반대, 즉 backwards compatibility 를 위해서는 catexpX.sql 를 사용한다. 예를 들어, $ORACLE_HOME/rdbms/admin/catexp7.sql 를 사용해서 오라8 에서 오라7.3 으로 imp/exp 할 수 있다.
* 파일 여러개로 export 하는 법.
파일 사이즈를 지정해서 여러 파일로 나누어서 export 한다. 이렇게 하면, 유닉스의 2기가 한계도 피해 갈 수 있다.
예) exp SCOTT/TIGER FILE=D:\F1.dmp,E:\F2.dmp FILESIZE=10m LOG=scott.log
* 유닉스의 2기가 한계를 피하는 법
만들면서 바로 gzip 을 이용해 압축하는 방법을 사용한다.
# create a named pipe
mknod exp.pipe p
# read the pipe - output to zip file in the background
gzip < exp.pipe > scott.exp.gz &
# feed the pipe
exp userid=scott/tiger file=exp.pipe ...
* imp/exp 의 수행능력을 향상시키는 방법
EXPORT
- BUFFER 옵션의 값을 좀더 높게 준다. (예를 들어, 2M)
- RECORDLENGTH 옵션의 값을 좀더 많이 ( 예를 들어, 64 K )
- 불필요한 프로그램의 실행을 중지하고,
- multi export 라면, 다른 물리공간을 사용하도록 한다.
- NFS 파일 시스템으로 export 하지 마라.
IMPORT
- 인덱스 파일을 만들어라. 파일내에 있는 인덱스는 import 되지 않는다.
- 데이터 파일과 인덱스 파일은 물리적인 디스크 공간을 분리하라.
- init$SID.ora 파일의 DB_CACHE_SIZE (DB_BLOCK_BUFFERS : 9i 이전 버전)의 사이즈를 크게한다.
- LOG_BUFFER 의 크기를 늘인다.
- redo log archiving 을 중지한다. (ALTER DATABASE NOARCHIVELOG;)
- 큰 사이즈의 rollback segment 를 가지는 큰 tablespace 를 만든다. system rollback segment 를 제외한 나머지 rollback segment 를 offline 상태로 만든다.
- COMMIT=N
- ANALYZE=N
* imp/exp 할때 만나는 에러.
ORA-00001: Unique constraint (...) violated
중복되었단 이야기고, IGNORE=NO 를 통해서 이미 존재하는 테이블을 건너뛴다.
ORA-01555: Snapshot too old
사용자가 export를 멈출 것인지 물어보거나, CONSISTENT=NO를 옵션을 준다.
ORA-01562: Failed to extend rollback segment
rollback segment 의 크기를 늘여주거나 import 할때 COMMIT=Y 옵션을 사용한다.
IMP-00015: Statement failed ... object already exists...
IGNORE=Y 옵션을 준다. 조심할 것은 중복된 row 가 생기지 않게..
[출처] [펌] import/export 사용|작성자 짱가
'DataBase > Oracle' 카테고리의 다른 글
중복행제거 (0) | 2008.08.07 |
---|---|
[펌] 쿼리 - 사용자별 테이블 생성 스크립트 알아내기 (0) | 2008.08.05 |
[펌] 오라클 딕셔너리 (0) | 2008.08.05 |
[펌] 오라클(ORACLE) 실무강좌 (0) | 2008.08.05 |
ALTER명령어 모음 (0) | 2008.07.10 |