개발자의 끄적끄적

[oracle] Migration(Export /Import(CLOB))[펌] 본문

개발/sql

[oracle] Migration(Export /Import(CLOB))[펌]

효벨 2020. 2. 3. 01:00
728x90
반응형

[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를 하면? 저장된 데이터의 수는?

19백 건이 된다. 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))|작성자 홧팅

 

dark396님의 블로그 : 네이버 블로그

자기소개가 없습니다.

blog.naver.com

 

반응형
Comments