Background Image
조회 수 13256 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

MySQL에서 사용하는 스키마 변환시 주의 사항.( CUBRID 2008 R4.0 기준)

 

주의사항 정리

1, MySQL에서 fulltext 인덱스가 있는 경우, 에러를 출력함. CUBRID에서는 fulltext 인덱스 지원하지 않음.

2, CUBRID SET 타입에 대해 Index를 걸 수 없음.

3, MySQL에서 Set 타입 사용 예: MySQL 의 컬럼이 set('News','Sports') 일 때, 1을 넣으면 mysql char 'News' INSERT해 준다. 따라서 cubrid 에서는 varchar로 선언하고, SQL에서 CASE WHEN으로 입력하도록 가이드하였음. (이 방법의 정확성은 계속 확인할 필요가 있음)

4, CREATE /*+ NO_STATS */ INDEX "idx3" ON "office"("type","office_id"); // 생성할 수 없는 인덱스

5, MySQL에서는 a,b,c 컬럼에 대해서 인덱스를 2개 이상 만들 수 있지만, CUBRID는 만들 수 없음.

6, MySQL 에서 "를 사용해서 문자열을 넣지만, CUBRID에서는 '을 사용한다.

7, MySQL DESC 인덱스를 생성할 수 없으므로, 고의로 -를 곱해서 넣은 경우가 있음. 이 경우 원 값을 저장하는 컬럼과 -를 곱한 컬럼을 테이블에 저장하고 있음. 따라서 CUBRID 가져올 때 인덱스 필요성 유무를 판단한 다음, 컬럼과 인덱스를 만들 때 주의해야 함

8, CUBRID blob 타입 컬럼은 NOT NULL로 지정 못 함.

9, float(5,1)--> numeric(5,1)의 형식으로 변환

10, CUBRID에서는 "timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP" 의 컬럼 정의가 불가능함. on update ~ 를 지워야 함.

 

질의 변환 예

1, CUBRID JOIN을 이용한 UPDATE 불가: 변환할 수 없는 경우도 있음. 아래의 경우는 패턴이 단순하여 변환이 가능하였음.

변경 전

변경 후

UPDATE video_info V,
(SELECT DISTINCT service_info_id
FROM service_info
WHERE post_key =?
AND service_id = ?) S
SET V.private_flag = #privateStatus#

WHERE V.service_info_id = S.service_info_id

 

 

 

UPDATE video_info V

SET V.private_flag = #privateStatus#
WHERE V.service_info_id in (SELECT DISTINCT service_info_id
FROM service_info
WHERE post_key =?
AND service_id =?)

 

 

 

UPDATE video_info_master vim, video_info vi

SET vim.play_count = vim.play_count + 1
WHERE
vi.video_master_id = vim.video_master_id
AND vi.video_id =?
AND vi.private_flag = 10

UPDATE video_info_master vim
SET vim.play_count = vim.play_count + 1
WHERE
vim.video_master_id in (SELECT vi.video_master_id
FROM video_info vi
WHERE vi.video_id =?

AND vi.private_flag = 10 )

 

마이그레이션시 고려할 부분

1, 소스 테이블의 NOT NULL column NULL 들어 있는 경우가 있을 수 있음. 소스 테이블의 최초 스키마는 Nullable column이었거나, 다른 문제로 유입되었을 것임.

2, mysqldump를 사용해서 마이그레이션할 때, --tab으로 데이터를 뽑을 때는 mysqld를 실행한 계정과 같은 계정으로 뽑아내야 함.

 

마이그레이션 완료후 필요한 작업

1, MySQL AUTO_INCREMENT 컬럼의 최대값보다 충분히 큰 값으로 CUBRID의 시리얼 값을 변경해주어야 함. 그렇지 않으면 Insert 질의 실행할 때 Unique Violation이 날 수 있음. 작업 지시서에 꼭 넣어야 함.

 


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
279 운영관리 csql 데이터 입력방법 정만영 2009.06.09 213462
278 마이그레이션 CUBRID vs MySQL vs ORACLE SQL 타입별 비교 정만영 2013.07.12 69169
277 응용개발 weblogic 8.1 에 CUBRID Connection Pool, DataSource 설정 방법 file 웁쓰 2009.07.01 66306
276 응용개발 WHERE 조건에서 다중 컬럼 IN절 처리 최적화 방법 (cubrid + ibatis) 1 이상신 2015.08.21 55155
275 응용개발 Weblogic 10.0 사용시 JDK 1.5를 사용한 JDBC 드라이버 사용시 주의사항. cubebridge 2012.02.22 51957
274 마이그레이션 타 DBMS를 CUBRID로 마이그레이션 시 varchar,char 컬럼 사이즈 관련 손승일 2010.07.01 38028
273 질의작성 데이터 존재하면 update, 존재하지 않으면 insert 방법(ON DUPLICATE KEY UPDATE) 손승일 2010.08.11 38003
272 질의작성 예약어를 테이블명이나 컬럼명으로 사용시 admin 2008.11.21 37455
271 기타 좀비 프로세스 일괄 삭제하기 janus 2009.12.12 36480
270 응용개발 JDBC 사용시 SQL 로깅 - p6spy 사용 1 웁쓰 2009.07.01 36003
269 응용개발 CUBRID AUTO_INCREMENT 컬럼 MySQL LAST_INSERT_ID() 대체 방법 손승일 2009.12.22 33235
268 운영관리 CUBRID에서의 BLOB/CLOB 사용시 백업 및 복구에 대한 주의 점 cubebridge 2012.09.18 33157
267 마이그레이션 MySQL의 limit 명령어 처리 1 admin 2008.11.21 32686
266 CUBRID 매니저 Java SP사용시 JNI_CreateJavaVM 에러메시지 해결 방법 file seongjoon 2009.07.15 32043
265 응용개발 php에서 serialize/unserialize 사용 시 주의할 점 시난 2009.12.29 31631
264 운영관리 CUBRID 사용시 방화벽 설정 3 admin 2008.11.21 31000
263 마이그레이션 CUBRID 하위버젼에서 CUBRID2008로의 업그레이드 방법 1 남재우 2008.12.06 30154
262 운영관리 큐브리드 사용포트 정리 3 정만영 2009.06.19 29786
261 질의작성 CUBRID DB 내의 auto_increment 값을 초기화 하자. 손승일 2009.10.28 29735
260 응용개발 CUBRID와 Oracle에서의 ''(공백)의 차이 비교 cubebridge 2010.10.01 28584
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
/ 14

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales