[한장요약]
데이터분석팀에서 사원 및 부서정보 수정요청이 왔었음 (공통점이 있다면 중국어중 간체자가 일부라는점)
간체자: 중국의 문자 개혁에 따라 글자 모양을 간략하게 고친 한자
https://ko.wikipedia.org/wiki/%EA%B0%84%EC%B2%B4%EC%9E%90
[상황에 대한 이해]
Check1. 문제가 된다고 하는 서비스를 바라보는 table이나 view가 어딘데?
문제점 : 현업(데이터 분석팀)에서 전달받은 문제가 된다고 하는 데이터 셋쪽의 DB는 데이터 분석 팀의 DB이기 때문에 접근이 불가능함
*대체 해결점 : 그렇다면 그 DB에서 연결되는 linked 구조를 확인해달라고 요청하여 Souce DB를 확인함
문제가 되는것으로 추정되던 대상
view이름을 전달 받아서 확인해보았을때 관리하는 서버중에서 MySQL Webo DB에서 Emp view에서 데이터를 가져가는 것을 확인함
Check2. 그렇다면 해당 Webo DB에서 문제가 되는 대상을 확인해보자
view?, Table?
: 둘다 깨짐 (예시 이미지일 분이며, 실제로는 네모 모양으로 깨졌음)
(*table과 view는 mysql 상에서 스케줄러를 이용하여 매일 동기화 되는 시스템이었음)
**
check3. 그렇담 임시조치로 MySQL Webo db에 문제되는 데이터만 별도로 update 하면안되나?
MySQL 내 조치에서는 문제점이 없었음! (약 150 rows 업데이트완료)
그러나 동기화이슈발생! (MSSQL TO MYSQL)
이유: SQLSERVER에서는 연결된 끝점(서버)의 테이블의 데이터를 UPSERT할때 기존데이터의 정합성을확인하기때문에 "행을 업데이트 할 수없습니다. 일부 값의 마지막으로 읽은 후에 바뀐 것 같습니다" 라는 ERROR MESSAGE 확인
그래서 원복처리하고 임시조치없이 빠르게 처리를 목표로함
Check4. 데이터는 어디서 받아오는데?
*전체적인 데이터 구조는 다음과 같았음
단, 데이터를 끌어오는방식은 다음과 같음
SQLserver 에서 서버 연결하기 : https://wakeupslaves.tistory.com/21
SQLserver에서 SP로 왜 사용해야하는데? (성능) : https://devkingdom.tistory.com/323
Sqlserver에서 SP 짜는 예시 : https://devkingdom.tistory.com/324
sqlserver에서 스케줄러 거능 방법 : https://omty.tistory.com/30
check5. 그렇다면 SQlserver 에서는 데이터가 깨지나?
데이터가 안깨지는것을 확인!
(예시 table)
=그렇다면 뭔가 잡배치 동기화 진행시 문제가 생긴게 아닐까를 의심
##여기서 궁금증일수 있는거
MSSQL > MYSQL 어떻게 동기화 시키는데?
ODBC를 이용하여! 혹은 JDBC 를 이용하여!
ODBC란?
엄청나게 많은 SQL회사 각각의 제품을 ODBC 연동 API로 쉽게 관리하는것!
HOW TO!
1. MySQL 연결 드라이버 다운로드 (드라이버 다운로드 : https://dev.mysql.com/downloads/connector/odbc/
2. ODBC 데이터 원본관리자에서 [시스템 DSN] 탭을 선택하고 [추가]버튼 클릭
연결 속성에서 대상이되는 (Destination db) 설정
그럼 요로코럼 나오는데
이제 이후 이 odbc를 msssql 에서 이용해서 연결해줘야함!
3.SQL Server의 SSMS 도구에서 [새 연결된 서버]를 실행하여 링크드서버를 등록
서버 유형은 [기타 데이터 원본]에서 공급자를 OLE DB Provider for ODBC Drivers를 선택
그다음 보안 탭에서 사용자 로그인 계정과 비밀번호를 입력
이후 링크드 서버 등록이 완료되면 ssms 에서 추가된 linked 서버 확인가능
물론 코드로 확인가능!
원격저장 프로시저에서 사용되는 링크드서버로그인 정보를 확인
exec sp_helplinkedsrvlogin
연결된 서버에서 테이블에 대한 정보 반환
exec sp_tables_ex 'WeboDB'
Check.6 그렇다면 해결책은?
AS-IS : MySQL ODBC 5.3 ANSI Driver
TO-BE : MySQL ODBC 5.3 Unicode Driver
무슨차이점인데?
MySQL ODBC ANSI Driver는 시스템 로케일에 따라 ANSI 문자 세트를 사용하며, 주로 영어와 같은 기본 라틴 문자 세트를 사용하는 애플리케이션에 적합합니다.
MySQL ODBC Unicode Driver는 Unicode 문자 세트를 사용하여 전 세계 모든 문자를 지원하며, 다국어 및 국제화된 애플리케이션에 적합합니다.
참고* : 동일한 이슈 확인
https://forums.mysql.com/read.php?37,634839,634839#msg-634839
FINAL. 해결완료!
알고가야할것들
1.ANSI VS Unicode
2.ODBC? JDBC?
3.DB연동 관리 이대로 옳은가?
ODBC와 JDBC의 특징 비교
DB연동관리 이대로 옳은가?
ㅎㅎㅎㅎㅎ 레거시...