Azure SQL Managed Instance 에서 SQL Agent의 Job history 기록 보관하기
· Version : Azure SQL
Azure SQL Managed Instance는 Azure 클라우드에서 호스트되는 완전히 관리되는 SQL Server 이다. Managed Instance는 많은 SQL Server기능을 제공하지만 몇 가지 제약이 있다. 제약사항 중 하나는 SQL Agent작업 실행의 히스토리 기록을 변경할 수 없다는 것이다. 이번 포트스에서는 이 제약 사항을 다른 방법으로 우회하여 해결하는 방법 중 하나를 소개한다.
Managed Instance의 SQL Agent는 각 작업당 100개의 히스토리를 기록하며, 총 1000개의 히스토리 기록을 유지할 수 있다. 아래 프로시저를 실행하면 jobhistory_max_rows_per_job열에서 이 정보를 확인할 수 있다.
exec msdb.dbo.sp_get_sqlagent_properties |
Azure SQL Managed Instance는 SQL Agent의 히스토리를 기록하는 정보 값을 기본 레지스트리 값에 저장하므로 SQL Agent등록 정보를 변경할 수 없다. 그래서 SQL Agent 작업 히스토리에 대한 보존 정책 (작업 당 100개의 히스토리 또는 전체 히스토리 최대 1000개의 기록)을 고정시켯다. 즉 일부 직업의 경우 더 오래된 작업 기록을 확인하지 못 할 수 있다. 따라서 이러한 작업 히스토리 정보를 장기적으로 또는 삭제되기 이전에 이 정보를 보존하려면 sysjobhistory 테이블에서 정보를 다른 테이블에 저장해야 한다. 아래 예제를 통해서 어떻게 저장하는지 살펴본다.
Azure SQL Managed Instance의 Job history 테이블의 변경사항(삭제, 업데이트)을 기록하기 위한 테이블을 생성하고 기존 테이블에 변경 사항이 있을때 행 버전 배치작업을 사용하여 히스토리를 새로운 테이블을 기록한다. sysjobhistory 테이블의 변경 사항을 다른 테이블(sysjobhistoryall)로 저장하도록 변환하려면 아래 스크립트를 적용한다.
ALTER TABLE [msdb].[dbo].[sysjobhistory] ADD StartTime DATETIME2 NOT NULL DEFAULT ('19000101 00:00:00.0000000') GO
ALTER TABLE [msdb].[dbo].[sysjobhistory] ADD EndTime DATETIME2 NOT NULL DEFAULT ('99991231 23:59:59.9999999') GO
ALTER TABLE [msdb].[dbo].[sysjobhistory] ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime) GO
ALTER TABLE [msdb].[dbo].[sysjobhistory] ADD CONSTRAINT PK_sysjobhistory PRIMARY KEY (instance_id, job_id, step_id) GO
ALTER TABLE [msdb].[dbo].[sysjobhistory] SET(SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[sysjobhistoryall],DATA_CONSISTENCY_CHECK = ON, HISTORY_RETENTION_PERIOD = 1 MONTH)) GO |
위 스크립트를 살펴보면 PK_sysjobhistory라는 기본 키가jobhistory 테이블에 추가되고 변경사항을 추적하는데 필요한 두 개의 열을 추가한 것을 알 수 있다. 작업이 완료되었으면 Managed Instance 기록 정리 작업을 실행하면 변경 사항이 보존되는지 여부를 테스트 할 수 있다. 아래 스크립트르 차례로 실행하여 시뮬레이션 할 수 있다.
EXEC msdb.dbo.sp_purge_jobhistory |
기존 sysjobhistory 테이블에서 작업 기록이 삭제되면 sysjobhistoryall 테이블에서 삭제된 작업 기록 을 확인할 수 있다.
select * from msdb.dbo.sysjobhistoryall |
2018-10-08 / Sungwook Kang / http://sqlmvp.kr
Azure SQL, Managed Instance, Azure SQL Agent, jobhistory, sysjobhistory, SQL Agent
출처: https://sqlmvp.tistory.com/1287?category=663684 [Database Lab]