이 섹션에는 다음 정보가 포함되어 있습니다.
- 소스 Oracle 데이터베이스에서 가져오는 데이터가 Datastream에서 처리되는 방법
- Datastream에서 지원되는 Oracle 데이터베이스 버전
- 데이터를 대상으로 스트리밍할 수 있도록 소스 Oracle 데이터베이스를 설정하는 방법의 개요
- Oracle 데이터베이스를 소스로 사용할 경우의 알려진 제한사항
행동
Datastream은 온라인 재실행 로그 파일에서 데이터 변경사항을 추출하는 두 가지 방법인 Oracle 바이너리 로그 리더 (미리보기)와 Oracle LogMiner를 지원합니다.
바이너리 로그 리더 메서드 (미리보기)를 사용하면 다음과 같은 동작 이 관찰됩니다.
온라인 로그 파일에서 변경사항을 추출할 때 읽기 지연이 있는 경우 Datastream은 보관처리된 로그 파일에서 변경사항을 추출합니다.
Datastream은 커밋된 변경사항만 대상에 복제합니다. 커밋되지 않거나 롤백된 트랜잭션은 복제되지 않습니다.
바이너리 리더는 4,000자(영문)보다 긴 Oracle
VARCHAR2열의 복제를 지원합니다.
Datastream은 데이터 변경사항을 노출하기 위한 Oracle LogMiner 기능도 지원합니다. 이 메서드는 다음과 같은 동작을 합니다.
- 특정 데이터베이스의 모든 스키마 또는 특정 스키마와 스키마의 모든 테이블 또는 특정 테이블을 선택할 수 있습니다.
- 모든 이전 데이터가 복제됩니다.
- 지정된 데이터베이스 및 테이블의 삽입, 업데이트, 삭제와 같은 모든 데이터 조작 언어(DML) 변경사항이 복제됩니다.
- Datastream은 커밋된 변경사항과 경우에 따라 커밋되지 않은 변경사항을 대상에 복제합니다. Datastream은 커밋되지 않은 변경사항을 읽습니다. 롤백하는 경우 Datastream 출력 레코드에 반대 작업도 포함됩니다. 예를 들어 롤백된
INSERT작업이 있으면 출력 레코드에 해당DELETE작업도 포함됩니다. 이 경우 이벤트는ROWID만 포함된DELETE이벤트로 표시됩니다.
ROWID 기반 백필
Oracle에서 ROWID는 테이블에 있는 행의 고유 식별자를 저장하는 유사 열입니다. Datastream은 백필 작업에 ROWID 값을 사용합니다. 따라서 백필 작업이 완료될 때까지 소스 Oracle 데이터베이스에서 ROWID 값을 변경할 수 있는 작업을 수행하지 않는 것이 좋습니다.
ROWID 값을 변경할 수 있는 작업은 다음과 같습니다.
행의 물리적 이동:
- 내보내기 및 가져오기 작업: 테이블을 내보낸 후 다시 가져오면 행의 물리적 위치가 변경되어 새
ROWID값이 생성될 수 있습니다. ALTER TABLE (...) MOVE명령어: 테이블을 다른 테이블스페이스로 이동하면 물리적 스토리지가 변경되고ROWID가 변경될 수 있습니다.ALTER TABLE (...) SHRINK SPACE명령어: 이 명령어는 테이블을 압축하므로 행이 잠재적으로 이동하고ROWID값이 영향을 받을 수 있습니다.- 파티셔닝 작업: 파티션을 분할, 병합 또는 이동하면 행의 물리적 위치와
ROWID값이 변경될 수 있습니다.
- 내보내기 및 가져오기 작업: 테이블을 내보낸 후 다시 가져오면 행의 물리적 위치가 변경되어 새
플래시백 작업:
FLASHBACK TABLE명령어: 테이블을 이전 상태로 복원하려면 행을 삭제하고 다시 삽입해야 하므로 새ROWID값이 생성됩니다.FLASHBACK_TRANSACTION_QUERY:FLASHBACK TABLE와 비슷함. 트랜잭션을 롤백하면 트랜잭션 내에서 행이 삭제되거나 업데이트된 경우ROWID가 변경될 수 있습니다.
Oracle 11.2.0.4 파티션 테이블 백필 문제 해결
Oracle 11.2.0.4에서 파티션을 나눈 테이블의 백필이 예기치 않은 가져오기 오류 (색인 범위 벗어남)로 인해 실패하는 경우 ALL_OBJECTS에 대한 쿼리가 하위 파티션을 반환하지 못하는 Oracle 메타데이터 버그 때문입니다.
- 해결 방법: Datastream 사용자로부터
SELECT ON DBA_EXTENTS권한을 일시적으로 취소합니다 (예:REVOKE SELECT ON sys.dba_extents FROM USER_NAME;). 이렇게 하면 Datastream이 색인 기반 백필을 사용하도록 강제하여 메타데이터 문제를 해결합니다.
대기 데이터베이스
Oracle Active Data Guard 대기 데이터베이스를 소스로 사용하는 경우 Datastream은 보관처리된 재실행 로그를 읽습니다. Datastream이 대기 데이터베이스에 성공적으로
적용된 재실행 로그만 처리하도록 하려면
APPLIED = 'YES' 필터가 있는 레코드만 포함하도록
V$ARCHIVED_LOG 및 GV$ARCHIVED_LOG와 같은 표준 Oracle 뷰를 필터링해야 합니다.
맞춤 뷰를 만들어 이 작업을 수행할 수 있습니다. Datastream 사용자를 위해 이러한 뷰에 적절한 액세스 권한을 부여해야 합니다. 예를 들면 다음과 같습니다.
CREATE OR REPLACE VIEW USER_NAME.local_v$archived_log AS
SELECT * FROM sys.v_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE OR REPLACE VIEW USER_NAME.local_gv$archived_log AS
SELECT * FROM sys.gv_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE SYNONYM USER_NAME.v$archived_log FOR USER_NAME.local_v$archived_log;
CREATE SYNONYM USER_NAME.gv$archived_log FOR USER_NAME.local_gv$archived_log;
APPLIED = 'YES' 필터를 사용하면 데이터 업데이트 빈도에 영향을 미칩니다.
Datastream은 대기 데이터베이스의 관리 복구 프로세스(MRP)가 로그를 적용하고 APPLIED 열을 YES로 업데이트할 때까지 변경사항을 추출하기 전에 기다립니다. 예를 들어 대기 적용 프로세스를 일시중지하는 경우 MRP 프로세스가 지연되거나 일시중지되면 복제된 데이터의 업데이트 빈도에 직접적인 영향을 미칩니다. Datastream은 재시도 루프에 들어가고 새로 적용된 보관처리된 로그를 사용할 수 있을 때까지 처리를 지연합니다.
이 구성은 대용량 객체 (LOB) 열이 포함된 테이블을 복제할 때 매우 관련성이 높습니다. UPDATE 작업의 경우 재실행 로그에 LOB 열의 세부 값이 없습니다. 따라서 Datastream은 데이터베이스를 쿼리하여 연결된 행을 가져와야 합니다. Datastream이 적용되지 않은 재실행 로그를 처리하고 대기 데이터베이스에서 LOB 값을 가져오려고 하면 잘못된 오래된 값을 가져올 수 있습니다. 로그가 완전히 적용되도록 먼저 필터링하면 Datastream이 올바른 데이터를 가져옵니다.
버전
Datastream은 다음 버전의 Oracle 데이터베이스를 지원합니다.
- Oracle 11g, 버전 11.2.0.4 (Logminer CDC 메서드에서만 지원됨)
- Oracle 12c, 버전 12.1.0.2
- Oracle 12c, 버전 12.2.0.1
- Oracle 18c
- Oracle 19c
- Oracle 21c
Datastream은 다음 유형의 Oracle 데이터베이스를 지원합니다.
- 온프레미스 또는 모든 클라우드 제공업체에서 자체 호스팅
- Oracle용 Amazon RDS
- Oracle Cloud
- Oracle Exadata
- Oracle RAC
- Oracle Active Data Guard 대기 데이터베이스
설정
데이터를 대상으로 스트리밍할 수 있도록 소스 Oracle 데이터베이스를 설정하려면 데이터베이스를 구성하여 액세스 권한을 부여하고, 로깅을 설정하고 보관 정책을 정의해야 합니다.
Datastream이 해당 데이터베이스에서 대상으로 데이터를 가져올 수 있도록 구성하는 방법은 소스 Oracle 데이터베이스 구성을 참조하세요.
권장사항
이 섹션에서는 Datastream에 사용할 Oracle 소스를 구성하기 위한 권장사항을 설명합니다.
바이너리 리더의 대소문자 구분
바이너리 리더 CDC 메서드로 Oracle 소스를 구성하고 재실행 및 보관 로그의 디렉터리 이름을 지정할 때는 이름이 대소문자를 구분한다는 점에 유의하세요. Datastream 연결 프로필에 제공하는 디렉터리 이름이 Oracle 데이터베이스의 디렉터리 이름과 대소문자가 정확히 일치하는지 확인합니다.
CDC 동시 실행
복제 지연을 최소화하려면 Datastream이 Oracle 소스에서 재실행 로그를 생성하는 속도만큼 빠르게 재실행 로그를 처리할 수 있는지 확인합니다. 바이너리 리더 CDC 메서드를 사용하는 경우 Datastream 동시 실행은 재실행 로그 파일 수준에 있습니다. maxConcurrentCdcTasks로 정의된 각 작업은 한 번에 하나의 파일을 처리합니다.
다음 방법론을 사용하는 것이 좋습니다.
- Datastream에서 동시 실행 조정: 비즈니스 피크 시간 동안의 평균
재실행 로그 전환 수를 파악하고 그에 따라
maxConcurrentCdcTasks매개변수를 구성합니다. 자세한 내용은 최대 CDC 작업 수를 참조하세요. - Oracle 로그 전환 구성: Oracle이 로그를 자주 전환하도록 구성합니다(예: 10~20분마다). 이렇게 하면 더 작은 작업 단위의 안정적인 스트림이 생성되어 Datastream 동시 실행 작업이 병렬로 효과적으로 작동할 수 있습니다.
Oracle에서 더 작은 재실행 로그를 자주 생성하는 것을 처리할 수 있도록 Datastream에 충분한 동시 실행 작업이 있도록 설정을 최적화하는 것이 좋습니다. 자세한 내용은 스트림 동시 실행 제어를 참조하세요.
알려진 제한사항
Oracle 데이터베이스를 소스로 사용할 경우의 알려진 제한사항은 다음과 같습니다.
- 스트림이 테이블 10,000개로 제한됩니다. 스트림에 테이블이 10,000개 넘게 포함되면 오류가 발생할 수 있습니다.
- Datastream은 Oracle 멀티 테넌트 아키텍처(CDB/PDB)를 지원하지만 스트림에서 플러그인 가능한 단일 데이터베이스만 복제할 수 있습니다.
- Oracle Autonomous 데이터베이스는 지원되지 않습니다.
- 기본 키가 없는 테이블의 경우 Datastream은 행의
ROWID를 사용해서 소비자 측에서 병합 작업을 수행합니다.ROWID는 고유하지 않을 수 있습니다. 예를 들어 Oracle의 내보내기/가져오기 유틸리티를 사용해서 행을 삭제하고 다시 삽입하면 행의ROWID가 변경될 수 있습니다. 행을 삭제하면 Oracle이 나중에 삽입되는 새 행에ROWID를 다시 할당할 수 있습니다. - 색인 구성 테이블(IOT)은 지원되지 않습니다.
- 임시 테이블은 지원되지 않습니다.
- 다음 Oracle 데이터 유형은 지원되지 않으며 복제되지 않습니다. 이러한 유형의 열은 대상에서
NULL값으로 복제됩니다.ANYDATA,ANYDATASET,ANYTYPEVARRAY(Oracle 배열)BFILE,BFILENAMEINTERVAL DAY TO SECOND,INTERVAL YEAR TO MONTHLONG,LONG RAWUROWIDUDT- 미디어 및 공간 유형:
ORDAUDIO,ORDDATASOURCE,ORDDICOM,ORDDOC,ORDIMAGE,ORDVIDEO,SDO_GEOMETRY(및 기타 모든MDSYS.SDO_*유형)
XMLTYPE대용량 바이너리 객체 (BLOB), 대용량 문자 객체 (CLOB), 대용량 국가별 문자 객체 (NCLOB)와 같은 대용량 객체 데이터 유형의 열을 스트리밍하려면 스트림 구성에streamLargeObjects플래그를 포함해야 합니다. 플래그를 포함하지 않으면 Datastream이 이러한 열을 스트리밍하지 않으며 대상의NULL값으로 바뀝니다. 자세한 내용은 Oracle 소스의 대용량 객체 스트리밍 사용 설정을 참조하세요. 이러한 데이터 유형을 스트리밍할 때 Datastream은 소스 데이터베이스를 쿼리하여 특정 시점의 누락된 LOB 값을 가져와야 합니다 (보완이라고 하는 활성 조회 프로세스). 이는 다음과 같은 시나리오에서 발생합니다.UPDATE중에 변경되지 않은 LOB 페이로드가 재실행 로그에서 삭제되는 경우- 바이너리 XML 유형과 관련된 DML 작업 중
- 스트림에서 LogMiner 메서드를 사용하는 경우 LOB가 포함된 테이블에서 파싱된 DML 중
Datastream은 데이터베이스를 쿼리하여 이러한 열을 스트리밍하므로 연속된 빠른 업데이트 또는 삽입 후 빠른 삭제와 관련된 시나리오에서는 중간 변경사항이 캡처되지 않을 수 있습니다.
DELETE작업은 보완을 트리거하지 않습니다. 이 제한사항은 모든 중간 변경사항이 캡처될 것으로 예상되는 추가 전용 쓰기 모드를 사용할 때 특히 관련이 있습니다.Oracle 11g의 경우 데이터 유형이
ANYDATA또는UDT인 열이 있는 테이블은 지원되지 않으며 전체 테이블이 복제되지 않습니다.Oracle 라벨 보안(OLS)은 복제되지 않습니다.
Datastream은 이벤트가 처리될 때 소스에서 최신 스키마를 주기적으로 가져옵니다. 스키마가 변경되면 이전 스키마가 적용되는 동안 새 스키마의 일부 이벤트가 읽힐 수 있습니다. 여기에서 Datastream은 스키마 변경사항을 감지하고 스키마 가져오기를 트리거하고 실패한 이벤트를 다시 처리합니다.
소스 스키마에 대한 모든 변경사항이 올바르게 검색되지 않아서 데이터 손상이 발생할 수 있습니다. 다음 스키마 변경으로 인해 데이터가 손상되거나 이벤트 다운스트림을 처리하지 못할 수 있습니다.
- 열 삭제
- 테이블 중간에 열 추가
- 열의 데이터 유형 변경
- 열 재정렬
- 테이블 삭제(새 데이터를 추가한 후 같은 테이블을 다시 만드는 경우에 해당)
- 테이블 자르기
Datastream은 뷰 복제를 지원하지 않습니다.
Datastream은 구체화된 뷰를 지원합니다. 하지만 스트림이 실행되는 동안 생성된 새 뷰는 자동으로 백필되지 않습니다.
Oracle LogMiner 메서드를 사용하는 경우
SAVEPOINT문은 지원되지 않으며 롤백 시 데이터 불일치가 발생할 수 있습니다.바이너리 리더 메서드를 사용하는 경우 동적으로 파티션을 나눈 테이블은 지원되지 않습니다.
Oracle LogMiner 메서드를 사용하는 경우 Datastream은 이름이 30자(영문 기준)를 초과하는 테이블 및 열의 복제를 지원하지 않습니다.
Datastream은 Oracle 데이터베이스에 대해 다음 문자 집합 인코딩을 지원합니다.
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
DataStream은 0 날짜 값 복제를 지원하지 않습니다. 이러한 날짜는
NULL값으로 대체됩니다.Datastream은 Oracle Real Application Clusters (RAC) 환경에서 단일 클라이언트 액세스 이름 (SCAN) 기능을 사용하여 데이터베이스에 대한 직접 연결을 지원하지 않습니다. 가능한 솔루션에 대한 자세한 내용은 Oracle 소스 동작 및 제한사항을 참조하세요.
소스가 Oracle Active Data Guard 대기 데이터베이스인 경우 Datastream은 테이블스페이스 수준 암호화만 지원하고 열 수준 암호화는 지원하지 않습니다.
바이너리 리더 사용 시 추가 제한사항
고성능 바이너리 리더 메서드는 Oracle 12c 이상에서만 지원됩니다. Oracle 11g 및 이전 버전의 경우 LogMiner를 사용해야 합니다.
바이너리 리더는 다음 기능을 지원하지 않습니다.
- 투명 데이터베이스 암호화 (TDE)
- 하이브리드 열 형식 압축
- 파일 보안 설정
- ASM은 Amazon RDS 소스에서 지원되지 않습니다.
- 바이너리 리더 CDC 메서드는 Oracle 11g 및 이전 버전을 지원하지 않습니다.
다음 단계
- Datastream에 사용할 Oracle 소스 구성 방법 알아보기