AWS Database Migration Serviceのターゲットとしての Oracle データベースの使用 - AWS Database Migration Service

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

AWS Database Migration Serviceのターゲットとしての Oracle データベースの使用

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

がターゲットとして AWS DMS サポートする Oracle のバージョンについては、「」を参照してくださいのターゲット AWS DMS

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」をご参照ください。

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

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

のターゲットとしての Oracle の制限 AWS Database Migration Service

データ移行のターゲットとして 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 unforsonable conversion requested」というエラーで失敗します。この問題を解決するには、BatchApplyEnabledタスク設定を に設定してバッチ適用機能を有効にする必要がありますtrue。バッチ適用によりステートメント全体のサイズが小さくなり、32 KB の制限を回避できます。詳細については、「ターゲットメタデータのタスク設定」を参照してください。

ターゲットとして Oracle を使用する場合に必要なユーザーアカウント権限

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 を付与します。

ターゲットデータベース AWS Database Migration Service の に必要な読み取り権限

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 に付与します。

移行前評価

Oracle をターゲットとして Oracle の評価 に一覧表示されている移行前評価を使用するには、ターゲットデータベースの dms_user データベースユーザーに次のアクセス許可を追加する必要があります。

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

のターゲットとしての Oracle データベースの設定 AWS Database Migration Service

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

のターゲットとして Oracle を使用する場合のエンドポイント設定 AWS DMS

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

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

名前 説明

EscapeCharacter

この属性はエスケープ文字に設定する。このエスケープ文字を使うと、単一のワイルドカード文字をテーブルマッピング式で通常の文字のように動作させることができる。詳細については、「テーブルマッピングのワイルドカード」を参照してください。

デフォルト値: Null

有効値: ワイルドカード文字以外の任意の文字

例: --oracle-settings '{"EscapeCharacter": "#"}'

UseDirectPathFullLoad

に設定するとY、直接パスの全ロード AWS DMS が使用されます。Oracle Call Interface (OCI) で直接パスプロトコルを使用可能にするには、この値を指定します。この OCI プロトコルを使用すると、完全ロード時に Oracle ターゲットテーブルを一括ロードできます。

デフォルト値: true

有効な値: true/false

例: --oracle-settings '{"UseDirectPathFullLoad": false}'

DirectPathParallelLoad

true に設定した場合、この属性は、UseDirectPathFullLoadY に設定されている場合に並列ロードを指定します。この属性は、 AWS DMS 並列ロード機能を使用する場合にのみ適用されます。詳細については、parallel-load にある「テーブルとコレクション設定のルールとオペレーション オペレーションの説明」をご参照ください。

この並列ロード設定を指定するとき、ターゲットテーブルに制約やインデックスを設定できないという制限があります。この制限の詳細については、「Enabling Constraints After a Parallel Direct Path Load」をご参照ください。制約またはインデックスが有効になっている場合、この属性を true に設定しても効果はありません。

デフォルト値: false

有効な値: true/false

例: --oracle-settings '{"DirectPathParallelLoad": true}'

DirectPathNoLog

この属性を true に設定すると、データベースログに証跡を書き込まずにテーブルに直接書き込むことで、Oracle ターゲットデータベースのコミットレートを上げることができます。詳細については、「Direct-Load INSERT」をご参照ください。この属性は、UseDirectPathFullLoadY に設定した場合のみ適用されます。

デフォルト値: false

有効な値: true/false

例: --oracle-settings '{"DirectPathNoLog": true}'

CharLengthSemantics

文字の列の長さをバイト単位または文字単位で指定します。文字の列の長さが文字単位であることを示すには、この属性を CHAR に設定します。それ以外の場合、文字の列の長さはバイト単位です。

デフォルト値: CHAR に設定されていません

有効な値: CHAR

例: --oracle-settings '{"CharLengthSemantics": "CHAR"}'

AlwaysReplaceEmptyString

AWS DMS は、Oracle ターゲットに移行するときに空の文字列をレプリケートするためのスペースを追加します。一般に、Oracle には空の文字列の表記はありません。varchar2 に空の文字列を挿入すると、空の文字列を NULL としてロードします。Oracle にデータを NULL として挿入する場合は、この属性を FALSE に設定します。

デフォルト値: true

有効な値: true/false

例: --oracle-settings '{"AlwaysReplaceEmptyString": false}'

Oracle のターゲットデータ型

で使用されるターゲット 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

time を指定: タイムスタンプ

timestamp を指定: タイムスタンプ

timestamp_with_timezone を指定: タイムスタンプ時間帯あり

timestamp_with_local_timezone を指定: タイムスタンプ WITH LOCAL TIMEZONE interval_year_to_month を指定: INTERVAL YEAR TO MONTH

interval_day_to_second を指定: INTERVAL DAY TO SECOND

長さ > 4000 の場合: CLOB

他のすべての場合: VARCHAR2 (長さ)

UINT1

NUMBER (3)

UINT2

NUMBER (5)

UINT4

NUMBER (10)

UINT8

NUMBER (19)

WSTRING

長さ > 2000 の場合: NCLOB

他のすべての場合: NVARCHAR2 (長さ)

BLOB

BLOB

このデータ型を で使用するには AWS DMS、特定のタスクで BLOBs の使用を有効にする必要があります。BLOB データ型は、プライマリキーを含むテーブルでのみサポートされます。

CLOB

CLOB

でこのデータ型を使用するには AWS DMS、特定のタスクで CLOBsの使用を有効にする必要があります。変更データキャプチャ (CDC) 中は、プライマリキーを含むテーブルでのみ CLOB データ型がサポートされます。

STRING

宣言されたサイズが 4000 バイトを超えるソース上の Oracle VARCHAR2 データ型は、 AWS DMS CLOB を介して Oracle ターゲット上の STRING にマッピングされます。

NCLOB

NCLOB

でこのデータ型を使用するには AWS DMS、特定のタスクで NCLOBsの使用を有効にする必要があります。CDC 中、プライマリキーを含むテーブルでのみ NCLOB データ型がサポートされます。

WSTRING

宣言されたサイズが 4000 バイトを超えるソース上の Oracle VARCHAR2 データ型は、NCLOB を介して Oracle ターゲット上の WSTRING AWS DMS にマッピングされます。

XMLTYPE

XMLTYPE ターゲットデータ型は、Oracle 間レプリケーションタスクにのみ関連しています。

ソースデータベースが Oracle の場合、ソースデータ型はそのままの状態で Oracle ターゲットにレプリケートされます。たとえば、ソースにおける XMLTYPE データ型は、ターゲットでは XMLTYPE データ型として作成されます。