變更事件串流常見問題 (FAQ)

適用於: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

以下是關於 SQL Server 2025(17.x)、Azure SQL Database、Azure SQL 受控執行個體 以及 Microsoft Fabric 中 SQL 資料庫變更事件串流(CES)功能的問題解答。

備註

變更事件串流目前處於 預覽階段,且 在不同產品間的支援性存在差異。 在預覽期間,此功能可能會變更。

相容性和需求

CES 能支援 Azure SQL 資料庫嗎?

是的。 CES 自 2025 年 11 月起在 Azure SQL 資料庫中獲得支援。

CES 是否需要完整恢復模式?

是的。 CES 依賴讀取事務歷史記錄,因此 SQL Server 資料庫必須以完整恢復模式進行設定。

使用 CES 的成本為何?

對於 CES,Azure 事件中樞 和 Fabric Eventstream 使用量依標準費率計費。 流入和流出費用也適用。

效能和影響

啟用 CES 時,預期效能會對具有數百萬個數據列的大型資料庫造成什麼影響?

效能影響取決於您的特定工作負載和設定。 不過,CES 的負荷預期會比異動數據擷取 (CDC) 低,因為不會將數據寫回資料庫。

CES 支援的訊息大小上限為何?

CES 利用這個@max_message_size_kb設定將大型外發事件拆分成符合目的地 Azure 事件中樞 限制或設定 Fabric Eventstream 吞吐量的訊息區塊。 此設定僅控制訊息分割。 它不會變更每個資料欄的截斷限制:在 CES 建立輸出事件之前,每個大於 1 MB 的串流欄位值都會被截斷為 1 MB。

如果 CES 無法傳送事件(例如目的地問題、授權憑證過期等)交易紀錄會繼續增加嗎?

是的。 CES 確保訊息傳遞可靠(「至少一次」),因此交易日誌不會被截斷,直到事件成功送達。 如果傳遞失敗,記錄就會成長,直到問題解決為止。 維護 CES 的健康狀況非常重要,包括監控訊息傳遞、 錯誤,以及啟用 CES 的資料庫交易日誌的使用情況。

架構和數據處理

CES 如何處理架構變更,例如刪除資料行?

CES 包含每個事件的數據列架構。 如果 DDL 作業修改資料表(例如刪除、重新命名或新增資料行),則下一個 DML 事件會反映更新的架構。 CES 不會針對 DDL 作業本身發出事件。

CES 是否支援有 LOB 欄位的資料表(例如 varchar(max))?

是的。 CES 支援帶有 LOB 欄位的資料表。 對於每個設定為串流的資料表,您可以使用 sys.sp_add_object_to_event_stream_group 來控制 old 資料列是否包含 LOB 資料行值。 每個以串流方式傳輸的 LOB 值仍受每欄 1 MB 的截斷限制。 設定 最大文字 repl 大小 伺服器配置選項,允許啟用 CES 時寫入超過 65,536 位元組至 LOB 欄位。

如果串流欄位值大於 1 MB 會發生什麼事?

若一個或多個串流欄位值大於 1 MB,CES 會在該欄位值形成出站事件前,將受影響欄位值截斷至 1 MB。 此限制個別適用於每個欄位。 例如,若一列有五欄,且前三欄值皆大於 1 MB,CES 會將這三個值截斷為 1 MB,形成出站事件,並依據 @max_message_size_kb將事件拆分成訊息區塊,並將每個區塊傳送至目的地。

欄位資料截斷是無條件的。 發生這種截斷時,CES 不會記錄任何錯誤或警告。 設定 最大文字 repl 大小 伺服器配置選項,允許啟用 CES 時寫入超過 65,536 位元組至 LOB 欄位。

數據表是否需要主鍵才能使用 CES?

否。 CES 不需要資料表上的主鍵。

CES 事件的詳細程度如何?

受 INSERT、UPDATE 或 DELETE 作業影響的每一列會以單獨事件的形式處理串流。

如果交易修改了多個數據列,則會以個別事件或一個方式串流處理?

每個受影響的數據列都會以個別事件的形式串流處理。 每個事件都包含交易元數據,因此相同交易的變更可以在目的地上以邏輯方式分組。

整合和設定

CES 如何在高可用性 (HA) 設定中運作? 我可以使用 DNN 連接字串嗎?

CES 只會從主要復本串流。 發生故障轉移時,必須在新的主要伺服器上重新設定 CES。 你可以使用SQL Server支援的任何方法連接主副本,包括分散式網路名稱(DNN)。

CES 會使用哪些通訊協定來與目的地通訊?

CES 支援 Azure 事件中樞 與 Fabric Eventstream 的 Kafka 與 AMQP 協定。 不支援 HTTPS。 自 2026 年 8 月 15 日起,Azure SQL Database 及 Microsoft Fabric 中的 SQL 資料庫中新串流群組的 AMQP 協定將被棄用。 在這些平台上,所有新建立的串流群組都必須使用 AzureEventHubsdestination_type。 此目的類型使用 Kafka 協定。 Azure SQL 受控執行個體 和 SQL Server 2025 仍然接受AzureEventHubsApacheKafka,直到AzureEventHubsAMQP未來更新為止。 詳情請參見 AMQP 協定棄用。 如果你在現有串流群組使用 AMQP 協定,請將 Azure 事件中樞 的最低 TLS 版本設定選項設為 1.2。 CES 無法在 AMQP 協定上支援 TLS 1.3。

CES 是否可以直接串流至 Kafka?

否。 CES 目前僅支援 Azure 事件中樞(AMQP 和 Kafka 通訊協定)作為目的地。

CES 可以串流到 Fabric Eventstream 嗎?

是的。 你可以透過 Eventstream 提供的 Azure 事件中樞 相容自訂輸入端點,將 CES 連接到 Fabric Eventstream。 用 eventstream 連接字串 來設定 CES,就像你設定 Azure 事件中樞 一樣。

CES 是否支援 Microsoft Entra 管理身份,用於 Azure 事件中樞 和 Fabric Eventstream 的認證?

是的。 CES 支援 Azure SQL Database 與 Azure SQL 受控執行個體 中的 Microsoft Entra 認證。 對於 SQL Server 2025,從 Azure Arc 啟用或運行於 Azure VM 上的實例,從累積更新 3(CU3)開始支援 Microsoft Entra 認證。 Microsoft Entra 認證目前在 Microsoft Fabric 的 SQL 資料庫中不支援。

功能性與特徵

可以在已經使用事務複製的資料庫上啟用 CES 嗎?

否。 無法在使用事務複製設定的資料庫上啟用 CES。

CES 可以與「變更數據擷取」(CDC)一起執行嗎?

否。 無法在已啟用 CDC 的資料庫中啟用 CES。

CES 可以與適用於 SQL Server 的網狀架構鏡像資料庫搭配使用嗎?

如果 CES 被停用會怎樣? 重新啟用時會從中止點繼續嗎?

如果 CES 被關閉,就無法恢復。 您必須手動重新設定 CES 才能繼續直播活動。 關閉 CES 期間所做的資料變更不會被記錄。 只有在 CES 重新啟動後所做的變更才會被串流播放。 CES 保證至少傳遞一次 。 若 CES 未能傳遞訊息,則會持續重試,直到訊息成功送達或 CES 被停用為止。 若未停用 CES,失敗的訊息送達會阻止日誌截斷,直到錯誤狀況解決且訊息成功送達。 若關閉 CES,日誌截斷會恢復,停機期間發生的事件不會被捕捉。

如果我對一個為 CES 設定的資料庫做還原(或其他類型的遷移)會發生什麼事?

在還原(或其他類型的資料庫遷移)後,CES 會被停用並停止用於資料庫。 你必須重新設定才能重新開始串流。

當啟用 CES 時,CES 能否對資料表中現有資料做初始快照(「種子」)?

否。 CES 目前只串流啟用 CES 後發生的資料變更。 它不會將資料串流到在啟用 CES 之前已存在的資料表中。

如何監視 CES 活動(例如已處理的事件、錯誤)?

使用下列系統檢視來監視 CES 活動:

在 SQL Server 2025 中,你可以建立與 CES 相關的 xEvent 會話,並取得更多關於 CES 活動及潛在錯誤的詳細資訊。

  CREATE EVENT SESSION ChangeEventStreaming
  ON SERVER
  ADD EVENT sqlserver.synapse_link_error
  (
  )
  ADD TARGET package0.event_file 
  (SET filename=N'C:\temp\YourSession_Target1.xel');
  GO

在為 Azure SQL 受管實例設定 CES xEvent 監控時,請將你的 .xel 檔案存放在 Azure Blob 儲存體 容器中。 你可以透過觀察synapse_link_error事件,在 Azure SQL 受控執行個體 中觀察變更事件串流追蹤資訊:

CREATE CREDENTIAL
[your blob container URL here] --make sure to not leave / at the end
WITH IDENTITY = 'MANAGED IDENTITY';

DROP EVENT SESSION ChangeEventStreaming ON SERVER
CREATE EVENT SESSION ChangeEventStreaming
ON SERVER
ADD EVENT sqlserver.synapse_link_error
(
)
ADD TARGET package0.event_file
(
    SET filename = N'https://[your container URL]/cessession.xel'
  
);

xEvent 除錯不支援用於 Azure SQL 資料庫中 CES 故障排除。

你可以監控 Azure 事件中樞 或 Fabric Eventstream,並使用相關的指標和日誌。

CES 錯誤在 sys.dm_change_feed_errors 中會保留多久?

sys.dm_change_feed_errors錯誤列表會自動旋轉。 較新的錯誤會擠掉較早的項目。 停止發生的錯誤不會立即從列表中移除;它們會保留,直到有新的錯誤將它們排除或清單完全清除為止。

是否對於能夠配置為串流的數據表數量有上限?

是的。 CES 支援最多 4,096 個串流群組,每組最多可支援 40,000 個資料表。