停止系統建立版本時態表上的系統版本設定功能

適用於:SQL Server 2016 (13.x) 及更新版本 Azure SQL DatabaseAzure SQL 受控執行個體

您可能想要暫時或永久停止在時態表上的版本設定。 您可以將 SYSTEM_VERSIONING 子句設定為 OFF 來完成。

設定 SYSTEM_VERSIONING = OFF

如果您想要對時態表執行特定維護作業,或不再需要版本設定的資料表,即可停止系統版本設定功能。 您會因這個作業而取得兩個獨立的資料表:

  • 含週期定義的目前資料表

  • 為一般資料表的記錄資料表

重要備註

  • 歷程記錄資料表會在 SYSTEM_VERSIONING = OFF 期間停止擷取更新。
  • 當您設定 SYSTEM_VERSIONING = OFF 或卸除 SYSTEM_TIME 期間時,時態表上不會遺失任何資料。
  • 若您設定 SYSTEM_VERSIONING = OFF 但並未捨棄 SYSTEM_TIME 週期,系統將就會繼續為每個插入和更新作業更新週期資料行。 目前資料表上為永久刪除。
  • 捨棄 SYSTEM_TIME 週期即會完全刪除週期資料行。
  • 在設定 SYSTEM_VERSIONING = OFF 時,所有具足夠權限的使用者都可以修改結構描述和歷程記錄資料表的內容,甚至可以永久刪除歷程記錄資料表。
  • 如果有其他利用 SCHEMABINDING (其使用時態查詢延伸模組,例如參考 SYSTEM_TIME) 建立的物件,則無法設定 SYSTEM_VERSIONING = OFF。 如果設定 SYSTEM_VERSIONING = OFF,則這項限制可防止這些物件失敗。

永久移除 SYSTEM_VERSIONING

此範例會永久移除 SYSTEM_VERSIONING,並刪除週期資料行。 您可以選擇性移除週期資料行。

ALTER TABLE dbo.Department SET (SYSTEM_VERSIONING = OFF);
/*Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal*/
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

暫時移除 SYSTEM_VERSIONING

下列為需要將系統版本設定設為 OFF的作業清單:

  • 從歷程記錄 (DELETETRUNCATE) 移除不必要的資料
  • 從目前資料表 (DELETETRUNCATE) 移除資料,而不進行版本設定
  • 從目前的資料表進行 SWITCH OUT 資料分割
  • SWITCH IN 資料分割至歷程記錄資料表

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

注意

當重新開啟系統版本控制時,請不要忘記指定 HISTORY_TABLE 引數。 若未執行此動作,將會建立新的記錄資料表,並與目前的資料表建立關聯。 原始記錄資料表仍會做為一般的資料表存在,但不會與目前的資料表建立關聯。

BEGIN TRAN
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 ;

後續步驟