본문 바로가기
이런 얘기, 저런 얘기

SQL Server에서 MariaDB로 Insert가 안된다 !!

by 방랑하는 오딧세이 2023. 6. 3.

얼마 전 개발 환경에서 클라우드로 서버 이전 작업을 했다.

약간의 시행착오를 거쳤지만 데이터 이관까지 무사히 마쳤다.

 

클라우드 정보
   SQL Server 2019 / Windows 2022
   MariaDB / CentOS
   Web Server / CentOS

 

SQL Server에서 job scheduler를 통해 외부 데이터를 가져온 다음 가공을 해서 MariaDB에 저장을 하는 구조인데 스케쥴러에서 계속 오류가 발생이 되었다.

로그 기록을 보니 아래와 같은 메시지가 보인다.

 

Executed as user: NT SERVICE\SQLSERVERAGENT. The OLE DB provider "MSDASQL" for linked server "xxxxxxx" reported an error. The provider did not give any information about the error. [SQLSTATE 42000] (Error 7399) The OLE DB provider "MSDASQL" for linked server "xxxxxxx" could not INSERT INTO table "[MSDASQL]". Unknown provider error. [SQLSTATE 42000] (Error 7343).

 

구글링에 들어갔다.

프로시저를 수정하기도 하고 ODBC를 다시 설치하기도 하고 Linked Server 옵션을 이래저래 바꿔보기도 하면서 무려 6일 간을 헤맸다.

select는 정상적으로 되는데 insert에서 계속 오류가 발생했다.

마지막에 혹시나 해서 시도해 본 게 됐다.

정말 허무하게도..

 

[수정 전]
INSERT INTO OPENQUERY(linkedServerName, N'SELECT storeID, storeName, postNo, addr1, addr2, storeType, franchaiseId, brandId FROM TmpstoreInfo WHERE 1 = 0')
SELECT storeId, storeName, ISNULL(postCode, ''), ISNULL(addr1, ''), ISNULL(addr2, ''), ISNULL(busiType, ''), franchiseId, brandId FROM OPENJSON(@json)
WITH (storeId NVARCHAR(50) '$.storeId', storeName NVARCHAR(50) '$.storeName', postCode NVARCHAR(10) '$.postCode', addr1 NVARCHAR(200) '$.addr1', addr2 NVARCHAR(200) '$.addr2', busiType NVARCHAR(10) '$.busiType', franchiseId NVARCHAR(50) '$.franchiseId', brandId NVARCHAR(50) '$.brandId');

[수정 후]
INSERT INTO OPENQUERY(linkedServerName, N'SELECT storeID, storeName, postNo, addr1, addr2, orgIdareaCd, storeType, franchaiseId, brandId FROM TmpstoreInfo WHERE 1 = 0')
SELECT storeId, storeName, ISNULL(postCode, ''), ISNULL(addr1, ''), ISNULL(addr2, ''), '', '', ISNULL(busiType, ''), franchiseId, brandId FROM OPENJSON(@json)
WITH (storeId NVARCHAR(50) '$.storeId', storeName NVARCHAR(50) '$.storeName', postCode NVARCHAR(10) '$.postCode', addr1 NVARCHAR(200) '$.addr1', addr2 NVARCHAR(200) '$.addr2', busiType NVARCHAR(10) '$.busiType', franchiseId NVARCHAR(50) '$.franchiseId', brandId NVARCHAR(50) '$.brandId');

 

차이는 붉은색으로 표시된 orgId와 areaCd 컬럼의 누락이었다.

타겟인 MariaDB의 테이블에 정의된 모든 컬럼을 명시해줘야 정상적으로 insert가 되는 거였다.

 

하지만 개발 환경에서는 컬럼을 명시하지 않았어도 정상적으로 입력되었던 건데 클라우드 환경에서는 왜 오류가 발생되는지 원인은 알 수 없다..

 

반응형

'이런 얘기, 저런 얘기' 카테고리의 다른 글

아픔의 원경  (0) 2023.09.14
SQL Server 암호화/복호화  (0) 2023.03.03
결함  (1) 2022.10.27
말, 말, 말  (0) 2022.06.17
데이터베이스에서 NULL을 허용할 것인가, 허용하지 않을 것인가  (0) 2022.06.16

댓글