추가 전용 원장 테이블 만들기 및 사용
적용 대상: SQL Server 2022(16.x) Azure SQL 데이터베이스 Azure SQL Managed Instance
이 문서에서는 추가 전용 원장 테이블을 만드는 방법을 보여줍니다. 다음으로, 추가 전용 원장 테이블에 값을 삽입한 다음 데이터 업데이트를 시도해 보겠습니다. 마지막으로 원장 보기를 사용하여 결과를 봅니다. 추가 전용 시스템 패턴인 시설용 카드 키 액세스 시스템을 예제로 사용하겠습니다. 이 예에서는 추가 전용 원장 테이블과 해당 원장 뷰 간의 관계를 실용적인 방법으로 보여 줍니다.
자세한 내용은 추가 전용 원장 테이블을 참조하세요.
필수 조건
추가 전용 원장 테이블 만들기
다음 스키마를 사용하여 KeyCardEvents
테이블을 만들어 보겠습니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
EmployeeID | int | 건물에 액세스하는 직원의 고유 ID |
AccessOperationDescription | nvarchar(MAX) | 직원의 액세스 작업 |
Timestamp | datetime2 | 직원이 건물에 액세스한 날짜 및 시간 |
SQL Server Management Studio 또는 Azure Data Studio를 사용하여
[AccessControl].[KeyCardEvents]
라는 새 스키마와 테이블을 만듭니다.CREATE SCHEMA [AccessControl]; GO CREATE TABLE [AccessControl].[KeyCardEvents] ( [EmployeeID] INT NOT NULL, [AccessOperationDescription] NVARCHAR (1024) NOT NULL, [Timestamp] Datetime2 NOT NULL ) WITH (LEDGER = ON (APPEND_ONLY = ON));
다음 값을 사용하여 새 건물 액세스 이벤트를
[AccessControl].[KeyCardEvents]
테이블에 추가합니다.INSERT INTO [AccessControl].[KeyCardEvents] VALUES ('43869', 'Building42', '2020-05-02T19:58:47.1234567');
KeyCardEvents 테이블의 내용을 보고 추가 전용 원장 테이블에 추가되는 GENERATED ALWAYS 열을 지정합니다.
SELECT * ,[ledger_start_transaction_id] ,[ledger_start_sequence_number] FROM [AccessControl].[KeyCardEvents];
KeyCardEvents 원장 뷰의 내용을 원장 트랜잭션 시스템 뷰와 함께 확인하여 테이블에 레코드를 추가한 사용자를 식별합니다.
SELECT t.[commit_time] AS [CommitTime] , t.[principal_name] AS [UserName] , l.[EmployeeID] , l.[AccessOperationDescription] , l.[Timestamp] , l.[ledger_operation_type_desc] AS Operation FROM [AccessControl].[KeyCardEvents_Ledger] l JOIN sys.database_ledger_transactions t ON t.transaction_id = l.ledger_transaction_id ORDER BY t.commit_time DESC;
EmployeeID
을(를)43869
에서34184.
(으)로 변경하여KeyCardEvents
테이블을 업데이트해 봅니다.UPDATE [AccessControl].[KeyCardEvents] SET [EmployeeID] = 34184;
추가 전용 원장 테이블에 대한 업데이트는 허용되지 않는다는 오류 메시지가 표시됩니다.
사용 권한
추가 전용 원장 테이블을 만들려면 ENABLE LEDGER
권한이 필요합니다. 원장 테이블과 관련된 권한에 대한 자세한 내용은 권한을 참조하세요.