使用 Microsoft SQL 伺服器資料庫作為來源 AWS DMS - AWS Database Migration Service

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

使用 Microsoft SQL 伺服器資料庫作為來源 AWS DMS

遷移數據從一個或多個 Microsoft SQL 服務器數據庫使用 AWS DMS. 使用 SQL Server 資料庫做為來源,您可以將資料移轉到另一個 SQL Server 資料庫,或移轉至其他 AWS DMS 支援的資料庫之一。

如需有關 AWS DMS 支援做為來源之 SQL Server 版本的資訊,請參閱資料來源 AWS DMS

SQL Server 資料庫可安裝在您網路的任何電腦上。使用 AWS DMS 需要有具有所選任務類型來源資料庫適當存取權限的 SQL Server 帳戶。此帳戶必須具有 view definitionview server state 許可。您可以使用以下命令來新增此許可:

grant view definition to [user] grant view server state to [user]

AWS DMS 支援從 SQL Server 的具名執行個體移轉資料。建立來源端點時,您可以在伺服器名稱中使用以下符號。

IPAddress\InstanceName

例如,以下是正確的來源端點伺服器名稱。在此,名稱的第一部分是伺服器的 IP 地址,第二部分是 SQL Server 執行個體名稱 (在本範例中為 SQLTest)。

10.0.0.25\SQLTest

此外,請取得 SQL Server 的具名執行個體監聽的連接埠號碼,並使用它來設定 AWS DMS 來源端點。

注意

連接埠 1433 是 Microsoft SQL 伺服器的預設值。但是,每次 SQL Server 啟動時都會變更的動態連接埠,以及用來透過防火牆連線至 SQL Server 的特定靜態連接埠號碼也經常使用。因此,當您建立 AWS DMS 來源端點時,您想要知道 SQL Server 具名執行個體的實際連接埠號碼。

您可以使用 SSL 加密您 SQL Server 端點與複寫執行個體之間的連線。如需使用 SSL 搭配 SQL Server 端點的詳細資訊,請參閱使用 SSL 搭配使用 AWS Database Migration Service

如需有關使用 SQL Server 來源資料庫的其他詳細資訊 AWS DMS,請參閱下列內容。

使用 SQL 伺服器做為來源的限制 AWS DMS

使用 SQL Server 資料庫做為 AWS DMS 來源時有下列限制:

  • 資料行的身分屬性不會遷移到目標資料庫資料行。

  • SQL Server 端點不支援使用具有疏鬆資料行的資料表。

  • 不支援 Windows 驗證。

  • 不複寫 SQL Server 計算欄位的變更。

  • 不支援時態資料表。

  • 不支援 SQL Server 分割區切換。

  • 使用 WRITETEXT 和 UPDATETEXT 公用程式時, AWS DMS 不會擷取來源資料庫上套用的事件。

  • 不支援以下資料處理語言 (DML) 模式。

    SELECT * INTO new_table FROM existing_table
  • 使用 SQL Server 做為來源時,不支援資料行層級的加密。

  • AWS DMS 不支援 SQL 伺服器層級稽核或 SQL 伺服器 2008 R2 作為來源。這是因為 SQL Server 2008 和 2008 R2 的已知問題。例如,執行下列命令會導 AWS DMS 致失敗。

    USE [master] GO ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on) GO
  • 當使用 SQL Server 作為來源時,完整 lob 模式中不支援幾何資料欄。請改用有限 lob 模式或將 InlineLobMaxSize 任務設定設為使用內嵌 lob 模式。

  • 在複寫任務中使用 Microsoft SQL Server 來源資料庫時,如果您移除任務,系統不會移除 SQL Server 複寫發布者定義。Microsoft SQL Server 系統管理員必須從 Microsoft SQL Server 中刪除這些定義。

  • 僅支援完整載入工作,從結構描述繫結和 non-schema-bound 檢視移轉資料。

  • 不支援使用 sp_rename 重新命名資料表 (例如 sp_rename 'Sales.SalesRegion', 'SalesReg;))

  • 不支援使用 sp_rename 重新命名欄 (例如 sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';)

  • AWS DMS 不支持設置和取消設置列默認值的更改處理(使用帶有ALTER TABLE語句的ALTER COLUMN SET DEFAULT子句)。

  • AWS DMS 不支持更改處理來設置列可空性(使用帶有語句的ALTER COLUMN [SET|DROP] NOT NULLALTER TABLE句)。

  • 使用 SQL Server 2012 和 SQL Server 2014,當使用 DMS 複寫搭配可用群組時,無法將分佈資料庫放置在可用群組中。SQL 2016 支援將散發資料庫放入可用性群組,但用於合併、雙向或 peer-to-peer 複寫拓撲的散發資料庫除外。

  • 對於分區資料表, AWS DMS 不支援每個分割區的不同資料壓縮設定。

  • 將值插入至 SQL Server 空間資料類型 (GEOGRAPHY 和 GEOMETRY) 時,您可以忽略空間參考系統識別碼 (SRID) 屬性或指定不同的數字。使用空間資料類型複製表格時, AWS DMS 會以預設 SRID 取代 SRID (幾何圖形為 0,而地理位置則為 4326)。

  • 如果未針對 MS-REPLICATION 或 MS-CDC 設定資料庫,您仍可擷取沒有主索引鍵的資料表,但系統只會擷取 INSERT/DELETE DML 事件。系統會忽略 UPDATE 和 TRUNCATE TABLE 事件。

  • 不支援 Columnstore 索引。

  • 不支援記憶體最佳化資料表 (使用記憶體內 OLTP)。

  • 使用包含多個資料行的主索引鍵複寫資料表時,不支援在完全載入期間更新主索引鍵資料行。

  • 不支援延遲耐久性。

  • 因為 RDS 執行備份的方式,readBackupOnly=Y 端點設定 (額外的連線屬性) 不適用於 RDS for SQL Server 來源執行個體。

  • RDS 使用者沒有執行 SQL Server 預存程序 (sp_repldone) 的存取權,因此 EXCLUSIVE_AUTOMATIC_TRUNCATION 不適用於 Amazon RDS SQL Server 來源執行個體。

  • AWS DMS 不捕獲截斷命令。

  • AWS DMS 不支援在開啟加速資料庫復原 (ADR) 的情況下從資料庫進行複寫。

  • AWS DMS 不支援在單一交易中擷取資料定義語言 (DDL) 和資料操作語言 (DML) 陳述式。

  • AWS DMS 不支援複寫資料層應用程式套件 (DACPAC)。

  • 包含主索引鍵或唯一索引以及更新多個資料列的 UPDATE 陳述式,可能會在您將變更套用至目標資料庫時造成衝突。例如,當目標資料庫將更新套用為 INSERT 和 DELETE 陳述式 (而不是單一 UPDATE 陳述式) 時,就可能會發生這種情況。使用批次最佳化套用模式時,資料表可能會遭忽略。使用交易式套用模式時,UPDATE 作業可能會導致違反限制。若要避免此問題,請重新載入相關資料表。或者,在「套用例外」控制資料表 (dmslogs.awsdms_apply_exceptions) 中找出有問題的記錄,然後在目標資料庫中手動編輯這些記錄。如需詳細資訊,請參閱 變更處理調校設定

  • AWS DMS 不支援複寫資料表和結構描述,其中名稱包含下列集合中的特殊字元。

    \\ -- \n \" \b \r ' \t ;

  • 不支援資料遮罩。 AWS DMS 移轉已遮罩的資料,而不進行遮罩。

  • AWS DMS 複製最多 32,767 個資料表與主索引鍵,每個資料表最多可複製 1,000 個資料欄。這是因為 AWS DMS 會針對每個複寫的資料表建立 SQL Server 複寫文章,而 SQL Server 複寫文件則有這些限制。

  • 使用變更資料擷取 (CDC) 時,您必須將組成唯一索引的所有資料欄定義為 NOT NULL。如果不符合此需求,則會導致 SQL Server 系統錯誤 22838。

以下限制在存取備份交易日誌時適用:

  • 不支援加密備份。

  • 不支援儲存在 URL 或 Windows Azure 上的備份。

  • AWS DMS 不支援從替代共用資料夾的檔案層級直接處理交易記錄檔備份。

僅限完全載入任務的許可

若要執行僅限完全載入任務,需要下列許可。請注意, AWS DMS 不會建立dms_user登入。如需建立 SQL Server 登入的相關資訊,請參閱建立 Microsoft SQL 伺服器的資料庫使用者

USE db_name; CREATE USER dms_user FOR LOGIN dms_user; ALTER ROLE [db_datareader] ADD MEMBER dms_user; GRANT VIEW DATABASE STATE to dms_user ; USE master; GRANT VIEW SERVER STATE TO dms_user;

使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件

您可以對內部部署或 Amazon EC2 的自我管理 SQL Server 資料庫,或 Amazon RDS 或 Microsoft Azure SQL 受管執行個體的雲端資料庫上,使用進行中複寫 (變更資料擷取,也就是 CDC)。

在 SQL Server 資料庫做為 AWS DMS 時使用進行中複寫,會特別提出下列要求:

  • 您必須針對完整備份設定 SQL Server,而且必須先執行備份,再開始複寫資料。

  • 復原模型必須設定為 Bulk logged (大量記錄)Full (完整)

  • 不支援將 SQL Server 備份到多個磁碟。如果將備份定義為透過不同磁碟將資料庫備份寫入多個檔案,則 AWS DMS 無法讀取資料,且 AWS DMS 工作會失敗。

  • 針對自我管理 SQL Server 來源,當您移除任務時,不會移除 DMS CDC 任務使用的來源 SQL Server 複寫發布者定義。SQL Server 系統管理員必須從 SQL Server 刪除這些自我管理來源的定義。

  • 在 CDC 期間, AWS DMS 需要查詢 SQL Server 交易記錄檔備份以讀取變更。 AWS DMS 不支援使用原生格式的協力廠商備份軟體所建立的 SQL Server 交易記錄檔備份。若要支援使用原生格式並使用第三方備份軟體建立的交易日誌備份,請將 use3rdPartyBackupDevice=Y 連線屬性新增至來源端點。

  • 針對自我管理 SQL Server 來源,請注意,在近期建立的資料表發行前,SQL Server 不會擷取其變更。將資料表新增至 SQL Server 來源時,會 AWS DMS 管理建立發行集。不過,此程序可能需要幾分鐘。此延遲期間對新建立資料表的操作,不會擷取或複寫到目標。

  • AWS DMS 變更資料擷取需要在 SQL Server 中開啟完整交易記錄。若要在 SQL Server 中開啟完整交易記錄,請啟用 MS-REPLICATION 或 CHANGE DATA CAPTURE (CDC)。

  • 在 MS CDC 擷取作業處理這些變更前,都不會將 SQL Server tlog 項目標示為重複使用。

  • 不支援記憶體最佳化資料表的 CDC 操作。此限制適用於 SQL Server 2014 (初次引入功能的版本) 和更高版本。

  • AWS DMS 變更資料擷取需要在 Amazon EC2 或內部部署 SQL 伺服器上預設使用分發資料庫做為來源。因此,請確定您已啟動分發者,同時為具有主索引鍵的資料表設定 MS 複寫。

在內部部署或 Amazon EC2 上擷取自我管理 SQL Server 的資料變更

若要從來源 Microsoft SQL Server 資料庫擷取變更,請確定資料庫已設定為完整備份。在完整復原模式或大量記錄模式下設定資料庫。

對於自我管理的 SQL Server 來源,請 AWS DMS 使用下列項目:

MS-Replication

針對具有主索引鍵的資料表擷取變更。您可以將系統管理員權限授與來源 SQL Server 執行個體上的 AWS DMS 端點使用者,以自動設定此設定。或者,您可以按照本節中的步驟準備來源,並使用沒有端點系統管理員權限的 AWS DMS 使用者。

MS-CDC

針對不具有主索引鍵的資料表擷取變更。必須在資料庫層級啟用 MS-CDC,而且是針對所有資料表個別啟用。

設定 SQL Server 資料庫進行中複寫 (CDC) 時,您可以執行下列其中一項:

  • 使用 sysadmin 角色設定進行中複寫。

  • 設定進行中複寫不使用 sysadmin 角色。

在自我管理的 SQL 伺服器上設定進行中複寫

本節包含的相關資訊說明的是,在使用或不使用 sysadmin 角色的自我管理 SQL 伺服器上如何設定進行中複寫。

在自我管理的 SQL Server 上設定進行中複寫:使用 sysadmin 角色

AWS DMS SQL Server 的持續複寫會針對具有主索引鍵的資料表使用原生 SQL Server 複寫,並針對沒有主索引鍵的資料表變更資料擷取 (CDC)。

在設定進行中複寫之前,請參閱使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件

對於具有主索引鍵的表格,通常 AWS DMS 可以在來源上設定所需的人工因素。不過,針對自我管理的 SQL Server 來源執行個體,必須先手動設定 SQL Server 分佈。執行此操作之後,具有 sysadmin 權限的 AWS DMS 來源使用者可以自動為具有主索引鍵的資料表建立發行集。

若要檢查是否已設定分發,請執行下列命令。

sp_get_distributor

如果資料欄分佈的結果是 NULL,則表示尚未設定分佈。您可以使用下列程序設定分佈。

設定分佈
  1. 使用 SQL Server Management Studio (SSMS) 工具連線至 SQL Server 來源資料庫。

  2. 開啟複寫資料夾的內容 (按一下滑鼠右鍵) 選單,然後選擇設定分佈。[設定分佈精靈] 隨即顯示。

  3. 按照精靈的指示輸入預設值,然後建立分佈。

設定 CDC

AWS DMS 版本 3.4.7 及更高版本可以為您的數據庫和所有表自動設置 MS CDC,如果您不使用只讀複本。若要使用此功能,請將 SetUpMsCdcForTables ECA 設定為 true。如需 ECA 的相關資訊,請參閱端點設定

對於 3.4.7 之 AWS DMS 前的版本或作為來源的唯讀複本,請執行下列步驟:

  1. 對於沒有主索引鍵的資料表,請為資料庫設定 MS-CDC。若要這麼做,請使用已指派 sysadmin 角色的帳戶,並執行下列命令。

    use [DBname] EXEC sys.sp_cdc_enable_db
  2. 接下來,為每個來源資料表設定 MS-CDC。針對有唯一索引鍵、但沒有主索引鍵的每個資料表,執行以下查詢以設定 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO
  3. 針對沒有主索引鍵、也沒有唯一索引鍵的每個資料表,執行以下查詢以設定 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO

如需設定特定資料表 MS-CDC 的詳細資訊,請參閱 SQL Server 文件

在獨立 SQL Server 上設定進行中複寫:沒有 sysadmin 角色

如需在沒有 sysadmin 角色的獨立 SQL Server 上設定進行中複寫的資訊,請參閱在獨立 SQL Server 上設定持續複寫:而不使用 sysadmin 角色

設定雲端 SQL Server 資料庫執行個體的進行中複寫

本節說明如何在雲端託管的 SQL Server 資料庫執行個體上設定 CDC。雲端託管的 SQL 伺服器執行個體是在 Amazon RDS for SQL Server、Azure SQL 受管執行個體或任何其他受管雲端 SQL Server 執行個體上執行的執行個體。如需每種資料庫類型之進行中複寫限制的相關資訊,請參閱使用 SQL 伺服器做為來源的限制 AWS DMS

在設定進行中複寫之前,請參閱使用來自 SQL Server 來源進行中複寫 (CDC) 的先決條件

與自我管理的 Microsoft SQL Server 來源不同,Amazon RDS for SQL Server 不支援 MS-Replication。因此, AWS DMS 需要將 MS-CDC 用於有或沒有主索引鍵的表格。

Amazon RDS 不會授與系統管理員權限來設定 AWS DMS 用於來源 SQL Server 執行個體中持續變更的複寫成品。請務必如下列程序所示,為 Amazon RDS 執行個體開啟 MS-CDC (使用主要使用者權限)。

在雲端 SQL Server 資料庫執行個體上啟用 MS-CDC
  1. 在資料庫層級執行以下其中一種查詢。

    如果是 RDS for SQL Server 資料庫執行個體,請使用此查詢。

    exec msdb.dbo.rds_cdc_enable_db 'DB_name'

    對於 Azure SQL 受管資料庫執行個體,請使用此查詢。

    USE DB_name GO EXEC sys.sp_cdc_enable_db GO
  2. 針對有主索引鍵的每個資料表,執行以下查詢以啟用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL, @supports_net_changes = 1 GO

    針對有唯一索引鍵、但沒有主索引鍵的每個資料表,執行以下查詢以啟用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO

    針對沒有主索引鍵、也沒有唯一索引鍵的每個資料表,執行以下查詢以啟用 MS-CDC。

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO
  3. 使用以下命令設定保留期間,以使用來源的變更。

    use dbname EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 86399 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

    參數 @pollinginterval 的測量單位為秒,建議值設定為 86399。這表示當 @pollinginterval = 86399 時,交易日誌會保留變更 86,399 秒 (一天)。此程序 exec sp_cdc_start_job 'capture' 會啟動設定。

    注意

    對於某些版本的 SQL Server,如果將 pollinginterval 的值設定為超過 3599 秒,就會將值重設為預設值 (五秒)。發生這種情況時,T-Log 條目會先清除,然後才 AWS DMS 能讀取它們。若要判斷哪些 SQL Server 版本會受到這個已知問題的影響,請參閱這篇 Microsoft 知識庫文章

    如果您將 Amazon RDS 與異地同步備份搭配使用,請確保您也將次要設定為具有正確的值,以防容錯移轉。

    exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , 86399

如果擷取 SQL Server 來源進行中變更的 AWS DMS 複寫工作停止超過一小時,請使用下列程序。

若要在 AWS DMS 複寫工作期間維持保留期間
  1. 使用以下命令,停止截斷交易日誌的任務。

    exec sp_cdc_stop_job 'capture'
  2. 在 AWS DMS 控制台上找到您的任務並繼續任務。

  3. 選擇監控索引標籤,接著勾選 CDCLatencySource 指標。

  4. 一旦 CDCLatencySource 指標等於 0 (零) 並停在該階段,請使用下列命令重新開始截斷交易日誌的作業。

    exec sp_cdc_start_job 'capture'

請記得開始截斷 SQL Server 交易日誌的任務。否則,SQL Server 執行個體上的儲存空間可能會填滿。

雲端 SQL Server 資料庫執行個體上進行中複寫的限制

  • AWS DMS 僅支援使用中交易記錄的持續複寫 (CDC)。您無法搭配 CDC 使用備份日誌。

  • 如果您將事件從作用中交易日誌移至備份日誌,或從作用中的交易日誌截斷事件,則可能會遺失事件。

使用適用 Amazon RDS for SQL Server 作為來源時的建議設定 AWS DMS

當您使用 Amazon RDS for SQL Server 作為來源時,擷取作業會依賴參數 maxscansmaxtrans。這些參數會控制擷取對交易日誌進行掃描的次數上限,以及每次掃描所處理的交易數目。

對於交易數目大於 maxtrans*maxscans 的資料庫,提高 polling_interval 值可能會導致作用中交易日誌記錄不斷累積。反過來,此累積會導致交易日誌變大。

請注意, AWS DMS 不會依賴 MS-CDC 擷取工作。MS-CDC 擷取作業會將交易日誌項目標記為已處理。這可讓交易日誌備份作業從交易日誌中移除項目。

我們建議您監控交易日誌的大小,以及 MS-CDC 作業是否成功。如果 MS-CDC 工作失敗,交易記錄檔可能會過度成長,並造成複寫失敗。 AWS DMS 您可以使用來源資料庫中的 sys.dm_cdc_errors 動態管理檢視,來監控 MS-CDC 擷取作業錯誤。您可以使用 DBCC SQLPERF(LOGSPACE) 管理命令來監控交易日誌大小。

若要解決 MS-CDC 造成的交易日誌增加
  1. 檢查資Log Space Used %料庫 AWS DMS 是否正在從中複製,並驗證資料庫是否持續增加。

    DBCC SQLPERF(LOGSPACE)
  2. 識別封鎖交易日誌備份程序的項目。

    Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();

    如果 log_reuse_wait_desc 值等於 REPLICATION,則日誌備份保留是由 MS-CDC 中的延時所造成。

  3. 增加 maxtransmaxscans 參數值,以提高擷取作業所處理的事件數目。

    EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

若要解決這個問題,請設定maxscansmaxtrans的值等maxtrans*maxscans於每天從來源資料庫 AWS DMS 複寫之表格產生的平均事件數目。

如果您將這些參數設定為高於建議值,擷取作業會處理交易日誌中的所有事件。如果您將這些參數設定為低於建議值,MS-CDC 延時會增加,而且交易日誌也會增加。

由於工作負載中的變更會產生不同數量的事件,因此找出 maxscansmaxtrans 適當的值可能很困難。在此情況下,建議您設定 MS-CDC 延時的監控。如需詳細資訊,請參閱 SQL Server 文件中的監控程序。然後根據監控結果動態設定 maxtransmaxscans

如果 AWS DMS 工作無法找到繼續或繼續工作所需的記錄序號 (LSN),則工作可能會失敗並需要完全重新載入。

注意

使用 AWS DMS 從 RDS for SQL Server 來源複寫資料時,在 Amazon RDS 執行個體發生停止啟動事件後嘗試繼續複寫時,可能會遇到錯誤。這是因為 SQL Server 代理程式程序會在停止啟動事件之後重新啟動時,重新啟動擷取作業程序。這會略過 MS-CDC 輪詢間隔。

因此,在交易磁碟區低於 MS-CDC 擷取工作處理的資料庫上,這可能會導致資料被處理或標示為已複寫和備份,然後才 AWS DMS 能從停止的位置繼續進行,導致下列錯誤:

[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)

若要緩解此問題,請依照先前的建議設定 maxtransmaxscans 值。

支援的 SQL Server 壓縮方法

請注意, AWS DMS 中下列與支援 SQL Server 壓縮方法的相關資訊:

  • AWS DMS 支援 SQL Server 2008 年及更新版本的資料列/頁面壓縮。

  • AWS DMS 不支持 Vardecimal 存儲格式。

  • AWS DMS 不支援稀疏資料行和資料行結構壓縮。

使用自我管理的 SQL 伺服器 AlwaysOn可用性群組

SQL Server Always On 可用群組功能提供高可用性和災難復原,可作為資料庫鏡像的企業級替代方案。

在中 AWS DMS,您可以從單一主要或次要可用性群組複本移轉變更。

使用主要可用群組複本

若要使用主要可用性群組作為中的來源 AWS DMS,請執行下列動作:
  1. 啟用可用性複本之所有 SQL Server 執行個體的分佈選項。如需詳細資訊,請參閱 在自我管理的 SQL 伺服器上設定進行中複寫

  2. 在 AWS DMS 主控台中,開啟 SQL Server 來源資料庫設定。針對伺服器名稱,指定為可用群組接聽程式設定的網域名稱服務 (DNS) 名稱或 IP 地址。

當您第一次啟動 AWS DMS 任務時,可能需要比平常更長的時間才能開始。較慢的原因是因為可用群組伺服器正在複寫資料表文章的建立。

使用次要可用群組複本

若要使用次要可用性群組作為中的來源 AWS DMS,請執行下列動作:
  1. 使用與 AWS DMS 來源端點使用者所使用的相同認證連線至個別複本。

  2. 確定您的 AWS DMS 複寫執行個體可以解析所有現有複本的 DNS 名稱,並連線到這些複本。您可以使用下列 SQL 查詢來取得所有複本的 DNS 名稱。

    select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar JOIN sys.availability_databases_cluster adc ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
  3. 建立來源端點時,請為端點的伺服器名稱或端點祕密的伺服器地址指定可用群組接聽程式的 DNS 名稱。如需可用群組接聽程式的詳細資訊,請參閱 SQL Server 文件中的什麼是可用群組接聽程式?

    您可以使用公有 DNS 伺服器或內部部署 DNS 伺服器,來解析可用群組接聽程式、主要複本和次要複本。若要使用內部部署 DNS 伺服器,請設定 Amazon Route 53 Resolver。如需詳細資訊,請參閱 使用自己的內部部署名稱伺服器

  4. 請將下列連線額外屬性新增至來源端點。

    額外連線屬性 備註
    applicationIntent ReadOnly 如果沒有此 ODBC 設定,會將複寫任務路由至主要可用群組複本。如需詳細資訊,請參閱 SQL Server 文件中的高可用性、災難復原的 SQL Server 原生用戶端支援
    multiSubnetFailover yes 如需詳細資訊,請參閱 SQL Server 文件中的高可用性、災難復原的 SQL Server 原生用戶端支援
    alwaysOnSharedSynchedBackupIsEnabled false 如需詳細資訊,請參閱 使用 SQL Server 做為下列項目的來源時的端點設定 AWS DMS
    activateSafeguard false 如需詳細資訊,請參閱下列 限制
    setUpMsCdcForTables false 如需詳細資訊,請參閱下列 限制
  5. 啟用可用群組中所有複本上之分佈選項。將所有節點新增至分發者清單。如需詳細資訊,請參閱 設定分佈

  6. 在主要讀寫複本上執行下列查詢,以啟用資料庫的發布功能。您只針對資料庫執行一次此查詢。

    sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';

限制

下列是使用次要可用群組複本的限制:

  • AWS DMS 使用唯讀可用性群組複本作為來源時,不支援保護。如需詳細資訊,請參閱 使用 SQL Server 做為下列項目的來源時的端點設定 AWS DMS

  • AWS DMS 使用唯讀可用性群組複本作為來源時,不支援setUpMsCdcForTables額外的連線屬性。如需詳細資訊,請參閱 使用 SQL Server 做為下列項目的來源時的端點設定 AWS DMS

  • AWS DMS 可以使用自我管理的次要可用性群組複本作為從 3.4.7 版開始持續複寫 (變更資料擷取或 CDC) 的來源資料庫。不支援 Cloud SQL Server 異地同步備份僅供讀取複本。如果您使用舊版的 AWS DMS,請確定您使用主要可用性群組複本做為 CDC 的來源資料庫。

容錯移轉至其他節點

如果您將端點的ApplicationIntent額外連線屬性設定為ReadOnly,則您的 AWS DMS 任務會連線至具有最高唯讀路由優先順序的唯讀節點。然後,當優先順序最高的唯讀節點無法使用時,其會容錯移轉至可用群組中的其他唯讀節點。如果未設定ApplicationIntent,您的 AWS DMS 工作只會連線至可用性群組中的主要 (讀取/寫入) 節點。

使用 SQL Server 做為下列項目的來源時的安全性需求 AWS Database Migration Service

AWS DMS 使用者帳戶必須至少具有您要連線之來源 SQL Server 資料庫上的db_owner使用者角色。

使用 SQL Server 做為下列項目的來源時的端點設定 AWS DMS

您可以使用端點設定來設定 SQL Server 來源資料庫,類似於使用額外的連線屬性。您可以在使用 AWS DMS 主控台建立來源端點時指定設定,或使用中的create-endpoint命令以 --microsoft-sql-server-settings '{"EndpointSetting": "value", ...}' JSON 語法指定設定。AWS CLI

下列資料表顯示您可以在將 SQL Server 作為來源搭配使用的端點設定。

名稱 描述

ActivateSafeguard

此屬性會開啟或關閉「保護」。如需「保護」的相關資訊,請參閱下列SafeguardPolicy

預設值:true

有效值:{falsetrue}

範例:'{"ActivateSafeguard": true}'

AlwaysOnSharedSynchedBackupIsEnabled

此屬性會調整從 SQL Server 來源資料庫 (作為「永遠開啟」可用性群組叢集一部分) 進行移轉 AWS DMS 時的行為。

AWS DMS 已增強對 SQL Server 來源資料庫的支援,這些資料庫設定為在「永遠開啟」叢集中執行。在此情況下, AWS DMS 會嘗試追蹤交易備份是否正在 Always On 叢集中的節點進行,而不是從來源資料庫執行個體託管所在的節點進行。啟動移轉工作時, AWS DMS 會嘗試連線至叢集中的每個節點,但如果無法連線到任何一個節點,就會失敗。

如果您需 AWS DMS 要輪詢永遠在叢集中的所有節點以進行交易備份,請將此屬性設定為false

預設值:true

有效值:truefalse

範例:'{"AlwaysOnSharedSynchedBackupIsEnabled": false}'

"ApplicationIntent": "readonly"

此 ODBC 驅動程式屬性設定會導致 SQL Server 將複寫任務路由到優先順序最高的唯讀節點。如果沒有此設定,SQL Server 會將複寫任務路由至主要讀寫節點。

EnableNonSysadminWrapper

當您在沒有 sysadmin 使用者的獨立 SQL 伺服器上設定進行中複寫時,請使用此端點設定。3.4.7 及更高 AWS DMS 版本支援此參數。如需在獨立 SQL 伺服器上設定進行中複寫的相關資訊,請參閱在獨立 SQL Server 上設定進行中複寫:沒有 sysadmin 角色

預設值:false

有效值:truefalse

範例:'{"EnableNonSysadminWrapper": true}'

ExecuteTimeout

使用這個額外連線屬性 (ECA),來設定 SQL Server 執行個體的用戶端陳述式逾時 (以秒為單位)。預設值為 60 秒。

範例:'{"ExecuteTimeout": 100}'

FatalOnSimpleModel

當設定為 true 時,這個設定會在將 SQL Server 資料庫復原模式設定 simple 為時產生嚴重錯誤。

預設值:false

有效值:truefalse

範例:'{"FatalOnSimpleModel": true}'

ForceLobLookup

對內嵌 LOB 強制執行查詢。

預設值:false

有效值:truefalse

範例:'{"ForceLobLookup": false}'

"MultiSubnetFailover": "Yes"

此 ODBC 驅動程式屬性可協助 DMS 在可用群組容錯移轉的情況下連線至新的主要。此屬性是針對連線中斷或接聽程式 IP 地址不正確的情況所設計。在這些情況下,會 AWS DMS 嘗試連線至與可用性群組接聽程式相關聯的所有 IP 位址。

ReadBackupOnly

使用此屬性需要 sysadmin 權限。當此屬性設定為時Y,在進行中的複寫期間,只會從交易記錄檔備份讀 AWS DMS 取變更,而不會從使用中交易記錄檔讀取。將此參數設為 Y 可讓您控制在完全載入和進行中複寫任務期間控制作用中交易日誌檔的成長。不過,此參數可以將一些來源延遲新增至進行中複寫。

有效值:NY。預設值為 N

範例:'{"ReadBackupOnly": Y}'

備註:由於 RDS 執行備份的方式,此參數不適用於 Amazon RDS SQL Server 來源執行個體。

SafeguardPolicy

為了獲得最佳效能,請 AWS DMS 嘗試從使用中的交易記錄檔 (TLOG) 擷取所有未讀取的變更。不過,有時因為截斷,作用中的 TLOG 可能不包含所有未讀取的變更。發生這種情況時, AWS DMS 存取記錄備份以擷取遺失的變更。若要將存取記錄備份的需求降到最低,請使用下列其中一種方法來 AWS DMS 防止截斷:

  1. RELY_ON_SQL_SERVER_REPLICATION_AGENT(在資料庫中啟動交易):這是的預設值 AWS DMS。

    使用此設定時, AWS DMS 需要執行 SQL Server 日誌讀取器代理程式, AWS DMS 才能從作用中 TLOG 移動標記為要複寫的交易。請注意,如果日誌讀取器代理程式是未執的狀態,作用中的 TLOG 可能會變滿,造成來源資料庫切換至唯讀模式,直到您能夠解決問題為止。如果您需要在資料庫中啟用 Microsoft 複寫以外的目的 AWS DMS,則必須選擇此設定。

    當您使用此設定時,建立名為的資料表, AWS DMS 將記錄備份讀取降到最少,awsdms_truncation_safeguard並透過模擬資料庫中的開啟交易來防止 TLOG 截斷。這樣可避免資料庫在五分鐘內 (依預設) 截斷事件並將其移至備份日誌。請確定資料表未包含在任何維護計劃中,否則可能會導致維護作業失敗。如果沒有使用 Start Transactions 資料庫選項設定的任務,您就可以放心地刪除資料表。

  2. EXCLUSIVE_AUTOMATIC_TRUNCATION(僅適sp_repldone用於單一工作):當您使用此設定時, AWS DMS 可完全控制將記錄項目標記為ready for truncation使用的複寫代理程式程序sp_repldone。使用此設定時, AWS DMS 不會像使用 RELY_ON_SQL_SERVER_REPLICATION_AGENT (預設) 設定一樣使用虛擬交易。僅當 MS 複寫不用於來源資料庫以外 AWS DMS 的任何其他用途時,才能使用此設定。此外,使用此設定時,只有一 AWS DMS 項工作可以存取資料庫。如果您需要針對相同的資料庫 AWS DMS 執行 parallel 工作,請使用RELY_ON_SQL_SERVER_REPLICATION_AGENT.

    • 此設定需要在資料庫中停止日誌讀取器代理程式。如果工作開始時正在執行記錄讀取器代理程式, AWS DMS 工作將會強制其停止。或者,您可以在開始任務之前手動停止日誌讀取器代理程式。

    • 搭配 MS-CDC 使用此方法時,您應該停止並停用 MS-CDC 擷取MS-CDC 清理作業。

    • Microsoft SQL Server 移轉工作在遠端散發者電腦上執行時,您無法使用此設定,因為 AWS DMS 無法存取遠端電腦。

    • EXCLUSIVE_AUTOMATIC_TRUNCATION 不適用於 Amazon RDS for SQL Server 來源執行個體,因為 Amazon RDS 使用者沒有執行 sp_repldone 預存程序的存取權。

    • 如果您將 SafeguardPolicy 設為 EXCLUSIVE_AUTOMATIC_TRUNCATION,而不使用 sysadmin 角色,則必須將 dbo.syscategoriesdbo.sysjobs 物件的許可授予 dmsuser 使用者。

預設值:RELY_ON_SQL_SERVER_REPLICATION_AGENT

有效值:{EXCLUSIVE_AUTOMATIC_TRUNCATIONRELY_ON_SQL_SERVER_REPLICATION_AGENT}

範例:'{"SafeguardPolicy": "EXCLUSIVE_AUTOMATIC_TRUNCATION"}'

SetUpMsCdcForTables

此屬性會針對來源資料庫和任務對應中未啟用 MS-Replication 的資料表開啟 MS-CDC。將此值設定為 true,會在來源資料庫上執行 sp_cdc_enable_db 預存程序,然後在來源資料庫中未啟用 MS-Replication 之任務中的每個資料表上執行 sp_cdc_enable_table 預存程序。如需開啟分佈的詳細資訊,請參閱在自我管理的 SQL 伺服器上設定進行中複寫

有效值:{truefalse}

範例:'{"SetUpMsCdcForTables": true}'

TlogAccessMode

指示用來擷取 CDC 資料的模式。

預設值:PreferTlog

有效值:BackupOnlyPreferBackupPreferTlogTlogOnly

範例:'{"TlogAccessMode": "PreferTlog"}'

Use3rdPartyBackupDevice

將此屬性設定為 Y 時,如果以原生格式建立第三方交易日誌備份, AWS DMS 會對其進行處理。

SQL Server 的來源資料類型

使用 SQL Server 做為 AWS DMS 支援大多數 SQL Server 資料類型的來源的資料移轉。下表顯示使用時所支援的 SQL Server 來源資料類型,以 AWS DMS 及來自 AWS DMS 資料類型的預設對應。

如需如何檢視從目標映射的資料類型資訊,請參閱您要使用的目標端點一節。

如需有關資 AWS DMS 料類型的其他資訊,請參閱AWS Database Migration Service 的資料類型

SQL Server 資料類型

AWS DMS 資料類型

BIGINT

INT8

BIT

BOOLEAN

DECIMAL

NUMERIC

INT

INT4

MONEY

NUMERIC

NUMERIC (p,s)

NUMERIC

SMALLINT

INT2

SMALLMONEY

NUMERIC

TINYINT

UINT1

REAL

REAL4

FLOAT

REAL8

DATETIME

DATETIME

DATETIME2 (SQL Server 2008 和更高版本)

DATETIME

SMALLDATETIME

DATETIME

DATE

DATE

TIME

TIME

DATETIMEOFFSET

WSTRING

CHAR

STRING

VARCHAR

STRING

VARCHAR (max)

CLOB

TEXT

若要搭配使用此資料類型 AWS DMS,您必須針對特定工作啟用 CLOB 資料類型的使用。

對於 SQL Server 資料表, AWS DMS 更新目標中的 LOB 資料行資料行,即使是不會變更 SQL Server 中 LOB 資料行值的 UPDATE 陳述式也是如此。

在 CDC 期間,僅在包含主索引鍵的資料表中 AWS DMS 支援 CLOB 資料類型。

NCHAR

WSTRING

NVARCHAR (長度)

WSTRING

NVARCHAR (max)

NCLOB

NTEXT

若要搭配使用此資料類型 AWS DMS,您必須啟用特 SupportLobs 定工作的使用。如需啟用 Lob 支援的詳細資訊,請參閱設定 AWS DMS 作業中來源資料庫的 LOB 支援

對於 SQL Server 資料表, AWS DMS 更新目標中的 LOB 資料行資料行,即使是不會變更 SQL Server 中 LOB 資料行值的 UPDATE 陳述式也是如此。

在 CDC 期間,僅在包含主索引鍵的資料表中 AWS DMS 支援 CLOB 資料類型。

BINARY

BYTES

VARBINARY

BYTES

VARBINARY (max)

BLOB

IMAGE

對於 SQL Server 資料表, AWS DMS 更新目標中的 LOB 資料行資料行,即使是不會變更 SQL Server 中 LOB 資料行值的 UPDATE 陳述式也是如此。

若要搭配使用此資料類型 AWS DMS,您必須針對特定工作啟用 BLOB 資料類型的使用。

AWS DMS 僅在包含主索引鍵的資料表中支援 BLOB 資料類型。

TIMESTAMP

BYTES

UNIQUEIDENTIFIER

STRING

HIERARCHYID

複寫到 SQL Server 目標端點時請使用 HIERARCHYID。

複寫到所有其他目標端點時使用 WSTRING (250)。

XML

NCLOB

對於 SQL Server 資料表, AWS DMS 更新目標中的 LOB 資料行資料行,即使是不會變更 SQL Server 中 LOB 資料行值的 UPDATE 陳述式也是如此。

若要搭配使用此資料類型 AWS DMS,您必須針對特定工作啟用 NCLOB 資料類型的使用。

在 CDC 期間,僅在包含主索引鍵的資料表中 AWS DMS 支援 NCLOB 資料類型。

GEOMETRY

複寫到支援此資料類型的目標端點時,請使用 GEOMETRY。

複寫到不支援此資料類型的目標端點時,請使用 CLOB。

GEOGRAPHY

複寫到支援此資料類型的目標端點時,請使用 GEOGRAPHY。

複寫到不支援此資料類型的目標端點時,請使用 CLOB。

AWS DMS 不支援包含具有下列資料類型之欄位的表格。

  • CURSOR

  • SQL_VARIANT

  • TABLE

注意

使用者定義的資料類型是否受支援,依其基本類型而定。例如,以 DATETIME 為基礎的使用者定義資料類型,視為 DATETIME 資料類型處理。