반응형

이 포스트에서는 airbyte를 docker위에 구동시킨 이후에 대해서 다루기 때문에 설치에 대한 부분은 다른 포스트를 찾아보기를 바랍니다. 또는 airbyte 공식 홈페이지 https://docs.airbyte.com/using-airbyte/getting-started/oss-quickstart 부분을 참고하시기 바랍니다.

설치에 대한 부분은 추후에 업로드할 수도 있으나 지금은, sql server의 연결시 났던 에러를 기록하기 위함이기 때문입니다.

 

기본값으로 지정되어있는 경우

localhost:8000 접속

 

좌측 메뉴의 connections에서 new connection을 눌러도 되고,

sources와 Destinations를 따로 구축해서 그 후에 connections를 눌러도 됩니다.

저는 Sources를 눌렀습니다. 

 

[Sources에 등록 전 선행작업]

 

db를 enable CDC 시키기

 

참고로 구동한 airbyte( 기본값으로 지정되어있는 경우: localhost:8000)의 sources를 누르면 우측에 적혀있는 내용을 번역 또는 제가 이해한 방식으로 설명한 것입니다. airbyte공식홈페이지에도 같은 페이지를 확인할 수 있습니다.

 

 

1. sql server에 연결할 db에서 new query를 눌러

 

USE {database name}
GO
EXEC sys.sp_cdc_enable_db
GO

를 하고, 대상 테이블에는

 

USE {database name}
GO

EXEC sys.sp_cdc_enable_table
@source_schema = N'{schema name}',
@source_name   = N'{table name}',
@role_name     = N'{role name}',  [1]
@filegroup_name = N'{filegroup name}', [2]
@supports_net_changes = 0 [3]
GO

 

를 합니다.

 

[1] rolename에 값 대신 NULL을 사용하면, sysadmin과 db_owner 권한이 있는 계정만 접근이 가능합니다. 별도로 role을 만들어서 하는 방법이 있으나 이 포스트는 초기 연결 테스트를 위함으로 NULL을 입력합니다.

 

[2] 파일그룹을 구체화하려면 입력하지만, 입력하지 않으면 파일그룹의 기본값이 지정되므로 이 테스트에서는 [2]줄을 삭제했습니다.

 

최종적으로

 

EXEC sys.sp_cdc_enable_table
@source_schema = N'{schema name}',
@source_name   = N'{table name}',
@role_name     = NULL
@supports_net_changes = 0 
GO

에서 스키마와 테이블이름을 적으시면 되겠습니다.

 

제일 처음에 연결할떄는 스냅샷을 이용하기 때문에 다음과 같은 sql문도 사용하시면 되겠습니다.

 

ALTER DATABASE {database name}
  SET ALLOW_SNAPSHOT_ISOLATION ON;

 

새로운 계정에 role과 권한을 추가하여 사용하는 방법도 명시되어있으나

 

테스트 DB에 연결시도를 하기 위한 포스트이기때문에 sa계정을 사용했습니다.

 

 

 

db의 TCP 연결 포트를 방화벽을 통해 인바운드 규칙을 생성합니다.

이대로는 에러가 났어서 UDP 연결 포트로 1434를 열어주어야 한다고 하여 열어주었습니다.

 

---------------------------------------

이제 다시 airbyte 구동화면입니다.

 

아래와 같은 화면에서 Host, Port, Database, db계정 정보를 입력합니다.

 

 

Update Method는 Read Change using Change DData Capture(CDC)를 선택하고 Set up source를 누릅니다.

 

 

에러가 났습니다. 에러 파일을 열어보니 에러부분에 다음과 같은 에러가 났습니다.

 

Checking that the SQL Server Agent is running using the query: 'SELECT status_desc FROM sys.dm_server_services WHERE [servicename] LIKE 'SQL Server Agent%' OR [servicename] LIKE 'SQL Server 代理%' '


 Set initial fetch size: 10 rows


74 Exception while checking connection: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

 

 

 

에러를 추적해야했죠.

sql server new query를 열어

'SELECT status_desc FROM sys.dm_server_services WHERE [servicename] LIKE 'SQL Server Agent%' OR [servicename] LIKE 'SQL Server 代理%' '

쿼리를 똑같이 쳐봤습니다. 아무것도 안나옵니다.

 

WHERE 조건을 없애고 쳐봤습니다.

'SELECT status_desc FROM sys.dm_server_services

===>> SQL Server 에이전트 (인스턴스명)

이러한 형태의 값이 존재했습니다.

 

gpt에 이 값을 변경할 수 있는지 물어봤는데 변경할 수 없다고 하더라구요.

sql server 설치파일에서 저 이름을 본적이 있어서 설치과정을 진행해봤는데, 거기서는 명칭을 변경하여 db를 설치할 수 없었습니다.

 

Sql Server Configuration Manager에서도 해당 이름을 바꿀 수 없었죠.

한글이 가용한 윈도우에서 sql server를 설치하면 저와 같은 증상을 겪으실 것 같네요. 문제를 겪으신 독자분들은 다행히 해결책을 찾았으니 계속 읽으시면 되겠습니다.

 

 

그런데 Window의 시스템을 읽어오는 거라면 Registry에 있을꺼라는 확신이 들어 찾아보았습니다.

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services에서 값들을 찾아보면,

제 경우에는 기본 인스턴스로 SQLSERVERAGENT 내에 DisplayName에 존재하고 있음을 발견했습니다.

 

여기에서 가운데 한글로 명명된 '에이전트' 부분을 Agent로 변경 후 컴퓨터를 재시작했습니다.

(에이전트라는 한글부분만 Agent로 변경하셔야 다른 에러나 문제를 피하실 수 있습니다. -

'SQL Server Agent (MSSQLSERVER)' )

 

 

재시작 후 Sql Server Configuration Manager 내 SQL Server 서비스 내에서 명칭이 변경된 것을 확인하고, 

 

sql server new query를 열어 조회가 되지 않아 에러가 났던 쿼리

'SELECT status_desc FROM sys.dm_server_services WHERE [servicename] LIKE 'SQL Server Agent%' OR [servicename] LIKE 'SQL Server 代理%' '

 

를 실행하니 정상적으로 레코드가 조회되었습니다.

 

그 뒤 airbyte를 실행하여 다시 연결을 시도한 결과 정상적으로 연결되었습니다.

반응형

'Common > Infra' 카테고리의 다른 글

VMware Workstation Pro 전면 무료화  (0) 2025.01.03

+ Recent posts