시스템 버전 관리 temporal 테이블에서 시스템 버전 관리 중지
적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance
temporal 테이블의 버전 관리를 일시적으로나 영구적으로 중지하려는 경우가 있습니다. SYSTEM_VERSIONING
절을 OFF
로 설정하면 됩니다.
SYSTEM_VERSIONING = OFF 설정
temporal 테이블에 대해 특정 유지 관리 작업을 수행하려는 경우 또는 버전이 있는 테이블이 더 이상 필요하지 않은 경우 시스템 버전 관리를 중지합니다. 이 작업으로 독립적인 테이블 두 개가 생성됩니다.
- 마침표 정의가 있는 현재 테이블
- 기록 테이블(일반 테이블)
설명
기록 테이블은 SYSTEM_VERSIONING = OFF
동안 업데이트 캡처를 중지합니다.
SYSTEM_VERSIONING = OFF
를 설정하거나 SYSTEM_TIME
기간을 삭제하면 temporal 테이블에서 데이터 손실이 발생하지 않습니다.
SYSTEM_VERSIONING = OFF
를 설정하고 SYSTEM_TIME
기간을 제거/삭제하지 않으면 시스템은 모든 삽입 및 업데이트 작업에 대해 기간 열을 계속 업데이트합니다. 현재 테이블에서 수행하는 삭제 작업은 영구적인 작업입니다.
기간 열을 삭제하려면 SYSTEM_TIME
기간을 삭제합니다. 기간 열을 제거하려면 ALTER TABLE <table> DROP <column>;
을 사용합니다. 자세한 내용은 시스템 버전 관리 temporal 테이블의 스키마 변경을 참조하세요.
SYSTEM_VERSIONING = OFF
를 설정하면 충분한 권한이 있는 모든 사용자가 기록 테이블의 내용과 스키마를 수정하거나 기록 테이블을 영구적으로 삭제할 수 있습니다.
SYSTEM_TIME
참조와 같이 temporal 쿼리 확장을 사용하여 SCHEMABINDING
으로 만든 다른 개체가 있는 경우에는 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
로 설정해야 하는 작업 목록이 포함되어 있습니다.
- 기록에서 불필요한 데이터 제거(
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;