使用 Oracle 資料庫做為 AWS Database Migration Service的目標 - AWS 資料庫遷移服務

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Oracle 資料庫做為 AWS Database Migration Service的目標

您可以使用從其他 Oracle 資料庫或其他支援的資料庫之一 AWS DMS,將資料移轉至 Oracle 資料庫目標。您可以使用 Secure Sockets Layer (SSL) 加密您 Oracle 端點與複寫執行個體之間的連線。如需將 SSL 與 Oracle 端點搭配使用的詳細資訊,請參閱使用 SSL 搭配使用 AWS Database Migration Service。 AWS DMS 也支援使用 Oracle 通透資料加密 (TDE) 來加密目標資料庫中的靜態資料,因為 Oracle TDE 不需要加密金鑰或密碼即可寫入資料庫。

如需有關作為目標 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 表格和索引移轉至目標中的預設表格和索引表格空間。如果您要將資料表和索引遷移到不同的資料表和索引資料表空間,請使用資料表空間轉換來這樣做。例如,假設您在 INVENTORY 結構描述中有一組資料表指派給 Oracle 來源中的一些資料表空間。對於遷移,您想要將所有這些資料表指派給目標中的單一 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,請參閱下列各節:

甲骨文作為下列目標的限制 AWS Database Migration Service

使用 Oracle 做為資料遷移目標時有以下限制:

  • AWS DMS 不會在目標 Oracle 資料庫上建立結構描述。您必須在目標 Oracle 資料庫中建立您想要的任何結構描述。Oracle 目標中必須已有結構描述名稱。來源綱要的表格會匯入 AWS DMS 使用者或綱要,以連線至目標執行處理。若要遷移多個結構描述,您可以建立多個複寫任務。您也可以將資料遷移至目標上不同的資料架構。若要這麼做,您必須在資料 AWS DMS 表對應上使用結構描述轉換規則。

  • AWS DMS 不支持具有索引類型上下文的表的Use direct path full load選項。若要解決這個問題,您可以使用陣列載入。

  • 使用批次最佳化套用模式,載入到網路變更表會使用直接路徑,這不支援 XML 資料類型。若要解決這個問題,您可以使用交易套用模式。

  • 從來源資料庫遷移的空白字串可能會使用與 Oracle 目標不同的方式處理 (例如轉換成一個空格的字串)。這可能會導致 AWS DMS 驗證報告不匹配。

  • 您可以使用下列公式,表示在批次最佳化套用模式下每個資料表支援的欄總數:

    2 * columns_in_original_table + columns_in_primary_key <= 999

    例如,如果原始資料表有 25 個欄,其中「主索引鍵」由 5 欄組成,則欄的總數為 55。如果表格超過支援的欄數,則會在 one-by-one 模式下套用所有變更。

  • AWS DMS 不支援 Oracle 雲端基礎架構 (OCI) 上的自主資料庫。

使用 Oracle 做為目標所需之使用者帳戶權限

若要在 AWS Database Migration Service 作業中使用 Oracle 目標,請授與 Oracle 資料庫中的下列權限。請將這些權限授予 Oracle 資料庫定義中指定給 AWS DMS的使用者帳戶。

  • 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

  • DELETE ANY TABLE

針對以下要求,請授予這些額外的權限:

  • 若要使用特定的資料表清單,請在任何複寫資料表中授予 SELECT 權限,也可以授予 ALTER 權限。

  • 若要讓使用者在預設資料表空間中建立資料表,請授予 GRANT UNLIMITED TABLESPACE 權限。

  • 針對登入,授予 CREATE SESSION 權限。

  • 如果您使用的是直接路徑 (這是完全載入的預設路徑),則為 GRANT LOCK ANY TABLE to dms_user;

  • 如果使用「DROP 和 CREATE」資料表準備模式時的結構描述不同,則為 GRANT CREATE ANY INDEX to dms_user;.

  • 對於某些完全載入案例,您可以選擇「DROP 與 CREATE 資料表」或「先截斷再載入」選項,其中目標資料表結構描述與 DMS 使用者不同。在此情況下,授予 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 權限

  • SYS.DBA_REGISTRY 的 SELECT 權限

如果 V$xxx 無法獲授予任何所需的權限,請將這些權限授予 V_$xxx。

預處理評估

若要以 Oracle 作為目標使用中列出甲骨文評估的預先處理評量,您必須將下列權限新增至目標dms_user資料庫上的資料庫使用者:

GRANT SELECT ON V_$INSTANCE TO dms_user;

將 Oracle 資料庫設定為下列項目的目標 AWS Database Migration Service

使用 Oracle 資料庫作為資料移轉目標之前,您必須提供 Oracle 使用者帳戶給 AWS DMS。此使用者帳戶必須擁有 Oracle 資料庫的讀取/寫入權限,如使用 Oracle 做為目標所需之使用者帳戶權限一節所指定。

使用 Oracle 作為下列項目的目標時的端點設定 AWS DMS

您可以使用端點設定來設定您的 Oracle 目標資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立目標端點時指定設定,或使用中的create-endpoint命令以 --oracle-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。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 時,此屬性會在 UseDirectPathFullLoad 設為 Y 時,指定平行載入。僅當您使用 AWS DMS parallel 負載功能時,此屬性也適用。如需詳細資訊,請參閱資料表和集合設定規則與操作中的 parallel-load 操作。

指定此平行載入設定的限制是,目標資料表不可有任何條件約束或索引。如需此限制的詳細資訊,請參閱平行直接路徑載入後啟用條件約束。如果啟用條件約束或索引,將此屬性設為 true 不會產生任何作用。

預設值:false

有效值:true/false

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

DirectPathNoLog

設為 true 時,此屬性有助於藉由直接寫入資料表,而不是將線索寫入資料表日誌,以提高 Oracle 目標資料庫的遞交率。如需詳細資訊,請參閱直接載入 INSERT。此屬性也僅適用於將 UseDirectPathFullLoad 設為 Y 時。

預設值: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 資料庫 AWS DMS 支援大部分的 Oracle 資料類型。下表顯示使用時所支援的 Oracle 目標資料類型,以 AWS DMS 及來自 AWS DMS 資料類型的預設對應。如需如何檢視從來源映射的資料類型詳細資訊,請參閱您要使用的來源一節。

AWS DMS 資料類型

Oracle 資料類型

BOOLEAN

NUMBER (1)

BYTES

RAW (長度)

DATE

DATETIME

TIME

TIMESTAMP (0)

DATETIME

TIMESTAMP (擴展)

INT1

NUMBER (3)

INT2

NUMBER (5)

INT4

NUMBER (10)

INT8

NUMBER (19)

NUMERIC

NUMBER (p,s)

REAL4

FLOAT

REAL8

FLOAT

STRING

使用日期指示:DATE

使用時間指示:TIMESTAMP

使用時間戳記指示:TIMESTAMP

使用 timestamp_with_timezone 指示:TIMESTAMP WITH TIMEZONE

使用 timestamp_with_local_timezone 指示:TIMESTAMP 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,您必須針對特定工作啟用 BLOB 的使用。只有包含主索引鍵的資料表支援 BLOB 資料類型

CLOB

CLOB

若要搭配使用此資料類型 AWS DMS,您必須針對特定工作啟用 CLOB 的使用。在變更資料擷取 (CDC) 期間,只有包含主索引鍵的資料表支援 CLOB 資料類型。

STRING

來源上宣告大小超過 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS CLOB 對應至甲骨文目標上的字串。

NCLOB

NCLOB

若要搭配使用此資料類型 AWS DMS,您必須針對特定工作啟用 NCloB 的使用。在 CDC 期間,只有包含主索引鍵的資料表支援 NCLOB 資料類型。

WSTRING

來源上宣告大小大於 4000 個位元組的 Oracle VARCHAR2 資料類型會透過 AWS DMS NCLOB 對應至甲骨文目標上的 WSTRING。

XMLTYPE

XMLTYPE 目標資料類型僅在 Oracle 到 Oracle 的複寫任務中相關。

當來源資料庫是 Oracle 時,來源資料類型會按「原狀」複寫到 Oracle 目標。例如,來源的 XMLTYPE 資料類型會建立為目標的 XMLTYPE 資料類型。