시스템 버전 관리 temporal 테이블의 스키마 변경

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스Azure SQL Managed Instance

ALTER TABLE 문을 사용하여 열을 추가, 변경 또는 제거합니다.

다음은 temporal 테이블의 스키마를 변경하는 몇 가지 예입니다.

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName varchar(100);

ALTER TABLE dbo.Department
    ADD WebAddress nvarchar(255) NOT NULL
    CONSTRAINT DF_WebAddress DEFAULT 'www.mycompany.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;

GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

/* Setting IsHidden property for period columns.
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

중요한 주의 사항

  • temporal 테이블의 스키마를 변경하려면 현재 및 기록 테이블에 대한CONTROL 권한이 필요합니다.

  • ALTER TABLE 작업 중 시스템은 두 테이블에 스키마 잠금을 유지합니다.

  • 지정된 스키마 변경은 적절하게 기록 테이블에 전파됩니다(변경 유형에 따라).

  • 기본값으로 varchar(max), nvarchar(max), varbinary(max) 또는 XML 열을 추가하는 것은 모든 버전의 SQL Server에서 업데이트 데이터 작업이 됩니다.

  • 열 추가 후 행 크기가 행 크기 제한을 초과하는 경우 새 열을 온라인에 추가할 수 없습니다.

  • 새 NOT NULL 열로 테이블을 확장한 후 해당 테이블의 모든 열은 시스템에서 자동으로 채워지므로 기록 테이블에 기본 제약 조건을 삭제하는 것이 좋습니다.

  • 시스템 버전 관리 temporal 테이블에서는 온라인 옵션(WITH (ONLINE = ON)이 ALTER TABLE ALTER COLUMN에 영향을 주지 않습니다. ONLINE 옵션에 지정된 값과 관계없이 열 변경은 온라인으로 수행되지 않습니다.

  • ALTER COLUMN을 사용하여 기간 열에 대한 IsHidden 속성을 변경할 수 있습니다.

  • 다음 스키마 변경에 직접 ALTER를 사용할 수 없습니다. 이러한 종류의 변경은 SYSTEM_VERSIONING = OFF를 설정합니다.

    • 계산 열 추가
    • IDENTITY 열 추가
    • 기록 테이블이 DATA_COMPRESSION = PAGE 또는 DATA_COMPRESSION = ROW로 설정된 경우 SPARSE 열 추가 또는 SPARSE가 되도록 기존 열 변경은 기록 테이블에 대한 기본값입니다.
    • COLUMN_SET추가
    • ROWGUIDCOL 열 추가 또는 ROWGUIDCOL이(가) 되도록 기존 열 변경
    • 열에 현재 또는 기록 테이블에 null 값이 포함된 경우 NULL 열을 NOT NULL로 변경

다음 예제에서는 설정 SYSTEM_VERSIONING = OFF가 여전히 필요한 스키마 변경을 보여 줍니다(IDENTITY 열 추가). 이 예제에서는 데이터 일관성 확인을 사용하지 않도록 설정합니다. 동시 데이터 변경이 발생할 수 없으므로 트랜잭션 내에서 스키마 변경을 수행하는 경우 이 검사는 필요하지 않습니다.

BEGIN TRANSACTION
    ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
    ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);
    ALTER TABLE [dbo].[CompanyLocationHistory] ADD Cntr INT NOT NULL
        CONSTRAINT DF_Cntr DEFAULT 0;
    ALTER TABLE [dbo].[CompanyLocation] SET
    (
        SYSTEM_VERSIONING = ON
        (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
    );
COMMIT;

다음 단계