다음을 통해 공유


시스템 버전 관리 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;