Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Relational Migrator
/ /

Oracle에 대한 마이그레이션 사전 요구 사항 구성

Oracle 소스 데이터베이스 에서 데이터를 마이그레이션 때 Relational Migrator 데이터베이스 필요한 구성 변경 사항을 자동으로 확인하고 이를 구현 위한 SQL 스크립트 생성합니다. 데이터베이스 관리자(DBA )에게 스크립트 검토 하고 데이터베이스 서버 에서 명령을 실행 합니다.

Oracle 구성은 마이그레이션 작업 유형에 따라 다릅니다.

  • 스냅샷 마이그레이션 작업은 모든 데이터를 한 번 마이그레이션 후 중지합니다.

  • 연속 마이그레이션 작업은 스냅샷 마이그레이션 실행 다음 데이터 변경 사항을 지속적으로 복제하는 CDC 단계로 들어갑니다.

지원되는 Oracle 버전에 대한 자세한 내용은 지원되는 데이터베이스 및 버전을 참조하세요.

  • Oracle 12c 인스턴스에서 마이그레이션하는 경우 SYSDBA 역할로 명령을 실행해야 합니다.

  • Oracle 12c는 플러그형 데이터베이스 (PDB)의 개념을 도입했습니다. 일부 명령은 PDB에서 실행 수 있지만 ARCHIVELOG 활성화와 같은 명령은 컨테이너/master 데이터베이스 (CDB)에서 실행 해야 합니다. 각 아키텍처에 대한 자세한 내용은 컨테이너 데이터베이스 및 플러그형 데이터베이스 개요를 참조하세요.

  • 일부 명령은 데이터베이스 가 단일 테넌트인지 다중 테넌트인지에 따라 다릅니다. 멀티 테넌트 데이터베이스 에서는 권한에 접미사 CONTAINER=ALL가 포함되어야 합니다. 데이터베이스 가 멀티 테넌트인지 확인하려면 다음 SQL 쿼리 실행 .

    SELECT cdb AS is_multitenant FROM v$database;
  • XE는 필요한 로그를 지원 하지 않으므로 Oracle Database Express Edition(XE)에 대해서는 지속적인 마이그레이션 작업 실행 수 없습니다.

1

다음 코드는 Relational Migrator가 Oracle 인스턴스에 연결할 수 있도록 새 Oracle 서비스 계정을 생성합니다. 또는 기존 Oracle 서비스 계정을 사용하여 적절한 권한으로 Relational Migrator에 연결할 수 있습니다.

멀티 테넌트 컨테이너 데이터베이스 에서 데이터를 마이그레이션하려면 테이블스페이스와 일반 사용자를 생성합니다.

  1. 서비스 계정을 만듭니다:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 서비스 계정이 마이그레이션 작업 의 테이블을 소유하고 있는지 확인합니다.

    필요한 권한은 서비스 계정이 마이그레이션 작업 에 사용된 테이블을 소유하고 있는지 여부에 따라 달라집니다. 테이블 소유권을 확인하려면 다음 쿼리 실행 .

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. 서비스 계정에 권한을 부여합니다.

    중요

    멀티 테넌트 컨테이너 데이터베이스 일반 사용자로 마이그레이션하는 경우 권한을 부여할 때 CONTAINER=ALL 를 추가합니다. 예시 들면 다음과 같습니다.

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    서비스 계정 테이블 소유자인 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    서비스 계정이 테이블 소유자 가 아닌 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT_CATALOG_ROLE TO <user>;
    GRANT SELECT ANY TABLE TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;
    GRANT FLASHBACK ANY TABLE TO <user>;
1

다음 코드는 Relational Migrator가 Oracle 인스턴스에 연결할 수 있도록 새 Oracle 서비스 계정을 생성합니다. 또는 기존 Oracle 서비스 계정을 사용하여 적절한 권한으로 Relational Migrator에 연결할 수 있습니다.

멀티 테넌트 컨테이너 데이터베이스 에서 데이터를 마이그레이션하려면 테이블스페이스와 일반 사용자를 생성합니다.

  1. 서비스 계정을 만듭니다:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 서비스 계정이 마이그레이션 작업 의 테이블을 소유하고 있는지 확인합니다.

    필요한 권한은 서비스 계정이 마이그레이션 작업 에 사용된 테이블을 소유하고 있는지 여부에 따라 달라집니다. 테이블 소유권을 확인하려면 다음 쿼리 실행 .

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. 서비스 계정에 권한을 부여합니다.

    중요

    멀티 테넌트 컨테이너 데이터베이스 일반 사용자로 마이그레이션하는 경우 권한을 부여할 때 CONTAINER=ALL 를 추가합니다. 예시 들면 다음과 같습니다.

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    서비스 계정 테이블 소유자인 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    서비스 계정이 테이블 소유자 가 아닌 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT_CATALOG_ROLE TO <user>;
    GRANT SELECT ANY TABLE TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;
    GRANT FLASHBACK ANY TABLE TO <user>;
  1. 지속적인 마이그레이션 작업을 실행 있도록 서비스 계정에 추가 권한을 부여합니다.

    멀티 테넌트 컨테이너 데이터베이스 마이그레이션하는 경우 CONTAINER=ALL 을(를) 추가합니다.

    GRANT SET CONTAINER TO <user>;
    GRANT EXECUTE_CATALOG_ROLE TO <user>;
    GRANT SELECT ANY TRANSACTION TO <user>;
    GRANT LOGMINING TO <user>;
    GRANT CREATE TABLE TO <user>;
    GRANT LOCK ANY TABLE TO <user>;
    GRANT CREATE SEQUENCE TO <user>;
    GRANT SELECT ON DBA_TABLESPACES TO <user>;
    GRANT EXECUTE ON DBMS_LOGMNR TO <user>;
    GRANT EXECUTE ON DBMS_LOGMNR_D TO <user>;
    GRANT SELECT ON V_$LOG TO <user>;
    GRANT SELECT ON V_$LOG_HISTORY TO <user>;
    GRANT SELECT ON V_$LOGMNR_LOGS TO <user>;
    GRANT SELECT ON V_$LOGMNR_CONTENTS TO <user>;
    GRANT SELECT ON V_$LOGMNR_PARAMETERS TO <user>;
    GRANT SELECT ON V_$LOGFILE TO <user>;
    GRANT SELECT ON V_$ARCHIVED_LOG TO <user>;
    GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO <user>;
    GRANT SELECT ON V_$TRANSACTION TO <user>;
    GRANT SELECT ON V_$MYSTAT TO <user>;
    GRANT SELECT ON V_$STATNAME TO <user>;
2
  1. 아카이브 로깅이 이미 활성화되어 있는지 확인하려면 다음 쿼리 실행 .

    SELECT LOG_MODE FROM V$DATABASE;

    로깅이 활성화된 경우 ARCHIVELOG 가 출력되고, 그렇지 않은 경우 NOARCHIVELOG 가 출력됩니다.

  2. 아카이브 로깅이 아직 활성화되지 않은 경우 활성화 .

    Relational Migrator 로깅을 활성화 코드를 자동으로 생성할 수 있습니다. 다음 코드는 예시 입니다. 멀티 테넌트 데이터베이스 마이그레이션하는 경우 컨테이너/master 데이터베이스 에서 다음 명령을 실행 .

    ALTER SYSTEM SET db_recovery_file_dest_size = 10G;
    ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile;
    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
3
  1. 데이터베이스 에서 보완 로깅을 활성화합니다.

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. 마이그레이션 의 모든 테이블에 대해 보완 로깅을 활성화합니다.

    ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    /* Additional ALTER TABLE STATEMENTS... */
4
  1. 필요한 테이블스페이스를 생성합니다.

    CONNECT sys/oraclepw@PDB_NAME as sysdba;
    CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/CDB_NAME/PDB_NAME/logminer_tbs.dbf'
    SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
    CONNECT sys/password@CDB_NAME as sysdba;
    CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/CDB_NAME/logminer_tbs.dbf'
    SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

    멀티 테넌트 아키텍처에서 지속적으로 마이그레이션 각 플러그형 데이터베이스 와 컨테이너 데이터베이스 에 테이블스페이스가 필요합니다.

  2. 서비스 사용자에게 테이블스페이스 할당량을 할당합니다.

    ALTER USER <user> DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS CONTAINER=ALL;

중요

이 절차는 Amazon RDS에서 호스팅되는 Oracle 인스턴스에 적용됩니다.

1

다음 코드는 Relational Migrator가 Oracle 인스턴스에 연결할 수 있도록 새 Oracle 서비스 계정을 생성합니다. 또는 기존 Oracle 서비스 계정을 사용하여 적절한 권한으로 Relational Migrator에 연결할 수 있습니다.

멀티 테넌트 컨테이너 데이터베이스 에서 데이터를 마이그레이션하려면 테이블스페이스와 일반 사용자를 생성합니다.

  1. 서비스 계정을 만듭니다:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 서비스 계정이 마이그레이션 작업 의 테이블을 소유하고 있는지 확인합니다.

    필요한 권한은 서비스 계정이 마이그레이션 작업 에 사용된 테이블을 소유하고 있는지 여부에 따라 달라집니다. 테이블 소유권을 확인하려면 다음 쿼리 실행 .

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. 서비스 계정에 권한을 부여합니다.

    중요

    멀티 테넌트 컨테이너 데이터베이스 일반 사용자로 마이그레이션하는 경우 권한을 부여할 때 CONTAINER=ALL 를 추가합니다. 예시 들면 다음과 같습니다.

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    서비스 계정 테이블 소유자인 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    서비스 계정이 테이블 소유자 가 아닌 경우:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT_CATALOG_ROLE TO <user>;
    GRANT SELECT ANY TABLE TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;
    GRANT FLASHBACK ANY TABLE TO <user>;
  1. 지속적인 마이그레이션 작업을 실행 있도록 서비스 계정에 추가 권한을 부여합니다.

    멀티 테넌트 컨테이너 데이터베이스 마이그레이션하는 경우 CONTAINER=ALL 을(를) 추가합니다.

    GRANT FLASHBACK ANY TABLE TO <user>;
    GRANT EXECUTE_CATALOG_ROLE TO <user>;
    GRANT SELECT ANY TRANSACTION TO <user>;
    GRANT LOGMINING TO <user>;
    GRANT CREATE TABLE TO <user>;
    GRANT LOCK ANY TABLE TO <user>;
    GRANT CREATE SEQUENCE TO <user>;
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('DBA_LOG_GROUPS', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', '<user>', 'EXECUTE');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D', '<user>', 'EXECUTE');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG_HISTORY', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_PARAMETERS', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVE_DEST_STATUS', '<user>', 'SELECT');
    CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', '<user>', 'SELECT');

    RDS 인스턴스 가 멀티 테넌트인 경우 테이블스페이스에 대한 추가 권한이 필요합니다.

    CALL rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES', '<user>', 'SELECT');
2
  1. 아카이브 로깅이 이미 활성화되어 있는지 확인하려면 다음 쿼리 실행 .

    SELECT LOG_MODE FROM V$DATABASE;

    로깅이 활성화된 경우 ARCHIVELOG 가 출력되고, 그렇지 않은 경우 NOARCHIVELOG 가 출력됩니다.

  2. 아카이브 로깅이 아직 활성화되지 않은 경우 활성화 .

    Relational Migrator 로깅을 활성화 코드를 자동으로 생성할 수 있습니다. 다음 코드는 예시 입니다. 멀티 테넌트 데이터베이스 마이그레이션하는 경우 컨테이너/master 데이터베이스 에서 다음 명령을 실행 .

    CALL rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 24);
3
  1. 데이터베이스 에서 보완 로깅을 활성화합니다.

    CALL rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. 마이그레이션 의 모든 테이블에 대해 보완 로깅을 활성화합니다.

    ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    /* Additional ALTER TABLE STATEMENTS... */
4

필요한 테이블스페이스를 생성합니다.

CREATE TABLESPACE logminer_tbs;
CALL rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => 'logminer_tbs');

멀티 테넌트 아키텍처에서 지속적으로 마이그레이션 각 플러그형 데이터베이스 와 컨테이너 데이터베이스 에 테이블스페이스가 필요합니다. 서비스 사용자에게 해당 테이블스페이스에 할당량을 할당합니다.

돌아가기

Oracle

이 페이지의 내용