탄력적 작업 탐색

완료됨

많은 DBA가 Azure Automation에 익숙해진 이유 중 하나는 처음에 Azure SQL Database에는 예약된 작업에 대한 기능이 부족했기 때문입니다.

탄력적 작업 기능을 사용하면 서버 또는 데이터베이스 컬렉션에 대해 일회성 작업으로 또는 정의된 일정을 사용하여 T-SQL 스크립트 세트를 실행할 수 있습니다. 탄력적 작업은 T-SQL 실행으로 제한되는 경우를 제외하고 SQL Server 에이전트 작업과 유사하게 작동합니다. 작업은 Azure SQL Database의 모든 계층에서 작동합니다. SQL 에이전트 작업은 SQL Server의 작업 자동화에 계속 사용되며 Azure SQL Managed Instances에도 포함됩니다.

Screenshot of the elastic job architecture diagram.

탄력적 작업을 구성하려면 작업 에이전트와 작업을 관리하는 전용 데이터베이스가 필요합니다. 작업 데이터베이스에 권장되는 서비스 계층은 S1 이상이며 최적 서비스 계층은 실행 중인 작업 수 및 해당 작업의 빈도에 따라 달라집니다.

탄력적 작업 구성 요소를 검토해 보겠습니다.

  • 탄력적 작업 에이전트 - 작업을 실행 및 관리하기 위한 Azure 리소스입니다.
  • 작업 데이터베이스 - 작업을 관리하기 위한 전용 데이터베이스입니다.
  • 대상 그룹 - 작업이 실행될 서버, 탄력적 풀 및 단일 데이터베이스의 컬렉션입니다.
  • 작업 - 작업 단계를 구성하는 하나 이상의 T-SQL 스크립트입니다.

서버 또는 탄력적 풀이 대상이면 작업 에이전트가 포함된 데이터베이스를 열거할 수 있도록 서버 또는 풀의 master 데이터베이스에 있는 자격 증명을 만들어야 합니다. 단일 데이터베이스의 경우 데이터베이스 자격 증명만 있으면 됩니다. 자격 증명은 작업 단계를 수행하는 데 필요한 최소한의 권한만 있어야 합니다.

Screenshot of the elastic job agent creation page.

Azure Portal을 통해 탄력적 작업 에이전트를 만들 수 있습니다. 탄력적 작업 에이전트 페이지에서 에이전트의 이름을 제공하고 작업 데이터베이스용 SQL 데이터베이스를 지정해야 합니다.

PowerShell 또는 T-SQL을 사용하여 대상 그룹을 만들 수 있습니다. 다음 코드 조각은 실행 시 서버에 존재하는 모든 데이터베이스를 포함하여 MyServerGroup 대상 그룹을 만듭니다. 이 코드 조각은 $jobAgent$targetServerName 변수가 이전에 제공되었다고 가정합니다.

# create MyServerGroup target group
$serverGroup = $jobAgent | New-AzSqlElasticJobTargetGroup -Name 'MyServerGroup'

$serverGroup | Add-AzSqlElasticJobTarget -ServerName $targetServerName -RefreshCredentialName $masterCred.CredentialName

아래 코드 조각은 PowerShell을 사용하여 탄력적 작업을 만들고 작업 단계를 추가합니다. 1단계는 MyTable 테이블을 만듭니다(없는 경우).

Write-Output "Creating a new job..."
$jobName = "MyFirstElasticJob"
$job = $jobAgent | New-AzSqlElasticJob -Name $jobName -RunOnce

Write-Output "Creating job steps for $($jobName) job..."
$sqlText1 = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('MyTable')) CREATE TABLE [dbo].[MyTable]([Id] [int] NOT NULL);"

$job | Add-AzSqlElasticJobStep -Name "Step1" -TargetGroupName $serverGroup.TargetGroupName -CredentialName $jobCred.CredentialName -CommandText $sqlText1

위에서 볼 수 있듯이 탄력적 작업을 통해 실행되는 T-SQL 스크립트는 멱등이어야 합니다. 즉, 작업이 실수로든 작업 실패로 인해서든 여러 번 실행되는 경우 작업이 실패하거나 의도하지 않은 결과를 생성하지 않습니다. 실패 없이 동일한 스크립트를 여러 번 실행할 수 있어야 합니다.

마지막으로 PowerShell을 사용하여 탄력적 작업 MyFirstElasticJob을 실행합니다.

Write-Output "Start the job..."
$jobExecution = $job | Start-AzSqlElasticJob
$jobExecution

사용 사례 시나리오

탄력적 작업은 다음 시나리오에서 사용할 수 있습니다.

  • 관리 작업을 자동화하여 특정 일정에 따라 실행
  • 스키마 변경 내용을 배포
  • 데이터 이동
  • 보고 또는 기타 목적으로 데이터를 수집 및 집계
  • Azure Blob 스토리지에서 데이터 로드
  • 사용량이 적은 시간대와 같이 데이터베이스 컬렉션에 대해 되풀이해서 실행하도록 작업을 구성
  • 많은 수의 데이터베이스(예: 원격 분석 수집)에 대한 데이터 처리 결과는 추가 분석을 위해 단일 대상 테이블에 수집됩니다.