

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

# を使用した Oracle データベースへの接続 AWS Schema Conversion Tool
<a name="CHAP_Source.Oracle"></a>

 AWS SCT を使用して、スキーマ、データベースコードオブジェクト、アプリケーションコードを Oracle Database から次のターゲットに変換できます。
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL 互換エディション
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL 互換エディション
+ Amazon RDS for Oracle
+ Amazon RDS for MariaDB

ソースが Oracle データベースの場合、コメントは PostgreSQL データベースなどの適切な形式に変換できます。 はテーブル、ビュー、列のコメントを変換 AWS SCT できます。コメントにはアポストロフィを含めることができます。文字列リテラルの場合と同様に、SQL ステートメントの変換時にアポストロフィを AWS SCT 2 倍にします。

詳細については、以下を参照してください。

**Topics**
+ [ソースとしての Oracle の権限](#CHAP_Source.Oracle.Permissions)
+ [ソースとしての Oracle への接続](#CHAP_Source.Oracle.Connecting)
+ [を使用した Oracle から Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL への移行 AWS Schema Conversion Tool](CHAP_Source.Oracle.ToPostgreSQL.md)
+ [を使用した Oracle から Amazon RDS for MySQL または Amazon Aurora MySQL への移行 AWS Schema Conversion Tool](CHAP_Source.Oracle.ToMySQL.md)
+ [を使用した Oracle Database から Amazon RDS for Oracle への移行 AWS Schema Conversion Tool](CHAP_Source.Oracle.ToRDSOracle.md)

## ソースとしての Oracle の権限
<a name="CHAP_Source.Oracle.Permissions"></a>

ソースとして Oracle に必要な権限を以下に示します。
+ CONNECT 
+ SELECT\$1CATALOG\$1ROLE 
+ SELECT ANY DICTIONARY 
+ SELECT ON SYS.ARGUMENT\$1

## ソースとしての Oracle への接続
<a name="CHAP_Source.Oracle.Connecting"></a>

以下の手順を使用して、 AWS Schema Conversion Toolを使用する Oracle ソースデータベースに接続します。

**Oracle ソースデータベースに接続するには**

1. で AWS Schema Conversion Tool、**ソースの追加**を選択します。

1. [**Oracle**] を選択し、その後 [**Next**] (次へ) を選択します。

   [**Add source**] (ソースの追加) ダイアログボックスが表示されます。

1. [**接続名**] にデータベースの名前を入力します。この名前が AWS SCT の左側のパネルのツリーに表示されます。

1. からデータベース認証情報を使用する AWS Secrets Manager か、手動で入力します。
   + Secrets Manager のデータベース認証情報を使用するには、以下の手順に従ってください。

     1. [**AWS シークレット**] で、シークレットの名前を選択します。

     1. [**入力**] を選択すると、Secrets Manager のデータベース接続ダイアログボックスにすべての値が自動的に入力されます。

     Secrets Manager からのデータベース認証情報の使用については、「[AWS Secrets Manager の の設定 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)」を参照してください。
   + Oracle ソースデータベースの接続情報を手動で入力するには、以下の手順に従ってください。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/SchemaConversionTool/latest/userguide/CHAP_Source.Oracle.html)

1. **接続のテスト**を選択して、 がソースデータベースに接続 AWS SCT できることを確認します。

1. [**Connect**] (接続) を選択して、ソースデータベースに接続します。

# を使用した 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
+ リスト
+ 複数列の範囲
+ ハッシュ
+ コンポジット (リスト - リスト、レンジ - リスト、リスト - レンジ、リスト - ハッシュ、レンジ - ハッシュ、ハッシュ - ハッシュ)

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

変換した MySQL コードで Oracle データベース関数をエミュレートするには、 AWS SCTで Oracle から MySQL への拡張パックを使用します。拡張機能の詳細については、「[での拡張パックの使用 AWS Schema Conversion Tool](CHAP_ExtensionPack.md)」を参照してください。

**Topics**
+ [MySQL をターゲットデータベースとする場合の権限](#CHAP_Source.Oracle.ToMySQL.ConfigureTarget)
+ [Oracle から MySQL への変換設定](#CHAP_Source.Oracle.ToMySQL.ConversionSettings)
+ [移行に関する考慮事項](#CHAP_Source.Oracle.ToMySQL.MigrationConsiderations)
+ [Oracle の WITH ステートメントから RDS for MySQL または Amazon Aurora MySQL への変換](#CHAP_Source.Oracle.ToMySQL.With)

## MySQL をターゲットデータベースとする場合の権限
<a name="CHAP_Source.Oracle.ToMySQL.ConfigureTarget"></a>

ターゲットとして MySQL に必要な権限を以下に示します。
+ CREATE ON \$1.\$1
+ ALTER ON \$1.\$1
+ DROP ON \$1.\$1
+ INDEX ON \$1.\$1
+ REFERENCES ON \$1.\$1
+ SELECT ON \$1.\$1
+ CREATE VIEW ON \$1.\$1
+ SHOW VIEW ON \$1.\$1
+ TRIGGER ON \$1.\$1
+ CREATE ROUTINE ON \$1.\$1
+ ALTER ROUTINE ON \$1.\$1
+ EXECUTE ON \$1.\$1
+ CREATE TEMPORARY TABLES ON \$1.\$1
+ AWS\$1LAMBDA\$1ACCESS
+ INSERT, UPDATE ON AWS\$1ORACLE\$1EXT.\$1
+ INSERT, UPDATE, DELETE ON AWS\$1ORACLE\$1EXT\$1DATA.\$1

バージョン 5.7 以前の MySQL データベースをターゲットとして使用する場合は、AWS\$1LAMBDA\$1ACCESS の代わりに INVOKE LAMBDA \$1.\$1 権限を付与します。MySQL データベースバージョン 8.0 以降の場合は、AWS\$1LAMBDA\$1ACCESS 権限を付与します。

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

```
CREATE USER 'user_name' IDENTIFIED BY 'your_password';
GRANT CREATE ON *.* TO 'user_name';
GRANT ALTER ON *.* TO 'user_name';
GRANT DROP ON *.* TO 'user_name';
GRANT INDEX ON *.* TO 'user_name';
GRANT REFERENCES ON *.* TO 'user_name';
GRANT SELECT ON *.* TO 'user_name';
GRANT CREATE VIEW ON *.* TO 'user_name';
GRANT SHOW VIEW ON *.* TO 'user_name';
GRANT TRIGGER ON *.* TO 'user_name';
GRANT CREATE ROUTINE ON *.* TO 'user_name';
GRANT ALTER ROUTINE ON *.* TO 'user_name';
GRANT EXECUTE ON *.* TO 'user_name';
GRANT CREATE TEMPORARY TABLES ON *.* TO 'user_name';
GRANT AWS_LAMBDA_ACCESS TO 'user_name';
GRANT INSERT, UPDATE ON AWS_ORACLE_EXT.* TO 'user_name';
GRANT INSERT, UPDATE, DELETE ON AWS_ORACLE_EXT_DATA.* TO 'user_name';
```

前述の例では、[*user\$1name*] をお客様の設定のユーザー名に置き換えます。*your\$1password* を安全なパスワードに置き換えます。

バージョン 5.7 以前の MySQL データベースをターゲットとして使用する場合は、`GRANT AWS_LAMBDA_ACCESS TO 'user_name'` の代わりに `GRANT INVOKE LAMBDA ON *.* TO 'user_name'` を使用してください。

Amazon RDS for MySQL または Aurora MySQL をターゲットとして使用するには、`lower_case_table_names` パラメータを `1` に設定します。この値は、MySQL サーバーがテーブル、インデックス、トリガー、データベースなどのオブジェクト名の識別子を、大文字と小文字を区別せずに処理することを意味します。ターゲットインスタンスでバイナリログを有効にしている場合は、`log_bin_trust_function_creators` パラメータを `1` と設定します。この場合、ストアド関数を作成するのに、`DETERMINISTIC` 特性、`READS SQL DATA` 特性、`NO SQL` 特性を使用する必要はありません。これらのパラメータを設定するには、新しい DB パラメータグループを作成するか、既存の DB パラメータグループを変更します。

## Oracle から MySQL への変換設定
<a name="CHAP_Source.Oracle.ToMySQL.ConversionSettings"></a>

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

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

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

  たとえば、変換したコード内のコメントの数を最小限に抑えるには、[**エラーのみ**] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[**すべてのメッセージ**] を選択します。
+ ソース Oracle データベースが擬似列を使用できるが、MySQL `ROWID` は同様の機能をサポートしていないことに対応するために、 は変換されたコードで`ROWID`擬似列をエミュレート AWS SCT できます。そのためには、[**行 ID を生成しますか**] で [**ID として生成**] を選択します。

  Oracle のソースコードで `ROWID` 疑似列を使用していない場合は、[**行 ID を生成しますか**] で [**生成しない**] を選択します。この場合、変換されたコードの処理が速くなります。
+ MySQL がサポートしていないパラメータを持つ`TO_CHAR`、`TO_DATE`、`TO_NUMBER` 関数が含まれているソースの Oracle コードを操作する。デフォルトでは、 AWS SCT は変換後のコードでこれらのパラメータの使用法をエミュレートします。

  ソース Oracle コードに PostgreSQL がサポートするパラメータのみが含まれている場合は、ネイティブの MySQL `TO_CHAR`、`TO_DATE`、`TO_NUMBER` 関数を使用できます。この場合、変換されたコードの処理が速くなります。これらのパラメータのみを含めるには、以下の値を選択します。
  + **関数 TO\$1CHAR () は Oracle 固有のフォーマット文字列を使用しません。**
  + **関数 TO\$1DATE () は Oracle 固有のフォーマット文字列を使用しません**
  + **関数 TO\$1NUMBER () は Oracle 固有のフォーマット文字列を使用しません**
+ データベースとアプリケーションが異なるタイムゾーンで実行されているかどうかを調べる。デフォルトでは、 AWS SCT は変換されたコードのタイムゾーンをエミュレートします。ただし、データベースとアプリケーションが同じタイムゾーンを使用している場合は、このエミュレーションは必要ありません。この場合、[**クライアント側のタイムゾーンをサーバーのタイムゾーンと一致させる**] を選択してください。

## 移行に関する考慮事項
<a name="CHAP_Source.Oracle.ToMySQL.MigrationConsiderations"></a>

Oracle を RDS for MySQL または Aurora MySQL に変換する場合、ステートメントの実行順序を変更するには、`GOTO` ステートメントとラベルを使用できます。GOTO ステートメントに続くすべての `GOTO` ステートメントはスキップされ、ラベルで処理が継続されます。`GOTO` ステートメントとラベルは、プロシージャ、バッチ、またはステートメント ブロック内のどこでも使用できます。GOTO ステートメントをネストすることもできます。

MySQL は `GOTO` ステートメントを使用しません。は、 `GOTO`ステートメントを含むコードを AWS SCT 変換すると、 ステートメントを `BEGIN…END`または `LOOP…END LOOP`ステートメントを使用するように変換します。

が`GOTO`ステートメントを AWS SCT 変換する方法の例を次の表に示します。


| Oracle ステートメント | MySQL ステートメント | 
| --- | --- | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   GOTO label1;<br />   statement2;<br />   ....<br />   label1:<br />   Statement3;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br /> label1:<br /> BEGIN<br />   ....<br />   statement1;<br />   ....<br />   LEAVE label1;<br />   statement2;<br />   ....<br /> END;<br />   Statement3;<br />   ....<br />END<br /></pre>  | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   statement2;<br />   ....<br />   GOTO label1;<br />   statement3;<br />   ....<br />   statement4;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   LOOP<br />    statement2;<br />    ....<br />    ITERATE label1;<br />    LEAVE label1;<br />   END LOOP; <br />    statement3;<br />    ....<br />    statement4;<br />    ....<br />END<br /></pre>  | 
|  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   statement2;<br />   ....<br />   statement3;<br />   ....<br />   statement4;<br />   ....<br />END<br /></pre>  |  <pre>BEGIN<br />   ....<br />   statement1;<br />   ....<br />   label1:<br />   BEGIN<br />    statement2;<br />    ....    <br />    statement3;<br />    ....<br />    statement4;<br />    ....    <br />   END; <br />END<br /></pre>  | 

## Oracle の WITH ステートメントから RDS for MySQL または Amazon Aurora MySQL への変換
<a name="CHAP_Source.Oracle.ToMySQL.With"></a>

名前 (query\$1name) をサブクエリのブロックに割り当てるには、WITH 句 (subquery\$1factoring) を Oracle で使用します。サブクエリブロックをクエリの複数の場所で参照するには、query\$1name を指定します。サブクエリブロックにリンクまたはパラメータ (ローカル、プロシージャ、関数、パッケージ) が含まれていない場合、 は 句をビューまたは一時テーブル AWS SCT に変換します。

句を一時テーブルに変換する利点は、サブクエリへの繰り返し参照がより効率的であることです。各参照によって要求されるのではなく、一時テーブルからデータが簡単に取得されるために効率が向上します。追加のビューまたは一時テーブルを使用して、これをエミュレートできます。ビュー名には `<procedure_name>$<subselect_alias>` の形式が使用されます。

次の表で例を確認できます。


| Oracle ステートメント | MySQL ステートメント | 
| --- | --- | 
|  <pre>CREATE PROCEDURE <br /> TEST_ORA_PG.P_WITH_SELECT_VARIABLE_01<br />     (p_state IN NUMBER)<br />AS<br />  l_dept_id NUMBER := 1; <br />BEGIN<br />FOR cur IN  <br />           (WITH dept_empl(id, name, surname, <br />              lastname, state, dept_id)<br />              AS<br />                  (<br />                    SELECT id, name, surname,  <br />                     lastname, state, dept_id <br />                      FROM test_ora_pg.dept_employees<br />                     WHERE state = p_state AND <br />                       dept_id = l_dept_id)<br />            SELECT id,state   <br />              FROM dept_empl<br />            ORDER BY id)  LOOP<br />  NULL;<br />END LOOP;<br /></pre>  |  <pre>CREATE PROCEDURE test_ora_pg.P_WITH_SELECT_VARIABLE_01(IN par_P_STATE DOUBLE)<br />BEGIN<br />    DECLARE var_l_dept_id DOUBLE DEFAULT 1;<br />    DECLARE var$id VARCHAR (8000);<br />    DECLARE var$state VARCHAR (8000);<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT<br />        ID, STATE<br />        FROM (SELECT<br />            ID, NAME, SURNAME, LASTNAME, STATE, DEPT_ID<br />            FROM TEST_ORA_PG.DEPT_EMPLOYEES<br />            WHERE STATE = par_p_state AND DEPT_ID = var_l_dept_id) AS dept_empl<br />        ORDER BY ID;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />        FETCH cur INTO var$id, var$state;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /></pre>  | 
|  <pre>CREATE PROCEDURE <br /> TEST_ORA_PG.P_WITH_SELECT_REGULAR_MULT_01<br />AS    <br />BEGIN<br /><br /> FOR cur IN  (<br />               WITH dept_empl AS<br />                   (<br />                        SELECT id, name, surname, <br />                         lastname, state, dept_id <br />                          FROM test_ora_pg.dept_employees<br />                         WHERE state = 1),<br />                    dept AS <br />                   (SELECT id deptid, parent_id, <br />                      name deptname<br />                      FROM test_ora_pg.department                <br />                   )<br />                SELECT dept_empl.*,dept.*          <br />                 FROM dept_empl, dept<br />                 WHERE dept_empl.dept_id = dept.deptid<br />              ) LOOP<br />              NULL;<br />            END LOOP;<br /></pre>  |  <pre>CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept_empl<br /> `(id, name, surname, lastname, state, dept_id)<br />AS<br />(SELECT id, name, surname, lastname, state, dept_id <br />   FROM test_ora_pg.dept_employees<br />  WHERE state = 1);<br />  <br />CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept<br /> `(deptid, parent_id,deptname)<br />AS<br />(SELECT id deptid, parent_id, name deptname<br />   FROM test_ora_pg.department);  <br /><br /><br />CREATE PROCEDURE test_ora_pg.P_WITH_SELECT_REGULAR_MULT_01()<br />BEGIN<br />    DECLARE var$ID DOUBLE;<br />    DECLARE var$NAME VARCHAR (30);<br />    DECLARE var$SURNAME VARCHAR (30);<br />    DECLARE var$LASTNAME VARCHAR (30);<br />    DECLARE var$STATE DOUBLE;<br />    DECLARE var$DEPT_ID DOUBLE;<br />    DECLARE var$deptid DOUBLE;<br />    DECLARE var$PARENT_ID DOUBLE;<br />    DECLARE var$deptname VARCHAR (200);<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT<br />        dept_empl.*, dept.*<br />        FROM TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept_empl<br />          ` AS dept_empl,<br />             TEST_ORA_PG.`P_WITH_SELECT_REGULAR_MULT_01$dept<br />          ` AS dept<br />        WHERE dept_empl.DEPT_ID = dept.DEPTID;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />    FETCH cur INTO var$ID, var$NAME, var$SURNAME, <br />     var$LASTNAME, var$STATE, var$DEPT_ID, var$deptid, <br />     var$PARENT_ID, var$deptname;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /><br />call test_ora_pg.P_WITH_SELECT_REGULAR_MULT_01()<br /></pre>  | 
|  <pre>CREATE PROCEDURE <br />  TEST_ORA_PG.P_WITH_SELECT_VAR_CROSS_02(p_state IN NUMBER)<br />AS    <br />   l_dept_id NUMBER := 10;<br />BEGIN<br /> FOR cur IN  (<br />               WITH emp AS              <br />                    (SELECT id, name, surname, <br />                      lastname, state, dept_id <br />                       FROM test_ora_pg.dept_employees<br />                      WHERE dept_id > 10                 <br />                    ),<br />                    active_emp AS<br />                    (<br />                      SELECT id<br />                        FROM emp<br />                       WHERE emp.state = p_state <br />                    )<br />                    <br />                SELECT *          <br />                  FROM active_emp                 <br />              ) LOOP<br />         NULL;<br />  END LOOP;<br />  <br />END;<br /></pre>  |  <pre>CREATE VIEW TEST_ORA_PG.`P_WITH_SELECT_VAR_CROSS_01$emp<br />    `(id, name, surname, lastname, state, dept_id)<br />AS<br />(SELECT<br />       id, name, surname, lastname, <br />       state, dept_id<br />  FROM TEST_ORA_PG.DEPT_EMPLOYEES<br />  WHERE DEPT_ID > 10);<br /><br /><br />CREATE PROCEDURE <br />   test_ora_pg.P_WITH_SELECT_VAR_CROSS_02(IN par_P_STATE DOUBLE)<br />BEGIN<br />    DECLARE var_l_dept_id DOUBLE DEFAULT 10;<br />    DECLARE var$ID DOUBLE;<br />    DECLARE done INT DEFAULT FALSE;<br />    DECLARE cur CURSOR FOR SELECT *<br />                             FROM (SELECT<br />                                      ID<br />                                     FROM <br />                             TEST_ORA_PG.<br />                              `P_WITH_SELECT_VAR_CROSS_01$emp` AS emp<br />                                   WHERE emp.STATE = par_p_state) <br />                                    AS active_emp;<br />    DECLARE CONTINUE HANDLER FOR NOT FOUND<br />        SET done := TRUE;<br />    OPEN cur;<br /><br />    read_label:<br />    LOOP<br />        FETCH cur INTO var$ID;<br /><br />        IF done THEN<br />            LEAVE read_label;<br />        END IF;<br /><br />        BEGIN<br />        END;<br />    END LOOP;<br />    CLOSE cur;<br />END;<br /></pre>  | 

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

Oracle スキーマとコードを Amazon RDS for Oracle に移行する際は以下の点を考慮してください。
+ AWS SCT は、オブジェクトツリーにディレクトリオブジェクトを追加できます。*ディレクトリオブジェクト*は、それぞれがサーバーのファイルシステムの物理ディレクトリを表す論理構造です。ディレクトリオブジェクトは、DBMS\$1LOB、UTL\$1FILE、DBMS\$1FILE\$1TRANSFER、DATAPUMP ユーティリティなどのパッケージで使用できます。
+ AWS SCT は、Oracle テーブルスペースの Amazon RDS for Oracle DB インスタンスへの変換をサポートしています。Oracle は、論理的にはテーブルスペースに、物理的には対応するテーブルスペースに関連付けられたデータファイルに、データを保存します。Oracle では、テーブルスペースとデータファイル名を作成できます。Amazon RDS は、データファイル、ログファイル、およびコントロールファイルに対してのみ Oracle マネージドファイル (OMF) をサポートしています。 は、変換中に必要なデータファイル AWS SCT を作成します。
+ AWS SCT は、サーバーレベルのロールと権限を変換できます。Oracle データベースエンジンではロールベースのセキュリティを使用します。ロールとは、ユーザーに対して付与または取り消すことができる権限のコレクションです。Amazon RDS の事前に定義されたロールは DBA といい、通常、Oracle データベースエンジンに対するすべての管理権限が許可されています。次の権限は、Oracle エンジンを利用する Amazon RDS DB インスタンスの DBA ロールでは使用できません。
  + データベースの変更
  + システムの変更
  + ディレクトリの作成
  + 権限の付与
  + ロールの付与
  + 外部ジョブの作成

  その他の権限 (例: 高度なフィルタリングや列に関する権限) をすべて Amazon RDS for Oracle ユーザーロールに付与することができます。
+ AWS SCT では、Oracle ジョブを Amazon RDS for Oracle で実行できるジョブに変換できます。この変換には、次のモノを含むいくつかの制限があります。
  + 実行ジョブはサポートされていません。
  + ANYDATA データ型を引数として使用するスケジュールジョブはサポートされていません。
+ Oracle Real Application Clusters (RAC) One Node は、Oracle Database 11g Release 2 とともに導入された Oracle Database Enterprise Edition のオプションです。Amazon RDS for Oracle は RAC 機能をサポートしていません。可用性を高めるには Amazon RDS マルチ AZ を使用してください。

  Amazon RDS のマルチ AZ 配置では、異なるアベイラビリティーゾーンに同期スタンバイレプリカが自動的にプロビジョニングされて維持されます。プライマリ DB インスタンスは、同期的にアベイラビリティーゾーン間でスタンバイレプリカにレプリケートされます。この機能により、データの冗長性が確保されて I/O のフリーズがなくなり、システムバックアップ時のレイテンシー急上昇が最小限に抑えられます。
+ Oracle Spatial は、Oracle データベースのストレージ、取得、更新、および spatial データコレクションのクエリを可能にする SQL スキーマと機能を提供します。Oracle Locator は、インターネットとワイヤレスベースのアプリケーションをサポートするために一般的に必要な機能とパートナーベースの GIS ソリューションを提供します。Oracle Locator は Oracle Spatial の制限付きのサブネットです。

  Oracle Spatial 機能や Oracle Locator 機能を使用するには、SPATIAL オプションまたは LOCATOR オプション (相互に排他的) を DB インスタンスのオプショングループに追加します。

  Amazon RDS for Oracle DB インスタンスで Oracle Spatial および Oracle Locator を使用するには、いくつかの前提条件を満たす必要があります。
  + インスタンスで Oracle Enterprise Edition バージョン 12.1.0.2.v6 以降、または 11.2.0.4.v10 以降が実行されていること。
  + インスタンスが Virtual Private Cloud (VPC) 内にあること。
  + インスタンスの DB インスタンスクラスが Oracle 機能をサポート可能であること。例えば、Oracle Spatial は、db.m1.small、db.t1.micro、db.t2.micro、または db.t2.small の DB インスタンスクラスではサポートされません。詳細については、「[DB インスタンスクラスの Oracle のサポート](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Oracle.html#Oracle.Concepts.InstanceClasses)」を参照してください。
  + インスタンスで、マイナーバージョン自動アップグレードが有効化されていること。CVSS スコアが 9 以上、またはその他のセキュリティの脆弱性が報告されている場合には、Amazon RDS によって DB インスタンスが最新の Oracle PSU に更新されます。詳細については、次を参照してください。

    [ Oracle DB インスタンスの設定](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ModifyInstance.Oracle.html#USER_ModifyInstance.Oracle.Settings)
  + DB インスタンスが バージョン 11.2.0.4.v10 以降の場合には、XMLDB オプションをインストールする必要があります。詳細については、以下を参照してください。

    [Oracle XML DB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.Options.XMLDB.html)。
  + Oracle の Oracle Spatial ライセンスが付与されていること。詳細については、Oracle ドキュメントの [Oracle Spatial and Graph](https://shop.oracle.com/apex/product?p1=OracleSpatialandGraph) を参照してください。
+ Data Guard は、Oracle Database Enterprise Edition に含まれています。可用性を高めるには Amazon RDS マルチ AZ 機能を使用してください。

  Amazon RDS のマルチ AZ 配置では、異なるアベイラビリティーゾーンに同期スタンバイレプリカが自動的にプロビジョニングされて維持されます。プライマリ DB インスタンスは、同期的にアベイラビリティーゾーン間でスタンバイレプリカにレプリケートされます。この機能により、データの冗長性が確保されて I/O のフリーズがなくなり、システムバックアップ時のレイテンシー急上昇が最小限に抑えられます。
+ AWS SCT は、Amazon RDS for Oracle への移行時に Oracle DBMS\$1SCHEDULER オブジェクトの変換をサポートしています。 AWS SCT 評価レポートは、スケジュールオブジェクトを変換できるかどうかを示します。Amazon RDS でのスケジュールオブジェクトの使用の詳細については、[Amazon RDS のドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.System.html#Appendix.Oracle.CommonDBATasks.ModifyScheduler)を参照してください。
+ Oracle から Amazon RDS for Oracle の変換では、DB リンクがサポートされます。データベースリンクは、別のデータベースのオブジェクトにアクセスできるようにする、1 つのデータベース内のスキーマオブジェクトです。もう 1 つのデータベースは Oracle データベースである必要はありません。ただし、Oracle 以外のデータベースにアクセスするには、Oracle Heterogeneous Services を使用する必要があります。

  データベースリンクを作成したら、そのリンクを SQL ステートメントで使用して、他のデータベースのテーブル、ビュー、および PL/SQL オブジェクトを参照できます。データベースリンクを使用するには、テーブル、ビュー、または PL/SQL オブジェクトの名前に `@dblink` を追加します。他のデータベースのテーブルまたはビューには、SELECT ステートメントを使用してクエリを実行できます。Oracle データベースリンクの使用の詳細については、[Oracle のドキュメント](https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm#ADMIN12083)を参照してください。

  Amazon RDS でのデータベースリンクの使用の詳細については、[Amazon RDS のドキュメント](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.CommonDBATasks.Database.html#Appendix.Oracle.CommonDBATasks.DBLinks)を参照してください。
+  AWS SCT 評価レポートには、変換のサーバーメトリクスが表示されます。Oracle インスタンスに関するこれらのメトリクスには、次のようなものがあります。
  + ターゲット DB インスタンスのコンピューティング能力とメモリ容量。
  + サポートされていない Oracle 機能や、Amazon RDS でサポートされていない Real Application Clusters。
  + ディスク読み取り/書き込み負荷
  + ディスク合計の平均スループット
  + サーバー情報 (例: サーバー名、OS、ホスト名、文字セット)。

## ターゲットとして RDS for Oracle を使用する場合の権限
<a name="CHAP_Source.Oracle.ToRDSOracle.ConfigureTarget"></a>

Amazon RDS for Oracle に移行するには、権限のあるデータベースユーザーを作成します。次のコード例を使用できます。

```
CREATE USER user_name IDENTIFIED BY your_password;

-- System privileges
GRANT DROP ANY CUBE BUILD PROCESS TO user_name;
GRANT ALTER ANY CUBE TO user_name;
GRANT CREATE ANY CUBE DIMENSION TO user_name;
GRANT CREATE ANY ASSEMBLY TO user_name;
GRANT ALTER ANY RULE TO user_name;
GRANT SELECT ANY DICTIONARY TO user_name;
GRANT ALTER ANY DIMENSION TO user_name;
GRANT CREATE ANY DIMENSION TO user_name;
GRANT ALTER ANY TYPE TO user_name;
GRANT DROP ANY TRIGGER TO user_name;
GRANT CREATE ANY VIEW TO user_name;
GRANT ALTER ANY CUBE BUILD PROCESS TO user_name;
GRANT CREATE ANY CREDENTIAL TO user_name;
GRANT DROP ANY CUBE DIMENSION TO user_name;
GRANT DROP ANY ASSEMBLY TO user_name;
GRANT DROP ANY PROCEDURE TO user_name;
GRANT ALTER ANY PROCEDURE TO user_name;
GRANT ALTER ANY SQL TRANSLATION PROFILE TO user_name;
GRANT DROP ANY MEASURE FOLDER TO user_name;
GRANT CREATE ANY MEASURE FOLDER TO user_name;
GRANT DROP ANY CUBE TO user_name;
GRANT DROP ANY MINING MODEL TO user_name;
GRANT CREATE ANY MINING MODEL TO user_name;
GRANT DROP ANY EDITION TO user_name;
GRANT CREATE ANY EVALUATION CONTEXT TO user_name;
GRANT DROP ANY DIMENSION TO user_name;
GRANT ALTER ANY INDEXTYPE TO user_name;
GRANT DROP ANY TYPE TO user_name;
GRANT CREATE ANY PROCEDURE TO user_name;
GRANT CREATE ANY SQL TRANSLATION PROFILE TO user_name;
GRANT CREATE ANY CUBE TO user_name;
GRANT COMMENT ANY MINING MODEL TO user_name;
GRANT ALTER ANY MINING MODEL TO user_name;
GRANT DROP ANY SQL PROFILE TO user_name;
GRANT CREATE ANY JOB TO user_name;
GRANT DROP ANY EVALUATION CONTEXT TO user_name;
GRANT ALTER ANY EVALUATION CONTEXT TO user_name;
GRANT CREATE ANY INDEXTYPE TO user_name;
GRANT CREATE ANY OPERATOR TO user_name;
GRANT CREATE ANY TRIGGER TO user_name;
GRANT DROP ANY ROLE TO user_name;
GRANT DROP ANY SEQUENCE TO user_name;
GRANT DROP ANY CLUSTER TO user_name;
GRANT DROP ANY SQL TRANSLATION PROFILE TO user_name;
GRANT ALTER ANY ASSEMBLY TO user_name;
GRANT CREATE ANY RULE SET TO user_name;
GRANT ALTER ANY OUTLINE TO user_name;
GRANT UNDER ANY TYPE TO user_name;
GRANT CREATE ANY TYPE TO user_name;
GRANT DROP ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY ROLE TO user_name;
GRANT DROP ANY VIEW TO user_name;
GRANT ALTER ANY INDEX TO user_name;
GRANT COMMENT ANY TABLE TO user_name;
GRANT CREATE ANY TABLE TO user_name;
GRANT CREATE USER TO user_name;
GRANT DROP ANY RULE SET TO user_name;
GRANT CREATE ANY CONTEXT TO user_name;
GRANT DROP ANY INDEXTYPE TO user_name;
GRANT ALTER ANY OPERATOR TO user_name;
GRANT CREATE ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY SEQUENCE TO user_name;
GRANT DROP ANY SYNONYM TO user_name;
GRANT CREATE ANY SYNONYM TO user_name;
GRANT DROP USER TO user_name;
GRANT ALTER ANY MEASURE FOLDER TO user_name;
GRANT ALTER ANY EDITION TO user_name;
GRANT DROP ANY RULE TO user_name;
GRANT CREATE ANY RULE TO user_name;
GRANT ALTER ANY RULE SET TO user_name;
GRANT CREATE ANY OUTLINE TO user_name;
GRANT UNDER ANY TABLE TO user_name;
GRANT UNDER ANY VIEW TO user_name;
GRANT DROP ANY DIRECTORY TO user_name;
GRANT ALTER ANY CLUSTER TO user_name;
GRANT CREATE ANY CLUSTER TO user_name;
GRANT ALTER ANY TABLE TO user_name;
GRANT CREATE ANY CUBE BUILD PROCESS TO user_name;
GRANT ALTER ANY CUBE DIMENSION TO user_name;
GRANT CREATE ANY EDITION TO user_name;
GRANT CREATE ANY SQL PROFILE TO user_name;
GRANT ALTER ANY SQL PROFILE TO user_name;
GRANT DROP ANY OUTLINE TO user_name;
GRANT DROP ANY CONTEXT TO user_name;
GRANT DROP ANY OPERATOR TO user_name;
GRANT DROP ANY LIBRARY TO user_name;
GRANT ALTER ANY LIBRARY TO user_name;
GRANT CREATE ANY LIBRARY TO user_name;
GRANT ALTER ANY MATERIALIZED VIEW TO user_name;
GRANT ALTER ANY TRIGGER TO user_name;
GRANT CREATE ANY SEQUENCE TO user_name;
GRANT DROP ANY INDEX TO user_name;
GRANT CREATE ANY INDEX TO user_name;
GRANT DROP ANY TABLE TO user_name;
GRANT SELECT_CATALOG_ROLE TO user_name;
GRANT SELECT ANY SEQUENCE TO user_name;

-- Database Links
GRANT CREATE DATABASE LINK TO user_name;
GRANT CREATE PUBLIC DATABASE LINK TO user_name;
GRANT DROP PUBLIC DATABASE LINK TO user_name;


-- Server Level Objects (directory)
GRANT CREATE ANY DIRECTORY TO user_name;
GRANT DROP ANY DIRECTORY TO user_name;
-- (for RDS only)
GRANT EXECUTE ON RDSADMIN.RDSADMIN_UTIL TO user_name;

-- Server Level Objects (tablespace)
GRANT CREATE TABLESPACE TO user_name;
GRANT DROP TABLESPACE TO user_name;

-- Server Level Objects (user roles)
/* (grant source privileges with admin option or convert roles/privs as DBA) */

-- Queues
grant execute on DBMS_AQADM to user_name;
grant aq_administrator_role to user_name;

-- for Materialized View Logs creation
GRANT SELECT ANY TABLE TO user_name;

-- Roles
GRANT RESOURCE TO user_name;
GRANT CONNECT TO user_name;
```

前述の例では、[*user\$1name*] をお客様の設定のユーザー名に置き換えます。*your\$1password* を安全なパスワードに置き換えます。

## Oracle から Amazon RDS for Oracle に変換する際の制限
<a name="CHAP_Source.Oracle.ToRDSOracle.Limitations"></a>

Oracle スキーマとコードを Amazon RDS for Oracle に移行する際に考慮する必要のある制限の一部を以下に示します。
+  Amazon RDS の事前に定義されたロールは DBA といい、通常、Oracle データベースエンジンに対するすべての管理権限が許可されています。次の権限は、Oracle エンジンを利用する Amazon RDS DB インスタンスの DBA ロールでは使用できません。
  + データベースの変更
  + システムの変更
  + ディレクトリの作成
  + 権限の付与
  + ロールの付与
  + 外部ジョブの作成

  Oracle RDS ユーザーロールに他のすべての権限を付与できます。
+ Amazon RDS for Oracle では、従来の監査、DBMS\$1FGA パッケージを使用した詳細な監査、および Oracle 統合監査がサポートされています。
+ Amazon RDS for Oracle は、変更データキャプチャ (CDC) をサポートしていません。データベースの移行中または移行後に CDC を行うには、 AWS Database Migration Serviceを使用します。