

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

# を使用した Oracle から Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL への移行 AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle.ToPostgreSQL"></a>

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

**Topics**
+ [ターゲットデータベースとしての PostgreSQL の権限](#CHAP_Source.Oracle.ToPostgreSQL.ConfigureTarget)
+ [Oracle から PostgreSQL へのコンバージョン設定](#CHAP_Source.Oracle.ToPostgreSQL.ConversionSettings)
+ [Oracle シーケンスの変換](#CHAP_Source.Oracle.ToPostgreSQL.ConvertSequences)
+ [Oracle ROWID の変換](#CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID)
+ [Oracle ダイナミック SQL の変換](#CHAP_Source.Oracle.ToPostgreSQL.DynamicSQL)
+ [Oracle パーティションの変換](#CHAP_Source.Oracle.ToPostgreSQL.PG10Partitioning)

Oracle システムオブジェクトを PostgreSQL に変換する場合、 は、次の表に示すように変換 AWS SCT を実行します。


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

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

## ターゲットデータベースとしての PostgreSQL の権限
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConfigureTarget"></a>

PostgreSQL をターゲットとして使用するには、 `CREATE ON DATABASE` 権限 AWS SCT が必要です。ターゲット 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\$1name*] をお客様の設定のユーザー名に置き換えます。[*db\$1name*] をターゲットデータベースの名前に置き換えます。最後に、[*your\$1password*] を安全なパスワードに置き換えます。

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

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

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

## Oracle から PostgreSQL へのコンバージョン設定
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConversionSettings"></a>

Oracle から PostgreSQL への変換設定を編集するには、「 **の設定**」を選択し AWS SCT、**「変換設定**」を選択します。上部のリストから **Oracle** を選択し、**Oracle – PostgreSQL** を選択します。Oracle から PostgreSQL への変換に使用できるすべての設定 AWS SCT を表示します。

の Oracle から PostgreSQL への変換設定には、次のオプション AWS SCT が含まれます。
+ 変換されたコード内のアクション項目に関するコメントの数を制限する。

  選択した**重要度以上のアクション項目の変換されたコードにコメントを追加する で**、アクション項目の重要度を選択します。 は、選択した重要度以上のアクション項目の変換されたコードにコメント AWS SCT を追加します。

  たとえば、変換したコード内のコメントの数を最小限に抑えるには、[**エラーのみ**] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[**すべてのメッセージ**] を選択します。
+  AWS SCT が Oracle マテリアライズドビューを PostgreSQL のテーブルまたはマテリアライズドビューに変換できるようにするには。[**マテリアライズドビュー変換**] では、ソースマテリアライズドビューを変換する方法を選択します。
+ PostgreSQL がサポートしていないパラメータを持つ`TO_CHAR`、`TO_DATE`、`TO_NUMBER` 関数が含まれているソースの Oracle コードを操作する。デフォルトでは、 AWS SCT は変換後のコードでこれらのパラメータの使用法をエミュレートします。

  ソース Oracle コードに PostgreSQL がサポートするパラメータのみが含まれている場合は、ネイティブの PostgreSQL `TO_CHAR`、`TO_DATE`、`TO_NUMBER` 関数を使用できます。この場合、変換されたコードの処理が速くなります。これらのパラメータのみを含めるには、以下の値を選択します。
  + **関数 TO\$1CHAR () は Oracle 固有のフォーマット文字列を使用しません。**
  + **関数 TO\$1DATE () は Oracle 固有のフォーマット文字列を使用しません**
  + **関数 TO\$1NUMBER () は Oracle 固有のフォーマット文字列を使用しません**
+ ソース Oracle データベースが `NUMBER` データ型のプライマリキー列または外部キー列に整数値のみを保存している場合に対処するため、 AWS SCT はこれらの列を `BIGINT` データ型に変換できます。この方法を実行すると、変換されたコードのパフォーマンスが向上します。この方法を採用するには、[**NUMBER のプライマリキー列と外部キー列を BIGINT 列に変換**] を選択します。データ損失を防ぐため、ソースのこれらの列には浮動小数点値が含まれないようにしてください。
+ ソースコード内の非アクティブ化されたトリガーと制約をスキップする。それを行うには、[**無効にされたトリガーと制約を無視する**] を選択します。
+ を使用して AWS SCT 、動的 SQL として呼び出される文字列変数を変換します。データベースコードはこれらの文字列変数の値を変更できます。が AWS SCT 常にこの文字列変数の最新の値を変換するようにするには、**「呼び出されたルーチンで作成された動的 SQL コードを変換する**」を選択します。
+ これに対処するために、PostgreSQL バージョン 10 以前ではプロシージャがサポートされていません。お客様またはユーザーが PostgreSQL でのプロシージャの使用に慣れていない場合は、Oracle プロシージャを PostgreSQL 関数に変換 AWS SCT できます。そのためには、[**プロシージャを関数に変換**] を選択します。
+ 発生したアクション項目に関する追加情報を確認するには。これを行うには、[**次の重大度レベルの移行問題に対する例外発生ブロックに追加**] を選択することで、拡張パックに特定の関数を追加できます。次に、ユーザー定義の例外を発生させる重要度レベルを選択します。
+ 自動的に生成された名前による制約を含む可能性があるソース Oracle データベースを操作する。ソースコードでこれらの名前を使用している場合は、必ず [**システムによって生成された制約名をソースの元の名前を使用して変換**] を選択してください。ソースコードでこれらの制約は使われているが名前は使われていない場合は、このオプションをオフにすると変換速度が上がります。
+ データベースとアプリケーションが異なるタイムゾーンで実行されているかどうかを調べるためです。デフォルトでは、 は変換されたコードのタイムゾーンを AWS SCT エミュレートします。ただし、データベースとアプリケーションが同じタイムゾーンを使用している場合は、このエミュレーションは必要ありません。この場合、[**クライアント側のタイムゾーンをサーバーのタイムゾーンと一致させる**] を選択してください。
+ ソースデータベースとターゲットデータベースが異なるタイムゾーンで動作しているかどうかを確認する。その場合、`SYSDATE` の Oracle 組み込み関数をエミュレートする関数は、ソース関数とは異なる値を返します。ソース関数とターゲット関数が同じ値を返すようにするには、[**SYSDATE エミュレーションのデフォルトタイムゾーンを設定**] を選択します。
+ 変換したコードで Orafce 拡張機能の関数を使用するには。そのためには、[**Orafce 実装を使用する**] で、使用する関数を選択します。orafce についての詳細は、GitHub で「[orafce](https://github.com/orafce/orafce)」を参照してください。

## Oracle シーケンスの変換
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConvertSequences"></a>

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

**変換後のシーケンスにソースデータベースの最後の値を代入するには**

1. Oracle をソースとして AWS SCT プロジェクトを開きます。

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

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

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

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

## Oracle ROWID の変換
<a name="CHAP_Source.Oracle.ToPostgreSQL.ConvertRowID"></a>

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

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

ソースデータベースコードに、数値データ型を使用して実行できない ROWID オペレーションが含まれている場合、 AWS SCT はデータ型で`character varying`データ列を作成できます。

**Oracle ROWID のデータ列をプロジェクト用に作成するには**

1. Oracle をソースとして AWS SCT プロジェクトを開きます。

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

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

1. [**行 ID を生成**] では、次のいずれかを実行します。
   + [**ID として生成**] を選択し、数値データ列を作成します。
   + [**文字ドメインタイプとして生成**] を選択し、文字データ列を作成します。

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

## Oracle ダイナミック SQL の変換
<a name="CHAP_Source.Oracle.ToPostgreSQL.DynamicSQL"></a>

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

**Oracle の動的 SQL を PostgreSQL に変換するには**

1. Oracle をソースとして AWS SCT プロジェクトを開きます。

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

1. オブジェクトのコンテキスト (右クリック) メニューを開き、[**。スキーマの変換**] を選択して、存在する場合はオブジェクトを置き換えます。次のスクリーンショットは、動的 SQL を使用した Oracle プロシージャの下に変換されたプロシージャを示しています。  
![\[動的 SQL の変換\]](http://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/images/dynamicsql1.png)

## Oracle パーティションの変換
<a name="CHAP_Source.Oracle.ToPostgreSQL.PG10Partitioning"></a>

AWS SCT は現在、次のパーティショニングメソッドをサポートしています。
+ Range
+ リスト
+ 複数列の範囲
+ ハッシュ
+ コンポジット (リスト - リスト、レンジ - リスト、リスト - レンジ、リスト - ハッシュ、レンジ - ハッシュ、ハッシュ - ハッシュ)