共用方式為


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

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

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

設定 SYSTEM_VERSIONING = OFF

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

  • 含週期定義的目前資料表
  • 為一般資料表的記錄資料表

備註

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

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

若您設定 SYSTEM_VERSIONING = OFF 但並未捨棄 SYSTEM_TIME 期間,系統將就會繼續為每個插入和更新作業更新期間資料行。 目前資料表上為永久刪除。

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

在設定 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 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;