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

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

使用 Babelfish 作為 AWS Database Migration Service 的目標

您可以使用 AWS Database Migration Service,將資料從 Microsoft SQL Server 來源資料庫遷移到 Babelfish 目標。

Babelfish for Aurora PostgreSQL 會擴展您的 Amazon Aurora PostgreSQL 相容版本,使其能夠接受來自 Microsoft SQL Server 用戶端的資料庫連線。這樣做可讓原本為 SQL Server 建置的應用程式直接使用 Aurora PostgreSQL,相較於傳統遷移,程式碼只需稍微變更,不需要變更資料庫驅動程式。

如需有關 AWS DMS 支援作為目標的 Babelfish 版本資訊,請參閱 的目標 AWS DMS。在 Aurora PostgreSQL 上使用舊版的 Babelfish 需要升級,然後才能使用 Babelfish 端點。

注意

Aurora PostgreSQL 目標端點是將資料遷移至 Babelfish 的慣用方式。如需更多詳細資訊,請參閱 使用 Babelfish for Aurora PostgreSQL 作為目標

如需使用 Babelfish 作為資料庫端點的相關資訊,請參閱《適用於 Aurora 的 Amazon Aurora 使用者指南》中的 Babelfish for Aurora PostgreSQL

使用 Babelfish 作為 AWS DMS 目標的先決條件

在遷移資料之前,您必須先建立資料表,以確保 AWS DMS 使用正確的資料類型和資料表中繼資料。如果您沒有在執行遷移之前在目標上建立資料表,AWS DMS 可能會建立資料類型和許可皆不正確的資料表。例如,AWS DMS 會改將時間戳記資料欄建立為 binary(8),而不會提供預期的時間戳記/資料列版本功能。

在遷移前準備和建立資料表
  1. 執行包含任何唯一限制、主索引鍵或預設限制的建立資料表 DDL 陳述式。

    請勿包含外部索引鍵限制,或是檢視、預存程序、函數或觸發程序等物件的任何 DDL 陳述式。您可以在遷移來源資料庫之後套用這些項目。

  2. 識別任何身分識別資料欄、計算的資料欄或內含資料表之資料列版本或時間戳記資料類型的資料欄。然後,建立必要的轉換規則,以處理執行遷移任務時的已知問題。如需更多詳細資訊,請參閱 轉換規則與動作

  3. 識別具有 Babelfish 不支援之資料類型的資料欄。然後,變更目標資料表中受影響的資料欄,以使用支援的資料類型,或建立轉換規則以在遷移任務期間移除這些資料欄。如需更多詳細資訊,請參閱 轉換規則與動作

    下表列出 Babelfish 不支援的來源資料類型,以及要使用的對應建議目標資料類型。

    來源資料類型

    建議的 Babelfish 資料類型

    HEIRARCHYID

    NVARCHAR(250)

    GEOMETRY

    VARCHAR(MAX)

    GEOGRAPHY

    VARCHAR(MAX)

為 Aurora PostgreSQL Serverless V2 來源資料庫設定 Aurora 容量單位 (ACU)

您可以透過設定最小 ACU 值,來改善 AWS DMS 遷移任務的效能,然後再執行遷移任務。

執行 AWS DMS 遷移任務後,您可以針對 Aurora PostgreSQL Serverless V2 來源資料庫,將 ACU 的最小值重設為合理的層級。

使用 Babelfish 作為 AWS Database Migration Service 目標的安全需求

以下說明對 Babelfish 目標使用 AWS DMS 時的安全性需求:

  • 用來建立資料庫的管理員使用者名稱 (管理員使用者)。

  • PSQL 登入和具有充足 SELECT、INSERT、UPDATE、DELETE 和 REFERENCES 許可的使用者。

使用 Babelfish 作為 AWS DMS 目標的使用者許可

重要

基於安全考量,用於資料遷移的使用者帳戶必須是您作為目標使用之任何 Babelfish 資料庫的註冊使用者。

Babelfish 目標端點需要最基本使用者許可才能執行 AWS DMS 遷移。

若要建立登入和低權限 Transact-SQL (T-SQL) 使用者
  1. 建立連線至伺服器時要使用的登入和密碼。

    CREATE LOGIN dms_user WITH PASSWORD = 'password'; GO
  2. 為 Babelfish 叢集建立虛擬資料庫。

    CREATE DATABASE my_database; GO
  3. 建立目標資料庫的 T-SQL 使用者。

    USE my_database GO CREATE USER dms_user FOR LOGIN dms_user; GO
  4. 對於 Babelfish 資料庫中的每個資料表,對這些資料表的 GRANT 許可。

    GRANT SELECT, DELETE, INSERT, REFERENCES, UPDATE ON [dbo].[Categories] TO dms_user;

使用 Babelfish 作為 AWS Database Migration Service 目標的限制

使用 Babelfish 資料庫作為 AWS DMS 目標時有下列限制:

  • 僅支援資料表準備模式「不執行任何操作」。

  • ROWVERSION 資料類型需要資料表對應規則,該規則會在遷移任務期間將資料欄名稱從資料表中移除。

  • 不支援 sql_variant 資料類型。

  • 不支援完整 LOB 模式。使用 SQL Server 作為來源端點時,必須設定 SQL Server 端點連線屬性設定 ForceFullLob=True,才能將 LOB 遷移至目標端點。

  • 複寫任務設定具有下列限制:

    { "FullLoadSettings": { "TargetTablePrepMode": "DO_NOTHING", "CreatePkAfterFullLoad": false, }. }
  • Babelfish 中的 TIME(7)、DATETIME2(7) 和 DATETIMEOFFSET(7) 資料類型會將時間秒部分的精確度值限制為 6 位數。使用這些資料類型時,請考慮為目標資料表使用精確度值 6。對於 Babelfish 2.2.0 版及更高版本,當使用 TIME(7) 和 DATETIME2(7) 時,精確度的第七位數字始終為零。

  • 在 DO_NOTHING 模式下,DMS 會檢查資料表是否已存在。如果資料表不存在於目標結構描述中,DMS 會根據來源資料表定義建立資料表,並將任何使用者定義的資料類型對應至其基底資料類型。

  • AWS DMS 遷移至 Babelfish 目標的任務不支援具有使用 ROWVERSION 或 TIMESTAMP 資料類型之資料欄的資料表。您可以使用資料表對應規則,在轉移過程中將資料欄名稱從資料表中移除。以下轉換規則範例中,會轉換來源中名為 Actor 的資料表,以將所有開頭為 col 字元的資料欄從目標中的 Actor 資料表中移除。

    { "rules": [{ "rule-type": "selection",is "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-action": "remove-column", "rule-target": "column", "object-locator": { "schema-name": "test", "table-name": "Actor", "column-name": "col%" } }] }
  • 對於具有身分識別或計算資料欄的資料表,其中目標資料表使用混合大小寫名稱 (例如類別),您必須建立轉換規則動作,將 DMS 任務的資料表名稱轉換為小寫。下列範例會顯示如何建立轉換規則動作,使用 AWS DMS 主控台變為小寫。如需更多詳細資訊,請參閱 轉換規則與動作

    Babelfish 轉換規則
  • 在 Babelfish 版本 2.2.0 之前,DMS 會將您可複製到 Babelfish 目標端點的資料欄數量限制為二十 (20) 個資料欄。使用 Babelfish 2.2.0 時,上限提高到 100 個資料欄。但是在 Babelfish 2.4.0 版及更高版本中,您可以複寫的資料欄數再次提高。您可以針對 SQL Server 資料庫執行下列程式碼範例,以判斷哪些資料表太長。

    USE myDB; GO DECLARE @Babelfish_version_string_limit INT = 8000; -- Use 380 for Babelfish versions before 2.2.0 WITH bfendpoint AS ( SELECT [TABLE_SCHEMA] ,[TABLE_NAME] , COUNT( [COLUMN_NAME] ) AS NumberColumns , ( SUM( LEN( [COLUMN_NAME] ) + 3) + SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 ) + LEN( TABLE_SCHEMA ) + 3 + 12 -- INSERT INTO string + 12) AS InsertIntoCommandLength -- values string , CASE WHEN ( SUM( LEN( [COLUMN_NAME] ) + 3) + SUM( LEN( FORMAT(ORDINAL_POSITION, 'N0') ) + 3 ) + LEN( TABLE_SCHEMA ) + 3 + 12 -- INSERT INTO string + 12) -- values string >= @Babelfish_version_string_limit THEN 1 ELSE 0 END AS IsTooLong FROM [INFORMATION_SCHEMA].[COLUMNS] GROUP BY [TABLE_SCHEMA], [TABLE_NAME] ) SELECT * FROM bfendpoint WHERE IsTooLong = 1 ORDER BY TABLE_SCHEMA, InsertIntoCommandLength DESC, TABLE_NAME ;

Babelfish 的目標資料類型

下表顯示在使用 AWS DMS 和來自 AWS DMS 資料類型的預設映射時,受支援的 Babelfish 目標資料類型。

如需 AWS DMS 資料類型的詳細資訊,請參閱AWS Database Migration Service 的資料類型

AWS DMS 資料類型

Babelfish 資料類型

BOOLEAN

TINYINT

BYTES

VARBINARY (長度)

DATE

DATE

TIME

TIME

INT1

SMALLINT

INT2

SMALLINT

INT4

INT

INT8

BIGINT

NUMERIC

NUMERIC(p,s)

REAL4

REAL

REAL8

FLOAT

STRING

如果資料行是日期或時間資料行,請執行下列動作:

  • SQL Server 2008 和更新版本請使用 DATETIME2。

  • 舊版且若擴展等於或小於 3 請使用 DATETIME。所有其他案例請使用 VARCHAR (37)。

如果資料行不是日期或時間資料行,請使用 VARCHAR (長度)。

UINT1

TINYINT

UINT2

SMALLINT

UINT4

INT

UINT8

BIGINT

WSTRING

NVARCHAR(length)

BLOB

VARBINARY(max)

若要在 DMS 使用此資料類型,您必須針對特定任務使用 BLOB。DMS 只在有主索引鍵的資料表中支援 BLOB 資料類型。

CLOB

VARCHAR(max)

若要在 DMS 使用此資料類型,您必須針對特定任務使用 CLOB。

NCLOB

NVARCHAR(max)

若要在 DMS 使用此資料類型,您必須針對特定任務使用 NCLOB。在 CDC 期間,DMS 只在包含主索引鍵的資料表中支援 NCLOB 資料類型。