Oracle から Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL への変換 - AWS Schema Conversion Tool

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Oracle から Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL への変換

Oracle データベースを RDS for PostgreSQL または Amazon Aurora PostgreSQL に変換するときは、次の点に注意してください。

Oracle システムオブジェクトを PostgreSQL に変換すると、AWS SCT で、次の表に示すように変換が実行されます。

Oracle システムオブジェクト 説明 変換された PostgreSQL オブジェクト
V$VERSION Oracle Database のコアライブラリのコンポーネントのバージョン番号を表示します aws_oracle_ext.v$version
V$INSTANCE 現在のインスタンスの状態を示すビュー。 aws_oracle_ext.v$instance

AWS SCT を使用して Oracle SQL*Plus ファイルを psql に変換できます。psql は PostgreSQL のターミナルベースのフロントエンドです。詳細については、「AWS SCT を使用したアプリケーション SQL の変換」を参照してください。

ターゲットデータベースとしての PostgreSQL の権限

PostgreSQL をターゲットとして使用するには、AWS SCT に CREATE ON DATABASE 権限が必要です。ターゲット PostgreSQL データベースごとにこの権限を必ず付与してください。

変換されたパブリックシノニムを使用するには、データベースのデフォルト検索パスを "$user", public_synonyms, public に変更します。

次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。

CREATE ROLE user_name LOGIN PASSWORD 'your_password'; GRANT CREATE ON DATABASE db_name TO user_name; ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;

前述の例では、[user_name] をお客様の設定のユーザー名に置き換えます。[db_name] をターゲットデータベースの名前に置き換えます。最後に、[your_password] を安全なパスワードに置き換えます。

Amazon RDS for PostgreSQL AWS SCT をターゲットとして使用するには、rds_superuser 権限が必要です。

PostgreSQL では、スキーマの所有者または superuser だけがスキーマを削除できます。スキーマの所有者が一部のオブジェクトを所有していなくても、所有者はスキーマとそのスキーマに含まれるすべてのオブジェクトを削除できます。

異なるユーザーを使用して異なるスキーマを変換してターゲットデータベースに適用すると、AWS SCT がスキーマを削除できないときにエラーメッセージが表示されることがあります。このエラーメッセージを回避するには、superuser ロールを使用してください。

Oracle から PostgreSQL へのコンバージョン設定

Oracle から PostgreSQL への変換設定を編集するには、AWS SCT で [設定] を選択し、[変換設定] を選択します。上のリストから [Oracle] を選択し、次に [Oracle — PostgreSQL] を選択します。AWS SCT に、Oracle から PostgreSQL への変換に使用可能なすべての設定が表示されます。

AWS SCT の Oracle から PostgreSQL への変換設定には、以下のオプションが含まれています。

  • 変換されたコード内のアクションアイテムに関するコメントの数を制限する。

    [変換後のコードにコメントを追加] で、選択した重要度以上のアクションアイテムについて、アクションアイテムの重要度を選択します。AWS SCT は、選択した重要度以上のアクションアイテムについて、変換後のコードにコメントを追加します。

    たとえば、変換したコード内のコメントの数を最小限に抑えるには、[エラーのみ] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[すべてのメッセージ] を選択します。

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

  • PostgreSQL がサポートしていないパラメータを持つTO_CHARTO_DATETO_NUMBER 関数が含まれているソースの Oracle コードを操作する。デフォルトでは、AWS SCT は変換後のコードでこれらのパラメータの使用法をエミュレートします。

    ソース Oracle コードに PostgreSQL がサポートするパラメータのみが含まれている場合は、ネイティブの PostgreSQL TO_CHARTO_DATETO_NUMBER 関数を使用できます。この場合、変換されたコードの処理が速くなります。これらのパラメータのみを含めるには、以下の値を選択します。

    • 関数 TO_CHAR () は Oracle 固有のフォーマット文字列を使用しません。

    • 関数 TO_DATE () は Oracle 固有のフォーマット文字列を使用しません

    • 関数 TO_NUMBER () は Oracle 固有のフォーマット文字列を使用しません

  • ソース Oracle データベースが NUMBER データ型のプライマリキー列または外部キー列に整数値のみを保存している場合に対処するため、AWS SCT はこれらの列を BIGINT データ型に変換できます。この方法を実行すると、変換されたコードのパフォーマンスが向上します。この方法を採用するには、[NUMBER のプライマリキー列と外部キー列を BIGINT 列に変換] を選択します。データ損失を防ぐため、ソースのこれらの列には浮動小数点値が含まれないようにしてください。

  • ソースコード内の非アクティブ化されたトリガーと制約をスキップする。それを行うには、[無効にされたトリガーと制約を無視する] を選択します。

  • AWS SCT を使用して、動的 SQL と呼ばれる文字列変数の変換を行います。データベースコードはこれらの文字列変数の値を変更できます。AWS SCT が常にこのような文字列変数の最新の値を変換するように設定するには、[呼び出されたルーチンで作成された動的 SQL コードを変換] を選択する。

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

  • 発生したアクション項目に関する追加情報を確認するには。これを行うには、[次の重大度レベルの移行問題に対する例外発生ブロックに追加] を選択することで、拡張パックに特定の関数を追加できます。次に、ユーザー定義の例外を発生させる重要度レベルを選択します。

  • 自動的に生成された名前による制約を含む可能性があるソース Oracle データベースを操作する。ソースコードでこれらの名前を使用している場合は、必ず [システムによって生成された制約名をソースの元の名前を使用して変換] を選択してください。ソースコードでこれらの制約は使われているが名前は使われていない場合は、このオプションをオフにすると変換速度が上がります。

  • データベースとアプリケーションが異なるタイムゾーンで実行されているかどうかを調べるためです。デフォルトでは、AWS SCT は変換されたコードのタイムゾーンをエミュレートします。ただし、データベースとアプリケーションが同じタイムゾーンを使用している場合は、このエミュレーションは必要ありません。この場合、[クライアント側のタイムゾーンをサーバーのタイムゾーンと一致させる] を選択してください。

  • ソースデータベースとターゲットデータベースが異なるタイムゾーンで動作しているかどうかを確認する。その場合、SYSDATE の Oracle 組み込み関数をエミュレートする関数は、ソース関数とは異なる値を返します。ソース関数とターゲット関数が同じ値を返すようにするには、[SYSDATE エミュレーションのデフォルトタイムゾーンを設定] を選択します。

  • 変換したコードで Oracle エクステンションの関数を使用するには。そのためには、[Oracle 実装を使用する] で、使用する関数を選択します。orafce についての詳細は、GitHub で「orafce」を参照してください。

Oracle シーケンスの変換

AWS SCT はシーケンスを Oracle から PostgreSQL に変換します。シーケンスを使用して整合性制約を維持する場合は、移行したシーケンスの新しい値が既存の値と重複しないようにしてください。

変換後のシーケンスにソースデータベースの最後の値を代入するには
  1. Oracle AWS SCT をソースとしてプロジェクトを開きます。

  2. [設定] を選択し、[変換設定] を選択します。

  3. 上のリストから [Oracle] を選択し、次に [Oracle — PostgreSQL] を選択します。AWS SCT に、Oracle から PostgreSQL への変換に使用可能なすべての設定が表示されます。

  4. [変換したシーケンスにソース側で最後に生成された値を入力] を選択します。

  5. [OK] を選択して設定を保存し、[Current project settings] (現在のプロジェクト設定) ダイアログボックスを閉じます。

Oracle ROWID の変換

Oracle データベースの ROWID 疑似列にはテーブルの行のアドレスが含まれます。ROWID 疑似列は Oracle に固有であるため、AWS SCT は ROWID 疑似列を PostgreSQL 上のデータ列に変換します。この変換を使用すると、ROWID 情報を保持できます。

ROWID 疑似列を変換するとき、AWS SCT はその bigint データ型でデータ列を作成できます。プライマリキーが存在しない場合、AWS SCT は ROWID 列をプライマリキーとして設定します。プライマリキーが存在する場合、AWS SCT は、一意の制約事項として ROWID 列を設定します。

ソースデータベースのコードに、数値データ型では実行できない ROWID の操作が含まれている場合は、AWS SCT はその character varying データ型でデータ列を作成できます。

Oracle ROWID のデータ列をプロジェクト用に作成するには
  1. Oracle AWS SCT をソースとしてプロジェクトを開きます。

  2. [設定] を選択し、[変換設定] を選択します。

  3. 上のリストから [Oracle] を選択し、次に [Oracle — PostgreSQL] を選択します。AWS SCT に、Oracle から PostgreSQL への変換に使用可能なすべての設定が表示されます。

  4. [行 ID を生成] では、次のいずれかを実行します。

    • [ID として生成] を選択し、数値データ列を作成します。

    • [文字ドメインタイプとして生成] を選択し、文字データ列を作成します。

  5. [OK] を選択して設定を保存し、[Current project settings] (現在のプロジェクト設定) ダイアログボックスを閉じます。

Oracle ダイナミック SQL の変換

オラクルでは動的 SQL を実装する方法として、EXECUTE IMMEDIATE ステートメントを使用する方法と DBMS_SQL パッケージ内のプロシージャを呼び出す方法の 2 つがあります。ソース Oracle データベースに動的 SQL を含むオブジェクトが含まれている場合は、AWS SCT を使用して Oracle 動的 SQL ステートメントを PostgreSQL に変換します。

Oracle の動的 SQL を PostgreSQL に変換するには
  1. Oracle をソースとして AWS SCT プロジェクトを開きます。

  2. Oracle ソースツリービューで動的 SQL を使用するデータベースオブジェクトを選択します。

  3. オブジェクトのコンテキスト (右クリック) メニューを開き、[。スキーマの変換] を選択して、存在する場合はオブジェクトを置き換えます。次のスクリーンショットは、動的 SQL を使用した Oracle プロシージャの下に変換されたプロシージャを示しています。

    
                                動的 SQL の変換

Oracle パーティションの変換

AWS SCT では現在、以下のパーティションメソッドをサポートします。

  • [Range] (範囲)

  • リスト

  • 複数列の範囲

  • ハッシュ

  • コンポジット (リスト - リスト、レンジ - リスト、リスト - レンジ、リスト - ハッシュ、レンジ - ハッシュ、ハッシュ - ハッシュ)