Oracle から PostgreSQL への変換設定を理解する - AWS Database Migration Service

Oracle から PostgreSQL への変換設定を理解する

DMS Schema Conversion の Oracle から PostgreSQL へのコンバージョン設定は、次のとおりです。

  • AWS DMS は、Oracle のマテリアライズドビューを PostgreSQL 上のテーブルまたはマテリアライズド ビューに変換できる。[マテリアライズドビュー] で、ソースのマテリアライズドビューの変換方法を選択する。

  • ソースの Oracle データベースでは、ROWID 疑似列を使用できるが、PostgreSQL は同様の機能をサポートしていない。DMS Schema Conversion は、bigint または character varying データ型を使用して、変換したコードで ROWID 疑似列をエミュレートできる。このためには、[行 ID][Use the bigint data type to emulate the ROWID pseudocolumn] または [Use the character varying data type to emulate the ROWID pseudocolumn] を選択する。

    ソースの Oracle コードが ROWID 疑似列を使用していない場合は、[Don't generate] を選択する。この場合、変換したコードの処理が迅速化する。

  • ソースの Oracle のコードには、PostgreSQL ではサポートされないパラメータを使用する TO_CHAR 関数、TO_DATE 関数、TO_NUMBER 関数が使用されている場合がある。デフォルトでは、DMS Schema Conversion は変換したコード内のこのようなパラメータの使用をエミュレートする。

    ソースの Oracle コードに PostgreSQL でサポートされないパラメータがない場合は、PostgreSQL のネイティブの TO_CHAR 関数、TO_DATE 関数、TO_NUMBER 関数を使用できる。この場合、変換したコードの処理が迅速化する。これには、次の値を選択する。

    • Use a native PostgreSQL TO_CHAR function

    • Use a native PostgreSQL TO_DATE function

    • Use a native PostgreSQL TO_NUMBER function

  • データベースとアプリケーションは別々のタイムゾーンで実行できる。デフォルトでは、DMS Schema Conversion は変換したコードのタイムゾーンをエミュレートする。ただし、データベースとアプリケーションが同じタイムゾーンを使用している場合は、このエミュレーションは必要ない。この場合、[Improve the performance of the converted code where the database and applications use the same time zone] を選択する。

  • 変換したコードで引き続きシーケンスを使用するには、[Populate converted sequences with the last value generated on the source side] を選択する。

  • 場合によっては、ソース Oracle で、NUMBER データ型のプライマリキー列または外部キー列に整数値のみを格納していることがある。このような場合、AWS DMS はこれらの列を BIGINT データ型に変換できる。このアプローチを採用すると、変換したコードのパフォーマンスが向上する。これを行うには、[Convert primary and foreign key columns of the NUMBER data type to the BIGINT data type] を選択する。データの損失を避けるため、ソースのこれらの列に浮動小数点値が含まれていないことを確認する。

  • ソースコード内の非アクティブ化されたトリガーと制約をスキップするには、[アクティブなトリガーと制約のみを変換] を選択する。

  • DMS Schema Conversion を使用すると、動的 SQL として呼び出される文字列変数を変換できる。このような文字列変数の値は、データベースコードで変更できる。AWS DMS が常にこのような文字列変数の最新の値を変換するように設定するには、[Convert the dynamic SQL code that is created in called routines] を選択する。

  • PostgreSQL バージョン 10 以前のバージョンでは、プロシージャをサポートしていない。PostgreSQL でのプロシージャの使用に慣れていない場合は、AWS DMS が Oracle プロシージャを PostgreSQL 関数に変換できる。このためには、[プロシージャを関数に変換] を選択する。

  • 発生したアクション項目に関する追加情報を確認するには、拡張パックに特定の関数を追加する。このためには、[Add extension pack functions that raise user-defined exceptions] を選択する。次に、ユーザー定義の例外を発生させる重大度レベルを選択する。ソースデータベースオブジェクトを変換した後は、必ず拡張パックスキーマを適用する。拡張パックの詳細については、「拡張パックの使用」を参照する。

  • ソースの Oracle データベースでは、自動的に生成された名前を使用した制約が使用されている場合がある。ソースコードでこのような名前を使用している場合は、必ず [Keep the names of system generated constraints] を選択する。ソースコードでこのような制約が使用されていても、名前は使用されていない場合は、このオプションをオフにすると変換速度が向上する。

  • ソースデータベースとターゲットデータベースが別々のタイムゾーンで実行されている場合、Oracle の SYSDATE 組み込み関数をエミュレートする関数がソース関数とは異なる値を返す。ソース関数とターゲット関数が同じ値を返すようにするには、[ソースデータベースのタイムゾーンを設定] を選択する。

  • 変換したコードでは、orafce 拡張機能の関数を使用できる。このためには、[Oracle 組み込みルーチン] で使用する関数を選択する。orafce についての詳細は、GitHub で「orafce」を参照してください。