다음을 통해 공유


Azure SQL Managed Instance에서 SQL 에이전트 작업을 사용하여 관리 작업 자동화

적용 대상:Azure SQL Managed Instance

AzureSQL Managed Instance에서 SQL Server 에이전트를 사용하여 하나 이상의 데이터베이스에 대해 주기적으로 실행할 수 있는 작업을 만들고 예약할 수 있습니다. 이러한 SQL 에이전트 작업은 Transact-SQL(T-SQL) 쿼리를 실행하고 유지 관리 작업을 수행합니다. 이 문서에서는 SQL Managed Instance용 SQL 에이전트 사용에 대해 설명합니다.

참고

SQL 에이전트는 Azure SQL Database 또는 Azure Synapse Analytics에서 사용할 수 없습니다. 대신 "Elastic Jobs을 사용하여 작업을 자동화할 것을 권장합니다."

SQL 에이전트 작업을 사용하는 경우

SQL 에이전트 작업을 사용할 수 있는 몇 가지 시나리오는 다음과 같습니다.

  • 관리 작업을 자동화한 다음, 주중 매일, 일정 시간 후 등에 실행되도록 예약합니다.
    • 스키마 변경, 자격 증명 관리, 성능 데이터 수집 또는 테넌트(고객) 원격 분석 컬렉션을 배포합니다.
    • 참조 데이터(모든 데이터베이스에서 공통되는 정보)를 업데이트하고 Azure Blob Storage에서 데이터를 로드합니다. Azure Blob Storage에 인증하는 데 사용되는 인수는 BULK_INSERT 참조하세요.
    • DBCC CHECKDB를 비롯한 일반적인 유지 관리 작업을 통해 데이터 무결성 또는 인덱스 유지 관리를 수행하여 쿼리 성능을 향상시킬 수 있습니다. 데이터베이스 컬렉션에 대해 주기적으로, 예를 들어 비사용 시간 동안 작업이 실행되도록 구성합니다.
    • 데이터베이스 집합의 쿼리 결과를 지속적으로 중앙 테이블로 수집합니다. 성능 쿼리를 지속적으로 실행하고 더 많은 작업을 실행하도록 구성할 수 있습니다.
  • 보고에 대한 데이터 수집
    • 데이터베이스의 컬렉션에서 단일 대상 테이블로 데이터를 집계합니다.
    • 큰 데이터베이스 집합에 대해 더 오래 실행되는 데이터 처리 쿼리(예: 고객 원격 분석 수집) 실행. 추가 분석을 위해 결과가 단일 대상 테이블에 수집됩니다.
  • 데이터 이동
    • 데이터베이스에서 변경된 내용을 다른 데이터베이스로 복제하거나 원격 데이터베이스에서 만들어진 업데이트를 수집하고 변경된 내용을 데이터베이스에 적용하는 작업을 만듭니다.
    • SSIS(SQL Server Integration Services)를 사용하여 데이터베이스에서 데이터를 로드하는 작업을 만듭니다.

SQL Managed Instance의 SQL 에이전트 작업

SQL Server 에이전트는 SQL Managed Instance에서 태스크 자동화에 사용되는 SQL 에이전트 작업을 실행합니다.

SQL 에이전트 작업은 데이터베이스에 대해 지정된 일련의 T-SQL 스크립트입니다. 작업을 사용하여 한 번 이상 실행될 수 있고 성공 또는 실패를 모니터링할 수 있는 관리 작업을 정의합니다.

작업은 하나의 로컬 인스턴스 또는 여러 원격 인스턴스에서 실행할 수 있습니다. SQL 에이전트 작업은 SQL Managed Instance 서비스 내에서 실행되는 내부 데이터베이스 엔진 구성 요소입니다.

SQL 에이전트 작업에는 다음과 같은 몇 가지 주요 개념이 있습니다.

  • 작업 단계는 작업 내에서 실행해야 하는 하나 이상의 단계 집합입니다. 모든 작업 단계에서는 재시도 전략과 작업 단계가 성공하거나 실패할 경우 수행해야 하는 작업을 정의할 수 있습니다.
  • 일정은 작업을 실행해야 하는 시기를 정의합니다.
  • 알림을 사용하면 작업이 완료되면 전자 메일을 통해 운영자에게 알리는 데 사용되는 규칙을 정의할 수 있습니다.

작업 단계

SQL 에이전트 작업 단계는 SQL 에이전트가 실행해야 하는 작업 시퀀스입니다. 모든 단계에는 단계가 성공하거나 실패할 경우 실행해야 하는 다음 단계와 실패한 경우 재시도 횟수가 설정됩니다.

SQL 에이전트를 사용하면 다양한 유형의 작업 단계를 만들 수 있습니다.

  • 데이터베이스에 대해 단일 Transact-SQL 일괄 처리를 실행하는 작업 단계를 Transact-SQL.
  • 사용자 지정 OS 스크립트를 실행할 수 있는 OS 명령/PowerShell 단계입니다.
  • SSIS 런타임을 사용하여 데이터를 로드할 수 있는 SSIS 작업 단계입니다.
  • 데이터베이스에서 다른 데이터베이스로 변경 내용을 게시할 수 있는 복제 단계입니다.

트랜잭션 복제는 테이블의 변경 내용을 SQL Managed Instance, Azure SQL Database 또는 SQL Server의 다른 데이터베이스로 복제할 수 있습니다. 자세한 내용은 Azure SQL Managed Instance에서 복제 구성을 참조하세요.

병합 복제 및 큐 판독기와 같은 다른 유형의 작업 단계는 SQL Managed Instance에서 현재 지원되지 않습니다.

작업 일정

일정은 작업이 실행되는 시기를 지정합니다. 동일한 일정에 따라 둘 이상의 작업을 실행할 수 있으며, 둘 이상의 일정을 동일한 작업에 적용할 수 있습니다.

일정은 작업이 실행되는 시기에 대해 다음 조건을 정의할 수 있습니다.

  • SQL Server 에이전트가 시작될 때마다 시작합니다. 작업은 장애 조치(failover) 후 활성화됩니다.
  • 작업의 실행 지연에 유용한 특정 날짜 및 시간에 한 번 시작합니다.
  • 되풀이 일정으로 시작합니다.

SQL 에이전트 작업 예약에 대한 자세한 내용은 작업 예약을 참조하세요.

참고

Azure SQL Managed Instance는 현재 CPU가 유휴 상태일 때 작업을 시작할 수 없습니다.

작업 알림

SQL 에이전트 작업을 통해 작업이 성공적으로 완료되거나 실패할 때 알림을 받을 수 있습니다. 이메일을 통해 알림을 받을 수 있습니다.

아직 사용하도록 설정되지 않은 경우 먼저 SQL Managed Instance에서 데이터베이스 메일 기능을 구성해야 합니다.

GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE

예제 연습에서는 전자 메일 알림을 보내기 위한 전자 메일 계정을 설정합니다. 계정을 AzureManagedInstance_dbmail_profile이라는 이메일 프로필에 할당합니다. SQL Managed Instance에서 SQL 에이전트 작업을 사용하여 이메일을 보내려면 AzureManagedInstance_dbmail_profile이라 불려야 하는 프로필이 있어야 합니다. 그렇지 않으면 SQL Managed Instance가 SQL 에이전트를 통해 이메일을 보낼 수 없습니다.

참고

메일 서버의 경우 인증된 SMTP(Simple Mail Transfer Protocol) 릴레이 서비스를 사용하여 전자 메일을 보내는 것이 좋습니다. 이러한 릴레이 서비스는 일반적으로 TLS(전송 계층 보안) 연결의 경우 포트 25 또는 587 또는 SSL 연결의 경우 포트 465를 통해 연결되지만 데이터베이스 메일은 모든 포트를 사용하도록 구성할 수 있습니다. 이러한 포트에는 관리되는 인스턴스의 네트워크 보안 그룹에 새로운 아웃바운드 규칙이 필요합니다. 이러한 서비스는 외부 도메인이 메시지를 거부하거나 스팸 폴더에 넣을 가능성을 최소화하기 위해 IP 및 도메인 평판을 유지하는 데 사용됩니다. 이미 온-프레미스 서버에 있는 인증된 SMTP 릴레이 서비스를 고려합니다. Azure에서 SendGrid는 그러한 SMTP 릴레이 서비스 중 하나이지만 다른 것도 있습니다.

다음 샘플 스크립트를 사용하여 데이터베이스 메일 계정과 프로필을 만든 다음 함께 연결합니다.

-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQL Agent Account',
    @description = 'Mail account for Azure SQL Managed Instance SQL Agent system.',
    @email_address = '$(loginEmail)',
    @display_name = 'SQL Agent Account',
    @mailserver_name = '$(mailserver)' ,
    @username = '$(loginEmail)' ,
    @password = '$(password)';

-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @description = 'E-mail profile used for messages sent by Managed Instance SQL Agent.';

-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @account_name = 'SQL Agent Account',
    @sequence_number = 1;

sp_send_dbmail 시스템 저장 프로시저를 사용하여 T-SQL을 통해 데이터베이스 메일 구성을 테스트합니다.

DECLARE @body VARCHAR(4000) = 'The email is sent from ' + @@SERVERNAME;
EXEC msdb.dbo.sp_send_dbmail
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @recipients = 'ADD YOUR EMAIL HERE',
    @body = 'Add some text',
    @subject = 'Azure SQL Instance - test email';

SQL 에이전트 작업에 문제가 발생했음을 운영자에게 알릴 수 있습니다. 운영자는 SQL Managed Instance의 하나 이상의 인스턴스에 대한 유지 관리를 담당하는 개인에 대한 연락처 정보를 정의합니다. 운영자 책임이 개인 한 명에게 할당되는 경우도 있습니다.

여러 SQL 관리형 인스턴스 또는 SQL Server 인스턴스가 있는 환경에서는 많은 개인이 운영자 책임을 공유할 수 있습니다. 운영자는 보안 정보를 포함하지 않으며 보안 주체를 정의하지 않습니다. 이상적으로, 운영자는 책임이 변동될 수 있는 개인이 아니라 이메일 배포 그룹이어야 합니다.

다음 예제에 나와 있는 SQL Server Management Studio(SSMS) 또는 Transact-SQL 스크립트를 사용하여 연산자를 생성할 수 있습니다.

EXEC msdb.dbo.sp_add_operator
    @name=N'AzureSQLTeam',
    @enabled=1,
    @email_address=N'AzureSQLTeamn@contoso.com';

SSMS의 데이터베이스 메일 로그를 통해 이메일의 성공 또는 실패를 확인합니다.

작업이 완료, 실패 또는 성공하는 경우 SQL 에이전트 작업을 수정 하고 전자 메일을 통해 알림을 받은 연산자를 할당할 수 있습니다. SSMS 또는 다음 T-SQL 스크립트를 사용하여 작업을 수정합니다.

EXEC msdb.dbo.sp_update_job @job_name=N'Load data using SSIS',
    @notify_level_email=3, -- Options are: 1 on succeed, 2 on failure, 3 on complete
    @notify_email_operator_name=N'AzureSQLTeam';

작업 기록

SQL Managed Instance는 현재 기본 레지스트리 값에 저장되므로 SQL 에이전트 속성을 변경할 수 없습니다. 즉, 작업 기록 레코드에 대한 에이전트 보존 정책을 조정하는 옵션은 기본값인 총 레코드 1,000개와 작업당 최대 100개의 기록 레코드로 고정됩니다.

자세한 내용은 SQL 에이전트 작업 기록 보기를 참조하세요.

고정 역할의 데이터베이스 구성원 자격

nonsysadmin 로그인에 연결된 사용자가 msdb 시스템 데이터베이스의 세 가지 SQL 에이전트 고정 데이터베이스 역할 중 하나에 추가된 경우, master 데이터베이스의 세 가지 시스템 저장 프로시저에 명시적 EXECUTE 권한을 부여해야 하는 문제가 발생합니다. 이 문제가 발생하면 오류 메시지(The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229))가 표시됩니다.

SQL 에이전트 고정 데이터베이스 역할(SQLAgentUserRole, SQLAgentReaderRole 또는 SQLAgentOperatorRole)에 msdb사용자를 추가한 후 이러한 역할에 추가된 각 사용자의 로그인에 대해 다음 T-SQL 스크립트를 실행하여 나열된 시스템 저장 프로시저에 대한 사용 권한을 명시적으로 부여 EXECUTE 합니다. 이 예제에서는 사용자 이름과 로그인 이름이 동일하다고 가정합니다.

USE [master]
GO
CREATE USER [login_name] FOR LOGIN [login_name];
GO
GRANT EXECUTE ON master.dbo.xp_sqlagent_enum_jobs TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_is_starting TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_notify TO [login_name];

SQL Managed Instance의 SQL 에이전트 작업 제한 사항

SQL Server에서 사용할 수 있는 SQL 에이전트와 SQL Managed Instance의 일부로 사용할 수 있는 SQL 에이전트 간의 차이점을 주목할 가치가 있습니다. SQL Server와 SQL Managed Instance의 지원되는 기능 차이점에 대한 자세한 내용은 SQL Server와 다른 Azure SQL Managed Instance T-SQL 차이점를 참조하세요.

SQL Server에서 사용할 수 있는 일부 SQL 에이전트 기능은 SQL Managed Instance에서 지원되지 않습니다.

  • SQL 에이전트 설정은 읽기 전용입니다.
    • 시스템 저장 프로시저 sp_set_agent_properties 는 지원되지 않습니다.
  • SQL 에이전트 사용 설정/해제는 현재 지원되지 않습니다. SQL 에이전트는 항상 실행됩니다.
  • 알림은 부분적으로 지원되지만 다음 항목은 지원되지 않습니다.
    • 호출기가 지원되지 않습니다.
    • NetSend는 지원되지 않습니다.
    • 경고는 지원되지 않습니다.
  • 프록시는 지원되지 않습니다.
  • Eventlog는 지원되지 않습니다.
  • 유휴 CPU를 기반으로 하는 작업 일정 트리거는 지원되지 않습니다.
  • 병합 복제 작업 단계는 지원되지 않습니다.
  • 큐 리더는 지원되지 않습니다.
  • Analysis Services는 지원되지 않습니다.
  • 디스크에 파일로 저장된 스크립트 실행은 지원되지 않습니다.
  • dbatools 및 dbachecks와 같은 외부 모듈 가져오기는 지원되지 않습니다.
  • PowerShell Core는 지원되지 않습니다.