AWS DMS のマッピングルールを使用して、Oracle スキーマを小文字で PostgreSQL に移行する方法を教えてください。

所要時間2分
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) インスタンスがある場合は、オンラインで同様のスクリプトを検索してください。

このスクリプトは、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 コマンドラインインターフェイス (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)

関連情報

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公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ