sys.ledger_table_history(Transact-SQL)

적용 대상: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

원장 테이블 만들기, 원장 테이블 또는 원장 뷰 이름 바꾸기, 원장 테이블 삭제 등 원장 테이블에서 암호화로 보호된 작업 기록을 캡처합니다.

데이터베이스 원장에 관한 자세한 내용은 원장을 참조하세요.

열 이름 데이터 형식 설명
object_id int 원장 테이블의 개체 ID입니다.
schema_name sysname 원장 테이블을 포함하는 스키마의 이름입니다. 작업에서 스키마 이름을 변경한 경우 이 열은 새 스키마 이름을 캡처합니다.
table_name sysname 원장 테이블의 이름입니다. 작업에서 테이블 이름을 변경한 경우 이 열은 새 테이블 이름을 캡처합니다.
ledger_view_schema_name sysname 원장 테이블에 대한 원장 뷰를 포함하는 스키마의 이름입니다. 작업에서 스키마 이름을 변경한 경우 이 열은 새 스키마 이름을 캡처합니다.
ledger_view_name sysname 원장 테이블의 원장 뷰 이름입니다. 작업에서 뷰 이름을 변경한 경우 이 열은 새 뷰 이름을 캡처합니다.
operation_type tinyint 작업의 형식을 나타내는 숫자 값

0 = CREATE – 원장 테이블 만들기.
1 = DROP – 원장 테이블 삭제.
2 = RENAME - 원장 테이블 이름 바꾸기.
3 = RENAME_VIEW - 원장 테이블의 원장 뷰 이름 바꾸기.
operation_type_desc nvarchar(60) operation_type 값에 대한 텍스트 설명입니다.
transaction_id bigint 원장 테이블에 대한 작업을 포함하는 ID의 트랜잭션입니다. sys.database_ledger_transactions의 행을 식별합니다.
sequence_number bigint 트랜잭션 내 작업의 시퀀스 번호입니다.

사용 권한

원장 콘텐츠 보기 권한이 필요합니다.

원장 테이블에 대한 다음 작업 시퀀스를 고려합니다.

  1. 사용자가 원장 테이블을 만듭니다.

    CREATE TABLE [Employees]
    (
        EmployeeID INT NOT NULL,
        Salary Money NOT NULL
    )
    WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
    GO
    
  2. 사용자가 원장 테이블의 이름을 바꿉니다.

    EXEC sp_rename 'Employees', 'Employees_Copy';
    
  3. 사용자가 원장 테이블의 원장 뷰 이름을 바꿉니다.

    EXEC sp_rename 'Employees_Ledger', 'Employees_Ledger_Copy';
    
  4. 사용자가 원장 테이블을 삭제합니다.

    DROP TABLE [Employees];
    

아래 쿼리는 sys.ledger_table_history 및 sys.database_ledger_transactions를 조인하여 각 시간과 변경 및 이를 트리거한 사용자 이름을 포함하여 원장 테이블에 대한 변경 기록을 생성합니다.

SELECT 
t.[principal_name]
, t.[commit_time]
, h.[schema_name] + '.' + h.[table_name] AS [table_name]
, h.[ledger_view_schema_name] + '.' + h.[ledger_view_name] AS [view_name]
, h.[operation_type_desc]
FROM sys.ledger_table_history h
JOIN sys.database_ledger_transactions t
ON h.transaction_id = t.transaction_id

참고 항목