YugabyteDB: 스키마 변경 처리
YugabyteDB용 Oracle GoldenGate의 스키마 변경 처리에 대해 알아봅니다.
스키마 변경 처리를 위한 필요 조건
유가바이트 데이터베이스의 테이블 및 열 레벨에서 스키마 변경을 지원하려면 T-Server 및 마스터 플래그 목록에서 다음 구성이 필요합니다.
cdcsdk_publication_list_refresh_interval_secs
-
게시 목록에 대한 새로고침 간격을 정의합니다.
-
환경에 적합한 대기 시간에 따라 구성합니다(기본값: 900초).
cdcsdk_enable_dynamic_table_support
-
CDC에서 동적 테이블 지원을 사용으로 설정합니다.
-
기본적으로
true로 설정됩니다. T-Server 및 Master gflags에 대해 명시적으로 true인지 확인합니다.
Oracle GoldenGate for Yugabyte의 스키마 변경 처리 지침
다음 지침은 유가바이트 데이터베이스에서 DDL 작업을 수행할 때 중요하므로 반드시 고려해야 합니다.
-
DML 작업을 수행하기 전에 항상
cdcsdk_publication_list_refresh_interval_secs간격을 준수하십시오. -
Extract를 정지하여 안전한 스키마 변경을 보장하고 잠재적인 데이터 캡처 문제를 방지합니다.
-
Extract를 재시작한 후에는 항상 새 열이나 나머지 열이 제대로 캡처되었는지 검증합니다.
-
유가바이트 데이터베이스는 테이블 삭제를 지원하지 않습니다. 자세한 내용은 다음 링크를 참조하십시오.
테이블 레벨 스키마 변경 처리
YugabyteDB용 Oracle GoldenGate에서 테이블 레벨 스키마 변경 처리에 대해 알아봅니다.
기존 추출 프로세스에 새 테이블 추가
이 절차는 유가바이트의 게시 구성에 따라 달라집니다. 다음과 같은 두 가지 유형의 출판물이 있습니다.
-
Publication Configured for All Tables: 이 게시 유형에서는 새 테이블이 동적으로 추가되며 게시에 대한 변경이 필요하지 않습니다.
-
테이블 집합에 대해 구성된 게시: 새 테이블이 생성되면 새 테이블을 포함하도록 게시를 변경해야 합니다.
기존 추출 프로세스에 새 테이블 추가
다음은 기존 추출 프로세스에 대한 새 테이블을 추가하는 일반적인 단계입니다. 1. 변경하기 전에 추출 프로세스를 중지하십시오.
-
Extract 구성에 새 테이블을 추가하도록 Extract 매개변수 파일을 업데이트합니다.
-
cdcsdk_publication_list_refresh_interval_secs에 정의된 새로고침 간격을 기다립니다.선택적으로, 작은 버퍼 창을 통해 테이블이 CDC 모듈에서 완전히 새로 고쳐지도록 할 수 있습니다.
-
새로고침 간격이 완료된 후 추출 프로세스를 재시작하십시오.
-
새 테이블에서 DML 작업을 수행합니다.
-
Extract가 새 레코드를 성공적으로 캡처하는지 확인합니다.
기존 추출 프로세스에 새 테이블 추가 - 예제
다음 예에 대한 시나리오를 고려하십시오.
두 개의 등록이 구성된 테이블 하나가 있습니다.
-
간행물 1(pub1): 특정 테이블
-
간행물 2(pub2): 모든 테이블
-
두 개의 추출(Ext1 - pub1 사용, Ext2 - pub2 사용)과 정적 테이블 목록
-
정적 테이블에 대한 DML 작업은 두 Extract에 의해 캡처됩니다.
다음 예에서는 이전 고려 사항에 따라 기존 추출 프로세스에 새 테이블을 추가하는 단계를 제공합니다.
-
Ext1 및 Ext2를 중지합니다.
-
새 테이블(table2, table3)을 생성합니다.
-
Ext1 및 Ext2에 대한 추출 매개변수 파일을 업데이트합니다.
-
새 테이블을 포함하도록 pub1를 변경합니다. Pub2는 변경할 필요가 없습니다.
-
Ext1 및 Ext2를 다시 시작합니다.
-
새로고침 간격(
cdcsdk_publication_list_refresh_interval_secs)을 기다립니다. -
새 테이블에 대해 DML 작업을 수행하고 두 Extracts가 성공적으로 해당 테이블을 캡처하는지 확인합니다.
추출 프로세스에서 테이블 삭제
테이블을 삭제할 때 고려해야 할 두 가지 시나리오는 다음과 같습니다.
테이블이 게시의 일부입니다.
테이블이 게시에 포함된 경우 테이블 삭제가 허용되지 않습니다. 이 시나리오에서 테이블을 삭제하려고 하면 Extract에서 사용하는 스트림 또는 복제 슬롯을 사용할 수 없게 만들고 다음과 같은 오류가 발생할 수 있습니다.
2026-03-04 11:21:44 ERROR OGG-30611 Yugabyte has closed the streaming client and has caused the Extract to abend.
Error: ERROR: XX000: LookupByIdRpc(tablet: d092b524eff34d21b45c78ead108122a, num_attempts: 1) failed: Tablet deleted: Table deleted at 2026-03-04 11:21:44 UTC.
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.
또는
2026-03-04 11:22:51 ERROR OGG-30605 Dropping any table used by the Extract will cause the Extract to abend and disconnect the YDB streaming client.
Error: ERROR: XX000: VirtualWAL initialisation failed for stream_id: afdaa2e91ebc288be74724e8fb780342 & session_id: 51: Table 000033cf00003000800000000000400f not found under stream
CONTEXT: Catalog Version Mismatch: A DDL occurred while processing this query. Try again.LOCATION: YBPrepareCacheRefreshIfNeeded, postgres.c:4160.
주의: 이러한 오류가 발생할 경우 유일한 해결 방법은 영향을 받는 Extract의 등록을 해제하고 다시 등록하는 것입니다. 이 단계는 일반 operation.This를 복원하는 데 중요하므로 데이터 손실이 발생할 수도 있습니다. 따라서 주의가 필요합니다.
테이블이 게시의 일부가 아님
테이블이 게시에 포함되지 않은 경우 삭제해도 스트림에 영향을 주지 않습니다. 필요한 작업이 없으며 평소와 같이 복제가 계속됩니다.
열 레벨 스키마 변경 처리
YugabyteDB용 Oracle GoldenGate에서 열 추가 및 삭제와 같은 열 레벨 스키마 변경 처리에 대해 알아봅니다.
컬럼 추가
게시의 일부인 테이블에 대해 ALTER TABLE … ADD COLUMN 작업을 수행하는 방법: 1. 테이블에 열을 추가하기 전에 추출 프로세스를 중지하십시오. 그러면 Extract가 비정상 종료되지 않습니다.
-
다음 명령을 사용하여 등록에 포함된 테이블에 열을 추가합니다.
ALTER TABLE...ADD COLUMN -
cdcsdk_publication_list_refresh_interval_secs에 지정된 기간 동안 CDC 모듈이 새로 고쳐지고 새 열이 인식될 때까지 기다립니다. -
새 열에서 모든 DML 작업(INSERTS, UPDATES 또는 DELETES)을 실행합니다.
-
Extract 프로세스를 재시작하고 새 열에 대한 DML 작업을 포함한 변경 사항이 성공적으로 캡처되었는지 확인합니다.
열 끌어 놓기
게시의 일부인 테이블에서 열을 삭제하려면 1을 선택합니다. Extract 프로세스를 정지합니다. 일반적으로 열을 삭제해도 Extract가 비정상 종료되지는 않지만, 스키마를 변경하기 전에 Extract를 정지하는 것이 좋습니다.
-
설명서에 포함된 테이블에서 다음 명령을 실행합니다.
ALTER TABLE ... DROP COLUMN -
cdcsdk_publication_list_refresh_interval_secs에 지정된 기간이 CDC 모듈이 업데이트될 때까지 기다립니다. -
필요에 따라 모든 DML 작업(INSERT, UPDATE, DELETE)을 실행합니다.
-
Extract를 재시작하고 나머지 열에 대한 DML 작업이 계속 올바르게 캡처되는지 확인합니다.