본문 바로가기
개발관련/DATABASE

Oracle에서 MariaDB로 마이그레이션하기

by joa-yo 2020. 2. 9.
반응형

개인서버를 운영하기위해 오라클로 개발된 소스를 무료인 데이터베이스인 MariaDB로 변경했습니다. 그 과정에서 쿼리를 변경해 줄 필요가 있었는데요, MariaDB에 테이블을 마이그레이션 하는 방법에 대해 말씀드리겠습니다. 참고로 not null, pk 지정은 따로 해주셔야합니다.

 

1. sqlines

 

http://www.sqlines.com/oracle-to-mysql (좌) /  http://www.sqlines.com/online (우)

간편하게 소스를 변환하기 위해 sqlLines를 이용해보겠습니다. sqlLines는 데스크탑 버전과 온라인 버전이 있는데, 간편하게 온라인 버전을 사용하겠습니다. 이미지 캡션의 오른쪽 링크를 클릭하면 바로 들어갈 수 있습니다.

 

왼쪽이 변환전 오른쪽이 변환후 언어입니다. 왼쪽은 Sources를 Oracle로 지정, 오른쪽 Target을 MariaDB로 설정합니다.

 

오라클 테이블 및 데이터 익스포트 하는 방법

더보기

[SQL Developer] > [도구] > [데이터베이스 익스포트]

MariaDB와는 다른점이 많아서 테이블의 컬럼명, 데이터형태만 가져오기 위해서 DDL익스포트 내부의 체크박스를 모두 해제합니다. 테이블 내의 데이터를 가져오려면 데이터 익스포크는 체크박스를 선택으로 유지 합니다. 인코딩 방식은 utf8로 설정합니다.

모든 표줄 토글을 클릭하여 모든 체크박스들을 해제 한 다음 테이블만 선택 한 뒤 다음버튼을 누릅니다.

조회 버튼을 눌러 왼쪽의 리스트에 테이블을 표출시킨 뒤, 모든 테이블을 오른쪽 리스트로 이동 시킵니다.

 

이와 같은 화면이 나오면 다음버튼을 누릅니다.

 

익스포트 설정을 최종적으로 확인 할 수 있는 페이지 입니다. 맞다면 완료버튼을 누릅니다.

익스포트가 완료되면 위와 같이 SQL문이 자동적으로 작성됩니다.

 

왼쪽에 sql파일 내용을 넣고, convert버튼을 눌러 변환합니다. 이를 이용하여 Maria DB에 옮길 수 있습니다. 변환 시에 누락사항이 있어 직접 수정한 부분이 있었는데 아래에서 설명드리겠습니다.

 


SQL문 수정사항

날짜 Default값 수정

날짜의 Default값을 지정할 때, 오라클은 SYSDATE를 사용합니다. MariaDB에서는 CURRENT_TIMESTAMP를 사용하므로 테이블 생성 SQL문에서 모두 바꿔주어야 합니다.

<ORACLE>
CREATE TABLE "LOGGER" ("LOG" VARCHAR2(1000), "TIME" VARCHAR2(30) DEFAULT SYSDATE)
<MariaDB>
CREATE TABLE "LOGGER" ("LOG" VARCHAR2(1000), "TIME" VARCHAR2(30) DEFAULT CURRENT_TIMESTAMP)

 

날짜 입력 형식 수정

오라클에 SYSDATE로 저장하게 되면 '19/11/20 13:56:04'와 같은 형태로 저장됩니다. 오라클에서는 이러한 날짜 형식을 'RR/MM/DD HH24:MI:SS'로 표현하지만, MariaDB에서는 '%y/%m/%d %H:%i:%s'와 같이 표현됩니다. 따라서 이러한 형태로 들어가는 데이터들을 모두 바꿔주어야 합니다.

<ORACLE>
Insert into MEMBER (ID,PW,DATE_REGISTER,NICKNAME)
	values ('asdf','1234',to_date('19/11/20 13:56:04','RR/MM/DD HH24:MI:SS'),'asdf');

 

<MariaDB>
Insert into MEMBER (ID,PW,DATE_REGISTER,NICKNAME)
	values ('asdf','1234',str_to_date('19/11/20 13:56:04','%y/%m/%d %H:%i:%s'),'asdf');

 


 

SQL 변경 후 새로운 쿼리 파일을 생성해줍니다.

생성된 파일에 변환된 SQL문을 옮겨주고, 원하는 부분을 선택 한 뒤 SQL문을 실행해 줍니다. 잘 적용이 되는지 확인하면서 SQL문을 실행해주면 됩니다.

 

SQL문이 모두 정상적으로 실행되었다면, 기존 DB에서 NOT NULL조건과 PK를 참고하시어 테이블 설정을 해주시면 됩니다.

반응형

댓글