消息 4900,級別 16,狀態 2,第 1 行 對錶 'XX.XXX' 執行 ALTER TABLE SWITCH 語句失敗。對於已啓用更改跟蹤的表,不可能切換其分區。請先禁用更改跟蹤,再使用 AL

問題描述:

今天處理切換分區數據的時候出現了這個錯誤:sql

消息 4900,級別 16,狀態 2,第 1 行 對錶 'XX.XXX' 執行 ALTER TABLE SWITCH 語句失敗。對於已啓用更改跟蹤的表,不可能切換其分區。請先禁用更改跟蹤,再使用 ALTER TABLE SWITCH。數據庫

顯示開啓了跟蹤須要先關閉才能切換分區函數

 

解決方案:

1.爲數據庫或表禁用更改跟蹤

必須首先爲全部啓用了更改跟蹤的表禁用更改跟蹤,而後才能將數據庫的更改跟蹤設爲 OFF。 若要肯定數據庫中哪些表啓用了更改跟蹤,請使用 sys.change_tracking_tables 目錄視圖。性能

當數據庫中沒有用於跟蹤更改的表時,即可以禁用數據庫的更改跟蹤。 下面的示例顯示如何使用 ALTER DATABASE對數據庫禁用更改跟蹤。spa

ALTER DATABASE 庫名 
SET CHANGE_TRACKING = OFF

下面的示例顯示瞭如何使用 ALTER TABLE對錶禁用更改跟蹤。code

ALTER TABLE 表名 
DISABLE CHANGE_TRACKING;  

2.對數據庫啓用更改跟蹤

您必須先在數據庫級別啓用更改跟蹤,而後才能使用更改跟蹤。 下面的示例顯示瞭如何使用 ALTER DATABASE來啓用更改跟蹤。server

ALTER DATABASE 庫名
SET CHANGE_TRACKING = ON  
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)  

能夠在啓用更改跟蹤時指定 CHANGE_RETENTION 和 AUTO_CLEANUP 選項,而且能夠在啓用更改跟蹤後隨時更改這些值。blog

更改保持期值指定了更改跟蹤信息的保留時間。 早於此時間的更改跟蹤信息將被按期刪除。 設置該值時,應考慮應用程序與數據庫中的表進行同步的頻率。 指定的保持期必須至少等於最大同步時間間隔。 若是應用程序獲取更改的時間間隔過長,則返回的結果可能不正確,由於某些更改信息可能已被刪除。 若要避免獲取錯誤的結果,應用程序可使用 CHANGE_TRACKING_MIN_VALID_VERSION 系統函數來肯定同步之間的時間間隔是否已太長。進程

可以使用 AUTO_CLEANUP 選項來啓用或禁用刪除陳舊的更改跟蹤信息的清除任務。 若是出現臨時性問題使得應用程序沒法同步,而且在問題解決以前必須暫停用於刪除早於保持期的更改跟蹤信息的進程,則該設置會頗有用。get

對於使用更改跟蹤的任何數據庫,請注意如下事項:

  • 若要使用更改跟蹤,必須將數據庫兼容級別設爲 90 或更高。 若是數據庫的兼容級別低於 90,則能夠配置更改跟蹤。 可是,用於獲取更改跟蹤信息的 CHANGETABLE 函數將返回錯誤。

  • 使用快照隔離是幫助確保全部更改跟蹤信息保持一致的最簡單方式。 所以,咱們強烈建議將數據庫的快照隔離設爲 ON。 有關詳細信息,請參閱處理更改跟蹤 (SQL Server)

3.對錶啓用更改跟蹤

對於要跟蹤的每一個表都必須啓用更改跟蹤。 啓用更改跟蹤後,將會爲表中受 DML 操做影響的全部行保留更改跟蹤信息。

下面的示例顯示瞭如何使用 ALTER TABLE來對錶啓用更改跟蹤。

ALTER TABLE 表名
ENABLE CHANGE_TRACKING  
WITH (TRACK_COLUMNS_UPDATED = ON)  

你還能夠經過使用 SQL Server Management Studio 數據庫屬性(「ChangeTracking」頁) 數據庫屬性(「ChangeTracking」頁) 中啓用更改跟蹤。

當 TRACK_COLUMNS_UPDATED 選項設爲 ON 時, SQL Server 數據庫引擎 會將有關哪些列已更新的額外信息存儲到內部更改跟蹤表中。 列跟蹤使應用程序能夠只同步那些已更新的列。 這能夠提升效率和性能。 可是,因爲保留列跟蹤信息增長了一些額外的存儲開銷,於是默認狀況下此選項設爲 OFF。

 

參考來源:啓用和禁用更改跟蹤 (SQL Server)

相關文章
相關標籤/搜索