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

관련 콘텐츠
- 질문됨 4달 전lg...
- 질문됨 4달 전lg...
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 2년 전