Oracle CDC Service 작업

Important

Change Data Capture for Oracle by Attunity는 이제 더 이상 사용되지 않습니다. 자세한 내용은 공지를 참조하세요.

이 섹션에서는 Oracle CDC Service의 몇 가지 중요한 개념을 설명합니다. 이 섹션에 포함된 개념은 다음과 같습니다.

  • MSXDBCDC 데이터베이스

    이 섹션에서는 이 데이터베이스에 포함된 테이블과 CDC에 대한 이 데이터베이스의 중요성에 대해 설명합니다.

  • CDC 데이터베이스

    이 섹션에서는 CDC 데이터베이스에 대해 간략하게 설명합니다. 이러한 데이터베이스는 Oracle CDC Designer 콘솔을 사용하여 만들어집니다. CDC 데이터베이스에 대한 자세한 내용은 CDC Designer 콘솔 설치에 포함된 설명서를 참조하세요.

  • 명령줄을 사용하여 CDC Service 구성

    이 섹션에서는 Oracle CDC Service를 구성하는 데 사용할 수 있는 명령줄 명령에 대해 설명합니다.

MSXDBCDC 데이터베이스

MSXDBCDC(Microsoft 외부 데이터베이스 CDC) 데이터베이스는 SQL Server 인스턴스에서 CDC Service for Oracle를 사용할 때 필요한 특수 데이터베이스입니다.

이 데이터베이스의 이름은 변경할 수 없습니다. MSXDBCDC라는 데이터베이스가 호스트 SQL Server 인스턴스에 있고 CDC Service for Oracle에서 정의한 테이블 이외의 테이블을 포함하는 경우 호스트 SQL Server 인스턴스를 사용할 수 없습니다.

이 데이터베이스의 주요 용도는 다음과 같습니다.

  • SQL Server 인스턴스와 연결된 Oracle CDC Service의 레지스트리 역할을 합니다. 이 정보는 서비스 구성과 디자인 구성 요소에 사용되며 다양한 노드에서 동일한 이름의 여러 CDC Service가 사용될 경우 어떤 서비스가 활성인지에 대한 조정을 지원하는 데 사용됩니다.

  • SQL Server 인스턴스에 포함된 Oracle CDC 인스턴스, 각 인스턴스를 처리하는 CDC 서비스 및 각 서비스에서 사용하는 구성 버전의 레지스트리 역할을 합니다. 이 정보는 master 데이터베이스의 sys.databases 테이블에 있는 is_cdc_enabled 열과 같은 값입니다. CDC 서비스는 주기적으로 dbo.xdbcdc_databases 테이블을 검사하여 CDC 구성 또는 캡처된 인스턴스 목록에 대한 변경 내용을 식별합니다.

  • CDC 인스턴스를 만들고 유지 관리하는 데 도움이 되는 sysadmin소유의 저장된 프로시저를 보관합니다. 이러한 프로시저는 SQL Server CDC 기능을 구현하는 사용되는 시스템 프로시저와 비슷합니다.

MSXDBCDC 데이터베이스 만들기

Oracle CDC Service를 정의하기 전에 MSXDBCDC 데이터베이스를 만들어야 합니다. 하나의 MSXDBCDC 데이터베이스만 SQL Server 인스턴스에 만들 수 있습니다. MSXDBCDC 데이터베이스는 Oracle CDC용 SQL Server 데이터베이스를 준비할 때 만들어집니다. 이 작업은 Oracle CDC Service 구성 콘솔을 사용하거나 CDC Service 구성 콘솔에서 생성된 만들기 스크립트를 실행하여 수행할 수 있습니다.

이 데이터베이스의 소유자는 SQL Server 인스턴스에서 호스트되는 모든 Oracle CDC 인스턴스를 제어할 수 있는 Oracle CDC Service 관리자입니다.

참고 항목:

CDC를 위해 SQL Server를 준비하는 방법

MSXDBCDC 데이터베이스 테이블

이 섹션에서 설명하는 CDC 데이터베이스의 테이블은 다음과 같습니다.

dbo.xdbcdc_trace

이 테이블은 Oracle CDC Service에 대한 추적 정보를 저장합니다. 이 테이블에 저장되는 정보에는 주목할 만한 상태 변경 및 추적 레코드가 포함됩니다.

Oracle CDC Service는 Windows 이벤트 로그와 추적 테이블 모두에 오류 레코드 및 일부 정보 레코드를 씁니다. 경우에 따라 추적 테이블에 대한 액세스가 불가능할 수 있으며 이 경우 이벤트 로그에서 오류 정보에 액세스할 수 있습니다.

다음 표에서는 dbo.xdbcdc_trace 테이블에 포함된 항목에 대해 설명합니다.

항목 설명
timestamp 추적 레코드가 기록된 정확한 UTC 타임스탬프입니다.
type 다음 값 중 하나를 포함합니다.

오류

INFO

TRACE
node 레코드가 기록된 노드의 이름입니다.
status 상태 테이블에서 사용되는 상태 코드입니다.
sub_status 상태 테이블에서 사용되는 하위 상태 코드입니다.
status_message 상태 테이블에서 사용되는 상태 메시지입니다.
source 추적 레코드를 생성한 Oracle CDC 구성 요소의 이름입니다.
text_data 오류 또는 추적 레코드에 페이로드가 포함되는 경우에 대한 추가 데이터입니다.
binary_data 오류 또는 추적 레코드에 이진 페이로드가 포함되는 경우에 대한 추가 이진 데이터입니다.

Oracle CDC 인스턴스는 변경 테이블 보존 정책에 따라 이전 추적 테이블 행을 삭제합니다.

dbo.xdbcdc_databases

이 테이블은 현재 SQL Server 인스턴스의 Oracle CDC 데이터베이스에 대한 CDC Service 이름을 포함합니다. 각 데이터베이스는 하나의 Oracle CDC 인스턴스에 해당합니다. Oracle CDC Service는 이 테이블을 사용하여 시작하거나 중지할 인스턴스와 다시 구성할 인스턴스를 결정합니다.

다음 표에서는 dbo.xdbcdc_trace 테이블에 포함된 항목을 설명합니다.

항목 설명
name SQL Server 인스턴스에 있는 Oracle 데이터베이스의 이름입니다.
config_version 해당 CDC 데이터베이스 xdbcdc_config 테이블의 마지막 변경에 대한 타임스탬프(UTC) 또는 이 테이블의 현재 행에 대한 타임스탬프(UTC)입니다.

UPDATE 트리거는 이 항목에 대한 GETUTCDATE()의 값을 적용합니다. config_version을 사용하면 CDC Service에서 구성 변경 또는 사용/사용 안 함을 확인해야 하는 CDC 인스턴스를 식별할 수 있습니다.
cdc_service_name 이 항목은 어떤 Oracle CDC Service가 선택한 Oracle 데이터베이스를 처리할지를 결정합니다.
사용 Oracle CDC 인스턴스가 활성(1)인지 아니면 사용 안 함(0)인지 여부를 나타냅니다. Oracle CDC Service가 시작되면 사용(1)으로 표시된 인스턴스만 시작됩니다.

참고: Oracle CDC 인스턴스는 재시도할 수 없는 오류로 인해 비활성화될 수 있습니다. 이 경우 오류가 해결되면 인스턴스를 수동으로 다시 시작해야 합니다.

dbo.xdbcdc_services

이 테이블은 호스트 SQL Server 인스턴스와 연결된 CDC 서비스를 나열합니다. 이 테이블은 CDC Designer 콘솔에서 로컬 SQL Server 인스턴스에 대해 구성된 CDC 서비스 목록을 확인하는 데 사용됩니다. 또한 실행되는 하나의 Windows 서비스만 지정된 Oracle CDC Service 이름을 처리하도록 CDC 서비스에서 사용됩니다.

다음 표에서는 dbo.xdbcdc_databases 테이블에 포함된 항목을 설명합니다.

항목 설명
cdc_service_name Oracle CDC Service의 이름(Windows 서비스 이름)입니다.
cdc_service_sql_login Oracle CDC Service에서 SQL Server 인스턴스에 연결하는 데 사용하는 SQL Server 로그인의 이름입니다. cdc_service라는 새 SQL 사용자가 만들어지고 이 로그인 이름에 연결된 다음 서비스에서 처리되는 각 CDC 데이터베이스에 대한 db_ddladmin, db_datareader 및 db_datawriter 고정 데이터베이스 역할의 멤버로 추가됩니다.
ref_count 이 항목은 동일한 Oracle CDC Service가 설치된 컴퓨터의 수를 계산합니다. 동일한 이름의 Oracle CDC 서비스가 추가될 때마다 증가하고, 해당 서비스가 제거되면 감소합니다. 카운터가 0에 도달하면 이 행이 삭제됩니다.
active_service_node 현재 CDC 서비스를 처리하는 Windows 노드의 이름입니다. 서비스가 올바르게 중지되면 이 열이 null로 설정되어 더 이상 활성 서비스가 없음을 나타냅니다.
active_service_heartbeat 이 항목은 현재 CDC 서비스를 추적하여 여전히 활성 상태인지를 확인합니다.

이 항목은 활성 CDC Service에 대한 현재 데이터베이스 UTC 타임스탬프를 사용하여 정기적인 간격으로 업데이트됩니다. 기본 간격은 30초이지만 간격을 구성할 수 있습니다.

보류 중인 CDC 서비스에서 구성된 간격이 경과한 후 하트비트가 업데이트되지 않았음을 검색하면 보류 중인 서비스에서 활성 CDC 서비스 역할을 인수하려고 시도합니다.
options 이 항목은 추적 또는 튜닝과 같은 보조 옵션을 지정합니다. name[=value][; ] 형식으로 작성됩니다. 옵션 문자열은 ODBC 연결 문자열과 동일한 의미 체계를 사용합니다. 옵션이 부울(예/아니요 값 포함)인 경우 값에는 이름만 포함될 수 있습니다.

추적에 가능한 값은 다음과 같습니다.

true

on

false

off

<class name>[,class name>]



기본값은 false입니다.

service_heartbeat_interval은 서비스에서 active_service_heartbeat 열을 업데이트하는 시간 간격(초)입니다. 기본값은 30입니다. 최대값은 3600입니다.

service_config_polling_interval CDC 서비스에서 구성 변경을 확인하는 폴링 간격(초)입니다. 기본값은 30입니다. 최대값은 3600입니다.

sql_command_timeout SQL Server에서 작동하는 명령 시간 제한입니다. 기본값은 1입니다. 최대값은 3600입니다.

MSXDBCDC 데이터베이스 저장 프로시저

이 섹션에서 설명하는 MSXDBCDC 데이터베이스의 저장 프로시저는 다음과 같습니다.

dbo.xcbcdc_reset_db(데이터베이스 이름)

이 프로시저는 Oracle CDC 인스턴스의 데이터를 지웁니다. 사용되는 경우는 다음과 같습니다.

  • 이전 데이터를 무시하고 데이터 캡처를 다시 시작하려는 경우(예: 원본 데이터베이스 복구 이후 또는 Oracle 트랜잭션 로그 중 일부를 사용할 수 없는 비활성 이후)

  • CDC 상태(특히 모든 cdc.*tables 데이터)에 손상이 있는 경우

dbo.xcbcdc_reset_db 프로시저에서 수행하는 작업은 다음과 같습니다.

  • CDC 인스턴스를 중지합니다(활성인 경우).

  • 변경 테이블, cdc_lsn_mapping 테이블 및 cdc_ddl_history 테이블을 자릅니다.

  • cdc_xdbcdc_state 테이블을 지웁니다.

  • cdc_change_table 각 행에 대한 start_lsn 열을 지웁니다.

dbo.xcbcdc_reset_db 프로시저를 사용하려면 사용자는 이름 지정되는 CDC 인스턴스 데이터베이스에 대한 db_owner 데이터베이스 역할의 멤버이거나 sysadmin 또는 serveradmin 고정 서버 역할의 멤버여야 합니다.

CDC 테이블에 대한 자세한 내용은 CDC Designer 콘솔의 도움말 시스템에서 CDC 데이터베이스를 참조하세요.

dbo.xdbcdc_disable_db(dbname)

dbo.xcbcdc_disable_db 프로시저에서 수행하는 작업은 다음과 같습니다.

  • MSXDBCDC.xdbcdc_databases 테이블에서 선택한 CDC 데이터베이스 항목을 제거합니다.

dbo.xcbcdc_disable_db 프로시저를 사용하려면 사용자는 이름을 지정 중인 CDC 인스턴스에 대한 db_owner 데이터베이스 역할의 멤버이거나 sysadmin 또는 serveradmin 고정 서버 역할의 멤버여야 합니다.

CDC 테이블에 대한 자세한 내용은 CDC Designer 콘솔의 도움말 시스템에서 'CDC 데이터베이스'를 참조하세요.

dbo.xcbcdc_add_service(svcname,sqlusr)

dbo.xcbcdc_add_service 프로시저는 항목을 MSXDBCDC.xdbcdc_services 테이블에 추가하고, 1씩의 증분을 MSXDBCDC.xdbcdc_services 테이블의 서비스 이름에 대한 ref_count 열에 추가합니다. ref_count 0이면 행을 삭제합니다.

dbo.xcbcdc_add_service<service name, username> 프로시저를 사용하려면 사용자는 이름 지정되는 CDC 인스턴스 데이터베이스에 대한 db_owner 데이터베이스 역할의 멤버이거나 sysadmin 또는 serveradmin 고정 서버 역할의 멤버여야 합니다.

dbo.xdbcdc_start(dbname)

dbo.xdbcdc_start 프로시저는 변경 처리를 시작하기 위해 선택한 CDC 인스턴스를 처리하는 CDC 서비스에 시작 요청을 보내 합니다.

dbo.xcdcdc_start 프로시저를 사용하려면 사용자는 CDC 데이터베이스에 대한 db_owner 데이터베이스 역할의 멤버이거나 SQL Server 인스턴스에 대한 sysadmin 또는serveradmin 역할의 멤버여야 합니다.

dbo.xdbcdc_stop(dbname)

dbo.xdbcdc_stop 프로시저는 변경 처리를 중지하기 위해 선택한 CDC 인스턴스를 처리하는 CDC 서비스에 중지 요청을 보냅니다.

dbo.xcdcdc_stop 프로시저를 사용하려면 사용자는 CDC 데이터베이스에 대한 db_owner 데이터베이스 역할의 멤버이거나 SQL Server 인스턴스에 대한 sysadmin 또는serveradmin 역할의 멤버여야 합니다.

CDC 데이터베이스

CDC Service에서 사용되는 각 Oracle CDC 인스턴스는 CDC 데이터베이스라는 특정 데이터베이스와 연결됩니다. 이 SQL Server 데이터베이스는 Oracle CDC Service와 연결된 SQL Server 인스턴스에서 호스트됩니다.

CDC 데이터베이스에는 특수한 cdc 스키마가 포함되어 있습니다. Oracle CDC Service는 이 스키마를 접두사가 xdbcdc_인 테이블 이름과 함께 사용합니다. 이 스키마는 보안 및 일관성을 위해 사용됩니다.

Oracle CDC 인스턴스와 CDC 데이터베이스는 모두 Oracle CDC Designer 콘솔을 사용하여 만들어집니다. CDC 데이터베이스에 대한 자세한 내용은 Oracle CDC Designer 콘솔 설치에 포함된 설명서를 참조하세요.

명령줄을 사용하여 CDC Service 구성

명령줄에서 Oracle CDC Service 프로그램(xdbcdcsvc.exe)을 작동할 수 있습니다. CDC 서비스 프로그램은 네이티브 32비트/64비트 Windows 실행 파일입니다.

참고 항목

CDC Service 명령줄 인터페이스를 사용하는 방법

서비스 프로그램 명령

이 섹션에서는 CDC 서비스를 구성하는 데 사용되는 다음 명령을 설명합니다.

Config

스크립트에서 Oracle CDC Service 구성을 업데이트하려면 Config를 사용합니다. 이 명령은 CDC 서비스 구성의 특정 부분(예: 비대칭 키 암호를 알 수 없는 연결 문자열만)만 업데이트하는 데 사용할 수 있습니다. 이 명령은 컴퓨터 관리자가 실행해야 합니다. 다음은 Config 명령의 예입니다.

"<path>xdbcdcsvc.exe" config  
     <cdc-service-name>  
     [connect= <sql-server-connection-string>]  
     [key= <asym-key-password>]  
     [svcacct= <windows-account> <windows-password>]  
     [sqlacct= <sql-username> <sql-password>]  
  

여기서

cdc-service-name은 업데이트할 CDC Service의 이름입니다. 필수 매개 변수입니다.

sql-server-connection-string은 업데이트할 연결 문자열입니다. 공백 또는 따옴표가 연결 문자열에 포함된 경우 큰따옴표(")로 래핑해야 합니다. 따옴표를 이중으로 사용하면 포함된 따옴표가 이스케이프됩니다.

asym-key-password는 업데이트해야 할 암호입니다.

windows-account, windows-password는 업데이트되는 서비스에 대한 Windows 계정 자격 증명입니다.

sql-username, sql-password는 업데이트되는 SQL Server 인증 자격 증명입니다. sqlacct에 빈 사용자 이름과 빈 암호가 모두 있는 경우 Oracle CDC Service에서 Windows 인증 사용하여 SQL Server에 연결합니다.

참고: 공백 또는 따옴표가 포함되는 매개 변수는 큰따옴표(")로 래핑해야 합니다. 포함되는 큰따옴표는 이중으로 처리해야 합니다(예: "A#B" D를 암호로 사용하려면 ""A#B"" D"를 입력).

만들기

스크립트에서 Oracle CDC Service를 만들려면 Create를 사용합니다. 이 명령은 컴퓨터 관리자가 실행해야 합니다. 다음은 Create 명령의 예입니다.

"<path>xdbcdcsvc.exe" create  
     <cdc-service-name>  
     [connect= "<sql-server-connection-string>"]  
     [key= <asym-key-password>]  
     [svcacct <windows-account> <windows-password>]  
     [sqlacct <sql-username> <sql-password>]  

여기서

cdc-service-name은 새로 만들 서비스의 이름입니다. 이 이름의 서비스가 이미 있는 경우 프로그램에서 오류를 반환합니다. 긴 이름 또는 공백이 포함된 이름을 사용하면 안 됩니다. "/" 및 "\" 문자는 서비스 이름에 유효한 문자가 아닙니다. 필수 매개 변수입니다.

sql-server-connection-string은 새 Oracle CDC Service와 연결된 SQL Server 인스턴스에 연결하는 데 사용할 연결 문자열입니다.

asym-key-password는 원본 데이터베이스 로그 마이닝 자격 증명을 저장하는 데 사용되는 비대칭 키를 보호하는 암호입니다.

windows-account, windows-password는 만드는 Oracle CDC Service와 연결되는 계정 이름 및 암호입니다.

sql-username, sql-password는 SQL Server 인스턴스에 연결하는 데 사용되는 SQL Server 계정 이름 및 암호입니다. 두 매개 변수가 모두 비어 있으면 CDC Service for Oracle에서 Windows 인증 사용하여 SQL Server에 연결합니다.

참고: 공백 또는 따옴표가 포함되는 매개 변수는 큰따옴표(")로 래핑해야 합니다. 포함되는 큰따옴표는 이중으로 처리해야 합니다(예: "A#B" D를 암호로 사용하려면 ""A#B"" D"를 입력).

삭제

스크립트에서 Oracle CDC Service를 완전히 삭제하려면 Delete를 사용합니다. 컴퓨터 관리자가 이 명령을 실행해야 합니다. 다음은 Delete 명령의 예입니다.

"<path>xdbcdcsvc.exe" delete  
    <cdc-service-name>  
  

여기서

cdc-service-name은 삭제할 CDC 서비스의 이름입니다.

참고: 공백 또는 따옴표가 포함되는 매개 변수는 큰따옴표(")로 래핑해야 합니다. 포함되는 큰따옴표는 이중으로 처리해야 합니다(예: "A#B" D를 암호로 사용하려면 ""A#B"" D"를 입력).

참고 항목

CDC Service 명령줄 인터페이스를 사용하는 방법
CDC를 위해 SQL Server를 준비하는 방법