停止系统控制版本时态表的系统版本控制
适用于: sql Server 2016 (13.x) 及更高版本Azure SQL 数据库 Microsoft Fabric 中的 SQL 数据库Azure SQL 托管实例 SQL 数据库
你可能希望暂时或永久停止对时态表的版本控制。 将属性 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
时,具有足够权限的所有用户都能够修改历史记录表的架构和内容,甚至还可以永久删除该历史记录表。
如果使用临时查询扩展(如引用 SYSTEM_VERSIONING = OFF
)通过 SCHEMABINDING
创建了其他对象,则无法设置 SYSTEM_TIME
。 如果设置 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
的操作列表:
- 从历史记录中删除不必要的数据(
DELETE
或TRUNCATE
) - 从没有版本控制的当前表中删除数据(
DELETE
、TRUNCATE
) - 从当前表的
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;