from mssql to mariadb
TRANSCRIPT
From MSSQL to MariaDB
2015. 3. 7.
(주)이카운트
허상국
• 경력 - 현) ㈜이카운트
- 전) ㈜온디멘드
- 전) 넥슨JAPAN 러시모(구.QUADDIMENSIONS)
- 전) 예스이십사
발표자 소개
• 이름
- 허 상국
• 커뮤니티
- MySQL Power Group
- SQLTAG.ORG
목차
1 계획 단계
3 향후 계획
2 진행 단계
Migration 수행 개요
대상 업무
- 어떤 업무를 MSSQL 기반에서 MariaDB로 이관할 업무
Migration 대상 범위
Migration 수행 일정
계획단계
구분 대상업무 전환 현황 전환 대상 비고
Object 수 00 개
+Table Type 수 00 개 •MSSQL 기반 Table 대상
•MSSQL Data
+SP, Function Type 수 00 개 •MSSQL 기반 DB 내 Object
APPLICATION 수 00 본 •APPLICATION내 SQL 문 전환 및 적용, 테스트
개발언어 닷넷 •APPLICATION내 SQL 문 전환
업무구분 진행단계 주요 Activity 작업 기간(2014/00/00 ~ 00/00) R&R 비고
W W+1 W+2 W+3 W+4 W+5 W+6 W+7 W+8 개발자 DBA
마이그레이션 대상 업무
분석 환경 분석 O O
환경구축 O O
전환
DB Object 전환 X O
Application 전환 △ O
Data 이관(TEST 이관 포함) X O
TEST Application TEST 진행 O O
결과 보고서 작성 O O
1
Migration 수행 개요 - Database Schema Migration 세부 계획
계획단계
대상 파악 및 객체분석,데이터분석, 위험요소 파악
Table, Index, Function, Procedure
…
Table 건수 파악 오류데이터 검증
[1단계] [2단계] [3단계]
변환객체 검증 보완
시스템 분석 객체변환 데이터 이관 변환 객체 검증
후 보완
MariaDB MSSQL
1
마이그레이션 관련 진단 자동화 툴
이슈 - SQL Server 에 이관대상 DB OBJECT가 너무 많아서 작업량 산정에 감이 잡히지 않는다 이 문제를 어떻게 해결할 것인가?
- MariaDB로 이관작업을 완료하였다. 제대로 적용했는지 한방에 알 수 있는 방법은 없을까?
계획단계
2
해결방안
- MySQL Workbench: Database Migration
MySQL Workbench 툴에서 제공해 주는 DATABASE WIZARD 툴을 사용하여 MSSQL의 DB OBJECT 구문을 MariaDB용 DDL문과 MSSQL DB 오브젝트 관련 스크립트를 추출할 수 있다.
- SQL Server Migration Assistant for MySQL (MySQLToSQL)
SQL Server Migration Assistant 툴을 사용하여 구현된 MariaDB 소스에 대한 검토 및 스크립트를 추출할 수 있다.
마이그레이션 관련 진단 자동화 툴 - SQL Server Migration Assistant (SSMA)
계획단계
2
마이그레이션 관련 진단 자동화 툴 - MySQL Workbench Data Migration Wizard
계획단계
2
DEMO
(스크린샷)
목차
2 진행 단계
3 향후 계획
1 계획 단계
데이터 모델링
이슈 - SQL Server 와 MariaDB는 각각의 고유한 DATA TYPE과 특징을 가지고 있다. 어떻게 작업을 해야 이관대상 DATA들이 MariaDB에 정확하게 저장될 수 있을 것인가?
진행단계
1
해결방안
- DATA TYPE의 특징에 따라 매핑 Rule을 정의하고 해당 RULE 맞추어 데이터를 이관할 수 있도록 한다.
MSSQL to MariaDB DATA TYPE MAPPING 2
SQL Server MariaDB
tinyint TINYINT (UNSIGNED)
smallint SMALLINT
int
MEDIUMINT
INT
bigint BIGINT
정수
SQL Server MariaDB
Decimal(p,s) DECIMAL(M,D)
고정 소수점
진행단계
MSSQL to MariaDB DATA TYPE MAPPING - 계속 2
SQL Server MariaDB
float(n) FLOAT(N)
float(24) FLOAT(M,D)
float(53)
DOUBLE(M,D)
REAL(M,D)
부동 소수점
SQL Server MariaDB
bit
BIT
bool / boolean
BIT
진행단계
MSSQL to MariaDB DATA TYPE MAPPING - 계속 2
SQL Server MariaDB
datetime2/datetime DATETIME
date DATE
time TIME
smalldatetime TIMESTAMP
smallint YEAR
날짜 및 시간
진행단계
MSSQL to MariaDB DATA TYPE MAPPING - 계속 2
SQL Server MariaDB
nchar(n) / char(n) CHAR
nvarchar(n|max)/varchar(n|max)
VARCHAR
TINYTEXT
TEXT(M)
MEDIUMTEXT
LONGTEXT
nvarbinary(n|max)/varbinary(n|max)
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
문자
진행단계
MSSQL to MariaDB DATA TYPE MAPPING - 계속 2
SQL Server MariaDB
hierarchyid ?
uniqueidentifier ?
sql_variant ?
table ?
MSSQL 고유 데이터 타입
진행단계
큰 값 데이터 타입
이슈 - 이관 대상인 SQL Server 에서는 대량의 데이터를 저장하기 위해 사용되는 varchar(max), nvarchar(max)를 많이 발견되었다. 이런 데이터 타입을 가진 테이블을 MariaDB로 이관할 때 어떤 데이터 타입을 사용해야 할까? MariaDB는 TEXT or BLOB 의 칼럼들 이외의 레코드의 전체 크기가 64KB를 넘으면 다음과 같은 에러가 발생한다.
진행단계
3
해결방안 - varchar(max), nvarchar(max) 가 설정된 칼럼들의 데이터 타입이 적절하게 선언되었는지 Application 및 저장된 값들의 최대 크기를 확인 후 데이터 타입을 최적화 시킨다. - 레코드의 전체 크기가 64KB를 초과하지 않으면 VARCHAR 나 VARBINARY 타입을 사용하자.
파티션테이블
이슈 - 주기적으로 삭제해야 하는 로그성 테이블에 대한 이관 - Primary Key를 기준으로 균일하게 분포되어 있는 테이블에 대한 이관.
진행단계
4
해결방안
- MariaDB에서 제공해 주는 파티션의 종류는 크게 6가지가 있다. - 레인지 파티션, 리스트 파티션, 해시 파티션, 키 파티션, 리니어 해시 파티션/ 리니어 키 파티션, 서브파티션
- 각각의 특징을 파악한 후 가장 적절한 것을 적용하면 된다.
문자집합 & 콜레이션
이슈 - 다국어 서비스를 하고 있는데 MariaDB에서는 어떤 문자집합과 콜레이션을 사용해야 하는가?
진행단계
5
문자집합 & 콜레이션 확인
- SELECT * FROM information_schema.columns WHERE table_schema = ‘mariadb_database’ and table_name = ‘mariadb_table’;
- SHOW CREATE TABLE mariadb_table;
해결방안
- MariaDB에서 다국어를 지원하기 위해서 지원되는 utf8 를 칼럼의 문자집합으로 사용하면 된다.
- 콜레이션(collation)은 명시적으로 지정하지 않으면 묵시적으로 문자집합의 기본 콜레이션을 사용하게 되는데 utf8의 기본 콜레이션은 utf8_general_ci 콜레이션이다.
자동증가 (AUTO_INCREMENT) 옵션
진행단계
6
이슈 - innodb 스토리지 엔진에서 AUTO_INCREMENT 칼럼을 가진 테이블을 생성할 때 1075 에러 발생
해결방안 - innodb 스토리지 엔진에서는 AUTO_INCREMENT 칼럼이 프라이머리 키나 유니크 키 중 적어도 하나의 인덱스에서 제일 앞에
위치하고 있어야 정상적으로 생성된다. - MyISAM 스토리지 엔진에서는 AUTO_INCREMENT 칼럼이 프라이머리 키나 유니크 키에 위치와 관계 없이 포함되어 있으면
정상적으로 생성된다.
정수 타입 뒤의 길이 지정 값의 의미 및 주의사항
진행단계
7
SQL Server Management Studio 입력된 데이터가 정상적으로 조회됨
데이터이관
이슈 - SQL Server 에 저장된 DATA를 MariaDB로 어떻게 이관할 것인가?
진행단계
8
해결방안
- SQL Server 의 SSIS Package를 사용하여 이관작업을 수행한다.
- SQL Server 테이블의 데이터를 텍스트 파일로 데이터를 내보내기 한 후 MariaDB의 LOAD DATA INFILE 명령을 사용하여 이관한다.
- SQL Server 에 Linked Server 로 MariaDB를 등록한 후 OpenQuery 명령을 사용하여 이관한다.
시스템 함수 차이점
진행단계
9
구분 SQL Server MariaDB
구 문 datepart weekday
사용 예 SELECT datepart(dw, ‘2015-03-02’); SELECT weekday(‘2015-03-02’);
결 과
주의사항 * 일요일이 1 ~ 토요일 7 로 RETURN됨 * 월요일이 0 ~ 일요일 6 로 RETURN 됨
테스트 및 검증
진행단계
10
소스 파일 내에 존재하는 SQL문에 대해서 MariaDB 기반 쿼리로 변환 변환된 쿼리 구문에 대해 클라이언트 툴 에서 기능 확인 동적 쿼리 또는 파라미터 변형 등에 대해서는 개발자 검증 작업 시 보정작업 수행 데이터베이스 처리 방식의 차이로 인한 정렬 및 실수 연산들과 같은 차이점 또한 추가 보정
DBA/개발자 DBA/개발자 업무 담당자
Syntax 검증
기능 검증
중요업무 연계 테스트
테스트 자료 검증
중요업무 검증
기본성능 검증
중요업무 검증
목차
3 향후 계획
2 진행 단계
1 계획 단계
MariaDB vs MSSQL 구문 차이
향후 계획
1
구 분 SQL Server MariaDB
컬럼 추가 ALTER TABLE table_name ADD column_name column_property
ALTER TABLE table_name ADD column_name column_property;
컬럼 수정 ALTER TABLE table_name ALTER COLUMN column_name new_column_property
ALTER TABLE table_name MODIFY COLUMN column_name new_column_property;
컬럼 변경 EXEC sp_rename Table_name.Old_column_name New_column_name
ALTER TABLE table_name CHANGE COLUMN Old_column_name New_column_name new_column_property;
컬럼 삭제 ALTER TABLE table_name DROP column_name
ALTER TABLE table_name DROP COLUMN column_name;
컬럼 주석 EXEC sp_addextendedproperty @name=N’property_name’, @value=’description’ …
ALTER TABLE table_name MODIFY COLUMN column_name column_property COMMENT ‘description’;
구 분 SQL Server MariaDB
테이블 생성
CREATE TABLE [schema].table_name ( column_name data_type column_constraints, … table_constraints ) )
[ON filegroup / partition_scheme]
CREATE [OR REPLACE] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options ] ... [partition_options]
임시테이블 생성
로컬 임시 테이블:
CREATE TABLE #table_name
전역 임시 테이블:
CREATE TABLE ##table_name
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...) [table_options ]
... [partition_options]
References
• 3rd Party Tools
– SQL Server Migration Assistant for MySQL (MySQLToSQL) https://msdn.microsoft.com/en-us/library/hh313109(v=sql.110).aspx
– MySQL Workbench: Database Migration
http://www.mysql.com/products/workbench/migrate/
• 도서 – 이성욱, 개발자와 DBA를 위한 Real MySQL, 위키북스, 2012
– 이성욱, MariaDB 10.0과 MySQL 5.6을 한번에 배우는 Real MariaDB, 위키북스, 2014
– 성동찬, MariaDB 실전 활용 노하우, 한빚미디어, 2014
감사합니다!