Openflow Connector for Oracle: Oracle 데이터베이스 구성¶
참고
이 커넥터에는 `Snowflake Connector 약관<https://www.snowflake.com/legal/snowflake-connector-terms/>`_이 적용됩니다.
참고
Openflow Connector for Oracle 에는 표준 커넥터 서비스 약관 외에 추가 서비스 약관도 적용됩니다. 자세한 내용은 `Oracle용 Openflow Connector 부록 <https://www.snowflake.com/en/legal/optional-offerings/offering-specific-terms/openflow-oracle-terms/>`_을 참조하세요.
이 항목에서는 |OracleOFC|용 Oracle 데이터베이스를 설정하는 방법에 대해 설명합니다.
참고
Oracle 데이터베이스 설정은 조직의 보안 정책 및 데이터베이스 아키텍처에 따라 다릅니다. 테이블이 컨테이너 데이터베이스(CDB), 플러그형 데이터베이스(PDB), 다중 PDBs 또는 이들의 조합에 있는 경우를 예로 들겠습니다.
이 항목에서 제공되는 단계는 예제일 뿐입니다. 환경에 따라 필요한 경우 수정합니다.
Oracle 데이터베이스 관리자로 소스 데이터베이스에서 다음 프로시저를 수행합니다.
참고
이 항목의 단계는 컨테이너 데이터베이스(CDB) 및 하나 이상의 플러그형 데이터베이스(PDB)를 사용하는 멀티 테넌트 아키텍처를 위해 작성되었습니다. Oracle 데이터베이스가 단일 테넌트 아키텍처를 사용하는 경우 단일 테넌트 데이터베이스용 XStream 설정 섹션을 참조하세요.
보관된 다시 실행 로그의 보존 기간 구성¶
ARCHIVELOG 모드를 활성화하여 변경 데이터를 복제에 사용할 수 있는지 확인해야 합니다.
Oracle용 AWS RDS를 사용하는 경우 보관된 다시 실행 로그의 보존 기간도 구성해야 합니다. 소스 데이터베이스의 변경 볼륨과 저장소 용량을 기준으로 이 기간을 결정합니다.
보존 기간을 예를 들어 24시간으로 설정하려면 다음 테이블의 프로시저를 따릅니다.
데이터베이스 버전 |
절차 |
|---|---|
AWS RDS(표준) |
다음을 실행합니다.
자세한 내용은 `보관된 다시 실행 로그 보존하기 <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.RetainRedoLogs.html>`_를 참조하세요. |
AWS RDS 사용자 지정 |
자세한 내용은 `Oracle 인스턴스용 RDS 사용자 지정 복원하기 <https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-backup.pitr.html>`_를 참조하세요. |
XStream 및 보충 로깅 활성화¶
참고
XStream은 Oracle 데이터베이스에 포함되어 있으며 추가 소프트웨어가 필요하지 않습니다.
변경 데이터를 캡처하고 스트리밍하기 위해 XStream 복제를 활성화하고 구성하려면 다음 명령을 실행합니다.
XStream 복제를 활성화합니다.
ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
참고
Snowflake는 스트림 풀 크기를 2.5GB로 설정할 것을 권장합니다. 이 할당에는 다음이 포함됩니다.
캡처의 경우 1GB
적용의 경우 1GB
추가 25% 버퍼
다시 실행 로그가 논리적 복제에 필요한 정보를 캡처하도록 보충 로깅을 활성화하려면 다음 명령을 실행합니다.
다음 예제에서와 같이 데이터베이스가 ARCHIVELOG 모드에 있는지 확인합니다.
SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
Snowflake는 데이터베이스 또는 테이블스페이스 수준에서 강제로 로깅할 것을 권장합니다.
컨테이너를 루트 컨테이너로 설정하고 데이터베이스에 보충 로깅을 추가합니다.
ALTER SESSION SET CONTAINER = CDB$ROOT; ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
또는 다음 예제에서와 같이 특정 테이블에서만 로깅을 활성화할 수 있습니다.
ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
XStream 관리자 사용자 생성¶
아웃바운드 서버의 생성 및 변경을 포함한 XStream 구성 요소를 관리하려면 XStream 관리자 사용자가 필요합니다. 이러한 용도로 전용 사용자를 생성하거나 필요한 XStream 관리 권한이 부여된 기존 사용자를 사용할 수 있습니다(다음 섹션 참조).
다음 예제에서는 CDB의 루트 컨테이너에 있는 전용 XStream 관리자 사용자의 설정에 대해 자세히 설명합니다.
참고
다음 예제에서는 데이터베이스에 복제할 테이블을 포함된 PDB도 있다고 가정합니다.
SYSDBA 또는 적절한 권한이 있는 사용자로 연결하고 다음 명령을 실행합니다.
-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create a tablespace for the XStream administrator user.
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/cdb/xstream_adm_tbs.dbf'
SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
-- Switch to the Pluggable Database (PDB) and create a tablespace there.
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/pdb/xstream_adm_tbs.dbf'
SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
-- Switch back to the root container to create the common user.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create the XStream administrator user.
-- Note 'c##' prefix indicates a common user in a CDB environment, and CONTAINER=ALL grants privileges across all containers.
-- Replace "YOUR_XSTREAM_ADMIN_PASSWORD" with a strong, secure password.
CREATE USER c##xstreamadmin IDENTIFIED BY "YOUR_XSTREAM_ADMIN_PASSWORD"
DEFAULT TABLESPACE xstream_adm_tbs
QUOTA UNLIMITED ON xstream_adm_tbs
CONTAINER=ALL;
XStream 관리자 권한 부여¶
Oracle 데이터베이스 버전을 기반으로 XStream 관리자 사용자에게 필요한 권한을 부여합니다.
Oracle 데이터베이스 19c 및 21c의 경우
SYSDBA 또는 적절한 권한이 있는 사용자로 연결합니다.
다음 명령을 실행하여 XStream 관리자에게 필요한 시스템 권한을 부여합니다.
GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING TO c##xstreamadmin CONTAINER=ALL; -- Grant XStream administration privileges using DBMS_XSTREAM_AUTH. -- This procedure grants the necessary permissions to manage XStream capture processes across all containers. BEGIN DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE( grantee => 'c##xstreamadmin', privilege_type => 'CAPTURE', grant_select_privileges => TRUE, container => 'ALL'); END; /
Oracle 데이터베이스 23c의 경우
SYSDBA 또는 적절한 권한이 있는 사용자로 연결합니다.
다음 명령을 실행하여 Oracle 데이터베이스 23c에 필요한 시스템 권한 및 XStream 역할을 부여합니다.
GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING, XSTREAM_CAPTURE TO c##xstreamadmin CONTAINER=ALL;
XStream 서버 연결 사용자 구성¶
Snowflake Openflow Connector는 전용 연결 사용자를 활용하여 XStream 아웃바운드 서버에 대한 연결을 설정하고 변경 데이터를 수신합니다. 이 사용자는 복제를 용이하게 하기 위해 특정 권한이 필요합니다.
XStream 아웃바운드 서버에서 읽기: 사용자는 구성된 XStream 아웃바운드 서버에서 변경 데이터 스트림에 액세스할 수 있어야 합니다.
데이터 사전 뷰에서 선택: 연결 사용자는 다양한 데이터 사전 뷰에 대한 SELECT 액세스 권한이 필요합니다. 이는 SELECT_CATALOG_ROLE 또는 SELECT ANY DICTIONARY 권한을 부여하여 달성할 수 있습니다. 회사 정책으로 인해 SELECT ANY DICTIONARY 권한을 부여하는 것이 바람직하지 않은 경우, 사용자는 특히 다음 뷰에 대한 SELECT 액세스 권한이 필요합니다.
ALL_USERS
ALL_TABLES
ALL_TAB_COLS
ALL_CONS_COLUMNS
ALL_CONSTRAINTS
V$DATABASE
소스 테이블에서 선택: 사용자에게는 복제를 위한 모든 테이블에 대한 SELECT 권한이 있어야 합니다.
다음은 CDB의 루트 컨테이너에서 이러한 사용자를 설정하는 방법의 예제입니다. 이 예제에서는 데이터베이스에 복제할 테이블을 포함된 PDB도 있다고 가정합니다.
-- Connect as SYSDBA or a user with appropriate privileges
-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- Create the connect user.
-- Replace "YOUR_CAPTURE_USER_PASSWORD" with a strong, secure password.
CREATE USER c##connectuser IDENTIFIED BY "YOUR_CAPTURE_USER_PASSWORD"
CONTAINER=ALL;
-- Grant necessary privileges to the connect user.
-- You can choose to grant access to specific tables
-- instead of SELECT ANY TABLE for more granular control,
-- for example, GRANT SELECT ON schema.table TO c##connectuser;
GRANT CREATE SESSION, SELECT_CATALOG_ROLE TO c##connectuser CONTAINER=ALL;
GRANT SELECT ANY TABLE TO c##connectuser CONTAINER=ALL;
GRANT LOCK ANY TABLE TO c##connectuser CONTAINER=ALL;
XStream 아웃바운드 서버 생성¶
XStream 아웃바운드 서버는 Openflow Connector에서 사용할 수 있도록 다시 실행 로그에서 변경 사항을 캡처합니다. 복제할 스키마 또는 테이블을 정의합니다. 자세한 내용은 `DBMS_XSTREAM_ADM.CREATE_OUTBOUND 설명서 <https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_XSTREAM_ADM.html#GUID-A602ED86-0F5A-4A27-92A0-55D5ADC0AF0D>`_를 참조하세요.
복제 범위에 대한 중요 고려 사항:
테이블이 XStream 아웃바운드 필터링 규칙 명령에 포함된 경우 복제되지 않습니다.
여기에 포함된 테이블 또는 스키마를 복제하려면 커넥터 매개 변수에도 정의해야 합니다. 서버 필터링 규칙에 전체 스키마를 포함할 수 있으며, 나중에 커넥터 매개 변수에서 복제를 위해 해당 스키마 내의 특정 테이블만 지정할 수 있습니다.
참고
XStream 아웃바운드 서버는 루트 컨테이너에서만 생성할 수 있습니다. 그러나 Oracle 데이터베이스 버전 23ai부터는 PDB 수준에서도 생성할 수 있습니다.
다음은 다양한 복제 요구 사항을 기반으로 XStream 아웃바운드 서버를 설정하는 방법에 대한 3가지 예제입니다. 실제로 프로덕션 환경에 XStream 아웃바운드 서버를 설정할 때는 어떤 변경 사항을 캡처할지 선택해야 합니다. 모든 변경 사항을 캡처하면 데이터베이스의 성능과 리소스 사용에 심각한 결과를 초래할 수 있습니다. CPU 및 네트워크에 심각한 영향을 주지 않고 큐가 관련 없는 데이터로 채워지지 않도록 방지하려면 세분화된 접근 방식을 사용하는 것이 필수적입니다. 이 작업을 수행하는 가장 좋은 방법은 DBMS_XSTREAM_ADM.ADD_TABLE_RULES 프로시저를 통해 필요한 테이블만 구체적으로 선택하는 것입니다.
XStream 아웃바운드 서버 구성 방법에 대한 자세한 내용은 Oracle 설명서에서 확인할 수 있습니다. XStream 출력 구성하기.
예제 1: 루트 컨테이너의 모든 스키마 및 모든 PDBs에서 모든 테이블 캡처
-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;
DECLARE
tables DBMS_UTILITY.UNCL_ARRAY;
schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
-- To replicate all tables in all schemas across all containers, set both to NULL.
tables(1) := NULL;
schemas(1) := NULL;
DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
server_name => 'XOUT1',
table_names => tables,
schema_names => schemas,
include_ddl => TRUE
);
DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
RAISE;
END;
/
예제 2: 플러그형 데이터베이스(PDB)의 단일 스키마에서 모든 테이블 캡처
-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;
DECLARE
tables DBMS_UTILITY.UNCL_ARRAY;
schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
-- To replicate all tables in a schemas in the single PDB, set source_container_name.
tables(1) := NULL;
schemas(1) := 'schema_name';
DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
server_name => 'XOUT1',
table_names => tables,
schema_names => schemas,
include_ddl => TRUE,
source_container_name => 'YOUR_PDB_NAME'
);
DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
RAISE;
END;
/
XStream 아웃바운드 서버 연결 사용자 설정¶
XStream 아웃바운드 서버에서 연결 사용자를 설정합니다. 이를 통해 이전에 생성된 연결 사용자가 XStream 아웃바운드 서버(XOUT1)에 연결되어 변경 데이터를 수신할 수 있습니다.
참고
다음 예제에서는 연결 사용자가 C##connectuser라고 가정합니다.
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
connect_user => 'c##connectuser');
END;
/
XStream 아웃바운드 서버 캡처 사용자 설정¶
별도의 캡처 사용자를 구성한 경우 이를 사용할 XStream 아웃바운드 서버를 구성합니다. 이를 통해 전용 캡처 사용자가 XStream 아웃바운드 서버(XOUT1)와 연결되어 변경 데이터를 캡처할 수 있습니다.
서버를 생성한 사용자와 동일한 사용자(관리자)가 데이터를 캡처하도록 하려면 이 단계를 건너뜁니다.
BEGIN
DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
server_name => 'XOUT1',
capture_user => 'yourcaptureuser');
END;
/
단일 테넌트 데이터베이스용 XStream 설정¶
Oracle 12c 이상의 기본 아키텍처는 컨테이너 데이터베이스(CDB) 및 하나 이상의 플러그형 데이터베이스(PDB)를 사용하는 멀티 테넌트 아키텍처입니다.
Oracle 데이터베이스가 단일 테넌트 아키텍처를 사용하는 경우 XStream 설정 시 다음과 같은 차이점에 유의합니다.
ALTER SESSION SET CONTAINER명령을 사용하지 마세요. 단일 테넌트 데이터베이스에는 인스턴스가 하나만 있으므로 컨테이너 전환이 적용되지 않습니다.하나의
xstream_adm_tbs테이블스페이스만 생성합니다. PDB에 두 번째 테이블스페이스를 생성하지 마세요.사용자 이름에
C##접두사를 사용하지 마세요. 예를 들어,c##xstreamadmin대신xstreamadmin``을 생성하고 ``c##connectuser대신connectuser``를 생성합니다. ``C##접두사는 다중 테넌트 환경에서만 필요합니다.모든 명령에
CONTAINER=ALL또는 ``container => ‘ALL’``을 포함하지 마세요. 이러한 절은 여러 컨테이너에 권한을 부여하며 단일 테넌트 데이터베이스에는 적용되지 않습니다.
다음 단계¶
커넥터를 구성 합니다.