다음 CDC 메서드와 함께 사용할 수 있도록 소스 Oracle 데이터베이스를 구성할 수 있습니다.
바이너리 로그 리더 및 LogMiner API에 관한 자세한 내용은 Oracle 데이터베이스 재실행 로그 파일 작업을 참고하세요.
이러한 각 방법에 대해 소스 Oracle 데이터베이스를 구성하는 방법에 관한 자세한 안내는 다음 섹션을 참고하세요.
바이너리 로그 리더를 위해 Amazon RDS Oracle 데이터베이스 구성
Amazon RDS 소스의 경우 Datastream은 바이너리 로그 리더의 로그 액세스 메서드로 데이터베이스 디렉터리 객체만 지원합니다. 온라인 재실행 로그 파일 및 보관처리된 로그 파일을 가리키는 데이터베이스 디렉터리를 만들어야 합니다. 이러한 디렉터리의 이름은 정적이며 나중에 변경할 수 없습니다. 스트림을 만들 때 이러한 이름을 Datastream에 제공해야 합니다.
소스 Amazon RDS 인스턴스에 연결합니다.
터미널 또는 Amazon RDS 대시보드를 사용하여 다음 명령어를 실행합니다.
BEGIN rdsadmin.rdsadmin_master_util.create_archivelog_dir; END; BEGIN rdsadmin.rdsadmin_master_util.create_onlinelog_dir; END; COMMIT; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
데이터베이스가
ARCHIVELOG
모드로 실행되는지 확인합니다. 이렇게 하려면 Oracle 데이터베이스에 로그인하고 SQL 프롬프트에서 다음 명령어를 실행합니다.SELECT LOG_MODE FROM V$DATABASE;
- 결과가
ARCHIVELOG
이면 c단계로 이동합니다. - 결과가
NOARCHIVELOG
이면 데이터베이스에 대해ARCHIVELOG
모드를 사용 설정해야 합니다. - 보관처리된 로그 파일은 디스크 공간을 사용하므로 데이터베이스에 DB_RECOVERY_FILE_DEST_SIZE 매개변수를 구성해야 할 수 있습니다. 이 매개변수를 사용하면 대상 데이터베이스 복구 파일에 사용할 총 공간에 대해 엄격한 제한(바이트)을 지정할 수 있습니다. 이 매개변수를 설정하면 디스크 공간 소진으로부터의 데이터베이스 보호와 로그 위치 손실로 인한 스트림 실패 간의 균형을 맞출 수 있습니다.
- 다음 명령어를 실행하여 데이터베이스에 대해 데이터 보관 정책을 정의합니다.
백업 및 보관처리 로그는 최소 4일 동안 보관해야 하며, 7일이 권장됩니다.exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Oracle 로그 파일 보관 정책을 구성합니다. 최대 로그 파일 크기를 1GB보다 작은 값으로 설정하는 것이 좋습니다.
- 결과가
추가 로그 데이터를 사용 설정합니다. 이렇게 하려면 먼저 다음 명령어를 실행하여 최소한의 데이터베이스 수준 추가 로깅을 사용 설정합니다.
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
그런 후 특정 테이블 또는 전체 데이터베이스에 대해 로깅을 설정할지 여부를 선택합니다.
특정 테이블에 대해서만 변경사항을 로깅하려면 복제하려는 각 테이블에 대해 다음 명령어를 실행합니다.
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
다음을 바꿉니다.
- SCHEMA: 테이블이 포함된 스키마의 이름입니다.
- TABLE: 변경사항을 로깅하려는 테이블의 이름입니다.
데이터베이스의 대부분 또는 모든 테이블을 복제하려면 전체 데이터베이스에 대해 로깅을 설정합니다. SQL 프롬프트에서 다음 명령어를 실행하여 전체 데이터베이스에 대해 추가 로그 데이터를 사용 설정합니다.
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
데이터베이스 사용자에게 다음 권한을 부여합니다.
GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT'); GRANT SELECT ANY TRANSACTION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
USER_NAME을 데이터베이스에 연결하는 데 사용할 사용자 계정의 이름으로 바꿉니다.
LogMiner를 위해 Amazon RDS Oracle 데이터베이스 구성
데이터베이스가
ARCHIVELOG
모드로 실행되는지 확인합니다. 이렇게 하려면 Oracle 데이터베이스에 로그인하고 SQL 프롬프트에서 다음 명령어를 실행합니다.SELECT LOG_MODE FROM V$DATABASE;
- 결과가
ARCHIVELOG
이면 c단계로 이동합니다. - 결과가
NOARCHIVELOG
이면 데이터베이스에 대해ARCHIVELOG
모드를 사용 설정해야 합니다. - 보관처리된 로그 파일은 디스크 공간을 사용하므로 데이터베이스에 DB_RECOVERY_FILE_DEST_SIZE 매개변수를 구성해야 할 수 있습니다. 이 매개변수를 사용하면 대상 데이터베이스 복구 파일에 사용할 총 공간에 대해 엄격한 제한(바이트)을 지정할 수 있습니다. 이 매개변수를 설정하면 디스크 공간 소진으로부터의 데이터베이스 보호와 로그 위치 손실로 인한 스트림 실패 간의 균형을 맞출 수 있습니다.
- 다음 명령어를 실행하여 데이터베이스에 대해 데이터 보관 정책을 정의합니다.
백업 및 보관처리 로그는 최소 4일 동안 보관해야 하며, 7일이 권장됩니다.exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',96);
- Oracle 로그 파일 보관 정책을 구성합니다. 최대 로그 파일 크기를 1GB보다 작은 값으로 설정하는 것이 좋습니다.
- 결과가
추가 로그 데이터를 사용 설정합니다. 이렇게 하려면 먼저 다음 명령어를 실행하여 최소한의 데이터베이스 수준 추가 로깅을 사용 설정합니다.
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
그런 후 특정 테이블 또는 전체 데이터베이스에 대해 로깅을 설정할지 여부를 선택합니다.
특정 테이블에 대해서만 변경사항을 로깅하려면 복제하려는 각 테이블에 대해 다음 명령어를 실행합니다.
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
다음을 바꿉니다.
- SCHEMA: 테이블이 포함된 스키마의 이름입니다.
- TABLE: 변경사항을 로깅하려는 테이블의 이름입니다.
데이터베이스의 대부분 또는 모든 테이블을 복제하려면 전체 데이터베이스에 대해 로깅을 설정합니다.
SQL 프롬프트에서 다음 명령어를 실행하여 전체 데이터베이스에 대해 추가 로그 데이터를 사용 설정합니다.
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','ALL');
데이터베이스에 연결하는 데 사용할 사용자 계정에 필요한 적절한 권한을 부여합니다. 이렇게 하려면 다음 명령어를 실행하세요.
GRANT EXECUTE_CATALOG_ROLE TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','USER_NAME','SELECT'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','USER_NAME','EXECUTE'); exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D','USER_NAME','EXECUTE'); GRANT SELECT ANY TRANSACTION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME;
조직에서
GRANT SELECT ANY TABLE
권한 부여를 허용하지 않는 경우 Datastream FAQ 페이지의 Oracle 변경 데이터 캡처(CDC) 섹션에 설명된 해결 방법을 사용하세요.소스 데이터베이스가 Oracle 12c 이상인 경우 다음과 같은 추가 권한을 부여합니다.
GRANT LOGMINING TO USER_NAME;
사용자 계정
SELECT
에 데이터베이스의DBA_EXTENTS
뷰에 대한 액세스 권한을 부여합니다. 이 권한을 통해 Oracle 소스의ROWID
기반 백필을 사용할 수 있습니다.GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
다음 단계
- Datastream의 Oracle 소스 작동 방법 자세히 알아보기