共用方式為


從 SQL Server 設定 Fabric 鏡像資料庫的自動重新植入

本文涵蓋從 SQL Server 執行個體鏡像資料庫的自動重新植入。

在某些情況下,鏡像至 Fabric 的延遲可能會導致交易記錄檔使用量增加。 這是因為在已認可的變更複寫至鏡像資料庫之前,無法截斷交易記錄檔。 一旦交易記錄大小達到其定義的上限,寫入資料庫就會失敗。 若要防止作業資料庫因關鍵 OLTP 交易而出現寫入失敗,您可以設定自動再生機制,允許截斷交易日誌,並將資料庫鏡像重新初始化至 Fabric。

重置會停止從鏡像資料庫到 Microsoft Fabric 的交易流動,並在目前狀態重新初始化鏡像。 這牽涉到產生設定為鏡像的資料表的新初始快照,並將其複製至 Microsoft Fabric。 快照之後,增量更新會被同步。

在重新植入期間,Microsoft Fabric 中的鏡像資料庫專案可供使用,但在重新植入完成之前不會收到累加變更。 reseed_state中的sys.sp_help_change_feed_settings欄指出重新植入狀態。

SQL Server 2025 預設關閉自動重新種子功能,請參見 啟用自動重新種子。 自動重新植入功能已啟用,且無法在 Azure SQL 資料庫和 Azure SQL 受控執行個體中管理或停用。

在 Fabric 鏡像中,會監視來源 SQL 資料庫交易記錄。 只有在下列三個條件成立時,才會觸發自動重新植入:

  • 交易日誌超過@autoreseedthreshold百分比已滿,例如70。 在 SQL Server 上,當您啟用此功能時,使用 sys.sp_change_feed_configure_parameters 來設定此值。
  • 日誌重複使用原因為 REPLICATION
  • 因為記錄重複使用等候可能會因其他功能(例如交易複寫或 CDC)而被提升,只有當 REPLICATION = 1 時 sys.databases.is_data_lake_replication_enabled 才會進行自動重播。 此值由 Fabric Mirroring 設定。

Diagnose

若要識別 Fabric 鏡映是否阻止鏡映資料庫的日誌截斷,請檢查 log_reuse_wait_desc 系統型錄視圖中的 sys.databases 直欄,以查看原因是否為 REPLICATION。 如需瞭解日誌重用等待類型的詳細資訊,請參閱 延遲交易日誌截斷的因素。 例如:

SELECT [name], log_reuse_wait_desc 
FROM sys.databases 
WHERE is_data_lake_replication_enabled = 1;

如果查詢顯示 REPLICATION 日誌重複使用等待類型,則由於 Fabric 鏡像,交易日誌無法清空已提交的交易,並且會繼續填滿。

使用下列 T-SQL 腳本來檢查記錄空間總計,以及目前的記錄使用量和可用空間:


USE <Mirrored database name>
GO 
--initialize variables
DECLARE @total_log_size bigint = 0; 
DECLARE @used_log_size bigint = 0;
DECLARE @size int;
DECLARE @max_size int;
DECLARE @growth int;

--retrieve total log space based on number of log files and growth settings for the database
DECLARE sdf CURSOR
FOR
SELECT SIZE*1.0*8192/1024/1024 AS [size in MB],
            max_size*1.0*8192/1024/1024 AS [max size in MB],
            growth
FROM sys.database_files
WHERE TYPE = 1 
OPEN sdf 
FETCH NEXT FROM sdf INTO @size,
                @max_size,
                @growth 
WHILE @@FETCH_STATUS = 0 
BEGIN
SELECT @total_log_size = @total_log_size + 
CASE @growth
        WHEN 0 THEN @size
        ELSE @max_size
END 
FETCH NEXT FROM sdf INTO @size,
              @max_size,
              @growth 
END 
CLOSE sdf;
DEALLOCATE sdf;

--current log space usage
SELECT @used_log_size = used_log_space_in_bytes*1.0/1024/1024
FROM sys.dm_db_log_space_usage;

-- log space used in percent
SELECT @used_log_size AS [used log space in MB],
       @total_log_size AS [total log space in MB],
       @used_log_size/@total_log_size AS [used log space in percentage];

啟用自動重新植入

如果先前 T-SQL 腳本傳回的日誌使用量接近已滿(例如,大於 70%),請考慮使用 sys.sp_change_feed_configure_parameters 系統預存程序啟用鏡像資料庫以自動重新植入。 例如,若要啟用自動重新覆寫功能:

USE <Mirrored database name>
GO
EXECUTE sys.sp_change_feed_configure_parameters 
  @autoreseed = 1
, @autoreseedthreshold = 70; 

如需詳細資訊,請參閱 sys.sp_change_feed_configure_parameters

在來源資料庫中,重新初始化應該釋放鏡像占用的交易記錄檔案空間。 在來源 SQL Server 資料庫上發出手動 CHECKPOINT,如果 REPLICATION 保留原因仍然是由於鏡像,則強制釋放記錄空間。 如需相關資訊,請參閱 檢查點 (Transact-SQL)。

手動重新播種

最佳實務是,您可以使用下列預存程序測試特定資料庫的手動重新植入,以在開啟自動重新植入功能之前瞭解影響。

USE <Mirrored database name>
GO
EXECUTE sp_change_feed_reseed_db_init @is_init_needed = 1;

如需詳細資訊,請參閱 sys.sp_change_feed_reseed_db_init

檢查是否已觸發重新植入

  • reseed_state在來源 SQL 資料庫中系統預存程序sys.sp_help_change_feed_settings的欄位指出其目前的重新設置狀態。

    • 0 = 一般。
    • 1 = 資料庫已開始重新初始化至 Fabric 的程式。 過渡狀態。
    • 2 = 資料庫正在重新初始化為 Fabric,並等待複寫重新啟動。 過渡狀態。 建立複寫時,重新植入狀態會移至 0

    如需詳細資訊,請參閱 sys.sp_help_change_feed_settings

  • 資料庫中啟用鏡像的所有資料表,其7中的state欄位值都會是sys.sp_help_change_feed_table

    如需詳細資訊,請參閱 sys.sp_help_change_feed_table