AWS DMS 매핑 규칙을 사용하여 Oracle 스키마를 소문자 PostgreSQL로 마이그레이션하려면 어떻게 해야 하나요?

3분 분량
0

Oracle 데이터베이스 스키마를 PostgreSQL로 이동하려고 하는데 대소문자가 호환되지 않습니다.

간략한 설명

Oracle은 데이터 사전에 메타데이터를 대문자로 저장하고 PostgreSQL은 메타데이터를 소문자로 저장합니다. 두 데이터베이스 중 하나에서 객체를 생성할 때, 객체 이름을 따옴표로 묶으면 이러한 기본 형식을 재정의할 수 있습니다. 하지만 이는 모범 사례가 아니며 예상치 못한 동작이 발생할 수 있습니다. AWS Database Migration Service(AWS DMS)는 메타데이터 스토리지 형식을 자동 수정할 수 없으므로 AWS DMS는 따옴표로 묶인 객체를 생성합니다. 해결 방법으로, 매핑 규칙을 사용하여 AWS DMS 따옴표를 재정의할 수 있습니다. 자세한 내용은 AWS SCT를 사용하여 Oracle 스키마를 PostgreSQL로 변환을 참조합니다.

해결 방법

이 해결 방법의 예에서는 Oracle SCOTT 스키마를 PostgreSQL로 마이그레이션합니다. 온프레미스 Oracle 데이터베이스가 있는 경우, 다음 명령을 실행하여 다음 스키마를 생성합니다.

$ORACLE_HOME/rdbms/admin/utlsampl.sql

Oracle을 실행하는 Amazon Relational Database Service(Amazon RDS) DB 인스턴스가 있는 경우, 온라인에서 유사한 스크립트를 검색합니다.

이 스크립트는 SCOTT 스키마 아래에 EMP, DEPT, BONUS 및 SALGRADE라는 4개의 테이블을 생성합니다. 전체적으로 보면 행 수가 적습니다.

Oracle 데이터베이스에서 테이블 또는 열 이름에 소문자가 있는 테이블이 없는지 확인합니다. 일부 애플리케이션은 테이블 이름과 열 이름을 대소문자로 바꾸는 데 익숙합니다. AWS DMS가 테이블을 발견된 그대로 복제하도록 허용하고 이러한 매핑 규칙을 사용하지 않는 것이 가장 좋습니다.

oracle> SELECT table_name from dba_tables where owner='SCOTT' and table_name <> upper(table_name);
oracle> SELECT table_name, column_name from dba_tab_columns where owner='SCOTT' and column_name <> upper(column_name);

엔드포인트 및 복제 인스턴스 생성:

1.    복제 인스턴스를 생성하려면 AWS DMS 콘솔 또는 AWS Command Line Interface(AWS CLI)를 사용합니다. 그런 다음, 소스 및 대상 엔드포인트를 생성합니다.

2.    태스크를 생성합니다. 로깅 활성화를 선택해야 합니다.

3.    테이블 매핑 보기에서 JSON 탭을 선택한 다음, JSON 편집 활성화를 선택합니다. 그런 다음, 이 예와 비슷한 코드를 사용하여 스키마, 테이블 및 열 대소문자 처리에 대한 변환 규칙을 작성합니다. 자세한 내용은 테이블 매핑을 사용하여 작업 설정 지정을 참조합니다.

{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "select-scott",
      "object-locator": {
        "schema-name": "SCOTT",
        "table-name": "%"
      },
      "rule-action": "include"
    },
    {
      "rule-type": "transformation",
      "rule-id": "2",
      "rule-name": "convert-schemas-to-lower",
      "rule-action": "convert-lowercase",
      "rule-target": "schema",
      "object-locator": {
        "schema-name": "%"
      }
    },
    {
      "rule-type": "transformation",
      "rule-id": "3",
      "rule-name": "convert-tables-to-lower",
      "rule-action": "convert-lowercase",
      "rule-target": "table",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%"
      }
    },
    {
      "rule-type": "transformation",
      "rule-id": "4",
      "rule-name": "convert-columns-to-lowercase",
      "rule-action": "convert-lowercase",
      "rule-target": "column",
      "object-locator": {
        "schema-name": "%",
        "table-name": "%",
        "column-name": "%"
      }
    }
  ]
}

4.    작업 생성을 선택합니다.

참고: 스키마를 소문자로 변환하는 대신 스키마 이름 변경 규칙을 사용할 수도 있습니다.

이 작업을 생성한 후 PostgreSQL에서 모든 객체가 소문자로 생성되었는지 확인합니다.

postgres> select table_name from information_schema.tables where table_schema='scott';
 table_name
------------
 bonus
 dept
 salgrade
 emp
(4 rows)


postgres> select table_name from information_schema.tables where table_schema='scott'; table_name------------ bonus dept salgrade emp(4 rows)postgres> select table_name, column_name from information_schema.columns  where table_schema='scott' order by table_name;
 table_name | column_name
------------+-------------
 bonus      | ename
 bonus      | job
 bonus      | sal
 bonus      | comm
 dept       | deptno
 dept       | dname
 dept       | loc
 emp        | deptno
 emp        | hiredate
 emp        | sal
 emp        | comm
 emp        | empno
 emp        | ename
 emp        | job
 emp        | mgr
 salgrade   | losal
 salgrade   | hisal
 salgrade   | grade
(18 rows)

관련 정보

데이터베이스 마이그레이션 단계별 연습

Oracle Bystander 및 AWS DMS를 사용하여 온프레미스 Oracle 데이터베이스를 Amazon RDS for PostgreSQL로 마이그레이션

AWS 공식
AWS 공식업데이트됨 7달 전
댓글 없음

관련 콘텐츠