Legacy 테이블을 인터페이스 하다 보면, 다양한 데이터베이스의 데이터를 가져오게 됩니다. 일반적으로 소스 시스템의 구조와 동일하게 타깃 시스템에 만듭니다. 이는 인터페이스가 정확히 되었는지를 확인하기에도 용이합니다.
그래서 오라클 database의 테이블을 MySQL에 생성하다보면 이기종 database이기 때문에 부분적으로 오류가 발생합니다. 오늘은 Oracle → MySQL로 테이블을 생성할 때 발생하는 3가지 오류에 대해 살펴보겠습니다.
1. 인덱스 생성 길이 오류
오류 내용 : Error Code : Specified key was too long; max key length is 3072 bytes
원인
- PK생성시 인덱스 키 길이가 3,072 byte 초과하면 발생
- Database 생성시 Character set을 'UTF8MB4'로 생성해서 한글 한글자당 4byte를 차지함
- 인덱스 키의 총 길이의 합이 초과됨
방안
- PK를 삭제하는 방식으로 처리
- 가능한 작은 PK로 재구성
2. 테이블 생성할 때 문자타입(varchar 등) 길이 제한
오류내용 : Error Code [1118][42000] : Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535,
원인
- MySQL 테이블 최대 문자타입 사용 총 컬럼 사이즈는 65,535 byte로 제한되어 있음
방안
- varchar(2000) 이상인 컬럼은 'text' type으로 변경.
3. Character Set 인지에 따른 한글컬럼 사이즈 증가
오류내용 : 마이그레이션 시 한글 데이터 포함 컬럼 사이즈 오버(size over) 오류 발생
원인
- Character set을 'UTF8MB4'로 함으로써 한글자당 4byte씩 차지(오라클은 2byte 차지)
해결
- 한글 데이터 포함 예상 컬럼은 Type의 길이를 2배 증가하여 생성함
- 예를 들어, ~명, ~설명, ~내용의 도메인은 타입 길이 2배 증가
- 한글의 경우 utf8로 지정했을 경우 3 bytes를 차지함
'데이터베이스' 카테고리의 다른 글
Sqlplus spool 명령어, set 설정으로 csv 데이터 추출 방법 (0) | 2024.07.19 |
---|---|
알티베이스(Altibase) 특징 및 DBeaver 접속 방법 (0) | 2024.07.16 |
Erwin 논리 모델 컬럼 한글명 표시하기 (0) | 2024.07.04 |
MySQL 성능 개선 3원칙: 데이터 타입 편 (0) | 2024.07.03 |
PostgreSQL vs MySQL, 오픈소스 db 뭐가 더 좋을까? (0) | 2024.07.02 |