현상
참고
유틸리티 : table_migrator
버전 : T-Up_20240927_win.zip
위의 환경에서 진행되었습니다.
데이터 INSERT
CUBRID 테이블의 각 row에 '', NULL, ' ' 데이터를 INSERT합니다.
* 빈문자열('') 데이터를 CUBRID 에서는 string으로 TIBERO 에서는 NULL로 취급합니다.
INSERT INTO MIG_TEST1 VALUES('DCT001','FM001','');
INSERT INTO MIG_TEST1 VALUES('DCT002','FM002',NULL);
INSERT INTO MIG_TEST1 VALUES('DCT003','FM003',' ');
SQL
복사
table_migrator 수행
INSERT_ZERO_LENGTH_STRING_AS_NULL=N 옵션을 사용하여 CUBRID TO TIBERO table_migrator를 수행합니다.
PROPERTY_FILE=migrator.properties.cubrid
SOURCE_TYPE=generic
SOURCE_DRIVER=cubrid.jdbc.driver.CUBRIDDriver
SOURCE_URL=jdbc:cubrid:192.168.1.188:33000:demodb:::
SOURCE_USER=dba
SOURCE_PASSWORD=************
SOURCE_SCHEMA=PUBLIC
SOURCE_SCHEMAORIGN=PUBLIC
SOURCE_TABLE=mig_test1
SELECT_SUBPARTITION=
BATCH_THRESHOLD=128
EXTRACT_PARALLEL=N
EXTRACT_THREAD_COUNT=1
SOURCE_TABLE_DEDUPLICATE=N
USE_PARALLEL_HINT=N
PARALLEL_HINT_CNT=-1
USE_OBJECT_PARALLEL_HINT=N
TARGET_TYPE=DEFAULT
TARGET_DRIVER=com.m.internal.jdbc.MInternalDriver
TARGET_URL=jdbc:internal:thin:@localhost:7629:tibero7
TARGET_USER=sys
TARGET_PASSWORD=************
TARGET_SCHEMA=tibero
TARGET_TABLE=mig_test1
COMMIT_SIZE=-1
INDEX_DISABLE=N
SELECT_FETCH_SIZE=1024
SELECT_AS_BYTE=N
DB_FILE_MULTIBLOCK_READ_COUNT=-1
INSERT_METHOD=dpl
INSERT_BATCH=Y
INSERT_PARALLEL=N
INSERT_THREAD_COUNT=1
INSERT_ZERO_LENGTH_STRING_AS_NULL=N
DPL_LOG_UNIT=500
LOG_FILE_NAME=tableMigrator.log
LOG_LEVEL=INFO
CHECK_COLUMN_METADATA=N
SOURCE_OBJECT_NAME_CASE_TYPE=UPPER
TARGET_OBJECT_NAME_CASE_TYPE=UPPER
SQL
복사
결과
길이 값이 NULL인 NULL 데이터도 ' '으로 이관됩니다.
예시 : NVL2(C3, 'NOTNULL', 'NULL')
데이터 | 기대 결과 | 실제 결과 |
'’ | NOTNULL | NOTNULL |
NULL | NULL | NOTNULL |
' ‘ | NOTNULL | NOTNULL |
원인
기존 INSERT_ZERO_STRING_AS_NULL 옵션의 목적은 Source에서 빈 문자열('')이었던 데이터가 Tibero에서 입력 시 NULL로 변환되지 않도록 방지하는 것이었습니다.
하지만, Source에서 NULL이었던 데이터를 NULL이 아닌 값으로 변경하는 기능까지 포함되면서 문제가 발생하였습니다.
해결
NULL인 데이터가 그대로 NULL로 이관되도록 기능이 수정된 T-up_20241029_win.zip 이후 버전의 T-UP을 사용해 합니다.