오라클이랑 MSSQL은 PK 형식이 달라서 그대로 데이터를 복사하면 오류가 난다.
Oracle의 RAW(16) 또는 VARCHAR2 기반 UUID ↔ MSSQL의 UNIQUEIDENTIFIER 간 매핑이 자동으로 안되기 때문에 CSV파일로 저장해서 직접 데이터를 수정해서 옮겨야함..
(엑셀로 저장이 어려운 대용량 데이터는 다른 방법을 찾아야할5듯)
1. 오라클에서 데이터 csv파일로 저장하기 (디비버에서)

저장하고자 하는 테이블명에서 마우스 우클릭 > 데이터 내보내기

csv파일로 내보내기 선택

(한국어 데이터 포함되어있다면) 다음다음 누르다가 Output에서 Encoding을 EUC-KR로 설정/ 저장 디렉터리 지정 후 진행 버튼 클릭
(한국어 데이터 없다면) 다음다음 누르다가 Output에서 디렉터리 지정 후 진행 버튼 클릭
저장완 ~~
2. 엑셀에서 키값 UNIQUEIDENTIFIER로 바꿔주기
0F7E59D0D618652EE0630100007F4E01
이렇게 생긴 애를 아래와 같은 형식으로 바꿔야하는데
13AA2683-D7BB-4041-BB18-5EDE9D4F3092
일단 키값에 들어있는 값들 다 지우고 (셀 클릭하고 CTRL+SHIFT + 아래화살표 / 마우스 우클릭 내용지우기 선택)
대신 랜덤으로 생성한 UNIQUEIDENTIFIER값을 넣자.
==================================================================================
- 엑셀 기본 함수 사용 (Excel 365 이상)
Excel 365 이후 버전은 GUID() 함수가 추가되어 있음
👉 실행하면 예: 550e8400-e29b-41d4-a716-446655440000 형태의 값이 생성됨
- Excel 2016 ~ 2021 (GUID 함수 없음)
이 경우는 VBA 사용자 정의 함수를 만들어야 함.
- Alt + F11 눌러 VBA 편집기 열기
- 삽입 > 모듈 선택 후 아래 코드 붙여넣기
- 저장 후 Excel 셀에 다음처럼 입력
👉 실행하면 MSSQL UNIQUEIDENTIFIER와 동일한 랜덤 GUID가 생성됨
==================================================================================
엑셀 2019버전을 쓰고있는 나는 후자의 방법을 채택함.
그러나,, 랜덤 GUID가 생성이 되긴 했지만 수식으로 되어있어서 DB IMPORT가 안됨. 값 복사도 안됨(왤까)
그래서 그냥
1) VBA로 안전하게 GUID 생성 (WinAPI, 권한 이슈 없음)
- 엑셀에서 Alt + F11 → 삽입 > 모듈
- 이 코드를 그대로 붙여넣기
#If VBA7 Then
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (ByRef pguid As GUID) As Long
#Else
Private Declare Function CoCreateGuid Lib "ole32.dll" (ByRef pguid As GUID) As Long
#End If
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Function GuidToString(g As GUID) As String
GuidToString = _
LCase$(Right$("00000000" & Hex$(g.Data1), 8) & "-" & _
Right$("0000" & Hex$(g.Data2), 4) & "-" & _
Right$("0000" & Hex$(g.Data3), 4) & "-" & _
Right$("00" & Hex$(g.Data4(0)), 2) & _
Right$("00" & Hex$(g.Data4(1)), 2) & "-" & _
Right$("00" & Hex$(g.Data4(2)), 2) & _
Right$("00" & Hex$(g.Data4(3)), 2) & _
Right$("00" & Hex$(g.Data4(4)), 2) & _
Right$("00" & Hex$(g.Data4(5)), 2) & _
Right$("00" & Hex$(g.Data4(6)), 2) & _
Right$("00" & Hex$(g.Data4(7)), 2))
End Function
Public Function NewGUID() As String
Dim g As GUID
If CoCreateGuid(g) = 0 Then
NewGUID = GuidToString(g) ' 예: 550e8400-e29b-41d4-a716-446655440000
Else
NewGUID = vbNullString
End If
End Function
' 선택한 셀들에 "값"으로 GUID 채우기 (고정)
Public Sub InsertGUID()
Dim rng As Range
For Each rng In Selection
rng.Value = NewGUID()
Next rng
End Sub
사용법
- 함수처럼 쓰기: 셀에 =NewGUID() 입력 → GUID 생성(재계산 시 값 바뀜)
- 고정값으로 넣기: GUID를 넣을 셀 범위를 선택 → Alt + F8 → InsertGUID 실행
(선택한 셀마다 값으로 바로 들어가므로 값 붙여넣기 필요 없음)
위 방법으로 함.
직접 UNIQUEIDENTIFIER를 생성해서 키값으로 넣어주니까 해결됨.
3. 디비버 MSSQL DB 테이블에 집어넣기
미리 생성해둔 빈 테이블 우클릭

데이터 가져오기 선택

CSV에서 가져오기 선택
폴더 뜨면 가져올 파일 선택해서 가져온다.

위와 같이 소스파일과 타겟파일 경로를 볼 수 있음.
(한글데이터 포함인 경우) 여기서 아래 Importer settings에 인코딩을 EUC-KR로 바꿔주고 다음 클릭
(한글데이터 미포함 경우) 다음 클릭

다음에 보이는 테이블에서 source밑에 테이블 명 왼쪽에 > 이 화살표를 누르면 각 칼럼들 매핑된게 보인다.
여기서 어떤 칼럼값을 어떤 칼럼값으로 넣을것인지/ 스킵할 것인지 선택할 수 있다.
칼럼 선택 후 다음다음 진행 누르면 데이터 복사 완료.
* 디비버에서 위 방법으로 했을때 UNIQUEIDENTIFIER 값이 중복이라고 뜨는 경우*
이미 존재하는 키값이 중복으로 들어갔다는 건데
그럴때 다시 생성하거나 새로운 열에서 넣어줘야 하는 값보다 더 많이 생성해놓고 중복 안뜰때까지 넣어줌.
생 노가다라서,, 좋은 방법이 있다면 .. 공유 부탁드리며...
끝