본문 바로가기
Oracle/이관

EXP/IMP 데이터 이관 테스트 (case 캐릭터셋이 서로 다른 DB)

by 취미툰 2021. 11. 26.
반응형

테스트 정보

AS - IS : 9i 

TO -BE : 19.12

 

기존에 쓰던 DB의 데이터를 새로운 DB로 이관하는 내용이었습니다.

9i이므로 datapump(impdp/expdp) 는 사용불가,

서로 간의 링크도 연결이 되지 않는 상태.

그래서 EXP/IMP로 이관방법을 정했습니다.

근데 또하나의 문제가 있었습니다. 바로 DB간의 캐릭터셋이 다른것이었습니다.

SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';

AS-IS


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

TO-BE 


PARAMETER              VALUE
-----------------------------------------------------------------------------------------------
NLS_CHARACTERSET       AL32UTF8

1 rows selected.

 

아래 글을 확인해보면 캐릭터 셋에 대한 기본적인 내용을 확인할 수 있습니다.

2020.04.20 - [Oracle/아키텍쳐] - Character Set

 

Character Set

DB의 캐릭터셋(Character Set)이란 중요한 요소입니다. DB에 데이터를 저장할때 어떤 형식으로 저장할것인지 결정하는 요소이기 때문이고, 여러가지 종류가 있지만 종류에 따라서 글자수 당 byte가 다

bae9086.tistory.com

결론적으로는 KO16KSC5601 -> AL32UTF8 간 이관은 잘 수행되었고, 한글데이터의 바이트 처리(UTF의 경우 3bytes KO16KSC5601(MSWIN949)의 경우 2bytes)때문에 에러가 난 테이블에 한해서 컬럼 사이즈 증가작업을 수행하고 다시 시도 하여 이관을 완료하였습니다.

 

Source DB

1.EXP 수행

exp \'/ as sysdba\' file=xxx_211123.dmp tables=xxx log=xxx_211123.log

2.EXP 수행 후 dmp파일 Target DB로 전송

Target DB

 

3.테이블 메타데이터로 미리 테이블 생성(컬럼 사이즈 증가가 필요한 컬럼에 대해 미리 적용을 하기 위함)

생성을 위해선 REM을 제거하고 파일을 다듬는 과정이 필요합니다.

imp \'/ as sysdba\' fromuser=xxx touser=hr file=xxx_211123.dmp indexfile=test.sql


--test.sql 내용

REM  CREATE TABLE "HR"."COL_TEST" ("ID" NUMBER, "NAME" VARCHAR2(4000),
REM  "ADDRESS" VARCHAR2(4000), "SALARY" NUMBER) PCTFREE 10 PCTUSED 40
REM  INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 4294967294 NEXT 1048576
REM  MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
REM  TABLESPACE "USERS" LOGGING NOCOMPRESS ;
REM  ... 0 rows

현재 컬럼의 크기의 2배정도로 설정해서 증가해주었습니다.

ALTER TABLE hr.col_test ASK_TITLE VARCHAR2(200); -- (actual: 144, maximum: 100)

 

4.IMP 수행

ignore 옵션을 N으로 놓아서 IMP 시 테이블 생성이 되지 않게 했고,(이미 생성했기 떄문에) RESUMABLE=y옵션을 사용하여 용량부족이 발생했을 때 작업을 종료하지 말고 대기하도록 하였습니다.

 imp \'/ as sysdba\' FROMUSER=xxx TOUSER=hr file=xxx_211123.dmp log=xxx_211123.log ignore=y RESUMABLE=y
mport: Release 19.0.0.0.0 - Production on Thu Nov 25 13:22:19 2021
Version 19.12.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.


Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.12.0.0.0

Export file created by EXPORT:V09.02.00 via conventional path
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export client uses KO16KSC5601 character set (possible charset conversion)
IMP-00403:


. importing VOCUSER's objects into VCDMIG
. . importing table                  "VC_CHNL_ORG"        116 rows imported
. . importing table              "VC_CHNL_ORG_MGR"       2371 rows imported
...생략

 

끝.

반응형

댓글