본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Debezium Oracle 커넥터

원문 보기 위키 갱신

Debezium Oracle 커넥터 (camel-debezium-oracle)

Debezium Oracle 컴포넌트는 Kafka나 Kafka Connect 없이도 Debezium Engine으로 Oracle 데이터베이스의 Change Data Capture(CDC) 이벤트를 라우트로 흘려 보내는 컴포넌트예요. Debezium을 Debezium Engine으로 감싼 래퍼(wrapper)라서 Oracle의 redo 로그와 아카이브 로그를 마이닝하는 방식으로 동작하고, 컨슈머 전용이라서 from()으로 CDC 이벤트를 구독하는 방식으로 써요. LogMiner 캡처 모드와 오프셋 저장, 스냅샷, 헬스 체크 같은 임베디드 엔진의 동작 방식도 그대로 노출해요.

출처: 문서

본문

Camel 3.17부터 지원

컨슈머만 지원해요

Debezium Oracle 컴포넌트는 Debezium을 Debezium Engine으로 감싼 래퍼(wrapper)예요. Kafka나 Kafka Connect 없이도 Debezium으로 Oracle 데이터베이스에서 Change Data Capture를 할 수 있게 해 줘요.

참고 장애 처리 관련 참고: Debezium Embedded Engine 문서에 따르면, 엔진은 소스 오프셋을 적극적으로 기록하고 이 오프셋을 주기적으로 영구 저장소에 플러시해요. 그래서 애플리케이션을 재시작하거나 크래시가 나도 엔진은 마지막으로 기록된 오프셋부터 이어서 처리해요. 정상 동작 중이라면 다운스트림 라우트는 각 이벤트를 정확히 한 번씩 받아요. 하지만 애플리케이션이 크래시로 죽은 경우(우아한 종료 없이) 재시작 직후에 중복 이벤트를 받을 수 있어요. 따라서 다운스트림 라우트는 이런 상황을 충분히 견딜 수 있어야 하고, 필요하면 이벤트를 중복 제거해야 해요.

엔진이 폴링을 시작하기 전에는 컨슈머 헬스 체크가 설정된 초기 상태(기본값 DOWN)를 보고해요. 커넥터 태스크가 시작되고 엔진이 폴링 단계에 들어가면, 변경 이벤트가 아직 하나도 도착하지 않았더라도 UP을 보고해요. 이건 초기 스냅샷이 끝났다는 뜻이 아니에요.

임베디드 엔진이 에러로 멈추면(예: 커넥터가 데이터베이스에 도달할 수 없거나 오프셋 저장소를 읽을 수 없을 때) 재시작되지 않아요. 라우트는 시작 상태로 남아 있지만 더 이상 이벤트를 받지 못해요. 장애는 컨슈머 예외 핸들러로 보고되고 라우트 헬스 체크를 DOWN으로 바꿔서, readiness 프로브가 감지할 수 있게 해 줘요.

Maven 사용자라면 이 컴포넌트를 위해 pom.xml에 다음 의존성을 추가해야 해요.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-debezium-oracle</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

URI 형식 (URI Format)

debezium-oracle:name[?options]

옵션 설정 (Configuring Options)

Camel 컴포넌트는 서로 다른 두 단계로 설정해요:

  • component level

  • endpoint level

컴포넌트 옵션 설정 (Configuring Component Options)

컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.

예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.

컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.

컴포넌트는 다음 방법으로 설정할 수 있어요:

  • the Component DSL.

  • 설정 파일(application.properties, *.yaml 파일 등).

  • Java 코드에서 직접.

엔드포인트 옵션 설정 (Configuring Endpoint Options)

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 컨슈머(from)로 쓰이는지, 프로듀서(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.

엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Endpoint DSL과 DataFormat DSL을 쓰면 자바에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정할 수도 있어요.

옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.

프로퍼티 플레이스홀더는 이런 장점이 있어요:

  • URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하는 걸 막아 줘요.

  • 설정을 코드 밖으로 분리할 수 있어요.

  • 코드가 더 유연해지고 재사용하기 좋아져요.

다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션, 그다음 엔드포인트 옵션 순서예요.

컴포넌트 옵션 (Component Options)

Debezium Oracle Connector 컴포넌트는 아래 나열된 옵션들을 지원해요.

Name Description Default Type
additionalProperties (common) camel 설정에 바로 넣을 수 없는 debezium 컴포넌트용 추가 프로퍼티예요(예: Debezium 엔진에 필요한 Kafka Connect 프로퍼티 설정, KafkaOffsetBackingStore 설정 같은 것). 프로퍼티에는 additionalProperties. 접두어를 붙여야 해요. 예: additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro. additionalProperties. 접두어를 사용하는 멀티 밸류 옵션이에요. Map
bridgeErrorHandler (consumer) 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. false boolean
configuration (consumer) 미리 구성된 설정(Configuration)을 지정할 수 있게 해 줘요. OracleConnectorEmbeddedDebeziumConfiguration
internalKeyConverter (consumer) 오프셋의 키 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
internalValueConverter (consumer) 오프셋의 값 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
offsetCommitPolicy (consumer) 커밋 정책의 Java 클래스 이름이에요. 처리한 이벤트 수와 마지막 커밋 이후 경과 시간을 기준으로 오프셋 커밋을 언제 트리거할지 정의해요. 이 클래스는 'OffsetCommitPolicy' 인터페이스를 구현해야 하고, 기본값은 시간 간격 기반의 주기적 커밋 정책이에요. String
offsetCommitTimeoutMs (consumer) 레코드를 플러시하고 파티션 오프셋 데이터를 오프셋 저장소에 커밋할 때까지 기다리는 최대 시간(밀리초)이에요. 이 시간을 넘기면 처리를 취소하고, 오프셋 데이터는 나중에 다시 커밋 시도로 돌려 놓아요. 기본값은 5초예요. 5000 long
offsetFlushIntervalMs (consumer) 오프셋 커밋을 시도하는 간격이에요. 기본값은 1분이에요. 60000 long
offsetStorage (consumer) 커넥터 오프셋의 영속화를 담당하는 Java 클래스 이름이에요. org.apache.kafka.connect.storage.FileOffsetBackingStore String
offsetStorageFileName (consumer) 오프셋을 저장할 파일 경로예요. offset.storage가 FileOffsetBackingStore로 설정되어 있으면 필수예요. String
offsetStoragePartitions (consumer) 오프셋 저장소 토픽을 만들 때 사용할 파티션 수예요. offset.storage가 'KafkaOffsetBackingStore'로 설정되어 있으면 필수예요. int
offsetStorageReplicationFactor (consumer) 오프셋 저장소 토픽을 만들 때 사용할 복제 계수예요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. int
offsetStorageTopic (consumer) 오프셋을 저장할 Kafka 토픽의 이름이에요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. String
autowiredEnabled (advanced) 오토와이어링(autowiring)을 활성화할지 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 딱 하나 있는지 찾아서, 그 인스턴스로 오토와이어링 옵션(옵션이 autowired로 표시되어 있어야 함)을 자동 설정하는 데 쓰여요. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정할 때 사용할 수 있어요. true boolean
archiveDestinationName (oracle) 아카이브 로그를 읽을 소스로 특정 아카이브 로그 목적지(archive log destination)를 지정해요. 설정하지 않으면 커넥터가 LOCAL이면서 VALID인 첫 번째 목적지를 자동으로 골라요. String
archiveLogHours (oracle) SYSDATE로부터 과거로 얼마나 떨어진 시점까지 아카이브 로그를 마이닝할지 시간 수예요. 0을 쓰면 사용 가능한 아카이브 로그 전부를 마이닝해요. 0 long
binaryHandlingMode (oracle) binary(blob, binary 등) 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'bytes'는 바이너리 데이터를 바이트 배열로 표현하고(기본값), 'base64'는 base64 인코딩 문자열로, 'base64-url-safe'는 base64-url-safe 인코딩 문자열로, 'hex'는 hex 인코딩(base16) 문자열로 표현해요. bytes String
captureMode (oracle) Oracle에서 스트리밍 변경을 캡처할 때 사용하는 캡처 모드를 지정해요. 'primary'(기본값)는 database 설정으로 지정한 프라이머리에서 변경을 캡처해요. 'physical_standby'는 secondary 설정으로 지정한 읽기 전용 물리적 스탠바이에서 변경을 캡처해요. 'downstream'은 secondary 설정으로 지정한 다운스트림 실시간 마이닝 데이터베이스에서 변경을 캡처해요. primary String
columnExcludeList (oracle) 변경 이벤트에서 제외할 컬럼과 일치하는 정규 표현식이에요. String
columnIncludeList (oracle) 변경 이벤트에 포함할 컬럼과 일치하는 정규 표현식이에요. String
columnPropagateSourceType (oracle) 내보낸 변경 레코드의 필드 스키마에 컬럼의 원래 타입과 원래 길이를 파라미터로 추가할, 완전한 이름(fully-qualified name)의 컬럼과 일치하는 정규 표현식의 콤마 구분 목록이에요. String
connectionValidationTimeoutMs (oracle) 연결 검증이 끝나기를 기다리는 최대 시간(밀리초)이에요. 기본값은 60초예요. 1m long
converters (oracle) 기본 컨버터 대신 사용할 커스텀 컨버터의 선택 목록이에요. 컨버터는 '.type' 설정 옵션으로 정의하고 '.' 옵션들로 구성해요. String
customMetricTags (oracle) 커스텀 메트릭 태그는 키-값 쌍을 받아서 MBean 객체 이름을 커스터마이즈해요. 이 이름은 일반 이름 끝에 덧붙여지고, 각 키는 MBean 객체 이름의 태그가 되며, 그에 대응하는 값이 그 키의 태그 값이 돼요. 예: k1=v1,k2=v2. String
customSanitizePattern (oracle) 값을 마스킹할 설정 키를 식별하는 정규 표현식이에요. 설정하면 이 커스텀 패턴이 Debezium의 기본 비밀번호 마스킹 패턴을 대체해요. .*secret$ .*password$
databaseConnectionAdapter (oracle) 데이터베이스에서 변경을 캡처할 때 사용할 어댑터예요. 옵션은 이렇게 있어요. 'LogMiner': (기본값) 버퍼링된 트랜잭션과 함께 네이티브 Oracle LogMiner로 변경을 캡처해요. 'LogMiner_Unbuffered': 버퍼링 없이 네이티브 Oracle LogMiner로 변경을 캡처해요. 'XStream': Oracle XStreams로 변경을 캡처해요. 'OLR': OpenLogReplicator로 변경을 캡처해요. LogMiner String
databaseDbname (oracle) 커넥터가 변경을 캡처할 데이터베이스의 이름이에요. String
databaseHostname (oracle) 이름 조회가 되는 데이터베이스 서버의 호스트 이름이나 IP 주소예요. String
databasePassword (oracle) 필수 데이터베이스에 연결할 때 사용할 데이터베이스 사용자의 비밀번호예요. String
databasePdbName (oracle) 멀티 테넌트 셋업에서 플러그형 데이터베이스(pluggable database)의 이름이에요. 이 경우 CDB 이름은 database.dbname으로 지정해야 해요. String
databasePort (oracle) 데이터베이스 서버의 포트예요. 1528 int
databaseQueryTimeoutMs (oracle) 쿼리가 실행되기를 기다리는 시간(밀리초)이에요. 기본값은 600초(600,000 ms)이고, 0은 무제한이라는 뜻이에요. 10m int
databaseUrl (oracle) 호스트 이름·포트·데이터베이스를 개별 지정하는 대신 쓰는 완전한 JDBC URL이에요. 대체 연결 시나리오를 지원하려고 제공돼요. String
databaseUser (oracle) 데이터베이스에 연결할 때 사용할 데이터베이스 사용자의 이름이에요. String
datatypePropagateSourceType (oracle) 내보낸 변경 레코드의 필드 스키마에 데이터 타입의 원래 타입과 원래 길이를 파라미터로 추가할, 데이터베이스별 데이터 타입 이름과 일치하는 정규 표현식의 콤마 구분 목록이에요. String
decimalHandlingMode (oracle) DECIMAL과 NUMERIC 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'precise'(기본값)는 java.math.BigDecimal로 값을 표현하고, 변경 이벤트에는 바이너리 표현과 Kafka Connect의 'org.apache.kafka.connect.data.Decimal' 타입으로 인코딩돼요. 'string'은 문자열로 값을 표현해요. 'double'은 Java의 'double'로 표현하는데, 정밀도는 떨어질 수 있지만 컨슈머에서는 훨씬 다루기 쉬워요. precise String
errorsMaxRetries (oracle) 실패하기 전에 연결 오류를 재시도하는 최대 횟수예요(-1 = 무제한, 0 = 비활성화, 그 외 = 재시도 횟수). -1 int
eventProcessingFailureHandlingMode (oracle) 이벤트 처리 중 실패(예: 깨진 이벤트를 만났을 때)를 어떻게 다룰지 지정해요. 'fail'(기본값)은 문제가 된 이벤트와 그 위치를 알리는 예외를 던져서 커넥터를 멈춰요. 'warn'은 문제가 된 이벤트와 그 위치를 로그로 남기고 이벤트를 건너뛰어요. 'ignore'는 문제가 된 이벤트를 그냥 건너뛰어요. fail String
executorShutdownTimeoutMs (oracle) 태스크 익스큐터가 종료되기를 기다리는 최대 시간(밀리초)이에요. 4s long
extendedHeadersEnabled (oracle) 다운스트림 처리 시스템에서 CDC 이벤트의 출처를 추적하고 식별하는 데 꼭 필요한 메타데이터를 담은 Debezium 컨텍스트 헤더를 켜거나 끄는 옵션이에요. true boolean
guardrailCollectionsLimitAction (oracle) guardrail 컬렉션 한도를 초과했을 때 취할 동작을 지정해요. 'warn'(기본값)은 경고 메시지를 로그로 남기고 처리를 계속해요. 'fail'은 에러로 커넥터를 멈춰요. warn String
guardrailCollectionsMax (oracle) 커넥터가 캡처할 수 있는 컬렉션이나 테이블의 최대 개수예요. 이 한도를 초과하면 'guardrail.collections.limit.action'으로 지정한 동작을 해요. 이 guardrail을 끄려면 0으로 설정하세요. 0 int
heartbeatActionQuery (oracle) 하트비트마다 실행되는 쿼리예요. String
heartbeatIntervalMs (oracle) 커넥터가 하트비트 토픽으로 하트비트 메시지를 주기적으로 보내는 간격(밀리초)이에요. 하트비트 메시지를 끄려면 0을 사용하세요. 기본값은 비활성화예요. 0ms int
heartbeatTopicsPrefix (oracle) 하트비트 토픽 이름에 사용하는 접두어예요. 기본값은 __debezium-heartbeat이에요. __debezium-heartbeat String
includeSchemaChanges (oracle) 커넥터가 데이터베이스 스키마의 변경 사항을 데이터베이스 서버 ID와 같은 이름의 Kafka 토픽으로 내보낼지 여부예요. 각 스키마 변경은 데이터베이스 이름을 담은 키로 기록되고, 값에는 새 스키마의 논리적 설명과 선택적으로 DDL 문이 들어가요. 기본값은 'true'예요. 이 설정은 커넥터가 내부적으로 데이터베이스 스키마 히스토리를 기록하는 방식과는 별개예요. true boolean
includeSchemaComments (oracle) 커넥터가 테이블과 컬럼의 주석을 메타데이터 객체로 파싱할지 여부예요. 참고: 이 옵션을 켜면 메모리 사용량에 영향이 생겨요. ColumnImpl 객체의 개수와 크기가 Debezium 커넥터의 메모리 소비를 크게 좌우하는데, 각 객체에 String을 하나씩 더하면 상당히 무거워질 수 있어요. 기본값은 'false'예요. false boolean
incrementalSnapshotWatermarkingStrategy (oracle) 증분 스냅샷 동안 워터마킹에 사용할 전략을 지정해요. 'insert_insert'는 open과 close 시그널을 모두 signal data collection에 기록해요(기본값). 'insert_delete'는 open 시그널만 signal data collection에 기록하고, close는 해당 open 시그널을 삭제해요. INSERT_INSERT String
intervalHandlingMode (oracle) INTERVAL 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'string'은 값을 정확한 ISO 형식 문자열로 표현해요. 'numeric'(기본값)은 마이크로초로의 정확하지 않은 변환을 사용해 값을 표현해요. numeric String
legacyDecimalHandlingStrategy (oracle) DBZ-7882 이전의 예전(legacy) decimal 처리 동작을 사용해요. false boolean
legacySnapshotMaxThreads (oracle) 활성화하면 예전 방식의 테이블당 스레드(table-per-thread) 병렬 스냅샷 알고리즘을 사용해요. false(기본값)로 두면 테이블을 청크로 나눠서 모든 스냅샷 스레드에 걸쳐 처리하기 때문에 스냅샷 동시성이 더 높아져요. false boolean
lobEnabled (oracle) 'false'(기본값)로 두면 LOB 필드를 캡처하거나 내보내지 않아요. 'true'로 설정하면 커넥터가 LOB 필드를 캡처하고, 다른 컬럼 타입처럼 해당 필드의 변경을 내보내요. false boolean
logMiningArchiveLogOnlyMode (oracle) 'false'(기본값)로 두면 커넥터가 아카이브 로그와 redo 로그를 모두 마이닝해서 변경 이벤트를 내보내요. 'true'로 설정하면 커넥터가 아카이브 로그만 마이닝해요. redo 로그가 자주 순환되는 환경에서는 아카이브 로그만 마이닝하고 이벤트 전달 지연을 감수하는 쪽이 유리한 경우가 있어요. false boolean
logMiningArchiveLogOnlyScnPollIntervalMs (oracle) SCN이 아카이브 로그에 있는지 확인하는 폴 사이에 기다리는 간격(밀리초)이에요. 10s long
logMiningBufferDeferredTransactionRetentionMs (oracle) DML 이벤트를 내보내지 않는 트랜잭션의 지연(deferred) 트랜잭션 메타데이터를 유지하는 시간(밀리초)이에요. 기본으로 지연 트랜잭션 메타데이터는 24시간 동안 유지돼요. 이 설정은 이벤트가 있는 캐시된 트랜잭션을 다루는 log.mining.transaction.retention.ms와는 별개예요. 1d long
logMiningBufferDeferredTransactionStart (oracle) 버퍼링된 LogMiner를 쓸 때 트랜잭션 시작 이벤트를 지연시킬지 제어해요. 활성화하면 트랜잭션 시작 이벤트가 가벼운 메타데이터 맵에 저장돼요. 트랜잭션은 DML 이벤트가 관찰될 때 비로소 트랜잭션 캐시로 승격돼요. 마이닝 윈도우가 트랜잭션에 묶이지 않아서 블록 단위 슬라이딩 윈도우가 가능해져요. false boolean
logMiningBufferDropOnStop (oracle) true로 설정하면 커넥터가 멈췄을 때 하부 버퍼 캐시를 유지하지 않아요. false(기본값)로 두면 버퍼 캐시가 재시작 사이에도 유지돼요. false boolean
logMiningBufferEhcacheEventsConfig (oracle) events 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. String
logMiningBufferEhcacheGlobalConfig (oracle) services나 persistence 같은 Ehcache 전역 설정을 지정해요. 태그는 Debezium이 관리하므로 포함할 수 없어요. String
logMiningBufferEhcacheProcessedtransactionsConfig (oracle) 처리된 트랜잭션(processed transaction) 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. String
logMiningBufferEhcacheSchemachangesConfig (oracle) 스키마 변경 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. String
logMiningBufferEhcacheTransactionsConfig (oracle) 트랜잭션 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. String
logMiningBufferInfinispanCacheEvents (oracle) Infinispan 'events' 캐시의 XML 설정을 지정해요. String
logMiningBufferInfinispanCacheGlobal (oracle) Infinispan 'global' 설정의 XML 설정을 지정해요. String
logMiningBufferInfinispanCacheProcessedTransactions (oracle) Infinispan 'processed-transactions' 캐시의 XML 설정을 지정해요. String
logMiningBufferInfinispanCacheSchemaChanges (oracle) Infinispan 'schema-changes' 캐시의 XML 설정을 지정해요. String
logMiningBufferInfinispanCacheTransactions (oracle) Infinispan 'transactions' 캐시의 XML 설정을 지정해요. String
logMiningBufferMemoryLegacyTransactionStart (oracle) 버퍼링된 LogMiner를 쓸 때 트랜잭션 시작 이벤트를 지연시킬지 제어해요. 활성화하면 트랜잭션 시작 이벤트가 가벼운 메타데이터 맵에 저장돼요. 트랜잭션은 DML 이벤트가 관찰될 때 비로소 트랜잭션 캐시로 승격돼요. 마이닝 윈도우가 트랜잭션에 묶이지 않아서 블록 단위 슬라이딩 윈도우가 가능해져요. false boolean
logMiningBufferTrackClientId (oracle) 'CLIENT_ID' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'CLIENT_ID' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'CLIENT_ID' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. true boolean
logMiningBufferTrackCommitTimestamp (oracle) 'COMMIT_TIMESTAMP' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'COMMIT_TIMESTAMP' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'COMMIT_TIMESTAMP' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. true boolean
logMiningBufferTrackRsId (oracle) 'RS_ID' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'RS_ID' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'RS_ID' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. true boolean
logMiningBufferTrackStartTimestamp (oracle) 'START_TIMESTAMP' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'START_TIMESTAMP' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'START_TIMESTAMP' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. true boolean
logMiningBufferTrackUsername (oracle) 'USERNAME' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'USERNAME' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'USERNAME' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. true boolean
logMiningBufferTransactionEventsThreshold (oracle) 트랜잭션이 폐기되기 전까지 담을 수 있는 이벤트의 개수예요. 아주 큰 트랜잭션을 다룰 때 버퍼 메모리나 공간을 관리하는 데 유용해요. 기본값은 0이고, 임계값이 적용되지 않아 트랜잭션이 이벤트를 무제한으로 가질 수 있다는 뜻이에요. 0 long
logMiningBufferType (oracle) 버퍼 타입은 커넥터가 트랜잭션 데이터를 버퍼링하는 방식을 제어해요. memory - JVM 프로세스의 힙을 사용해 모든 트랜잭션 데이터를 버퍼링해요. infinispan_embedded - 임베디드 Infinispan 캐시를 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. infinispan_remote - 원격 Infinispan 클러스터를 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. ehcache - ehcache를 임베디드 모드로 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. memory String
logMiningClientidExcludeList (oracle) LogMiner 쿼리에서 제외할 클라이언트 id의 콤마 구분 목록이에요. String
logMiningClientidIncludeList (oracle) LogMiner 쿼리에 포함할 클라이언트 id의 콤마 구분 목록이에요. String
logMiningFlushTableName (oracle) 커넥터가 사용하는 플러시 테이블의 이름이에요. 기본값은 LOG_MINING_FLUSH예요. LOG_MINING_FLUSH String
logMiningIncludeRedoSql (oracle) 활성화하면 트랜잭션 로그의 REDO SQL이 소스 정보 블록에 포함돼요. false boolean
logMiningLogCountGrowthMax (oracle) 오래 실행되는 트랜잭션이 마이닝 윈도우 시작점을 붙잡고 있을 때, redo 스레드당 마이닝 윈도우가 자동으로 커질 수 있는 최대 로그 개수를 지정해요. 기본값은 4예요. 이 값보다 큰 'log.mining.log.count.min'이 있으면 그 값이 우선해요. 이전에 마이닝했던 로그를 다시 커버할 때는 마이닝 윈도우가 이 개수를 넘을 수 있어요. 이 값은 자동 증가를 제한할 뿐, 윈도우 자체를 제한하는 건 아니에요. 4 int
logMiningLogCountMin (oracle) redo 스레드당 마이닝할 최소 로그 개수를 지정해요. 0으로 설정하면 상한이 꺼지고, 사용 가능한 모든 로그를 한 번에 다 마이닝해요. 2 int
logMiningPathDictionary (oracle) 커넥터를 읽기 전용 데이터베이스 레플리카에 사용할 때는 이 설정이 필요해요. String
logMiningQueryFilterMode (oracle) 필터 설정을 LogMiner 데이터베이스 쿼리에 어떻게 적용할지 지정해요. none - 쿼리에 스키마나 테이블 필터를 적용하지 않고, 모든 필터링은 커넥터가 런타임에 해요. in - 쿼리가 SQL in-clause 표현식으로 스키마나 테이블 필터를 지정해요. regex - 쿼리가 Oracle REGEXP_LIKE 표현식으로 스키마나 테이블 필터를 지정해요. none String
logMiningReadOnly (oracle) 'true'로 설정하면 커넥터가 LGWR 버퍼를 디스크로 플러시하지 않아서, 읽기 전용 데이터베이스에 연결할 수 있어요. false boolean
logMiningReadonlyHostname (oracle) 변경이 스트리밍될 세컨더리 Oracle 인스턴스예요. String
logMiningRestartConnection (oracle) Debezium은 데이터베이스 연결을 열어 두고 스트리밍 단계 내내 그 연결을 유지해요. 상황에 따라 이게 과도한 SGA 메모리 사용으로 이어질 수 있어요. 이 옵션을 'true'로 설정하면(기본값은 'false') 커넥터가 감지된 로그 스위치가 있을 때마다, 또는 log.mining.session.max.ms에 도달했을 때 데이터베이스 연결을 닫았다가 다시 열어요. false boolean
logMiningSessionMaxMs (oracle) LogMiner 세션이 재시작되기 전까지 살아 있는 최대 시간(밀리초)이에요. 기본값은 0이고(로그 스위치가 일어날 때까지 무기한), 이 값은 비활성화가 아니라 무기한 유지를 뜻해요. 0ms long
logMiningStrategy (oracle) 마이닝 전략과 LogMiner 세션 특성을 정의해요. 'redo_log_catalog'는 데이터 딕셔너리를 redo 로그에 기록하는데, 폐기 예정(deprecated)이라 3.7에서 제거될 거예요. 'online_catalog'는 기존 데이터 딕셔너리를 사용하고 'redo_log_catalog'보다 빠르지만, 스키마 변경이 맞물려(lock-step) 일어나야 해요. 'hybrid'는 기존 데이터 딕셔너리를 사용하고, 'redo_log_catalog'보다 빠르며, 끼어든 스키마 변경(interleaved schema changes)도 지원해요. online_catalog String
logMiningTransactionRetentionMs (oracle) 로그 마이닝 세션 사이에 오래 실행되는 트랜잭션을 트랜잭션 버퍼에 유지하는 시간(밀리초)이에요. 기본으로 모든 트랜잭션이 유지돼요. 0ms long
logMiningUsernameExcludeList (oracle) LogMiner 쿼리에서 제외할 사용자 이름의 콤마 구분 목록이에요. String
logMiningUsernameIncludeList (oracle) LogMiner 쿼리에 포함할 사용자 이름의 콤마 구분 목록이에요. String
logMiningWindowMaxMs (oracle) 마이닝 윈도우가 차지할 수 있는 최대 시간(밀리초)이에요. 트랜잭션이 이 시간보다 오래 열려 있으면 마이닝 윈도우 시작 SCN이 앞으로 당겨져서 윈도우 크기를 최소화하고, 윈도우가 무한히 커지는 걸 막아요. 기본값은 0(비활성화)이에요. 0ms long
maxBatchSize (oracle) 소스 레코드 배치 하나의 최대 크기예요. 기본값은 2048이에요. 2048 int
maxQueueSize (oracle) 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기예요. 기본값은 8192이고, 항상 최대 배치 크기보다 커야 해요. 8192 int
maxQueueSizeInBytes (oracle) 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기(바이트)예요. 기본값은 0이고, 기능이 꺼져 있다는 뜻이에요. 0 long
memoryManagementSchemasClass (oracle) 스키마 메타데이터용 저장소 구현의 완전한 클래스 이름(fully-qualified class name)이에요. 클래스는 io.debezium.relational.TableMappingStorage를 구현해야 하고, 기본값은 인메모리 저장소용 io.debezium.relational.ConcurrentMapTableMappingStorage예요. io.debezium.relational.ConcurrentMapTableMappingStorage String
memoryManagementTablesClass (oracle) 테이블 메타데이터용 저장소 구현의 완전한 클래스 이름(fully-qualified class name)이에요. 클래스는 io.debezium.relational.TableMappingStorage를 구현해야 하고, 기본값은 인메모리 저장소용 io.debezium.relational.ConcurrentMapTableMappingStorage예요. io.debezium.relational.ConcurrentMapTableMappingStorage String
messageKeyColumns (oracle) 메시지 키로 쓸 완전한 이름(fully-qualified)의 테이블과 컬럼에 해당하는 표현식의 세미콜론 구분 목록이에요. 각 표현식은 ':' 패턴과 일치해야 하고, 테이블 이름은 커넥터에 따라 (DB_NAME.TABLE_NAME) 또는 (SCHEMA_NAME.TABLE_NAME) 형식으로 정의할 수 있으며, 키 컬럼은 커스텀 키를 이루는 컬럼의 콤마 구분 목록이에요. 명시적인 키 설정이 없는 테이블은 그 테이블의 기본 키 컬럼이 메시지 키로 쓰여요. 예: dbserver1.inventory.orderlines:orderId,orderLineId;dbserver1.inventory.orders:id. String
notificationEnabledChannels (oracle) 활성화된 알림 채널 이름 목록이에요. String
notificationSinkTopicName (oracle) 알림용 토픽의 이름이에요. 활성화된 채널 목록에 'sink'가 있으면 필수예요. String
openlineageIntegrationConfigFilePath (oracle) OpenLineage 파일 설정의 경로예요. 자세한 내용은 https://openlineage.io/docs/client/java/configuration을 참고하세요. ./openlineage.yml String
openlineageIntegrationDatasetKafkaBootstrapServers (oracle) 입력/출력 네임스페이스로 사용할 Kafka 부트스트랩 서버 주소예요. String
openlineageIntegrationEnabled (oracle) Debezium이 OpenLineage API로 데이터 리니지 메타데이터를 내보내도록 활성화해요. false boolean
openlineageIntegrationJobDescription (oracle) Debezium이 내보내는 잡의 설명이에요. Debezium change data capture job String
openlineageIntegrationJobNamespace (oracle) Debezium이 내보내는 잡의 네임스페이스예요. String
openlineageIntegrationJobOwners (oracle) Debezium이 내보내는 잡의 소유자들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. String
openlineageIntegrationJobTags (oracle) Debezium이 내보내는 잡의 태그들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. String
openlogreplicatorHost (oracle) OpenLogReplicator 네트워크 서비스의 호스트 이름이에요. String
openlogreplicatorPort (oracle) OpenLogReplicator 네트워크 서비스의 포트예요. int
openlogreplicatorSource (oracle) 변경을 스트리밍할 OpenLogReplicator 설정의 논리적 소스 이름이에요. String
pollIntervalMs (oracle) 이벤트가 없는 상태로 받은 뒤 새 변경 이벤트가 나타나기를 기다리는 시간(밀리초)이에요. 기본값은 500 ms예요. 500ms long
postProcessors (oracle) 포스트 프로세서의 선택 목록이에요. 프로세서는 '.type' 설정 옵션으로 정의하고 '' 옵션들로 구성해요. String
provideTransactionMetadata (oracle) 이벤트 카운팅과 함께 트랜잭션 메타데이터 추출을 활성화해요. false boolean
queryFetchSize (oracle) 스트리밍 중에 메모리에 로드할 레코드의 최대 개수예요. '0'이면 기본 JDBC fetch size를 사용해요. 10000 int
racNodes (oracle) RAC 노드 호스트 이름이나 IP 주소의 콤마 구분 목록이에요. String
retriableRestartConnectorWaitMs (oracle) 재시도 가능한 예외가 발생한 뒤 커넥터를 다시 시작하기 전에 기다리는 시간이에요. 기본값은 10000ms예요. 10s long
schemaHistoryInternal (oracle) 데이터베이스 스키마 변경을 저장하고 복구하는 데 사용할 SchemaHistory 클래스의 이름이에요. 히스토리용 설정 프로퍼티는 'schema.history.internal.' 문자열이 접두어로 붙어요. io.debezium.storage.kafka.history.KafkaSchemaHistory String
schemaHistoryInternalFileFilename (oracle) 데이터베이스 스키마 히스토리를 기록하는 데 사용할 파일의 경로예요. String
schemaHistoryInternalSkipUnparseableDdl (oracle) binlog에서 파싱할 수 없는 DDL 문을 만났을 때 Debezium이 취할 동작을 제어해요. 기본으로 커넥터는 동작을 멈추지만, 이 설정을 바꾸면 파싱할 수 없는 문을 무시할 수 있어요. 건너뛰기를 활성화하면 Debezium이 메타데이터 변경을 놓칠 수 있어요. false boolean
schemaHistoryInternalStoreOnlyCapturedDatabasesDdl (oracle) Debezium이 데이터베이스 스키마 히스토리에 어떤 DDL을 저장할지 제어해요. 기본(false)으로는 들어오는 모든 DDL 문을 저장해요. true로 설정하면 캡처하는 스키마/데이터베이스의 테이블을 다루는 DDL만 저장돼요. false boolean
schemaHistoryInternalStoreOnlyCapturedTablesDdl (oracle) Debezium이 데이터베이스 스키마 히스토리에 어떤 DDL을 저장할지 제어해요. 기본(false)으로는 들어오는 모든 DDL 문을 저장해요. true로 설정하면 캡처하는 테이블을 다루는 DDL만 저장돼요. false boolean
schemaNameAdjustmentMode (oracle) 커넥터가 사용하는 메시지 컨버터와의 호환성을 위해 스키마 이름을 어떻게 조정할지 지정해요. 'avro'는 Avro 타입 이름에 쓸 수 없는 문자를 언더스코어로 바꿔요. 'avro_unicode'는 Avro 타입 이름에 쓸 수 없는 언더스코어나 문자를 _uxxxx 같은 유니코드로 바꿔요. 참고: _는 자바의 백슬래시 같은 이스케이프 시퀀스예요. 'none'은 아무 조정도 하지 않아요(기본값). none String
secondaryDbname (oracle) 세컨더리 Oracle 인스턴스의 데이터베이스 이름이에요(프라이머리와 다를 경우). String
secondaryHostname (oracle) 변경이 스트리밍될 세컨더리 Oracle 인스턴스예요. String
secondaryPort (oracle) 변경이 스트리밍될 세컨더리 Oracle 인스턴스의 포트예요. 1528 int
secondaryUrl (oracle) 변경이 스트리밍될 세컨더리 Oracle 인스턴스의 연결 문자열 URL이에요. String
signalDataCollection (oracle) Debezium에 시그널/커맨드를 보내는 데 사용하는 데이터 컬렉션의 이름이에요. 멀티 파티션 모드 커넥터에서는 signal data collection을 콤마 구분 목록으로 여러 개 지정할 수 있어요. 설정하지 않으면 시그널링이 꺼져요. String
signalEnabledChannels (oracle) 활성화된 채널 이름 목록이에요. source 채널이 기본으로 활성화되어 있어요. source String
signalPollIntervalMs (oracle) 등록된 채널에서 새 시그널을 찾는 주기(밀리초)예요. 기본값은 5초예요. 5s long
skippedOperations (oracle) 스트리밍 중에 건너뛸 연산의 콤마 구분 목록이에요. 'c'는 insert/create, 'u'는 update, 'd'는 delete, 't'는 truncate, 'none'은 아무것도 건너뛰지 않음을 뜻해요. 기본으로는 truncate 연산만 건너뛰어요. t String
snapshotDatabaseErrorsMaxRetries (oracle) 실패하기 전에 스냅샷 중 데이터베이스 오류를 재시도하는 횟수예요. 0 int
snapshotDelayMs (oracle) 스냅샷이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. 0ms long
snapshotFetchSize (oracle) 스냅샷을 수행하는 동안 메모리에 로드할 레코드의 최대 개수예요. int
snapshotIncludeCollectionList (oracle) 커넥터를 만들거나 재시작할 때 스냅샷을 꼭 찍어야 하는 테이블/컬렉션 목록을 지정하려면 이 설정을 반드시 지정해야 해요. String
snapshotLockingMode (oracle) 스키마 스냅샷을 수행하는 동안 커넥터가 테이블에 락을 거는 방식을 제어해요. 기본값인 'shared'는 데이터베이스 스키마와 다른 메타데이터를 읽는 스냅샷 초반부에만, 배타적 테이블 접근을 막는 테이블 락을 커넥터가 잡는다는 뜻이에요. 스냅샷의 나머지 작업은 각 테이블의 모든 행을 읽는 건데, 이건 락이 필요 없는 flashback 쿼리로 수행해요. 다만 일부 상황에서는 락을 아예 피하는 게 나은데, 'none'을 지정하면 돼요. 이 모드는 스냅샷을 찍는 동안 스키마 변경이 일어나지 않을 때만 안전해요. shared String
snapshotLockTimeoutMs (oracle) 스냅샷 시작 시 테이블 락을 기다리는 최대 시간(밀리초)이에요. 이 시간 안에 락을 얻지 못하면 스냅샷이 중단돼요. 기본값은 10초예요. 10s long
snapshotMaxThreads (oracle) 스냅샷을 수행하는 데 사용할 스레드의 최대 개수예요. 기본값은 1이에요. 1 int
snapshotMaxThreadsMultiplier (oracle) 테이블당 스냅샷 청크 수를 조절하는 데 사용하는 계수예요. 기본 동작은 'row_count/snapshot.max.threads'로 청크당 행 수를 계산해요. 큰 테이블에는 이상적이지 않을 수 있는데, multiplier를 사용하면 'row_count/(snapshot.max.threads snapshot.max.threads.multiplier)' 공식으로 청크 수를 늘리도록 조정돼요. 1 int
snapshotMode (oracle) 커넥터 시작 시 스냅샷을 실행할 기준이에요. 다음 스냅샷 옵션 중 하나를 선택하세요. 'always': 커넥터가 시작될 때마다 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'initial'(기본값): logical server name에 대한 오프셋을 찾지 못하면 설정된 테이블의 현재 전체 상태를 캡처하는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'initial_only': 'initial' 옵션처럼 스냅샷을 수행하지만, 스냅샷을 끝내면 커넥터가 멈추고 redo 로그에서 변경을 스트리밍하지 않아요. 'schema_only': logical server name에 대한 오프셋을 찾지 못하면 스키마(테이블 구조)만 캡처하고 테이블 데이터는 캡처하지 않는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'schema_only_recovery': 데이터베이스 스키마 히스토리만 캡처하는 스냅샷을 수행해요. 그다음 커넥터는 redo 로그 스트리밍으로 넘어가요. 손상되었거나 잃어버린 데이터베이스 스키마 히스토리 토픽을 복구할 때 이 설정을 사용하세요. 커넥터가 멈춘 뒤에 데이터베이스 스키마가 수정됐다면 쓰지 마세요. initial String
snapshotModeConfigurationBasedSnapshotData (oracle) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotOnDataError (oracle) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotOnSchemaError (oracle) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedSnapshotSchema (oracle) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeConfigurationBasedStartStream (oracle) 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스냅샷 이후 스트림을 시작할지 여부를 지정할 수 있게 해 줘요. false boolean
snapshotModeCustomName (oracle) 'snapshot.mode'가 custom으로 설정되어 있을 때, 'name()' 메서드가 제공하는 커스텀 구현의 이름을 지정하려면 이 설정을 반드시 지정해야 해요. 구현체는 'Snapshotter' 인터페이스를 구현해야 하고, 앱이 부팅될 때마다 호출되어 스냅샷을 할지 판단해요. String
snapshotSelectStatementOverrides (oracle) 이 프로퍼티는 커넥터에 따라 완전한 이름(fully-qualified)의 테이블 (DB_NAME.TABLE_NAME) 또는 (SCHEMA_NAME.TABLE_NAME)의 콤마 구분 목록을 담고 있어요. 테이블별 select 문은 이어지는 설정 프로퍼티에 테이블당 하나씩 지정하는데, 각각 'snapshot.select.statement.overrides.DB_NAME.TABLE_NAME' 또는 'snapshot.select.statement.overrides.SCHEMA_NAME.TABLE_NAME' id로 식별돼요. 그 프로퍼티의 값은 스냅샷 중에 해당 테이블에서 데이터를 가져올 때 사용할 select 문이에요. 큰 append-only 테이블에서 이전 스냅샷이 중단됐을 경우, 스냅샷을 어디서부터 다시 시작할지 특정 지점을 정하는 용도로 쓸 수 있어요. String
snapshotTablesOrderByRowCount (oracle) 초기 스냅샷에서 테이블을 처리하는 순서를 제어해요. descending이면 테이블을 행 수 내림차순으로 정렬해요. ascending이면 행 수 오름차순으로 정렬해요. disabled(기본값)이면 행 수 정렬이 꺼져요. disabled String
sourceinfoStructMaker (oracle) SourceInfo 스키마와 struct를 반환하는 SourceInfoStructMaker 클래스의 이름이에요. io.debezium.connector.oracle.OracleSourceInfoStructMaker String
statisticsMetricsEnabled (oracle) 레코드 처리 지연 시간 같은 여러 종류의 통계와, quantile 같은 파생 데이터 수집을 활성화해요. 기본으로 통계 수집은 켜져 있어요. true boolean
streamingDelayMs (oracle) 스냅샷이 끝나고 스트리밍이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. 0ms long
tableExcludeList (oracle) 모니터링에서 제외할 완전한 이름(fully-qualified name)의 테이블과 일치하는 정규 표현식의 콤마 구분 목록이에요. String
tableIncludeList (oracle) 변경을 캡처할 테이블이에요. String
timePrecisionMode (oracle) 시간, 날짜, 타임스탬프는 여러 가지 정밀도로 표현할 수 있어요. 'adaptive'(기본값)는 시간·날짜·타임스탬프 값의 정밀도를 데이터베이스 컬럼의 정밀도에 맞춰요. 'adaptive_time_microseconds'는 'adaptive' 모드와 같지만 TIME 필드는 항상 마이크로초 정밀도를 사용해요. 'connect'는 시간·날짜·타임스탬프 값을 데이터베이스 컬럼의 정밀도와 무관하게 항상 밀리초 정밀도의 Kafka Connect 내장 Time·Date·Timestamp 표현으로 표현해요. 'isostring'은 시간·날짜·타임스탬프 값을 UTC 시간대의 ISO-8601 형식 문자열로 표현해요. 'microseconds'는 항상 마이크로초 정밀도로, 'nanoseconds'는 항상 나노초 정밀도로 표현해요. adaptive String
tombstonesOnDelete (oracle) delete 연산을 delete 이벤트와 그 뒤의 톰브스톤 이벤트로 나타낼지(true), delete 이벤트만으로 나타낼지(false) 여부예요. 톰브스톤 이벤트를 내보내면(기본 동작) 소스 레코드가 삭제되었을 때 Kafka가 해당 키와 관련된 모든 이벤트를 완전히 삭제할 수 있어요. false boolean
topicNamingStrategy (oracle) 데이터 변경, 스키마 변경, 트랜잭션, 하트비트 이벤트 등의 토픽 이름을 정하는 데 사용할 TopicNamingStrategy 클래스의 이름이에요. io.debezium.schema.SchemaTopicNamingStrategy String
topicPrefix (oracle) 필수 변경을 캡처하는 특정 데이터베이스 서버/클러스터를 식별하고 네임스페이스를 제공하는 토픽 접두어예요. 이 커넥터가 내보내는 이벤트를 받는 모든 Kafka 토픽 이름의 접두어로 쓰이기 때문에, 토픽 접두어는 다른 모든 커넥터와 겹치지 않게 유일해야 해요. 영숫자, 하이픈, 점, 언더스코어만 받아들여야 해요. String
transactionMetadataFactory (oracle) 트랜잭션 컨텍스트와 트랜잭션 struct/스키마를 만드는 클래스예요. io.debezium.pipeline.txmetadata.DefaultTransactionMetadataFactory String
unavailableValuePlaceholder (oracle) 원래 값이 사용 불가능해서 데이터베이스가 제공하지 않았음을 나타내는 상수를 지정해요. __debezium_unavailable_value String
xstreamOutServerName (oracle) 연결할 XStream Outbound 서버의 이름이에요. String

엔드포인트 옵션 (Endpoint Options)

Debezium Oracle Connector 엔드포인트는 다음 URI 문법으로 설정해요:

debezium-oracle:name

다음 path 및 query 파라미터를 사용해요:

경로 파라미터 (Path Parameters)

Name Description Default Type
name (consumer) 필수 커넥터의 유일한 이름이에요. 같은 이름으로 다시 등록하려고 하면 실패해요. String

쿼리 파라미터 (Query Parameters)

Name Description Default Type
additionalProperties (common) camel 설정에 바로 넣을 수 없는 debezium 컴포넌트용 추가 프로퍼티예요(예: Debezium 엔진에 필요한 Kafka Connect 프로퍼티 설정, KafkaOffsetBackingStore 설정 같은 것). 프로퍼티에는 additionalProperties. 접두어를 붙여야 해요. 예: additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro. additionalProperties. 접두어를 사용하는 멀티 밸류 옵션이에요. Map
internalKeyConverter (consumer) 오프셋의 키 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
internalValueConverter (consumer) 오프셋의 값 데이터를 직렬화하고 역직렬화할 때 사용할 Converter 클래스예요. 기본값은 JSON 컨버터예요. org.apache.kafka.connect.json.JsonConverter String
offsetCommitPolicy (consumer) 커밋 정책의 Java 클래스 이름이에요. 처리한 이벤트 수와 마지막 커밋 이후 경과 시간을 기준으로 오프셋 커밋을 언제 트리거할지 정의해요. 이 클래스는 'OffsetCommitPolicy' 인터페이스를 구현해야 하고, 기본값은 시간 간격 기반의 주기적 커밋 정책이에요. String
offsetCommitTimeoutMs (consumer) 레코드를 플러시하고 파티션 오프셋 데이터를 오프셋 저장소에 커밋할 때까지 기다리는 최대 시간(밀리초)이에요. 이 시간을 넘기면 처리를 취소하고, 오프셋 데이터는 나중에 다시 커밋 시도로 돌려 놓아요. 기본값은 5초예요. 5000 long
offsetFlushIntervalMs (consumer) 오프셋 커밋을 시도하는 간격이에요. 기본값은 1분이에요. 60000 long
offsetStorage (consumer) 커넥터 오프셋의 영속화를 담당하는 Java 클래스 이름이에요. org.apache.kafka.connect.storage.FileOffsetBackingStore String
offsetStorageFileName (consumer) 오프셋을 저장할 파일 경로예요. offset.storage가 FileOffsetBackingStore로 설정되어 있으면 필수예요. String
offsetStoragePartitions (consumer) 오프셋 저장소 토픽을 만들 때 사용할 파티션 수예요. offset.storage가 'KafkaOffsetBackingStore'로 설정되어 있으면 필수예요. int
offsetStorageReplicationFactor (consumer) 오프셋 저장소 토픽을 만들 때 사용할 복제 계수예요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. int
offsetStorageTopic (consumer) 오프셋을 저장할 Kafka 토픽의 이름이에요. offset.storage가 KafkaOffsetBackingStore로 설정되어 있으면 필수예요. String
bridgeErrorHandler (consumer (advanced)) 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. false boolean
exceptionHandler (consumer (advanced)) 컨슈머가 커스텀 ExceptionHandler를 쓰게 할 수 있어요. bridgeErrorHandler 옵션이 활성화되어 있으면 이 옵션은 사용되지 않는다는 점에 주의하세요. 기본으로 컨슈머는 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. ExceptionHandler
exchangePattern (consumer (advanced))

컨슈머가 교환(exchange)을 만들 때 교환 패턴을 설정해요.

Enum values:

  • InOnly

  • InOut

| | ExchangePattern | | archiveDestinationName (oracle) | 아카이브 로그를 읽을 소스로 특정 아카이브 로그 목적지(archive log destination)를 지정해요. 설정하지 않으면 커넥터가 LOCAL이면서 VALID인 첫 번째 목적지를 자동으로 골라요. | | String | | archiveLogHours (oracle) | SYSDATE로부터 과거로 얼마나 떨어진 시점까지 아카이브 로그를 마이닝할지 시간 수예요. 0을 쓰면 사용 가능한 아카이브 로그 전부를 마이닝해요. | 0 | long | | binaryHandlingMode (oracle) | binary(blob, binary 등) 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'bytes'는 바이너리 데이터를 바이트 배열로 표현하고(기본값), 'base64'는 base64 인코딩 문자열로, 'base64-url-safe'는 base64-url-safe 인코딩 문자열로, 'hex'는 hex 인코딩(base16) 문자열로 표현해요. | bytes | String | | captureMode (oracle) | Oracle에서 스트리밍 변경을 캡처할 때 사용하는 캡처 모드를 지정해요. 'primary'(기본값)는 database 설정으로 지정한 프라이머리에서 변경을 캡처해요. 'physical_standby'는 secondary 설정으로 지정한 읽기 전용 물리적 스탠바이에서 변경을 캡처해요. 'downstream'은 secondary 설정으로 지정한 다운스트림 실시간 마이닝 데이터베이스에서 변경을 캡처해요. | primary | String | | columnExcludeList (oracle) | 변경 이벤트에서 제외할 컬럼과 일치하는 정규 표현식이에요. | | String | | columnIncludeList (oracle) | 변경 이벤트에 포함할 컬럼과 일치하는 정규 표현식이에요. | | String | | columnPropagateSourceType (oracle) | 내보낸 변경 레코드의 필드 스키마에 컬럼의 원래 타입과 원래 길이를 파라미터로 추가할, 완전한 이름(fully-qualified name)의 컬럼과 일치하는 정규 표현식의 콤마 구분 목록이에요. | | String | | connectionValidationTimeoutMs (oracle) | 연결 검증이 끝나기를 기다리는 최대 시간(밀리초)이에요. 기본값은 60초예요. | 1m | long | | converters (oracle) | 기본 컨버터 대신 사용할 커스텀 컨버터의 선택 목록이에요. 컨버터는 '.type' 설정 옵션으로 정의하고 '.' 옵션들로 구성해요. | | String | | customMetricTags (oracle) | 커스텀 메트릭 태그는 키-값 쌍을 받아서 MBean 객체 이름을 커스터마이즈해요. 이 이름은 일반 이름 끝에 덧붙여지고, 각 키는 MBean 객체 이름의 태그가 되며, 그에 대응하는 값이 그 키의 태그 값이 돼요. 예: k1=v1,k2=v2. | | String | | customSanitizePattern (oracle) | 값을 마스킹할 설정 키를 식별하는 정규 표현식이에요. 설정하면 이 커스텀 패턴이 Debezium의 기본 비밀번호 마스킹 패턴을 대체해요. | .*secret$|.*password$|.*sasl\.jaas\.config$|.*basic\.auth\.user\.info|.*registry\.auth\.client-secret|.*credentials\.json$|.*connectionstring$|.*connection\.string$ | String | | databaseConnectionAdapter (oracle) | 데이터베이스에서 변경을 캡처할 때 사용할 어댑터예요. 옵션은 이렇게 있어요. 'LogMiner': (기본값) 버퍼링된 트랜잭션과 함께 네이티브 Oracle LogMiner로 변경을 캡처해요. 'LogMiner_Unbuffered': 버퍼링 없이 네이티브 Oracle LogMiner로 변경을 캡처해요. 'XStream': Oracle XStreams로 변경을 캡처해요. 'OLR': OpenLogReplicator로 변경을 캡처해요. | LogMiner | String | | databaseDbname (oracle) | 커넥터가 변경을 캡처할 데이터베이스의 이름이에요. | | String | | databaseHostname (oracle) | 이름 조회가 되는 데이터베이스 서버의 호스트 이름이나 IP 주소예요. | | String | | databasePassword (oracle) | 필수 데이터베이스에 연결할 때 사용할 데이터베이스 사용자의 비밀번호예요. | | String | | databasePdbName (oracle) | 멀티 테넌트 셋업에서 플러그형 데이터베이스(pluggable database)의 이름이에요. 이 경우 CDB 이름은 database.dbname으로 지정해야 해요. | | String | | databasePort (oracle) | 데이터베이스 서버의 포트예요. | 1528 | int | | databaseQueryTimeoutMs (oracle) | 쿼리가 실행되기를 기다리는 시간(밀리초)이에요. 기본값은 600초(600,000 ms)이고, 0은 무제한이라는 뜻이에요. | 10m | int | | databaseUrl (oracle) | 호스트 이름·포트·데이터베이스를 개별 지정하는 대신 쓰는 완전한 JDBC URL이에요. 대체 연결 시나리오를 지원하려고 제공돼요. | | String | | databaseUser (oracle) | 데이터베이스에 연결할 때 사용할 데이터베이스 사용자의 이름이에요. | | String | | datatypePropagateSourceType (oracle) | 내보낸 변경 레코드의 필드 스키마에 데이터 타입의 원래 타입과 원래 길이를 파라미터로 추가할, 데이터베이스별 데이터 타입 이름과 일치하는 정규 표현식의 콤마 구분 목록이에요. | | String | | decimalHandlingMode (oracle) | DECIMAL과 NUMERIC 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'precise'(기본값)는 java.math.BigDecimal로 값을 표현하고, 변경 이벤트에는 바이너리 표현과 Kafka Connect의 'org.apache.kafka.connect.data.Decimal' 타입으로 인코딩돼요. 'string'은 문자열로 값을 표현해요. 'double'은 Java의 'double'로 표현하는데, 정밀도는 떨어질 수 있지만 컨슈머에서는 훨씬 다루기 쉬워요. | precise | String | | errorsMaxRetries (oracle) | 실패하기 전에 연결 오류를 재시도하는 최대 횟수예요(-1 = 무제한, 0 = 비활성화, 그 외 = 재시도 횟수). | -1 | int | | eventProcessingFailureHandlingMode (oracle) | 이벤트 처리 중 실패(예: 깨진 이벤트를 만났을 때)를 어떻게 다룰지 지정해요. 'fail'(기본값)은 문제가 된 이벤트와 그 위치를 알리는 예외를 던져서 커넥터를 멈춰요. 'warn'은 문제가 된 이벤트와 그 위치를 로그로 남기고 이벤트를 건너뛰어요. 'ignore'는 문제가 된 이벤트를 그냥 건너뛰어요. | fail | String | | executorShutdownTimeoutMs (oracle) | 태스크 익스큐터가 종료되기를 기다리는 최대 시간(밀리초)이에요. | 4s | long | | extendedHeadersEnabled (oracle) | 다운스트림 처리 시스템에서 CDC 이벤트의 출처를 추적하고 식별하는 데 꼭 필요한 메타데이터를 담은 Debezium 컨텍스트 헤더를 켜거나 끄는 옵션이에요. | true | boolean | | guardrailCollectionsLimitAction (oracle) | guardrail 컬렉션 한도를 초과했을 때 취할 동작을 지정해요. 'warn'(기본값)은 경고 메시지를 로그로 남기고 처리를 계속해요. 'fail'은 에러로 커넥터를 멈춰요. | warn | String | | guardrailCollectionsMax (oracle) | 커넥터가 캡처할 수 있는 컬렉션이나 테이블의 최대 개수예요. 이 한도를 초과하면 'guardrail.collections.limit.action'으로 지정한 동작을 해요. 이 guardrail을 끄려면 0으로 설정하세요. | 0 | int | | heartbeatActionQuery (oracle) | 하트비트마다 실행되는 쿼리예요. | | String | | heartbeatIntervalMs (oracle) | 커넥터가 하트비트 토픽으로 하트비트 메시지를 주기적으로 보내는 간격(밀리초)이에요. 하트비트 메시지를 끄려면 0을 사용하세요. 기본값은 비활성화예요. | 0ms | int | | heartbeatTopicsPrefix (oracle) | 하트비트 토픽 이름에 사용하는 접두어예요. 기본값은 __debezium-heartbeat이에요. | __debezium-heartbeat | String | | includeSchemaChanges (oracle) | 커넥터가 데이터베이스 스키마의 변경 사항을 데이터베이스 서버 ID와 같은 이름의 Kafka 토픽으로 내보낼지 여부예요. 각 스키마 변경은 데이터베이스 이름을 담은 키로 기록되고, 값에는 새 스키마의 논리적 설명과 선택적으로 DDL 문이 들어가요. 기본값은 'true'예요. 이 설정은 커넥터가 내부적으로 데이터베이스 스키마 히스토리를 기록하는 방식과는 별개예요. | true | boolean | | includeSchemaComments (oracle) | 커넥터가 테이블과 컬럼의 주석을 메타데이터 객체로 파싱할지 여부예요. 참고: 이 옵션을 켜면 메모리 사용량에 영향이 생겨요. ColumnImpl 객체의 개수와 크기가 Debezium 커넥터의 메모리 소비를 크게 좌우하는데, 각 객체에 String을 하나씩 더하면 상당히 무거워질 수 있어요. 기본값은 'false'예요. | false | boolean | | incrementalSnapshotWatermarkingStrategy (oracle) | 증분 스냅샷 동안 워터마킹에 사용할 전략을 지정해요. 'insert_insert'는 open과 close 시그널을 모두 signal data collection에 기록해요(기본값). 'insert_delete'는 open 시그널만 signal data collection에 기록하고, close는 해당 open 시그널을 삭제해요. | INSERT_INSERT | String | | intervalHandlingMode (oracle) | INTERVAL 컬럼을 변경 이벤트에서 어떻게 표현할지 지정해요. 'string'은 값을 정확한 ISO 형식 문자열로 표현해요. 'numeric'(기본값)은 마이크로초로의 정확하지 않은 변환을 사용해 값을 표현해요. | numeric | String | | legacyDecimalHandlingStrategy (oracle) | DBZ-7882 이전의 예전(legacy) decimal 처리 동작을 사용해요. | false | boolean | | legacySnapshotMaxThreads (oracle) | 활성화하면 예전 방식의 테이블당 스레드(table-per-thread) 병렬 스냅샷 알고리즘을 사용해요. false(기본값)로 두면 테이블을 청크로 나눠서 모든 스냅샷 스레드에 걸쳐 처리하기 때문에 스냅샷 동시성이 더 높아져요. | false | boolean | | lobEnabled (oracle) | 'false'(기본값)로 두면 LOB 필드를 캡처하거나 내보내지 않아요. 'true'로 설정하면 커넥터가 LOB 필드를 캡처하고, 다른 컬럼 타입처럼 해당 필드의 변경을 내보내요. | false | boolean | | logMiningArchiveLogOnlyMode (oracle) | 'false'(기본값)로 두면 커넥터가 아카이브 로그와 redo 로그를 모두 마이닝해서 변경 이벤트를 내보내요. 'true'로 설정하면 커넥터가 아카이브 로그만 마이닝해요. redo 로그가 자주 순환되는 환경에서는 아카이브 로그만 마이닝하고 이벤트 전달 지연을 감수하는 쪽이 유리한 경우가 있어요. | false | boolean | | logMiningArchiveLogOnlyScnPollIntervalMs (oracle) | SCN이 아카이브 로그에 있는지 확인하는 폴 사이에 기다리는 간격(밀리초)이에요. | 10s | long | | logMiningBufferDeferredTransactionRetentionMs (oracle) | DML 이벤트를 내보내지 않는 트랜잭션의 지연(deferred) 트랜잭션 메타데이터를 유지하는 시간(밀리초)이에요. 기본으로 지연 트랜잭션 메타데이터는 24시간 동안 유지돼요. 이 설정은 이벤트가 있는 캐시된 트랜잭션을 다루는 log.mining.transaction.retention.ms와는 별개예요. | 1d | long | | logMiningBufferDeferredTransactionStart (oracle) | 버퍼링된 LogMiner를 쓸 때 트랜잭션 시작 이벤트를 지연시킬지 제어해요. 활성화하면 트랜잭션 시작 이벤트가 가벼운 메타데이터 맵에 저장돼요. 트랜잭션은 DML 이벤트가 관찰될 때 비로소 트랜잭션 캐시로 승격돼요. 마이닝 윈도우가 트랜잭션에 묶이지 않아서 블록 단위 슬라이딩 윈도우가 가능해져요. | false | boolean | | logMiningBufferDropOnStop (oracle) | true로 설정하면 커넥터가 멈췄을 때 하부 버퍼 캐시를 유지하지 않아요. false(기본값)로 두면 버퍼 캐시가 재시작 사이에도 유지돼요. | false | boolean | | logMiningBufferEhcacheEventsConfig (oracle) | events 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. | | String | | logMiningBufferEhcacheGlobalConfig (oracle) | services나 persistence 같은 Ehcache 전역 설정을 지정해요. 태그는 Debezium이 관리하므로 포함할 수 없어요. | | String | | logMiningBufferEhcacheProcessedtransactionsConfig (oracle) | 처리된 트랜잭션(processed transaction) 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. | | String | | logMiningBufferEhcacheSchemachangesConfig (oracle) | 스키마 변경 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. | | String | | logMiningBufferEhcacheTransactionsConfig (oracle) | 트랜잭션 캐시용 Ehcache 태그의 내부 본문을 지정해요. 다만 태그와 속성은 Debezium이 관리하므로 포함하면 안 돼요. | | String | | logMiningBufferInfinispanCacheEvents (oracle) | Infinispan 'events' 캐시의 XML 설정을 지정해요. | | String | | logMiningBufferInfinispanCacheGlobal (oracle) | Infinispan 'global' 설정의 XML 설정을 지정해요. | | String | | logMiningBufferInfinispanCacheProcessedTransactions (oracle) | Infinispan 'processed-transactions' 캐시의 XML 설정을 지정해요. | | String | | logMiningBufferInfinispanCacheSchemaChanges (oracle) | Infinispan 'schema-changes' 캐시의 XML 설정을 지정해요. | | String | | logMiningBufferInfinispanCacheTransactions (oracle) | Infinispan 'transactions' 캐시의 XML 설정을 지정해요. | | String | | logMiningBufferMemoryLegacyTransactionStart (oracle) | 버퍼링된 LogMiner를 쓸 때 트랜잭션 시작 이벤트를 지연시킬지 제어해요. 활성화하면 트랜잭션 시작 이벤트가 가벼운 메타데이터 맵에 저장돼요. 트랜잭션은 DML 이벤트가 관찰될 때 비로소 트랜잭션 캐시로 승격돼요. 마이닝 윈도우가 트랜잭션에 묶이지 않아서 블록 단위 슬라이딩 윈도우가 가능해져요. | false | boolean | | logMiningBufferTrackClientId (oracle) | 'CLIENT_ID' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'CLIENT_ID' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'CLIENT_ID' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. | true | boolean | | logMiningBufferTrackCommitTimestamp (oracle) | 'COMMIT_TIMESTAMP' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'COMMIT_TIMESTAMP' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'COMMIT_TIMESTAMP' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. | true | boolean | | logMiningBufferTrackRsId (oracle) | 'RS_ID' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'RS_ID' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'RS_ID' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. | true | boolean | | logMiningBufferTrackStartTimestamp (oracle) | 'START_TIMESTAMP' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'START_TIMESTAMP' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'START_TIMESTAMP' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. | true | boolean | | logMiningBufferTrackUsername (oracle) | 'USERNAME' 컬럼 값을 추적할지 제어해요. true(기본값)로 두면 'USERNAME' 값이 버퍼링되고, 사용 가능할 때 이벤트에 제공돼요. false로 두면 'USERNAME' 컬럼이 LogMiner 쿼리에서 빠지고 값도 버퍼링되지 않아서, 메모리 사용량과 쿼리 대역폭을 모두 줄여요. | true | boolean | | logMiningBufferTransactionEventsThreshold (oracle) | 트랜잭션이 폐기되기 전까지 담을 수 있는 이벤트의 개수예요. 아주 큰 트랜잭션을 다룰 때 버퍼 메모리나 공간을 관리하는 데 유용해요. 기본값은 0이고, 임계값이 적용되지 않아 트랜잭션이 이벤트를 무제한으로 가질 수 있다는 뜻이에요. | 0 | long | | logMiningBufferType (oracle) | 버퍼 타입은 커넥터가 트랜잭션 데이터를 버퍼링하는 방식을 제어해요. memory - JVM 프로세스의 힙을 사용해 모든 트랜잭션 데이터를 버퍼링해요. infinispan_embedded - 임베디드 Infinispan 캐시를 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. infinispan_remote - 원격 Infinispan 클러스터를 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. ehcache - ehcache를 임베디드 모드로 사용해 트랜잭션 데이터를 버퍼링하고 디스크에 영속화해요. | memory | String | | logMiningClientidExcludeList (oracle) | LogMiner 쿼리에서 제외할 클라이언트 id의 콤마 구분 목록이에요. | | String | | logMiningClientidIncludeList (oracle) | LogMiner 쿼리에 포함할 클라이언트 id의 콤마 구분 목록이에요. | | String | | logMiningFlushTableName (oracle) | 커넥터가 사용하는 플러시 테이블의 이름이에요. 기본값은 LOG_MINING_FLUSH예요. | LOG_MINING_FLUSH | String | | logMiningIncludeRedoSql (oracle) | 활성화하면 트랜잭션 로그의 REDO SQL이 소스 정보 블록에 포함돼요. | false | boolean | | logMiningLogCountGrowthMax (oracle) | 오래 실행되는 트랜잭션이 마이닝 윈도우 시작점을 붙잡고 있을 때, redo 스레드당 마이닝 윈도우가 자동으로 커질 수 있는 최대 로그 개수를 지정해요. 기본값은 4예요. 이 값보다 큰 'log.mining.log.count.min'이 있으면 그 값이 우선해요. 이전에 마이닝했던 로그를 다시 커버할 때는 마이닝 윈도우가 이 개수를 넘을 수 있어요. 이 값은 자동 증가를 제한할 뿐, 윈도우 자체를 제한하는 건 아니에요. | 4 | int | | logMiningLogCountMin (oracle) | redo 스레드당 마이닝할 최소 로그 개수를 지정해요. 0으로 설정하면 상한이 꺼지고, 사용 가능한 모든 로그를 한 번에 다 마이닝해요. | 2 | int | | logMiningPathDictionary (oracle) | 커넥터를 읽기 전용 데이터베이스 레플리카에 사용할 때는 이 설정이 필요해요. | | String | | logMiningQueryFilterMode (oracle) | 필터 설정을 LogMiner 데이터베이스 쿼리에 어떻게 적용할지 지정해요. none - 쿼리에 스키마나 테이블 필터를 적용하지 않고, 모든 필터링은 커넥터가 런타임에 해요. in - 쿼리가 SQL in-clause 표현식으로 스키마나 테이블 필터를 지정해요. regex - 쿼리가 Oracle REGEXP_LIKE 표현식으로 스키마나 테이블 필터를 지정해요. | none | String | | logMiningReadOnly (oracle) | 'true'로 설정하면 커넥터가 LGWR 버퍼를 디스크로 플러시하지 않아서, 읽기 전용 데이터베이스에 연결할 수 있어요. | false | boolean | | logMiningReadonlyHostname (oracle) | 변경이 스트리밍될 세컨더리 Oracle 인스턴스예요. | | String | | logMiningRestartConnection (oracle) | Debezium은 데이터베이스 연결을 열어 두고 스트리밍 단계 내내 그 연결을 유지해요. 상황에 따라 이게 과도한 SGA 메모리 사용으로 이어질 수 있어요. 이 옵션을 'true'로 설정하면(기본값은 'false') 커넥터가 감지된 로그 스위치가 있을 때마다, 또는 log.mining.session.max.ms에 도달했을 때 데이터베이스 연결을 닫았다가 다시 열어요. | false | boolean | | logMiningSessionMaxMs (oracle) | LogMiner 세션이 재시작되기 전까지 살아 있는 최대 시간(밀리초)이에요. 기본값은 0이고(로그 스위치가 일어날 때까지 무기한), 이 값은 비활성화가 아니라 무기한 유지를 뜻해요. | 0ms | long | | logMiningStrategy (oracle) | 마이닝 전략과 LogMiner 세션 특성을 정의해요. 'redo_log_catalog'는 데이터 딕셔너리를 redo 로그에 기록하는데, 폐기 예정(deprecated)이라 3.7에서 제거될 거예요. 'online_catalog'는 기존 데이터 딕셔너리를 사용하고 'redo_log_catalog'보다 빠르지만, 스키마 변경이 맞물려(lock-step) 일어나야 해요. 'hybrid'는 기존 데이터 딕셔너리를 사용하고, 'redo_log_catalog'보다 빠르며, 끼어든 스키마 변경(interleaved schema changes)도 지원해요. | online_catalog | String | | logMiningTransactionRetentionMs (oracle) | 로그 마이닝 세션 사이에 오래 실행되는 트랜잭션을 트랜잭션 버퍼에 유지하는 시간(밀리초)이에요. 기본으로 모든 트랜잭션이 유지돼요. | 0ms | long | | logMiningUsernameExcludeList (oracle) | LogMiner 쿼리에서 제외할 사용자 이름의 콤마 구분 목록이에요. | | String | | logMiningUsernameIncludeList (oracle) | LogMiner 쿼리에 포함할 사용자 이름의 콤마 구분 목록이에요. | | String | | logMiningWindowMaxMs (oracle) | 마이닝 윈도우가 차지할 수 있는 최대 시간(밀리초)이에요. 트랜잭션이 이 시간보다 오래 열려 있으면 마이닝 윈도우 시작 SCN이 앞으로 당겨져서 윈도우 크기를 최소화하고, 윈도우가 무한히 커지는 걸 막아요. 기본값은 0(비활성화)이에요. | 0ms | long | | maxBatchSize (oracle) | 소스 레코드 배치 하나의 최대 크기예요. 기본값은 2048이에요. | 2048 | int | | maxQueueSize (oracle) | 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기예요. 기본값은 8192이고, 항상 최대 배치 크기보다 커야 해요. | 8192 | int | | maxQueueSizeInBytes (oracle) | 데이터베이스 로그에서 읽었지만 아직 기록되거나 전달되지 않은 변경 이벤트의 큐 최대 크기(바이트)예요. 기본값은 0이고, 기능이 꺼져 있다는 뜻이에요. | 0 | long | | memoryManagementSchemasClass (oracle) | 스키마 메타데이터용 저장소 구현의 완전한 클래스 이름(fully-qualified class name)이에요. 클래스는 io.debezium.relational.TableMappingStorage를 구현해야 하고, 기본값은 인메모리 저장소용 io.debezium.relational.ConcurrentMapTableMappingStorage예요. | io.debezium.relational.ConcurrentMapTableMappingStorage | String | | memoryManagementTablesClass (oracle) | 테이블 메타데이터용 저장소 구현의 완전한 클래스 이름(fully-qualified class name)이에요. 클래스는 io.debezium.relational.TableMappingStorage를 구현해야 하고, 기본값은 인메모리 저장소용 io.debezium.relational.ConcurrentMapTableMappingStorage예요. | io.debezium.relational.ConcurrentMapTableMappingStorage | String | | messageKeyColumns (oracle) | 메시지 키로 쓸 완전한 이름(fully-qualified)의 테이블과 컬럼에 해당하는 표현식의 세미콜론 구분 목록이에요. 각 표현식은 ':' 패턴과 일치해야 하고, 테이블 이름은 커넥터에 따라 (DB_NAME.TABLE_NAME) 또는 (SCHEMA_NAME.TABLE_NAME) 형식으로 정의할 수 있으며, 키 컬럼은 커스텀 키를 이루는 컬럼의 콤마 구분 목록이에요. 명시적인 키 설정이 없는 테이블은 그 테이블의 기본 키 컬럼이 메시지 키로 쓰여요. 예: dbserver1.inventory.orderlines:orderId,orderLineId;dbserver1.inventory.orders:id. | | String | | notificationEnabledChannels (oracle) | 활성화된 알림 채널 이름 목록이에요. | | String | | notificationSinkTopicName (oracle) | 알림용 토픽의 이름이에요. 활성화된 채널 목록에 'sink'가 있으면 필수예요. | | String | | openlineageIntegrationConfigFilePath (oracle) | OpenLineage 파일 설정의 경로예요. 자세한 내용은 https://openlineage.io/docs/client/java/configuration을 참고하세요. | ./openlineage.yml | String | | openlineageIntegrationDatasetKafkaBootstrapServers (oracle) | 입력/출력 네임스페이스로 사용할 Kafka 부트스트랩 서버 주소예요. | | String | | openlineageIntegrationEnabled (oracle) | Debezium이 OpenLineage API로 데이터 리니지 메타데이터를 내보내도록 활성화해요. | false | boolean | | openlineageIntegrationJobDescription (oracle) | Debezium이 내보내는 잡의 설명이에요. | Debezium change data capture job | String | | openlineageIntegrationJobNamespace (oracle) | Debezium이 내보내는 잡의 네임스페이스예요. | | String | | openlineageIntegrationJobOwners (oracle) | Debezium이 내보내는 잡의 소유자들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. | | String | | openlineageIntegrationJobTags (oracle) | Debezium이 내보내는 잡의 태그들이에요. 키-값 쌍의 콤마 구분 목록이에요. 예: k1=v1,k2=v2. | | String | | openlogreplicatorHost (oracle) | OpenLogReplicator 네트워크 서비스의 호스트 이름이에요. | | String | | openlogreplicatorPort (oracle) | OpenLogReplicator 네트워크 서비스의 포트예요. | | int | | openlogreplicatorSource (oracle) | 변경을 스트리밍할 OpenLogReplicator 설정의 논리적 소스 이름이에요. | | String | | pollIntervalMs (oracle) | 이벤트가 없는 상태로 받은 뒤 새 변경 이벤트가 나타나기를 기다리는 시간(밀리초)이에요. 기본값은 500 ms예요. | 500ms | long | | postProcessors (oracle) | 포스트 프로세서의 선택 목록이에요. 프로세서는 '.type' 설정 옵션으로 정의하고 '' 옵션들로 구성해요. | | String | | provideTransactionMetadata (oracle) | 이벤트 카운팅과 함께 트랜잭션 메타데이터 추출을 활성화해요. | false | boolean | | queryFetchSize (oracle) | 스트리밍 중에 메모리에 로드할 레코드의 최대 개수예요. '0'이면 기본 JDBC fetch size를 사용해요. | 10000 | int | | racNodes (oracle) | RAC 노드 호스트 이름이나 IP 주소의 콤마 구분 목록이에요. | | String | | retriableRestartConnectorWaitMs (oracle) | 재시도 가능한 예외가 발생한 뒤 커넥터를 다시 시작하기 전에 기다리는 시간이에요. 기본값은 10000ms예요. | 10s | long | | schemaHistoryInternal (oracle) | 데이터베이스 스키마 변경을 저장하고 복구하는 데 사용할 SchemaHistory 클래스의 이름이에요. 히스토리용 설정 프로퍼티는 'schema.history.internal.' 문자열이 접두어로 붙어요. | io.debezium.storage.kafka.history.KafkaSchemaHistory | String | | schemaHistoryInternalFileFilename (oracle) | 데이터베이스 스키마 히스토리를 기록하는 데 사용할 파일의 경로예요. | | String | | schemaHistoryInternalSkipUnparseableDdl (oracle) | binlog에서 파싱할 수 없는 DDL 문을 만났을 때 Debezium이 취할 동작을 제어해요. 기본으로 커넥터는 동작을 멈추지만, 이 설정을 바꾸면 파싱할 수 없는 문을 무시할 수 있어요. 건너뛰기를 활성화하면 Debezium이 메타데이터 변경을 놓칠 수 있어요. | false | boolean | | schemaHistoryInternalStoreOnlyCapturedDatabasesDdl (oracle) | Debezium이 데이터베이스 스키마 히스토리에 어떤 DDL을 저장할지 제어해요. 기본(false)으로는 들어오는 모든 DDL 문을 저장해요. true로 설정하면 캡처하는 스키마/데이터베이스의 테이블을 다루는 DDL만 저장돼요. | false | boolean | | schemaHistoryInternalStoreOnlyCapturedTablesDdl (oracle) | Debezium이 데이터베이스 스키마 히스토리에 어떤 DDL을 저장할지 제어해요. 기본(false)으로는 들어오는 모든 DDL 문을 저장해요. true로 설정하면 캡처하는 테이블을 다루는 DDL만 저장돼요. | false | boolean | | schemaNameAdjustmentMode (oracle) | 커넥터가 사용하는 메시지 컨버터와의 호환성을 위해 스키마 이름을 어떻게 조정할지 지정해요. 'avro'는 Avro 타입 이름에 쓸 수 없는 문자를 언더스코어로 바꿔요. 'avro_unicode'는 Avro 타입 이름에 쓸 수 없는 언더스코어나 문자를 _uxxxx 같은 유니코드로 바꿔요. 참고: _는 자바의 백슬래시 같은 이스케이프 시퀀스예요. 'none'은 아무 조정도 하지 않아요(기본값). | none | String | | secondaryDbname (oracle) | 세컨더리 Oracle 인스턴스의 데이터베이스 이름이에요(프라이머리와 다를 경우). | | String | | secondaryHostname (oracle) | 변경이 스트리밍될 세컨더리 Oracle 인스턴스예요. | | String | | secondaryPort (oracle) | 변경이 스트리밍될 세컨더리 Oracle 인스턴스의 포트예요. | 1528 | int | | secondaryUrl (oracle) | 변경이 스트리밍될 세컨더리 Oracle 인스턴스의 연결 문자열 URL이에요. | | String | | signalDataCollection (oracle) | Debezium에 시그널/커맨드를 보내는 데 사용하는 데이터 컬렉션의 이름이에요. 멀티 파티션 모드 커넥터에서는 signal data collection을 콤마 구분 목록으로 여러 개 지정할 수 있어요. 설정하지 않으면 시그널링이 꺼져요. | | String | | signalEnabledChannels (oracle) | 활성화된 채널 이름 목록이에요. source 채널이 기본으로 활성화되어 있어요. | source | String | | signalPollIntervalMs (oracle) | 등록된 채널에서 새 시그널을 찾는 주기(밀리초)예요. 기본값은 5초예요. | 5s | long | | skippedOperations (oracle) | 스트리밍 중에 건너뛸 연산의 콤마 구분 목록이에요. 'c'는 insert/create, 'u'는 update, 'd'는 delete, 't'는 truncate, 'none'은 아무것도 건너뛰지 않음을 뜻해요. 기본으로는 truncate 연산만 건너뛰어요. | t | String | | snapshotDatabaseErrorsMaxRetries (oracle) | 실패하기 전에 스냅샷 중 데이터베이스 오류를 재시도하는 횟수예요. | 0 | int | | snapshotDelayMs (oracle) | 스냅샷이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. | 0ms | long | | snapshotFetchSize (oracle) | 스냅샷을 수행하는 동안 메모리에 로드할 레코드의 최대 개수예요. | | int | | snapshotIncludeCollectionList (oracle) | 커넥터를 만들거나 재시작할 때 스냅샷을 꼭 찍어야 하는 테이블/컬렉션 목록을 지정하려면 이 설정을 반드시 지정해야 해요. | | String | | snapshotLockingMode (oracle) | 스키마 스냅샷을 수행하는 동안 커넥터가 테이블에 락을 거는 방식을 제어해요. 기본값인 'shared'는 데이터베이스 스키마와 다른 메타데이터를 읽는 스냅샷 초반부에만, 배타적 테이블 접근을 막는 테이블 락을 커넥터가 잡는다는 뜻이에요. 스냅샷의 나머지 작업은 각 테이블의 모든 행을 읽는 건데, 이건 락이 필요 없는 flashback 쿼리로 수행해요. 다만 일부 상황에서는 락을 아예 피하는 게 나은데, 'none'을 지정하면 돼요. 이 모드는 스냅샷을 찍는 동안 스키마 변경이 일어나지 않을 때만 안전해요. | shared | String | | snapshotLockTimeoutMs (oracle) | 스냅샷 시작 시 테이블 락을 기다리는 최대 시간(밀리초)이에요. 이 시간 안에 락을 얻지 못하면 스냅샷이 중단돼요. 기본값은 10초예요. | 10s | long | | snapshotMaxThreads (oracle) | 스냅샷을 수행하는 데 사용할 스레드의 최대 개수예요. 기본값은 1이에요. | 1 | int | | snapshotMaxThreadsMultiplier (oracle) | 테이블당 스냅샷 청크 수를 조절하는 데 사용하는 계수예요. 기본 동작은 'row_count/snapshot.max.threads'로 청크당 행 수를 계산해요. 큰 테이블에는 이상적이지 않을 수 있는데, multiplier를 사용하면 'row_count/(snapshot.max.threads snapshot.max.threads.multiplier)' 공식으로 청크 수를 늘리도록 조정돼요. | 1 | int | | snapshotMode (oracle) | 커넥터 시작 시 스냅샷을 실행할 기준이에요. 다음 스냅샷 옵션 중 하나를 선택하세요. 'always': 커넥터가 시작될 때마다 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'initial'(기본값): logical server name에 대한 오프셋을 찾지 못하면 설정된 테이블의 현재 전체 상태를 캡처하는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'initial_only': 'initial' 옵션처럼 스냅샷을 수행하지만, 스냅샷을 끝내면 커넥터가 멈추고 redo 로그에서 변경을 스트리밍하지 않아요. 'schema_only': logical server name에 대한 오프셋을 찾지 못하면 스키마(테이블 구조)만 캡처하고 테이블 데이터는 캡처하지 않는 스냅샷을 실행해요. 스냅샷이 끝나면 커넥터는 redo 로그에서 변경 스트리밍을 시작해요. 'schema_only_recovery': 데이터베이스 스키마 히스토리만 캡처하는 스냅샷을 수행해요. 그다음 커넥터는 redo 로그 스트리밍으로 넘어가요. 손상되었거나 잃어버린 데이터베이스 스키마 히스토리 토픽을 복구할 때 이 설정을 사용하세요. 커넥터가 멈춘 뒤에 데이터베이스 스키마가 수정됐다면 쓰지 마세요. | initial | String | | snapshotModeConfigurationBasedSnapshotData (oracle) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotOnDataError (oracle) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 데이터를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotOnSchemaError (oracle) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 에러가 났을 경우 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedSnapshotSchema (oracle) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스키마를 스냅샷할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeConfigurationBasedStartStream (oracle) | 'snapshot.mode'가 configuration_based로 설정되어 있을 때, 스냅샷 이후 스트림을 시작할지 여부를 지정할 수 있게 해 줘요. | false | boolean | | snapshotModeCustomName (oracle) | 'snapshot.mode'가 custom으로 설정되어 있을 때, 'name()' 메서드가 제공하는 커스텀 구현의 이름을 지정하려면 이 설정을 반드시 지정해야 해요. 구현체는 'Snapshotter' 인터페이스를 구현해야 하고, 앱이 부팅될 때마다 호출되어 스냅샷을 할지 판단해요. | | String | | snapshotSelectStatementOverrides (oracle) | 이 프로퍼티는 커넥터에 따라 완전한 이름(fully-qualified)의 테이블 (DB_NAME.TABLE_NAME) 또는 (SCHEMA_NAME.TABLE_NAME)의 콤마 구분 목록을 담고 있어요. 테이블별 select 문은 이어지는 설정 프로퍼티에 테이블당 하나씩 지정하는데, 각각 'snapshot.select.statement.overrides.DB_NAME.TABLE_NAME' 또는 'snapshot.select.statement.overrides.SCHEMA_NAME.TABLE_NAME' id로 식별돼요. 그 프로퍼티의 값은 스냅샷 중에 해당 테이블에서 데이터를 가져올 때 사용할 select 문이에요. 큰 append-only 테이블에서 이전 스냅샷이 중단됐을 경우, 스냅샷을 어디서부터 다시 시작할지 특정 지점을 정하는 용도로 쓸 수 있어요. | | String | | snapshotTablesOrderByRowCount (oracle) | 초기 스냅샷에서 테이블을 처리하는 순서를 제어해요. descending이면 테이블을 행 수 내림차순으로 정렬해요. ascending이면 행 수 오름차순으로 정렬해요. disabled(기본값)이면 행 수 정렬이 꺼져요. | disabled | String | | sourceinfoStructMaker (oracle) | SourceInfo 스키마와 struct를 반환하는 SourceInfoStructMaker 클래스의 이름이에요. | io.debezium.connector.oracle.OracleSourceInfoStructMaker | String | | statisticsMetricsEnabled (oracle) | 레코드 처리 지연 시간 같은 여러 종류의 통계와, quantile 같은 파생 데이터 수집을 활성화해요. 기본으로 통계 수집은 켜져 있어요. | true | boolean | | streamingDelayMs (oracle) | 스냅샷이 끝나고 스트리밍이 시작되기 전의 지연 시간(밀리초)이에요. 기본값은 0 ms예요. | 0ms | long | | tableExcludeList (oracle) | 모니터링에서 제외할 완전한 이름(fully-qualified name)의 테이블과 일치하는 정규 표현식의 콤마 구분 목록이에요. | | String | | tableIncludeList (oracle) | 변경을 캡처할 테이블이에요. | | String | | timePrecisionMode (oracle) | 시간, 날짜, 타임스탬프는 여러 가지 정밀도로 표현할 수 있어요. 'adaptive'(기본값)는 시간·날짜·타임스탬프 값의 정밀도를 데이터베이스 컬럼의 정밀도에 맞춰요. 'adaptive_time_microseconds'는 'adaptive' 모드와 같지만 TIME 필드는 항상 마이크로초 정밀도를 사용해요. 'connect'는 시간·날짜·타임스탬프 값을 데이터베이스 컬럼의 정밀도와 무관하게 항상 밀리초 정밀도의 Kafka Connect 내장 Time·Date·Timestamp 표현으로 표현해요. 'isostring'은 시간·날짜·타임스탬프 값을 UTC 시간대의 ISO-8601 형식 문자열로 표현해요. 'microseconds'는 항상 마이크로초 정밀도로, 'nanoseconds'는 항상 나노초 정밀도로 표현해요. | adaptive | String | | tombstonesOnDelete (oracle) | delete 연산을 delete 이벤트와 그 뒤의 톰브스톤 이벤트로 나타낼지(true), delete 이벤트만으로 나타낼지(false) 여부예요. 톰브스톤 이벤트를 내보내면(기본 동작) 소스 레코드가 삭제되었을 때 Kafka가 해당 키와 관련된 모든 이벤트를 완전히 삭제할 수 있어요. | false | boolean | | topicNamingStrategy (oracle) | 데이터 변경, 스키마 변경, 트랜잭션, 하트비트 이벤트 등의 토픽 이름을 정하는 데 사용할 TopicNamingStrategy 클래스의 이름이에요. | io.debezium.schema.SchemaTopicNamingStrategy | String | | topicPrefix (oracle) | 필수 변경을 캡처하는 특정 데이터베이스 서버/클러스터를 식별하고 네임스페이스를 제공하는 토픽 접두어예요. 이 커넥터가 내보내는 이벤트를 받는 모든 Kafka 토픽 이름의 접두어로 쓰이기 때문에, 토픽 접두어는 다른 모든 커넥터와 겹치지 않게 유일해야 해요. 영숫자, 하이픈, 점, 언더스코어만 받아들여야 해요. | | String | | transactionMetadataFactory (oracle) | 트랜잭션 컨텍스트와 트랜잭션 struct/스키마를 만드는 클래스예요. | io.debezium.pipeline.txmetadata.DefaultTransactionMetadataFactory | String | | unavailableValuePlaceholder (oracle) | 원래 값이 사용 불가능해서 데이터베이스가 제공하지 않았음을 나타내는 상수를 지정해요. | __debezium_unavailable_value | String | | xstreamOutServerName (oracle) | 연결할 XStream Outbound 서버의 이름이에요. | | String |

메시지 헤더 (Message Headers)

Debezium Oracle Connector 컴포넌트는 아래 나열된 메시지 헤더들을 지원해요.

Name Description Default Type
CamelDebeziumSourceMetadata (consumer) Constant: HEADER_SOURCE_METADATA 소스 이벤트에 대한 메타데이터예요. 테이블 이름, 데이터베이스 이름, 로그 위치 등이 담기고, 자세한 내용은 Debezium 문서를 참고하세요. Map
CamelDebeziumIdentifier (consumer) Constant: HEADER_IDENTIFIER 커넥터의 식별자예요. 보통 {server-name}.{database-name}.{table-name} 형식이에요. String
CamelDebeziumKey (consumer) Constant: HEADER_KEY 이벤트의 키예요. 보통 테이블의 기본 키(Primary Key)예요. Struct
CamelDebeziumOperation (consumer) Constant: HEADER_OPERATION 있으면 이벤트 연산의 타입이에요. 커넥터의 값은 create(or insert)면 c, update면 u, delete면 d, read면 r(초기 동기화의 경우) 또는 스냅샷 이벤트의 경우예요. String
CamelDebeziumTimestamp (consumer) Constant: HEADER_TIMESTAMP 있으면 커넥터가 이벤트를 처리한 시각(JVM의 시스템 클록 기준)이에요. Long
CamelDebeziumBefore (consumer) Constant: HEADER_BEFORE 있으면 이벤트가 발생하기 전의 행 상태를 담고 있어요. Struct
CamelDebeziumDdlSQL (consumer) Constant: HEADER_DDL_SQL 있으면 이벤트의 DDL SQL 텍스트예요. String

설정에 대해 더 알고 싶다면: https://debezium.io/documentation/reference/0.10/operations/embedded.html#engine-properties https://debezium.io/documentation/reference/0.10/connectors/oracleql.html#connector-properties

사용법 (Usage)

메시지 바디 (Message body)

메시지 바디는 null이 아니면(톰브스톤의 경우) 이벤트가 발생한 뒤의 행 상태를 담고 있어요. 두 가지 형식 가운데 하나예요:

  • Struct

  • Map (Struct에서 Map으로 바꿔 주는 내장 Type Converter를 쓸 경우)

자세한 내용은 아래에서 볼 수 있어요.

예시 (Examples)

이벤트 소비하기 (Consuming events)

Oracle 커넥터의 Debezium 이벤트를 들여다보는 데 쓸 수 있는 기본 라우트예요.

from("debezium-oracle:dbz-test-1?offsetStorageFileName=/usr/offset-file-1.dat&databaseHostname=localhost&databaseUser=debezium&databasePassword=dbz&topicPrefix=my-app-connector&schemaHistoryInternalFileFilename=/usr/history-file-1.dat")
    .log("Event received from Debezium : ${body}")
    .log("    with this identifier ${headers.CamelDebeziumIdentifier}")
    .log("    with these source metadata ${headers.CamelDebeziumSourceMetadata}")
    .log("    the event occurred upon this operation '${headers.CamelDebeziumOperation}'")
    .log("    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'")
    .log("    with the key ${headers.CamelDebeziumKey}")
    .log("    the previous value is ${headers.CamelDebeziumBefore}");
<route>
  <from uri="debezium-oracle:dbz-test-1?offsetStorageFileName=/usr/offset-file-1.dat&amp;databaseHostname=localhost&amp;databaseUser=debezium&amp;databasePassword=dbz&amp;topicPrefix=my-app-connector&amp;schemaHistoryInternalFileFilename=/usr/history-file-1.dat"/>
  <log message="Event received from Debezium : ${body}"/>
  <log message="    with this identifier ${headers.CamelDebeziumIdentifier}"/>
  <log message="    with these source metadata ${headers.CamelDebeziumSourceMetadata}"/>
  <log message="    the event occurred upon this operation '${headers.CamelDebeziumOperation}'"/>
  <log message="    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'"/>
  <log message="    with the key ${headers.CamelDebeziumKey}"/>
  <log message="    the previous value is ${headers.CamelDebeziumBefore}"/>
</route>
- route:
    from:
      uri: debezium-oracle:dbz-test-1
      parameters:
        offsetStorageFileName: /usr/offset-file-1.dat
        databaseHostname: localhost
        databaseUser: debezium
        databasePassword: dbz
        topicPrefix: my-app-connector
        schemaHistoryInternalFileFilename: /usr/history-file-1.dat
      steps:
        - log:
            message: "Event received from Debezium : ${body}"
        - log:
            message: "    with this identifier ${headers.CamelDebeziumIdentifier}"
        - log:
            message: "    with these source metadata ${headers.CamelDebeziumSourceMetadata}"
        - log:
            message: "    the event occurred upon this operation '${headers.CamelDebeziumOperation}'"
        - log:
            message: "    on this database '${headers.CamelDebeziumSourceMetadata[db]}' and this table '${headers.CamelDebeziumSourceMetadata[table]}'"
        - log:
            message: "    with the key ${headers.CamelDebeziumKey}"
        - log:
            message: "    the previous value is ${headers.CamelDebeziumBefore}"

기본으로 컴포넌트는 바디의 이벤트와 CamelDebeziumBefore 헤더를 Struct 데이터 타입으로 내보내요. 이유는 필요할 때 스키마 정보를 볼 수 있게 하기 위해서예요. 하지만 컴포넌트에는 기본 출력 타입인 Struct를 Map으로 바꾸는 Type Converter도 들어 있어요. Camel의 풍부한 Data Format 타입 가운데 상당수가 Map 데이터 타입으로 바로 동작하기 때문이에요. 이 컨버터를 쓰려면 메시지에 접근할 때 Map.class 타입을 지정하거나(예: exchange.getIn().getBody(Map.class)), 라우트 빌더에서 from 문 뒤에 .convertBodyTo(Map.class)를 붙여 바디를 항상 Map으로 바꿔도 돼요.

앞서 언급한 스키마는 고급 데이터 변환이 필요할 때 쓸 수 있어요. 바디를 Map으로 바꾸지 않기로 했다면 Struct에서 스키마 정보를 Schema 타입으로 이렇게 꺼낼 수 있어요.

Java 전용: 프로세서에서 Struct 스키마 접근하기

from("debezium-oracle:[name]?[options]])
    .process(exchange -> {
        final Struct bodyValue = exchange.getIn().getBody(Struct.class);
        final Schema schemaValue = bodyValue.schema();

        log.info("Body value is : {}", bodyValue);
        log.info("With Schema : {}", schemaValue);
        log.info("And fields of : {}", schemaValue.fields());
        log.info("Field name has `{}` type", schemaValue.field("name").schema());
    });

중요 이 컴포넌트는 앞서 말한 대로 Debezium Engine의 씬 래퍼(thin wrapper)예요. 그래서 프로덕션에서 이 컴포넌트를 쓰기 전에 Debezium이 어떻게 동작하는지, 설정이 기대한 동작에 어떻게 반영되는지 이해해야 해요. 이건 특히 handling failures와 관련해서 그래요.

더 알아보기 (Learn more)

Debezium 자체의 스냅샷·오프셋·장애 처리 동작은 컴포넌트 설정보다 엔진 문서가 더 상세해요. 프로덕션 배치 전에는 위의 임베디드 엔진 문서를 먼저 확인하세요.