4. 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
5. Migration 수행 개요 - Database Schema Migration 세부 계획
계획단계
대상 파악 및 객체분석,데이터
분석, 위험요소 파악
Table, Index,
Function, Procedure
…
Table 건수 파악
오류데이터 검증
[1단계] [2단계] [3단계]
변환객체 검증
보완
시스템 분석 객체변환 데이터 이관
변환 객체 검증
후 보완
MariaDBMSSQL
1
6. 마이그레이션 관련 진단 자동화 툴
이슈
- 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 소스에 대한 검토 및 스크립트를 추출할 수 있다.
7. 마이그레이션 관련 진단 자동화 툴 - SQL Server Migration Assistant (SSMA)
계획단계
2
8. 마이그레이션 관련 진단 자동화 툴 - MySQL Workbench Data Migration Wizard
계획단계
2
11. 데이터 모델링
이슈
- SQL Server 와 MariaDB는 각각의 고유한 DATA TYPE과 특징을 가지고 있다. 어떻게 작업을 해야 이관대상 DATA들이
MariaDB에 정확하게 저장될 수 있을 것인가?
진행단계
1
해결방안
- DATA TYPE의 특징에 따라 매핑 Rule을 정의하고 해당 RULE 맞추어 데이터를 이관할 수 있도록 한다.
12. MSSQL to MariaDB DATA TYPE MAPPING2
SQL Server MariaDB
tinyint TINYINT (UNSIGNED)
smallint SMALLINT
int
MEDIUMINT
INT
bigint BIGINT
정수
SQL Server MariaDB
Decimal(p,s) DECIMAL(M,D)
고정 소수점
진행단계
13. 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
진행단계
14. MSSQL to MariaDB DATA TYPE MAPPING - 계속2
SQL Server MariaDB
datetime2/datetime DATETIME
date DATE
time TIME
smalldatetime TIMESTAMP
smallint YEAR
날짜 및 시간
진행단계
15. 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
문자
진행단계
16. MSSQL to MariaDB DATA TYPE MAPPING - 계속2
SQL Server MariaDB
hierarchyid ?
uniqueidentifier ?
sql_variant ?
table ?
MSSQL 고유 데이터 타입
진행단계
17. 큰 값 데이터 타입
이슈
- 이관 대상인 SQL Server 에서는 대량의 데이터를 저장하기 위해 사용되는 varchar(max), nvarchar(max)를 많이 발견되었다.
이런 데이터 타입을 가진 테이블을 MariaDB로 이관할 때 어떤 데이터 타입을 사용해야 할까?
MariaDB는 TEXT or BLOB 의 칼럼들 이외의 레코드의 전체 크기가 64KB를 넘으면 다음과 같은 에러가 발생한다.
진행단계
3
해결방안
- varchar(max), nvarchar(max) 가 설정된 칼럼들의 데이터 타입이 적절하게 선언되었는지 Application 및 저장된 값들의
최대 크기를 확인 후 데이터 타입을 최적화 시킨다.
- 레코드의 전체 크기가 64KB를 초과하지 않으면 VARCHAR 나 VARBINARY 타입을 사용하자.
18. 파티션테이블
이슈
- 주기적으로 삭제해야 하는 로그성 테이블에 대한 이관
- Primary Key를 기준으로 균일하게 분포되어 있는 테이블에 대한 이관.
진행단계
4
해결방안
- MariaDB에서 제공해 주는 파티션의 종류는 크게 6가지가 있다.
- 레인지 파티션, 리스트 파티션, 해시 파티션, 키 파티션, 리니어 해시 파티션/ 리니어 키 파티션, 서브파티션
- 각각의 특징을 파악한 후 가장 적절한 것을 적용하면 된다.
19. 문자집합 & 콜레이션
이슈
- 다국어 서비스를 하고 있는데 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 콜레이션이다.
20. 자동증가 (AUTO_INCREMENT) 옵션
진행단계
6
이슈
- innodb 스토리지 엔진에서 AUTO_INCREMENT 칼럼을 가진 테이블을 생성할 때 1075 에러 발생
해결방안
- innodb 스토리지 엔진에서는 AUTO_INCREMENT 칼럼이 프라이머리 키나 유니크 키 중 적어도 하나의 인덱스에서 제일 앞에
위치하고 있어야 정상적으로 생성된다.
- MyISAM 스토리지 엔진에서는 AUTO_INCREMENT 칼럼이 프라이머리 키나 유니크 키에 위치와 관계 없이 포함되어 있으면
정상적으로 생성된다.
21. 정수 타입 뒤의 길이 지정 값의 의미 및 주의사항
진행단계
7
SQL Server Management Studio
입력된 데이터가 정상적으로 조회됨
22. 데이터이관
이슈
- SQL Server 에 저장된 DATA를 MariaDB로 어떻게 이관할 것인가?
진행단계
8
해결방안
- SQL Server 의 SSIS Package를 사용하여 이관작업을 수행한다.
- SQL Server 테이블의 데이터를 텍스트 파일로 데이터를 내보내기 한 후 MariaDB의 LOAD DATA INFILE 명령을 사용하여 이관한다.
- SQL Server 에 Linked Server 로 MariaDB를 등록한 후 OpenQuery 명령을 사용하여 이관한다.
23. 시스템 함수 차이점
진행단계
9
구분 SQL Server MariaDB
구 문 datepart weekday
사용 예 SELECT datepart(dw, ‘2015-03-02’); SELECT weekday(‘2015-03-02’);
결 과
주의사항 * 일요일이 1 ~ 토요일 7 로 RETURN됨 * 월요일이 0 ~ 일요일 6 로 RETURN 됨
24. 테스트 및 검증
진행단계
10
소스 파일 내에 존재하는 SQL문에 대해서 MariaDB 기반 쿼리로 변환
변환된 쿼리 구문에 대해 클라이언트 툴 에서 기능 확인
동적 쿼리 또는 파라미터 변형 등에 대해서는 개발자 검증 작업 시 보정작업 수행
데이터베이스 처리 방식의 차이로 인한 정렬 및 실수 연산들과 같은 차이점 또한 추가 보정
DBA/개발자 DBA/개발자 업무 담당자
Syntax 검증
기능 검증
중요업무 연계 테스트
테스트 자료 검증
중요업무 검증
기본성능 검증
중요업무 검증
26. 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]
27. 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