共用方式為


如何在複製活動中設定 Azure SQL 資料庫 受控執行個體

本文概述如何使用數據管線中的複製活動,從 Azure SQL 資料庫 受控執行個體 複製數據。

支援的設定

如需複製活動下每個索引標籤的設定,請分別移至下列各節。

一般

請參閱一般設定指引,以設定 [一般設定] 索引卷標。

來源

在複製活動的 [來源] 索引標籤下,Azure SQL 資料庫 受控執行個體 支援下列屬性。

顯示來源索引標籤和屬性清單的螢幕快照。

需要下列屬性

  • 數據存放區類型:選取 [外部]。

  • 連線:從聯機清單中選取 Azure SQL 資料庫 受控執行個體 連線。 如果連線不存在,請選取 [新增],以建立新的 Azure SQL 資料庫 受控執行個體 連線。

  • 連線 類型:選取 [Azure SQL 資料庫 受控執行個體]。

  • 使用查詢:指定讀取資料的方式。 您可以選擇 [資料表]、 [查詢] 或 [預存程式]。 下列清單描述每個設定的組態:

    • 數據表:從指定的數據表讀取數據。 從下拉式清單中選取您的源數據表,或選取 [ 編輯 ] 以手動輸入。

    • 查詢:指定要讀取數據的自定義 SQL 查詢。 例如 select * from MyTable。 或選取鉛筆圖示以在程式碼編輯器中編輯。

      顯示查詢設定的螢幕快照。

    • 預存程式:使用從源數據表讀取數據的預存程式。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。

      • 預存程式名稱:選取預存程式,或在選取 [編輯 ] 以從源數據表讀取數據時手動指定預存程序名稱。

      • 預存程序參數:指定預存程序參數的值。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 您可以選取 [匯入參數 ] 以取得預存程序參數。

        顯示預存程式設定的螢幕快照。

在 [進階] 底下,您可以指定下列欄位:

  • 查詢逾時(分鐘):指定查詢命令執行的逾時,預設值為 120 分鐘。 如果為此屬性設定參數,允許的值會是時間範圍,例如 “02:00:00” (120 分鐘)。

  • 隔離等級:指定 SQL 來源的交易鎖定行為。 允許的值包括:讀取認可、讀取未認可可重複讀取、可串行化、快照集。 如果未指定,則會使用資料庫的預設隔離等級。 如需詳細資訊, 請參閱 IsolationLevel 列舉

    顯示隔離等級設定的螢幕快照。

  • 數據分割選項:指定用來從 Azure SQL 資料庫 受控執行個體 載入資料的數據分割選項。 允許的值為: [無 ] (預設值)、 數據表的實體分割區,以及 [動態範圍]。 啟用分割區選項時(也就是非),從 Azure SQL 資料庫 受控執行個體 同時載入數據的平行處理原則程度是由複製活動設定索引標籤中的 [複製平行處理原則程度] 控制

    • :選擇此設定不要使用分割區。

    • 數據表的實體分割區:當您使用實體分割區時,數據分割數據行和機制會根據您的實體數據表定義自動決定。

    • 動態範圍:當您使用已啟用平行的查詢時,需要範圍分割參數(?DfDynamicRangePartitionCondition)。 範例查詢: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition

      • 數據分割數據行名稱:指定範圍數據分割用於平行複製之整數或日期/日期時間類型的源數據行名稱(intsmallintsmalldatetimedatebigintdatetimedatetime2或 )。datetimeoffset 如果未指定,則會自動偵測資料表的索引或主索引鍵作為分割資料行。

        如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?DfDynamicRangePartitionCondition。 如需範例,請參閱 Azure SQL 資料庫 受控執行個體 的平行複製一節。

      • 數據分割上限:指定分割區範圍分割的數據分割數據行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 如需範例,請參閱 Azure SQL 資料庫 受控執行個體 的平行複製一節。

      • 分割區下限:指定分割區範圍分割的數據分割數據行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 如需範例,請參閱 Azure SQL 資料庫 受控執行個體 的平行複製一節。

  • 其他數據行:新增其他數據行以儲存來源檔案的相對路徑或靜態值。 後者支持表達式。

請注意下列幾點:

  • 如果為來源指定 Query,複製活動會針對 Azure SQL 資料庫 受控執行個體 來源執行此查詢,以取得數據。 如果預存程式採用參數,您也可以指定預存程式名稱和預存程序參數來指定預存程式。
  • 在來源中使用預存程式來擷取數據時,請注意,如果預存程式的設計為在傳入不同的參數值時傳回不同的架構,您可能會在從 UI 匯入架構時,或從 UI 匯入架構或將數據複製到具有自動數據表建立的 SQL 資料庫時發生失敗或看到非預期的結果。

Destination

在複製活動的 [目的地] 索引標籤下,Azure SQL 資料庫 受控執行個體 支援下列屬性。

顯示 [目的地] 索引標籤的螢幕快照。

需要下列屬性

  • 數據存放區類型:選取 [外部]。

  • 連線:從聯機清單中選取 Azure SQL 資料庫 受控執行個體 連線。 如果連線不存在,請選取 [新增],以建立新的 Azure SQL 資料庫 受控執行個體 連線。

  • 連線 類型:選取 [Azure SQL 資料庫 受控執行個體]。

  • 數據表選項:您可以選擇 [使用現有的 ] 來使用指定的數據表。 或者,選擇 [ 自動建立數據表 ] 以在來源架構中不存在數據表時自動建立目的地數據表,並請注意,當預存程式做為寫入行為時,不支援此選取範圍。

    如果您選擇 [ 使用現有的] :

    • 數據表:從下拉式清單中選取目的地資料庫中的數據表。 或勾選 [編輯 ] 以手動輸入您的數據表名稱。

    如果您選擇:自動建立資料表

    • 數據表:指定自動建立目的地數據表的名稱。

在 [進階] 底下,您可以指定下列欄位:

  • 寫入行為:當來源是檔案型數據存放區中的檔案時,定義寫入行為。 您可以選擇 [插入]、[Upsert] 或 [預存程式]。

    • 插入:選擇此選項會使用插入寫入行為將數據載入 Azure SQL 資料庫 受控執行個體。

    • Upsert:選擇此選項會使用 upsert 寫入行為將數據載入 Azure SQL 資料庫 受控執行個體。

      • 使用 TempDB:指定是否要使用全域臨時表或實體數據表作為 upsert 的臨時表。 根據預設,服務會使用全域臨時表做為臨時表,並選取此屬性。

        顯示選取 [使用 TempDB] 的螢幕快照。

      • 選取使用者資料庫架構如果未選取 [使用 TempDB ],請在使用實體數據表時指定用來建立過渡數據表的過渡架構。

        注意

        您必須擁有建立和刪除資料表的許可權。 根據預設,過渡數據表會共用與目的地數據表相同的架構。

        顯示未選取 [使用 TempDB] 的螢幕快照。

      • 索引鍵數據行:指定唯一數據列識別的數據行名稱。 您可以使用單一索引鍵或一系列索引鍵。 如果未指定,則會使用主索引鍵。

    • 預存程式:使用預存程式,定義如何將源數據套用至目標數據表。 此預存程序將會依批次叫用。 針對只執行一次且與源數據無關的作業,例如刪除或截斷,請使用 預先複製腳本 屬性。

      • 預存程式名稱:選取預存程式,或在檢查 [編輯 ] 以從源數據表讀取數據時手動指定預存程式名稱。

      • 預存程式參數

        • 數據表類型:指定要用於預存程式中的數據表類型名稱。 複製活動會讓具有此數據表類型的臨時表中提供行動的數據。 然後,預存程序程式碼可以合併正在複製的資料與現有的資料。
        • 數據表類型參數名稱:指定預存程式中指定之數據表類型的參數名稱。
        • 參數:指定預存程序參數的值。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 您可以選取 [匯入參數 ] 以取得預存程序參數。

        顯示目的地寫入行為中預存程式設定的螢幕快照。

  • 大量插入數據表鎖定:選擇 [是 ] 或 [否 ] (預設值)。 使用此設定可改善在數據表上的大量插入作業期間,沒有來自多個用戶端之索引的複製效能。 當您選取 [插入] 或 [Upsert] 作為寫入行為時,可以指定此屬性。 如需詳細資訊,請移至 BULK INSERT (Transact-SQL)

  • 預先複製文本:指定要在每次執行中將數據寫入目的地數據表之前,要執行的複製活動的腳本。 您可以使用此屬性來清除預先載入的資料。

  • 寫入批次逾時:指定批次插入作業在逾時之前完成的等候時間。允許的值是時間範圍。 如果未指定任何值,逾時預設為 “02:00:00”。

  • 寫入批次大小:指定要插入每個批次之 SQL 資料表的數據列數目。 允許的值為整數 (資料列數目)。 根據預設,服務會依據資料列大小動態決定適當的批次大小。

  • 並行連線上限:活動執行期間,與數據存放區建立的並行連線上限。 僅在想要限制並行連線時,才需要指定值。

對應

針對 [對應] 索引標籤業態,如果您未將 Azure SQL 資料庫 受控執行個體 自動建立資料表作為目的地,請移至 [對應]。

如果您使用自動建立數據表作為目的地套用 Azure SQL 資料庫 受控執行個體,但 [對應] 中的組態除外,您可以編輯目的地數據行的類型。 選取 [ 匯入架構] 之後,您可以在目的地中指定數據行類型。

例如,來源中的ID資料行類型為int,而且當對應至目的地數據行時,您可以將它變更為 float 類型。

對應目的地數據行類型的螢幕快照。

設定

如需 設定 索引標籤組態,請移至 [設定] 索引標籤底下的 [設定其他設定]。

從 Azure SQL 資料庫 受控執行個體 平行複製

複製活動中 Azure SQL 資料庫 受控執行個體 連接器提供內建數據分割,以平行複製數據。 您可以在複製活動的 [來源] 索引標籤上找到資料分割選項。

當您啟用分割複製時,複製活動會針對 Azure SQL 資料庫 受控執行個體 來源執行平行查詢,以依分割區載入資料。 平行度是由複製活動設定索引標籤中的 [複製平行處理原則程度] 控制。例如,如果您將複製平行處理原則的程度設定為四個,服務會根據指定的分割區選項和設定,同時產生並執行四個查詢,而每個查詢都會從 Azure SQL 資料庫 受控執行個體 擷取部分數據。

建議您啟用與數據分割的平行複製,特別是當您從 Azure SQL 資料庫 受控執行個體 載入大量數據時。 以下針對各種情節的建議設定。 將資料複製到以檔案為基礎的資料存放區時,建議分成多個檔案來寫入資料夾 (僅指定資料夾名稱),這樣效能會比寫入單一檔案更好。

案例 建議的設定
使用實體分割區從大型資料表完整載入。 分割選項:資料表的實體分割區。

在執行期間,服務會自動偵測實體分割區,並依分割區複製資料。

若要檢查您的資料表是否有實體分割區,您可以參考此查詢
從大型資料表完整載入,不含實體分割區,同時在資料分割時包含整數或日期時間資料行。 分割選項:動態範圍分割。
分割資料行 (選用):指定用來分割資料的資料行。 如果未指定,則會使用索引或主索引鍵資料行。
分割區上限分割區下限 (選用):指定是否要決定分割區跨距。 這不適用於篩選數據表中的數據列,數據表中的所有數據列都會進行分割和複製。 如果未指定,複製活動會自動偵測值。

例如,如果您的分割區資料行「識別碼」具有範圍 1 到 100 之間的值,而您將下限設定為 20、上限設定為 80,且平行複製為 4,則服務會分別依 4 個分割區擷取資料 - 範圍中的識別碼分別為 <=20、[21, 50]、[51, 80] 和 >=81。
使用自訂查詢載入大量資料,不使用實體分割區,同時包含整數或日期/日期時間資料行用於資料分割。 分割選項:動態範圍分割。
查詢SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
分割資料行:指定用來分割資料的資料行。
分割區上限分割區下限 (選用):指定是否要決定分割區跨距。 這不適用於篩選數據表中的數據列,查詢結果中的所有數據列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。

例如,如果您的分割區資料行「識別碼」具有範圍 1 到 100 之間的值,而您將下限設定為 20、上限設定為 80,且平行複製為 4,則服務會分別依 4 個分割區擷取資料 - 範圍中的識別碼分別為 <=20、[21, 50]、[51, 80] 和 >=81。

以下是不同案例的更多範例查詢:
• 查詢整個資料表:
SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
• 從具有數據行選取範圍和其他 where 子句篩選的數據表查詢:
SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• 使用子查詢查詢:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
• 在子查詢中使用分割區進行查詢:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T

使用分割區選項載入資料的最佳做法:

  • 選擇獨特的資料行作為分割資料行 (例如主索引鍵或唯一索引鍵) 以避免資料扭曲。
  • 如果數據表具有內建分割區,請使用數據表的實體分割區選項來取得更佳的效能。

用來檢查實體分割區的範例查詢

SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id 
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id 
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id 
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id 
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id 
WHERE s.name='[your schema]' AND t.name = '[your table name]'

如果資料表具有實體分割區,您會看到 “HasPartition” 顯示為 “yes”,如下所示。

Sql 查詢結果。

數據表摘要

如需 Azure SQL 資料庫 受控執行個體 複製活動的摘要和詳細資訊,請參閱下表。

來源資訊

名稱 描述: 必要 JSON 腳本屬性
數據存放區類型 您的資料存放區類型。 外部 Yes /
[連接] 您與源資料存放區的連線。 < 您的連線 > Yes connection
連線類型 您的連線類型。 選取 [Azure SQL 資料庫 受控執行個體]。 Azure SQL Database 受控執行個體 Yes /
使用查詢 要讀取數據的自定義 SQL 查詢。 •表
•查詢
• 預存程式
Yes /
Table 您的源數據表。 < 數據表的名稱> No 模式
table
查詢 要讀取數據的自定義 SQL 查詢。 < 您的查詢 > No sqlReaderQuery
預存程式名稱 此屬性是從來源資料表讀取資料的預存程序名稱。 最後一個 SQL 陳述式必須是預存程序中的 SELECT 陳述式。 < 預存程式名稱 > No sqlReaderStoredProcedureName
預存程序參數 這些是預存程序的參數。 允許的值為名稱或值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 < 名稱或值組 > No storedProcedureParameters
查詢逾時 查詢命令執行的逾時。 時間範圍
(預設值為 120 分鐘)
No queryTimeout
隔離等級 指定 SQL 來源的異動鎖定行為。 • 已認可讀取
• 讀取未認可
• 可重複讀取
•序列 化
•快照
No isolationLevel:
• ReadCommitted
• ReadUncommitted
• RepeatableRead
•序列 化
•快照
數據分割選項 用來從 Azure SQL 資料庫 受控執行個體 載入資料的數據分割選項。 • 無 (預設值)
• 資料表的實體分割區
• 動態範圍
No partitionOption:
• 無 (預設值)
• PhysicalPartitionsOfTable
• DynamicRange
數據分割數據行名稱 整數或日期/日期時間類型的源數據行名稱(intbigintdatesmallintsmalldatetime、、datetimedatetime2datetimeoffset),用於平行複製的範圍數據分割。 如果未指定,則會自動偵測資料表的索引或主索引鍵作為分割資料行。 如果您使用查詢來取出來源資料,請在 WHERE 子句中加上 ?DfDynamicRangePartitionCondition < 分割區數據行名稱 > No partitionColumnName
分割區上限 分割區範圍分割的分割區資料行最大值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 < 分割區上限 > No partitionUpperBound
分割區下限 分割區範圍分割的分割區資料行最小值。 這個值用於決定分割區的跨距,而不是用於篩選資料表中的資料列。 資料表或查詢結果中的所有資料列都會進行分割和複製。 如果未指定,複製活動會自動偵測該值。 < 分割區下限 > No partitionLowerBound
其他數據行 新增其他數據行以儲存來源檔案的相對路徑或靜態值。 後者支持表達式。 •名字
•價值
No additionalColumns:
•名字
•價值

目的地資訊

名稱 描述: 必要 JSON 腳本屬性
數據存放區類型 您的資料存放區類型。 外部 Yes /
[連接] 您與目的地資料存放區的連線。 < 您的連線 > Yes connection
連線類型 您的連線類型。 選取 [Azure SQL 資料庫 受控執行個體]。 Azure SQL Database 受控執行個體 Yes /
數據表選項 指定是否在來源架構不存在時自動建立目的地數據表。 • 使用現有的
• 自動建立數據表
Yes tableOption:

• autoCreate
Table 您的目的地數據表。 <數據表的名稱> Yes 模式
table
寫入行為 複製活動將數據載入 Azure SQL 資料庫 受控執行個體 資料庫的寫入行為。 •插入
• Upsert
• 預存程式
No writeBehavior:
•插入
• upsert
sqlWriterStoredProcedureName, sqlWriterTableType, storedProcedureTableTypeParameterName, storedProcedureParameters
使用 TempDB 是否要使用全域臨時表或實體數據表作為 upsert 的臨時表。 selected (default) 或 unselected No useTempDB:
true (預設值) 或 false
選取使用者資料庫架構 如果使用實體數據表,則為建立過渡數據表的過渡架構。 注意:使用者必須具有建立和刪除資料表的權限。 根據預設,過渡數據表會共用與目的地數據表相同的架構。 當您未選取 [使用 TempDB] 時套用。 selected (default) 或 unselected No interimSchemaName
索引鍵數據行 唯一數據列識別的數據行名稱。 您可以使用單一索引鍵或一系列索引鍵。 如果未指定,則會使用主索引鍵。 < 您的索引鍵數據行> No 金鑰
預存程式名稱 定義如何將來源資料套用到目標資料表的預存程序名稱。 此預存程序將會依批次叫用。 針對只執行一次且與源數據無關的作業,例如刪除或截斷,請使用 預先複製腳本 屬性。 < 預存程式名稱 > No sqlWriterStoredProcedureName
數據表類型 在預存程序中使用的資料表類型名稱。 複製活動會讓具有此數據表類型的臨時表中提供行動的數據。 然後,預存程序程式碼可以合併正在複製的資料與現有的資料。 < 您的資料表類型名稱 > No sqlWriterTableType
數據表類型參數名稱 預存程序中指定資料表類型的參數名稱。 < 數據表類型的參數名稱 > No storedProcedureTableTypeParameterName
參數 預存程序的參數。 允許的值為:名稱和值組。 參數的名稱和大小寫必須符合預存程序參數的名稱和大小寫。 < 名稱和值組 > No storedProcedureParameters
大量插入數據表鎖定 使用此設定可改善在數據表上的大量插入作業期間,沒有來自多個用戶端之索引的複製效能。 是或否 (預設值) No sqlWriterUseTableLock:
true 或 false (預設值)
預先複製腳本 在每次執行中將數據寫入目的地數據表之前,要執行的複製活動腳本。 您可以使用此屬性來清除預先載入的資料。 < 預先複製腳本 >
(字串)
No preCopyScript
寫入批次逾時 在逾時前等待批次插入作業完成的時間。 時間範圍
(預設值為 “02:00:00”)
No writeBatchTimeout
寫入批次大小 每個批次要插入 SQL 資料表的數據列數目。 根據預設,服務會依據資料列大小動態決定適當的批次大小。 < 數據列數目 >
(整數)
No writeBatchSize
並行連線上限 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 < 並行連線的上限 >
(整數)
No maxConcurrentConnections