停止系統版本時態表上的系統版本功能

適用於: SQL Server 2016 (13.x) 和更新版本 Azure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

您可能想要暫時或永久停止在時態表上的版本設定。 將 SYSTEM_VERSIONING 子句設定為 OFF,即可達到這個目的。

設定 SYSTEM_VERSIONING = OFF

如果你想在時序表上執行特定維護操作,或不再需要版本表,就停止系統版本管理。 此操作會給你兩個獨立的表格:

  • 含週期定義的目前資料表
  • 將歷史表格作為一般表格

Remarks

歷程記錄資料表會在 SYSTEM_VERSIONING = OFF 期間停止擷取更新。

當您設定 SYSTEM_VERSIONING = OFF 或捨棄 SYSTEM_TIME 期間時,時態表上不會遺失任何資料。

當你設定 SYSTEM_VERSIONING = OFF 且不刪除 SYSTEM_TIME 該週期時,系統會持續更新每次插入與更新操作的週期欄位。 當前資料表上的刪除是永久性的。

您必須刪除 SYSTEM_TIME 期間,以去除期間欄。 若要移除句號欄位,請使用 ALTER TABLE <table> DROP <column>;。 如需詳細資訊,請參閱<變更系統版本設定時態表的結構描述>。

在設定 SYSTEM_VERSIONING = OFF 時,所有具足夠權限的使用者都可以修改結構描述和歷程記錄資料表的內容,甚至可以永久刪除歷程記錄資料表。

如果你有其他使用時序查詢擴充功能(例如參照 SYSTEM_VERSIONING = OFF)、且是透過 SYSTEM_TIME 建立的物件,就無法設定 SCHEMABINDING。 如果設定 SYSTEM_VERSIONING = OFF,則這項限制可防止這些物件失敗。

永久移除 SYSTEM_VERSIONING

此範例會永久移除 SYSTEM_VERSIONING,並刪除時間欄位。 您可以選擇性地移除句號欄位。

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = OFF);

如果你想將時間表還原成非時間表,也可以選擇刪除週期。

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

暫時移除 SYSTEM_VERSIONING

以下操作需要將系統版本設定為 OFF

  • 從歷程記錄移除不必要的資料 (DELETETRUNCATE)
  • 在不設定版本的情況下從目前資料表中移除資料(DELETETRUNCATE
  • 從目前資料表中對 SWITCH OUT 進行資料分割
  • SWITCH IN 資料分割至歷史資料表

此範例會暫時停止 SYSTEM_VERSIONING 以讓您執行特定維護作業。 如果暫時停止版本設定是進行資料表維護的必要條件,強烈建議您在交易內執行此變更以保持資料一致性。

當你重新啟用系統版本控制時,請指定 HISTORY_TABLE 參數。 如果沒有,系統會建立一個新的歷史表,並將其與目前的資料表關聯。 原本的歷史資料表仍然可以作為一般資料表存在,但它不再與目前的資料表相關聯。

BEGIN TRANSACTION;

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = OFF);

TRUNCATE TABLE [History].[DepartmentHistory]
    WITH ( PARTITIONS (1, 2) );

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory));

COMMIT TRANSACTION;