如何使用 AWS DMS 映射规则将 Oracle 架构迁移到小写的 PostgreSQL?

2 分钟阅读
0

我想将我的 Oracle 数据库架构迁移到 PostgreSQL,但大小写不兼容。

简短描述

Oracle 将元数据以大写形式存储在其数据字典中,而 PostgreSQL 则以小写形式存储元数据。无论使用哪个数据库,都可以在创建对象名称时将其括在引号中以覆盖这些默认格式。但是,这并非最佳做法,可能会导致意外行为。由于 AWS Database Migration Service (AWS DMS) 无法自动更正元数据存储格式,因此 AWS DMS 用引号创建对象。解决方法是,您可以使用映射规则覆盖 AWS DMS 引号。有关更多信息,请参阅Use AWS SCT to convert the Oracle schema to PostgreSQL

解决方法

本解决方法中的示例将 Oracle SCOTT 架构迁移到 PostgreSQL。如果您有本地 Oracle 数据库,请运行以下命令来创建此架构:

$ORACLE_HOME/rdbms/admin/utlsampl.sql

如果您有运行 Oracle 的 Amazon Relational Database Service (Amazon RDS) 的数据库实例,请在线搜索类似的脚本。

此脚本在 SCOTT 架构下创建四个表: EMP、DEPT、BONUS 和 SALGRADE。它们总共只包含几行内容。

确认 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 命令行界面 (AWS CLI)。然后,创建源端点和目标端点

  2. 创建任务。请务必选择启用日志记录

  3. 表映射视图中,选择 JSON 选项卡,然后选择启用 JSON 编辑。之后,使用类似于此示例的代码来构建架构、表和列大小写处理的转换规则。有关更多信息,请参阅Using table mapping to specify task settings

{
  "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": "%"
      }
    }
  ]
}
  1. 选择创建任务

**注意:**您还可以使用重命名架构规则,而不是将架构转换为小写。

创建任务后,请确认所有对象都是以小写形式在 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)

相关信息

Database Migration step-by-step walkthroughs

Migrate an on-premises Oracle database to Amazon RDS for PostgreSQL by using an Oracle bystander and AWS DMS

AWS 官方
AWS 官方已更新 7 个月前