sys.ledger_table_history(Transact-SQL)
적용 대상: SQL Server 2022(16.x) Azure SQL 데이터베이스 Azure 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 | 트랜잭션 내 작업의 시퀀스 번호입니다. |
사용 권한
원장 콘텐츠 보기 권한이 필요합니다.
예제
원장 테이블에 대한 다음 작업 시퀀스를 고려합니다.
사용자가 원장 테이블을 만듭니다.
CREATE TABLE [Employees] ( EmployeeID INT NOT NULL, Salary Money NOT NULL ) WITH (SYSTEM_VERSIONING = ON, LEDGER = ON); GO
사용자가 원장 테이블의 이름을 바꿉니다.
EXEC sp_rename 'Employees', 'Employees_Copy';
사용자가 원장 테이블의 원장 뷰 이름을 바꿉니다.
EXEC sp_rename 'Employees_Ledger', 'Employees_Ledger_Copy';
사용자가 원장 테이블을 삭제합니다.
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