티스토리 뷰

DB

Oracle vs MySQL

snail voyager 2019. 7. 14. 20:05
728x90
반응형

시중은행들이 오라클 DB를 쓰는 가장 큰 이유는 RAC(Real application clusters)라는 기능 때문이다. RAC는 간단히 말하면 하나의 DB를 여러 서버가 공유하는 기술이다. 하나의 DB를 여러 서버가 공유하기 때문에 서버 하나가 장애가 나도 데이터 정합성이 유지된다. 데이터 정합성이 유지된다는 것은 서버 장애 때문에 고객의 돈이 사라지지 않는다는 의미다.

 

그러나 MySQL은 서버들이 DB를 공유하지 않는다. 서버마다 다른 DB가 있다. 이 때문에 MySQL은 마스터와 슬레이브라는 구조의 시스템을 운용한다. 마스터 서버로 시스템을 운용하면서 슬레이브 서버는 마스터 서버의 데이터를 특정 시점마다 복제한다. 마스터에 장애가 나도 복제된 데이터를 가지고 있는 슬레이브로 대체해서 운용하면 된다는 이론이다.

 

그러나 마스터와 슬레이브가 완전 동기화 되지 않는 것이 문제다. 마스터 서버에서 데이터가 발생한 후 슬레이브에 복제되기 전에 장애가 발생한다면 어떻게 될까? 그 데이터는 유실된다. 은행의 경우 데이터는 돈이기  때문에 고객의 돈이 사라진다. 은행이 MySQL과 같은 DB를 사용하지 않는 이유다.

 

https://byline.network/2017/10/17-6/

 

카카오뱅크는 어떻게 MySQL로 데이터 유실을 막았을까 - Byline Network

나는 내 은행계좌에 들어있는 돈의 실물을 본 적이 없다. 내가 가진 돈이라는 것은 은행 계좌에 숫자로 표현될 뿐이다. 월급을 받는다는 것도 회사 계좌 DB에 저장된 숫자에서 일정수를 빼고, 내 계좌 DB에 그만큼 더하기를 하는 것이다. 실제로 현금 뭉치가 오가지 않는다. 즉, 정보화 된 현대 사회에서 돈이라는 것은 숫자, 곧 데이터일 뿐이다. 아마 이는 자

byline.network

====================================================================

첫번째로 NULL값확인함수가 다릅니다. 

즉, 컬럼값에 NULL이면 다른값으로 표시해주는 함수사용법이 다릅니다. 

ORACLE에서는 NVL함수를 사용하지만 MYSQL에서는 IFNULL을 사용합니다.

ex) (ORACLE) SELECT NVL(USER_ID,'') FROM KGON

ex) (MYSQL ) SELECT IFNULL(USER_ID,'') FROM KGON

 

두번째로 현재날짜시간 확인하는 방법이 다릅니다.

ORACLE에서는 SYSDATE를 사용하지만 MYSQL에서는 NOW()함수를 사용합니다.

ex) (ORACLE) SELECT SYSDATE FROM DUAL;

ex) (MYSQL ) SELECT NOW() FROM DUAL;

 

세번째로 날짜포멧 변환방법이 다릅니다.

ORACLE에서는 날짜를 STRING으로 변경시 TO_CHAR()함수를 사용하지만 MYSQL에서는 DATE_FORMAT()함수를 사용합니다.

ex) (ORACLE) SELECT TO_CHAR(REG_DATE, 'YYYYMMDD HH24MISS') FROM DUAL;

ex) (MYSQL ) SELECT DATE_FORMAT(REG_DATE, '%Y%m%d%H%i%s') FROM DUAL;

[형식에 쓰는 영문자는 대소문자에 따라 다른값이 나올 수 있습니다.]

[%Y는 4자리년도(2017) , %y는 2자리년도(17)]

 

네번째로 요일변환의 숫자범위가 다릅니다.

ORACLE은 일,월,화,수,목,금,토를 1,2,3,4,5,6,7로 인식합니다. 

MYSQL은 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 인식합니다. 

그렇기 때문에 요일 계산하는 경우 조심해야합니다. 

오늘이 수요일인경우 ORACLE에서는 4가 반환되고 MYSQL에서는 3이 반환되기 떄문에 요일변환 사용하는 부분을 잘 확인해야합니다.

[보통 JAVASCRIPT에서 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 쓰기 때문에 ORACLE인경우 결과값을 -1해서 반환하는 경우가 많습니다.]

ex) (ORACLE) SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL; [결과값: 오늘이 수요일인경우 4를 반환]

ex) (MYSQL ) SELECT DATE_FORMAT(NOW(), '%w') FROM DUAL; [결과값: 오늘이 수요일인경우 3을 반환]

 

다섯번째로 문자와 문자 합치는 방법이 다릅니다.

ORACLE에서는 문자와 문자를 합칠때 '||'을 사용합니다.

MYSQL에서는 문자와 문자를 합칠때 CONCAT()함수를 사용합니다.

ex) (ORACLE) SELECT USER_ID FROM KGON WHERE USER_ID LIKE '%' || 'kgon' || '%'

ex) (MYSQL ) SELECT USER_ID FROM KGON WHERE USER_ID LIKE CONCAT('%','kgon','%')

 

여섯번째로 형변환방법이 다릅니다.

ORACLE에서는 TO_CHAR, TO_NUMBER을 사용하여 형을 변환하지만 MYSQL에서는 CAST를 사용하여 형을 변환합니다.

ex) (ORACLE) SELECT TO_CHAR(632) FROM DUAL

ex) (MYSQL ) SELECT CAST(1234 AS CHAR) FROM DUAL

 

일곱번째로 페이징처리가 다릅니다. 

ORACLE은 ROWNUM을 이용하여 WHERE에서 BETWEEN으로 1~10번째자료를 나타냅니다.

MYSQL은 LIMIT를 사용하여 1~10번째자료를 나타냅니다.

ex) (ORACLE) SELECT * FROM ( SELECT ROWNUM , A.* FROM (SELECT * FROM KGON) A )WHERE ROWNUM BETWEEN 0 AND 10

ex) (MYSQL ) SELECT * FROM KGON LIMIT 0, 10

 

여덟번째로 시퀀스사용시 다음번호 불러오는 방법이 다릅니다.

ORACLE은 시퀀스명.NEXTVAL을 사용하지만 MYSQL은 시퀀스명.CURRVAL를 사용합니다.

 

https://kgon.tistory.com/33

 

ORACLE과 MYSQL의 비교하자. [차이점]

ORACLE과 MYSQL의 비교하자. [차이점] 요즘에는 윈도우서버보다 리눅스서버를 많이 쓰다보니 MSSQL사용빈도가 많이 줄어들었습니다. 그로 인해 ORACLE , MYSQL 사용량을 증가하였습니다. 오늘은 ORACLE과 MYSQL의..

kgon.tistory.com

 

728x90
반응형

'DB' 카테고리의 다른 글

Oracle 페이지 처리  (0) 2020.05.26
Oracle 특수문자 검색  (0) 2020.05.25
Data Mart  (0) 2016.05.08
Data Mining  (0) 2016.05.08
Data Warehouse  (0) 2016.05.08
반응형
300x250