일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 주식
- Stock ipo
- 공모주 청약
- MYSQL
- 코드이그나이터
- css
- 자바
- Oracle
- 주식 청약
- Stock
- JavaScript
- IPO
- linux
- 공모주
- 7월 공모주 청약 일정
- 제이쿼리
- 리눅스
- Eclipse
- jquery
- 주식 청약 일정
- html
- 맥
- 공모주 청약 일정
- 자바스크립트
- SQL
- 6월 공모주 청약 일정
- php
- java
- 오라클
- codeigniter
- Today
- Total
개발자의 끄적끄적
[oracle] Migration(Export /Import(CLOB))[펌] 본문
[oracle] Migration(Export /Import(CLOB))[펌]
n Migration
※ Migration 기본적 순서
- AS-IS(현 서버)와 TO-BE(이전할 서버의 사용자 계정과 각 사용자의 default tablespace과 Character set를 동일 하게 설정 )
- Privileg와 role을 동일하게 설정
- schema 별로 exp를 수행해서 imp를 수행
- 9i에서는 export/import 툴을 사용하며, 10g부터는 datapump를 사용한다.
- No archive로 DB 운영하는 곳은 export/import를 이용해서 begin backup 한다
1. Export
- 원하는 데이터만 추출해서 하드에 저장하는 툴.
- exp 받은 dmp 파일은 imp를 하기 위해서 바이너리 파일로 변환되어 만들어 진다.
- Export를 수행하기 위해서는 sys스키마의 catalog.sql이 실행되어 있어야 한다
Catalog.sql 스크립트 안에는 catexp.sql 스크립트가 포함되어 있다
- exp 내부 과정: Create table -> Insert -> Create Index -> add Constraints.
테이블 스페이스의 exp는 exp유틸이 자동으로 해당 테이블스페이스를 default tablespace로 사용하는 schema
를 찾아서 해당 계정으로 로그인하는 과정이 Create table과정 앞에 추가된다.
그 후, 사용자가 해당 테이블스페이스에 생성한 테이블들 단위로 exp 받게 된다.
1.1 Convention Path export
메모리(DB buffer Cache)에 올려놨다가 파일을 꺼내는 방법. 공유 되야 할 파일들일 때 주로 사용.
A가 올려도 B와 C등 여러 사람이 사용하는 파일이면 메모리를 거쳐서 빼내는 것이 속도가 빠르다.
다수 사용자가 동시에 사용할 경우 적합하며, default로 Convention Path가 정해져 있다.
Export 유틸리티에 유저id, password를 지정하고 서버에 접속을 명령하면, 서버프로세스는 검색 조건을 실행하여 검색한다.
검색 후, Export client가 메모리에 Evaluation buffer를 생성하고, 이 evaluation buffer로 가져 온 후 하드에 백업 파일을 저장 시킨다.
DB의 데이터가 변경되어도 무관하다.
※ Evaluation buffer
Direct path의 경우 다수 사용자(Process)가 동시에 접속하여 사용할 경우, 속도가 저하될 수 있는데, Convention Path에서는 메모리에 evaluation buffer를 생성하여 이를 해결한다.
백업 받는 파일은 Binary 파일로 생성된다. 서버에 존재하는 파일은 텍스트 파일인데,
Export 유틸리티가 Evaluation buffer에서 텍스트 파일을 Binary 파일로 변경해준다
1.2 Dircet Path export
- 다른 사용자와 공유할 필요가 없는 데이터들일 때 주로 사용.
- 메모리를 사용하지 않고, 바로 하드에서 파일을 읽고 바로 하드에 저장한다.
- 텍스트를 DB에서 바이너리로 변경해야 하기 때문에 DB의 데이터에 Lock을 걸어 놓아서 다른 사람이 데이터를 사용하지 못하도록 한다.
※ export 옵션들
옵션 이름 |
Default value |
설명 |
userid |
없음 |
export를 수행하는 사용자의 계정과 암호 |
buffer |
OS에 따라 다름 |
evaluation buffer 크기를 바이트단위로 지정 |
file |
expdat.dmp |
export 결과를 저장할 파일명 |
grants |
yes |
헤딩 스키마에 설정된 권한을 export 받을 것인가 유무 |
indexes |
yes |
인덱스를 export 받을 것인가 유무 |
rows |
yes |
데이터를 받을 것인가 유무 |
constraints |
yes |
제약조건을 받을 것인가 유무 |
compress |
yes |
export 받을 때 데이터를 하나의 셋으로 압축할 지 유무 |
full |
no |
전체 데이터베이스를 export 받을 것인가 유무 |
owner |
current user |
export 받을 사용자 이름을 지정 |
tables |
없음 |
export 받을 테이블 이름을 지정 |
tablespaces |
없음 |
export 받을 테이블스페이스 이름 지정 |
recordlength |
Os에 따라 다름 |
파일레코드의 바이트 단위 길이. evaluation buffer에서 데이터 파일로 저장할 때 운반 바이트 단위 지정 |
inctype |
없음 |
증분 export 의 유형설정. complete, cumulative, incremental |
record |
yes |
증분 export 내용을 기록할지 지정. sys.incvid, sys.incexp |
parfile |
없음 |
export 파라미터 파일을 지정 |
==============
추가 옵션 (statistics)
==============
1. " EXP-00091: Exporting questionable statistics (불완전한 통계로 Export 중임)" 과 같은 메시지가 뜨면..
이는 Character Set이 동일하지 않아서 발생하는 문제로써 Oracle 9i부터는 Export시에 통계정보를 dump
file 에 저장 하도록 되어 있다.
이에 Character Set을 동일하게 맞추거나, export 할 경우 statistics=none 옵션을 사용 하면 해결 된다
이런 Export file은 Import시에 statistics=safe 옵션을 사용함으로써 통계정보를 다시 생성하여 올릴 수 있다
2. Import
- Export로 받아들인 데이터를 부어 넣는 것
- DDL과 DML작업을 수행하는 것이므로 Redo log과 undo segment를 사용한다. 대량 데이터를 import할 때는 큰 용량의 undo tablespace를 준비해야 한다.
- 용량이 부족할 경우 에러가 발생하며 rollback되며, import 할 때 commit=y 로 변경하고 import를 수행하면 array단위로 commit을 수행하기 때문에 전체가 rollback 되는 것을 방지할 수 있다.
- Export한 계정과 동일한 계정으로 import 해야 한다.
※ import 옵션
옵션 이름 |
Default value |
설명 |
userid |
없음 |
import 를 수행하는 username/password |
buffer |
OS에 따라 다름 |
evaluation buffer 의 크기. export 와 동일 |
file |
expdat.dmp |
import 할 export 파일 명 |
show |
no |
데이터를 import하지 않고 내용만 확인 |
igonore |
yes |
import 도중 에러 나도 무시하고 계속 진행 |
grants |
yes |
권한도 import 할 것인지 설정 |
rows |
yes |
데이터를 import 할 것인지 설정 |
indexes |
yes |
index를 import 할 것인지 설정 |
full |
no |
전체 파일을 import 할 것인지 설정 |
fromuser |
없음 |
export 할 당시 오브젝트의 소유자를 지정 |
touser |
없음 |
import 할 오브젝트의 새 owner 이름 |
tables |
없음 |
import 할 테이블 목록 |
recordlength |
OS별로 다름 |
한번에 import 할 record의 길이를 지정 |
inctype |
없음 |
증분 import 의 유형 지정. System과 resotre가 적당 하다 |
commit |
no |
각 array 의 입력 후 commit 할 것인가 결정. 디폴트는 array 가 아니라 테이블 전체가 입력 완료 된 후 commit 을 한다. array 는 한번 입력되는 단위를 의미한다. |
parfile |
없음 |
import 의 파라미터를 적어둔 파라미터 파일을 지정 |
가정1 ) 1천 건짜리를 Import 하다가 9백 건 들어가고 에러 나서 9백 건 저장되어있는 상태. 다시 Import를 하면? 저장된 데이터의 수는?
1천9백 건이 된다. Import는 추가가 된다. 에러 나서 다시 import해야 한다면 저장된 데이터를 truncate하고 import해야 한다
가정 2) Server 1의 Scott 사용자는 default tablespace가 Users. Server 2의 Scott의 default tablespace는 Example.
Server 1에서 Scott 사용자의 tt.600 테이블을 exp 받아서 Server2로 imp하면 Server 2의 어느 tablespace로 imp되나?
è Serve1에서 설정된 default tablespace인 User로 저장된다.
è Server2에 Users tablespace가 존재하지 않다면 import는 되지 않는다.
※ 테이블이 어느 테이블 스페이스에 저장되었는지 확인
SQL> select owner, table_name, tablespace_name
2 from dba_tables
3* where table_name='TT00'
OWNER TABLE_NAME TABLESPACE_NAME
------------------- ------------------------- -----------------------
SCOTT TT00 CLONE_TEST
SYSTEM TT00 SYSTEM
※ 사용자의 default tablespace 확인
SQL> select username, default_tablespace
2 from dba_users
3 where username='SCOTT';
※ 사용자의 default tablespace 변경하기
SQL> alter user scott default tablespace example
CLOB의 경우
char → varchar2 → CLOB
2000 4000 2기가이상데이터
LOB : 하나의 컬럼에 크기가 큰 데이터
L arge
OB ject
CLOB : 글자로 구성
Character
L arge
OB ject
BLOB
Binary
L arge
OB ject
ex)
대본 tabale → users 테이블스페이스에 존재
--------------------
code 드라마명 대본
--------------------
....
대본 컬럼이 너무 커서 CLOB의 경우 컬럼하나만 별도의 테이블스페이스 지정해준다.
▶ export 후 import 할경우 해당 테이블스페이스가 없으면 에러남 → 미리 생성해주기
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 실습 시작
1. CLOB 컬럼을 포함한 테스트 테이블 생성
SQL> create tablespace ts_lob
2 datafile '~/ts_lob01.dbf' size 1M
SQL> create table scott.clobtest
2 (no number, name varchar2(10), contents clob)
3 lob(contents) store as (tablespace ts_log);
SQL> insert into scott.clobtest
2 values (1,'AAA','BBBBB');
2. 현재 LOB 목록 확인
col owner for a10
col table_name for a10
col column_name for a10
col segment_name for a30
col tablespace_name for a10
SQL> select owner, table_name, column_name, segment_name, tablespace_name
2 from dba_lobs
3 where table_name='CLOBTEST'
3. Export
$ exp scott/tiger table=cobtest file=clobtest.dmp
4. Import
해당 테이블스페이스 없으면 에러발생함
해당 테이블스페이스 생성후 import 해주기
SQL> create tablespace ts_lob
2 datafile '~/ts_lob01.dbf' size 1M
$ imp scott/tiger file=clobtest.dmp fromuser=scott ignore=y
[출처] Migration(Export /Import(CLOB))|작성자 홧팅
'개발 > sql' 카테고리의 다른 글
[sql] CRUD란? (Create,Read,Update,Delete) [펌] (0) | 2020.02.14 |
---|---|
[mysql] 컬럼 추가 방법 (0) | 2020.02.03 |
[MySQL] 기본 명령어 - 필드 추가, 수정, 삭제 [펌] (0) | 2020.01.31 |
[ERWin] ERWin으로 DB모델링 하기[펌] (0) | 2020.01.30 |
[oracle] LONG과 CLOB 에 대한 데이터 이전[펌] (0) | 2020.01.23 |