

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

# のターゲットとしての Oracle データベースの使用 AWS Database Migration Service
<a name="CHAP_Target.Oracle"></a>

別の Oracle データベースまたはサポートされている他のデータベースのいずれかから AWS DMS、 を使用して Oracle データベースターゲットにデータを移行できます。Secure Sockets Layer (SSL) を使用して、Oracle エンドポイントとレプリケーションインスタンスとの接続を暗号化できます。Oracle エンドポイントで SSL を使用する方法の詳細については、「」を参照してください[での SSL の使用 AWS Database Migration Service](CHAP_Security.SSL.md)。また、Oracle TDE はデータベースへの書き込みに暗号化キーまたはパスワードを必要としないため、ターゲットデータベース内の保管中のデータを暗号化するための Oracle 透過的データ暗号化 (TDE) の使用 AWS DMS もサポートしています。

がターゲットとして AWS DMS サポートする Oracle のバージョンについては、「」を参照してください[のターゲット AWS DMS](CHAP_Introduction.Targets.md)。

Oracle をターゲットとして使用するときは、ターゲット接続に使用されるスキーマまたはユーザーにデータを移行することを前提とします。別のスキーマにデータを移行する場合は、スキーマ変換を使用します。たとえば、ターゲットエンドポイントがユーザー `RDSMASTER` に接続しており、ユーザー `PERFDATA1` から `PERFDATA2` に移行したいとします。この場合、次のように変換を作成します。

```
{
   "rule-type": "transformation",
   "rule-id": "2",
   "rule-name": "2",
   "rule-action": "rename",
   "rule-target": "schema",
   "object-locator": {
   "schema-name": "PERFDATA1"
},
"value": "PERFDATA2"
}
```

Oracle をターゲットとして使用すると、 はすべてのテーブルとインデックスをターゲット内のデフォルトのテーブルとインデックスのテーブルスペース AWS DMS に移行します。テーブルとインデックスを別のテーブルとインデックスのテーブルスペースに移行する場合は、テーブルスペース変換を使用してこれを実行します。たとえば、Oracle ソース内の一部のテーブルスペースに割り当てられた `INVENTORY` スキーマに一連のテーブルがあるとします。移行については、このすべてのテーブルをターゲットの単一の `INVENTORYSPACE` テーブルスペースに割り当てるとします。この場合、次のように変換を作成します。

```
{
   "rule-type": "transformation",
   "rule-id": "3",
   "rule-name": "3",
   "rule-action": "rename",
   "rule-target": "table-tablespace",
   "object-locator": {
      "schema-name": "INVENTORY",
      "table-name": "%",
      "table-tablespace-name": "%"
   },
   "value": "INVENTORYSPACE"
}
```

変換の詳細については、「[JSON を使用するテーブル選択および変換を指定する](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.md)」をご参照ください。

Oracle がソースとターゲットの両方である場合、Oracle ソースの追加の接続属性 `enableHomogenousTablespace=true` を設定することで、既存のテーブルまたはインデックステーブルスペースの割り当てを保持できます。詳細については、[Oracle を のソースとして使用する場合のエンドポイント設定 AWS DMS](CHAP_Source.Oracle.md#CHAP_Source.Oracle.ConnectionAttrib)を参照してください。

のターゲットとして Oracle データベースを使用する方法の詳細については AWS DMS、以下のセクションを参照してください。

**Topics**
+ [のターゲットとしての Oracle の制限 AWS Database Migration Service](#CHAP_Target.Oracle.Limitations)
+ [ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限](#CHAP_Target.Oracle.Privileges)
+ [のターゲットとしての Oracle データベースの設定 AWS Database Migration Service](#CHAP_Target.Oracle.Configuration)
+ [のターゲットとして Oracle を使用する場合のエンドポイント設定 AWS DMS](#CHAP_Target.Oracle.ConnectionAttrib)
+ [Oracle のターゲットデータ型](#CHAP_Target.Oracle.DataTypes)

## のターゲットとしての Oracle の制限 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Limitations"></a>

データ移行のターゲットとして Oracle を使用する場合の制限は、以下のとおりです。
+ AWS DMS は、ターゲット Oracle データベースにスキーマを作成しません。必要なすべてのスキーマをターゲット Oracle データベースで作成する必要があります。Oracle ターゲットのスキーマ名がすでに存在している必要があります。ソーススキーマのテーブルは、 AWS DMS がターゲットインスタンスに接続するために使用するユーザーまたはスキーマにインポートされます。複数のスキーマを移行するには、複数のレプリケーションタスクを作成します。データをターゲット上の別のスキーマに移行することもできます。これを行うには、 AWS DMS テーブルマッピングでスキーマ変換ルールを使用する必要があります。
+ AWS DMS は、INDEXTYPE CONTEXT を持つテーブル`Use direct path full load`のオプションをサポートしていません。回避策として、配列ロードを使用できます。
+ バッチ最適化適用オプションでは、差分変更テーブルへのロードに直接パスが使用されるため、XML タイプはサポートされていません。回避策として、トランザクション適用モードを使用できます。
+ ソースデータベースから移行された空の文字列は、Oracle ターゲットによって異なる方法で処理できます (たとえば、1 つのスペース文字列に変換されます)。これにより、 AWS DMS 検証レポートが一致しなくなる可能性があります。
+ 次の式を使用して、バッチ最適化の適用モードでサポートされるテーブルごとの列の合計数を表すことができます。

  ```
  2 * {{columns_in_original_table}} + {{columns_in_primary_key}} <= 999
  ```

  例えば、元のテーブルに 25 列があり、そのプライマリキーが 5 列で構成されている場合、列の合計数は 55 になります。テーブルがサポートされている列数を超える場合、すべての変更が個別処理モードで適用されます。
+ AWS DMS は、Oracle Cloud Infrastructure (OCI) の Autonomous DB をサポートしていません。
+ トランザクション適用モードでは、Oracle ターゲットは最大 32 KB のサイズの DML ステートメントを処理できます。この制限は多くのユースケースで十分ですが、32 KB を超える DML ステートメントは「ORA-01460: unimplemented or unreasonable conversion requested」というエラーで失敗します。この問題を解決するには、`BatchApplyEnabled` タスク設定を `true` に設定してバッチ適用機能を有効にする必要があります。バッチ適用によりステートメント全体のサイズが小さくなり、32 KB の制限を回避できます。詳細については、「[ターゲットメタデータのタスク設定](CHAP_Tasks.CustomizingTasks.TaskSettings.TargetMetadata.md)」を参照してください。
+ AWS DMS LOB データの特別な処理要件により、LOB テーブルの直接パスのフルロードがエラー ORA-39777 で失敗することがあります。このエラーは、直接パスのロードプロセス中に発生し、LOB 列を含む移行タスクを中断する可能性があります。これを解決するには、ターゲットエンドポイントの `useDirectPathFullLoad` 設定を無効にし、ロードオペレーションを再試行します。

## ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限
<a name="CHAP_Target.Oracle.Privileges"></a>

 AWS Database Migration Service タスクで Oracle ターゲットを使用するには、Oracle データベースで次の権限を付与します。 AWS DMSへの Oracle データベース定義で指定されたユーザーアカウントにこの権限を付与します。
+ SELECT ANY TRANSACTION 
+ V$NLS\_PARAMETERS での SELECT 
+ V$TIMEZONE\_NAMES での SELECT 
+ ALL\_INDEXES での SELECT 
+ ALL\_OBJECTS での SELECT 
+ DBA\_OBJECTS での SELECT
+ ALL\_TABLES での SELECT 
+ ALL\_USERS での SELECT 
+ ALL\_CATALOG での SELECT 
+ ALL\_CONSTRAINTS での SELECT 
+ ALL\_CONS\_COLUMNS での SELECT 
+ ALL\_TAB\_COLS での SELECT 
+ ALL\_IND\_COLUMNS での SELECT 
+ DROP ANY TABLE 
+ SELECT ANY TABLE
+ INSERT ANY TABLE 
+ UPDATE ANY TABLE
+ CREATE ANY VIEW
+ DROP ANY VIEW
+ CREATE ANY PROCEDURE
+ ALTER ANY PROCEDURE
+ DROP ANY PROCEDURE
+ CREATE ANY SEQUENCE
+ ALTER ANY SEQUENCE
+ DROP ANY SEQUENCE 
+ テーブルの削除

以下に指定された要件のために、上記の追加の権限を付与します。
+ 特定のテーブルリストを使用するには、レプリケートされたすべてのテーブルに SELECT を付与し、ALTER も付与します。
+ ユーザーがデフォルトテーブルスペースにテーブルを作成することを許可するには、GRANT UNLIMITED TABLESPACE 権限を付与します。
+ ログオンのために、CREATE SESSION 権限を付与します。
+ 直接パス (全ロードのデフォルト) `GRANT LOCK ANY TABLE to {{dms_user}};` を使用している場合。
+ [DROP and CREATE] (ドロップして作成) テーブル準備モードを使用するときにスキーマが異なる場合は、`GRANT CREATE ANY INDEX to {{dms_user}};`。
+ 一部の全ロードシナリオでは、ターゲットテーブルスキーマが DMS ユーザーとは異なる場合、「DROP and CREATE table」または「TRUNCATE before loading」オプションを選択できます。この場合、DROP ANY TABLE を付与します。
+ ターゲットテーブルスキーマが DMS ユーザーとは異なる変更テーブルまたは監査テーブルに変更を保存するには、CREATE ANY TABLE および CREATE ANY INDEX を付与します。
+ 検証機能を使用して LOB 列を検証するには、`SYS.DBMS_CRYPTO` の EXECUTE 権限を DMS ユーザーに付与します。

### ターゲットデータベース AWS Database Migration Service の に必要な読み取り権限
<a name="CHAP_Target.Oracle.Privileges.Read"></a>

 AWS DMS ユーザーアカウントには、次の DBA テーブルの読み取りアクセス許可が付与されている必要があります。
+ DBA\_USERS での SELECT
+ DBA\_TAB\_PRIVS での SELECT
+ DBA\_OBJECTS での SELECT
+ DBA\_SYNONYMS での SELECT
+ DBA\_SEQUENCES での SELECT
+ DBA\_TYPES での SELECT
+ DBA\_INDEXES での SELECT
+ DBA\_TABLES での SELECT
+ DBA\_TRIGGERS での SELECT
+ SELECT on SYS.DBA\_REGISTRY

必要な権限のいずれかを V$xxx に付与できない場合は、V\_$xxx に付与します。

### 移行前評価
<a name="CHAP_Target.Oracle.Privileges.Premigration"></a>

Oracle をターゲットとして [Oracle の評価](CHAP_Tasks.AssessmentReport.Oracle.md) に一覧表示されている移行前評価を使用するには、Oracle データベースターゲットエンドポイントのユーザーアカウントに次のアクセス許可を追加する必要があります。

```
GRANT SELECT ON V_$INSTANCE TO dms_user;
GRANT EXECUTE ON SYS.DBMS_XMLGEN TO dms_user;
```

## のターゲットとしての Oracle データベースの設定 AWS Database Migration Service
<a name="CHAP_Target.Oracle.Configuration"></a>

Oracle データベースをデータ移行ターゲットとして使用する前に、Oracle ユーザーアカウントを提供する必要があります AWS DMS。ユーザーアカウントには、[ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限](#CHAP_Target.Oracle.Privileges) で指定されているように、Oracle データベースでの読み取り/書き込み権限が必要です。

## のターゲットとして Oracle を使用する場合のエンドポイント設定 AWS DMS
<a name="CHAP_Target.Oracle.ConnectionAttrib"></a>

エンドポイントの設定を使用して、追加の接続属性の使用する場合と同様に、ターゲットの Oracle のデータベースを設定できます。 AWS DMS コンソールを使用するか、`--oracle-settings '{"{{EndpointSetting"}}: {{"value"}}, {{...}}}'`JSON 構文で の `create-endpoint` コマンドを使用して[AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html)、ターゲットエンドポイントを作成するときに設定を指定します。

次の表は、Oracle をターゲットとして使用できるエンドポイント設定を説明しています。


| 名前 | 説明 | 
| --- | --- | 
| `UseDirectPathFullLoad` | に設定すると`Y`、直接パスの全ロード AWS DMS が使用されます。Oracle Call Interface (OCI) で直接パスプロトコルを使用可能にするには、この値を指定します。この OCI プロトコルを使用すると、完全ロード時に Oracle ターゲットテーブルを一括ロードできます。<br />デフォルト値: `true` <br />有効な値: `true`/`false` <br />例: `--oracle-settings '{"UseDirectPathFullLoad": false}'` | 
| `DirectPathParallelLoad` | `true` に設定した場合、この属性は、`UseDirectPathFullLoad` が `Y` に設定されている場合に並列ロードを指定します。この属性は、 AWS DMS 並列ロード機能を使用する場合にのみ適用されます。詳細については、`parallel-load` にある「[テーブルとコレクション設定のルールとオペレーション](CHAP_Tasks.CustomizingTasks.TableMapping.SelectionTransformation.Tablesettings.md) オペレーションの説明」をご参照ください。<br />この並列ロード設定を指定するとき、ターゲットテーブルに制約やインデックスを設定できないという制限があります。この制限の詳細については、「[Enabling Constraints After a Parallel Direct Path Load](https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-sql-loader-conventional-and-direct-loads.html#GUID-E2A3A8A3-78FF-45B6-90C0-14211621E77C)」をご参照ください。制約またはインデックスが有効になっている場合、この属性を `true` に設定しても効果はありません。<br />デフォルト値: `false` <br />有効な値: `true`/`false` <br />例: `--oracle-settings '{"DirectPathParallelLoad": true}'` | 
| `DirectPathNoLog` | この属性を `true` に設定すると、データベースログに証跡を書き込まずにテーブルに直接書き込むことで、Oracle ターゲットデータベースのコミットレートを上げることができます。詳細については、「[Direct-Load INSERT](https://docs.oracle.com/cd/A87860_01/doc/server.817/a76965/c21dlins.htm)」をご参照ください。この属性は、`UseDirectPathFullLoad` を `Y` に設定した場合のみ適用されます。<br />デフォルト値: `false` <br />有効な値: `true`/`false` <br />例: `--oracle-settings '{"DirectPathNoLog": true}'` | 
| `CharLengthSemantics` | 文字の列の長さをバイト単位または文字単位で指定します。文字の列の長さが文字単位であることを示すには、この属性を `CHAR` に設定します。それ以外の場合、文字の列の長さはバイト単位です。<br />デフォルト値: `CHAR` に設定されていません<br />有効な値: `CHAR`<br />例: `--oracle-settings '{"CharLengthSemantics": "CHAR"}'` | 
| `AlwaysReplaceEmptyString` | AWS DMS は、Oracle ターゲットに移行するときに空の文字列をレプリケートするためのスペースを追加します。一般に、Oracle には空の文字列の表記はありません。varchar2 に空の文字列を挿入すると、空の文字列を NULL としてロードします。Oracle にデータを NULL として挿入する場合は、この属性を FALSE に設定します。<br />デフォルト値: `true`<br />有効な値: `true`/`false`<br />例: `--oracle-settings '{"AlwaysReplaceEmptyString": false}'` | 

## Oracle のターゲットデータ型
<a name="CHAP_Target.Oracle.DataTypes"></a>

で使用されるターゲット Oracle データベースは、ほとんどの Oracle データ型 AWS DMS をサポートします。次の表は、 の使用時にサポートされる Oracle ターゲットデータ型 AWS DMS と AWS DMS 、データ型からのデフォルトのマッピングを示しています。ソースからマッピングされるデータ型を表示する方法の詳細については、使用しているソースのセクションをご参照ください。


|  AWS DMS データ型  |  Oracle のデータ型  | 
| --- | --- | 
| BOOLEAN | NUMBER (1) | 
| BYTES | RAW (長さ) | 
| DATE | DATETIME | 
| TIME | タイムスタンプ (0) | 
| DATETIME | タイムスタンプ (スケール) | 
| INT1 | NUMBER (3) | 
| INT2 | NUMBER (5) | 
| INT4 | NUMBER (10) | 
| INT8 | NUMBER (19) | 
| NUMERIC | NUMBER (p,s) | 
| REAL4 | FLOAT | 
| REAL8 | FLOAT | 
| STRING | date を指定: DATE <br />time を指定: タイムスタンプ <br />timestamp を指定: タイムスタンプ <br />timestamp\_with\_timezone を指定: タイムスタンプ時間帯あり <br />timestamp\_with\_local\_timezone を指定: タイムスタンプ WITH LOCAL TIMEZONE interval\_year\_to\_month を指定: INTERVAL YEAR TO MONTH <br />interval\_day\_to\_second を指定: INTERVAL DAY TO SECOND <br />長さ > 4000 の場合: CLOB<br />他のすべての場合: VARCHAR2 (長さ) | 
| UINT1 | NUMBER (3) | 
| UINT2 | NUMBER (5) | 
| UINT4 | NUMBER (10) | 
| UINT8 | NUMBER (19) | 
| WSTRING | 長さ > 2000 の場合: NCLOB<br />他のすべての場合: NVARCHAR2 (長さ) | 
| BLOB | BLOB<br />このデータ型を で使用するには AWS DMS、特定のタスクで BLOBs の使用を有効にする必要があります。BLOB データ型は、プライマリキーを含むテーブルでのみサポートされます。 | 
| CLOB | CLOB<br />このデータ型を で使用するには AWS DMS、特定のタスクで CLOBsの使用を有効にする必要があります。変更データキャプチャ (CDC) 中は、プライマリキーを含むテーブルでのみ CLOB データ型がサポートされます。<br />STRING<br />宣言されたサイズが 4000 バイトを超えるソースの Oracle VARCHAR2 データ型は、 AWS DMS CLOB を介して Oracle ターゲットの STRING にマッピングされます。 | 
| NCLOB | NCLOB<br />このデータ型を で使用するには AWS DMS、特定のタスクで NCLOBs の使用を有効にする必要があります。CDC 中、プライマリキーを含むテーブルでのみ NCLOB データ型がサポートされます。<br />WSTRING<br />宣言されたサイズが 4000 バイトを超えるソースの Oracle VARCHAR2 データ型は、NCLOB を介して Oracle ターゲットの WSTRING AWS DMS にマッピングされます。 | 
| XMLTYPE | XMLTYPE ターゲットデータ型は、Oracle 間レプリケーションタスクにのみ関連しています。<br />ソースデータベースが Oracle の場合、ソースデータ型はそのままの状態で Oracle ターゲットにレプリケートされます。たとえば、ソースにおける XMLTYPE データ型は、ターゲットでは XMLTYPE データ型として作成されます。 | 