Automation Runbook을 배포하여 자동으로 인덱스 다시 빌드

예상 시간: 30분

데이터베이스 관리의 일상적인 업무를 자동화하는 데 도움을 주는 선임 데이터베이스 관리자로 고용되었습니다. 이 자동화에서는 AdventureWorks용 데이터베이스가 최고 성능으로 계속 작동하고 특정 조건에 따라 경고하는 메서드를 제공하도록 지원합니다. AdventureWorks는 IaaS(Infrastructure as a Service) 및 PaaS(Platform as a Service) 제품 모두에서 SQL Server를 활용합니다.

📝 이러한 연습에서는 T-SQL 코드를 복사하여 붙여넣고 기존 SQL 리소스를 활용하도록 요청할 수 있습니다. 코드를 실행하기 전에 코드를 올바르게 복사했는지 확인하세요.

환경을 설정합니다.

랩 가상 머신이 제공되고 미리 구성된 경우 C:\LabFiles 폴더에서 랩 파일을 준비해야 합니다. 파일이 이미 있는지 잠시 확인하려면 이 섹션을 건너뜁니다. 그러나 사용자 개인의 컴퓨터를 사용 중이거나 랩 파일이 없는 경우 계속하려면 GitHub에서 복제해야 합니다.

  1. 랩 가상 머신 또는 로컬 컴퓨터에 제공되지 않은 경우 Visual Studio Code 세션을 시작합니다.

  2. 명령 팔레트(Ctrl+Shift+P)를 열고 Git: Clone을 입력합니다. Git: Clone 옵션을 선택합니다.

  3. 다음 URL을 리포지토리 URL 필드에 붙여넣고 Enter 키를 선택합니다.

     https://github.com/MicrosoftLearning/dp-300-database-administrator.git
    
  4. 랩 가상 머신 또는 로컬 컴퓨터가 제공되지 않은 경우 C:\LabFiles 폴더에 저장합니다(없는 경우 폴더 만들기).

Azure에서 SQL Server 설정

Azure에 로그인하고 Azure에서 실행 중인 기존 Azure SQL Server 인스턴스가 있는지 확인합니다. Azure에서 실행 중인 SQL Server 인스턴스가 이미 있는 경우 이 섹션을 건너뜁니다.

  1. 랩 가상 머신 또는 로컬 컴퓨터가 제공되지 않은 경우 Visual Studio Code 세션을 시작하고 이전 섹션에서 복제된 리포지토리로 이동합니다.

  2. /Allfiles/Labs 폴더를 마우스 오른쪽 단추로 클릭하고 통합 터미널에서 열기를 선택합니다.

  3. Azure CLI를 사용하여 Azure에 연결해 보겠습니다. 다음 명령을 입력하고 Enter 키를 선택합니다.

     az login
    

    📝 브라우저 창이 열립니다. Azure 자격 증명을 사용하여 로그인합니다.

  4. Azure에 로그인한 후에는 리소스 그룹이 아직 없는 경우 리소스 그룹을 만들고 해당 리소스 그룹 아래에 SQL Server 및 데이터베이스를 만듭니다. 다음 명령을 입력하고 Enter 키를 선택합니다. 스크립트를 완료하는 데 몇 분 정도 걸립니다.

     cd ./Setup
     ./deploy-sql-database.ps1
    

    📝 기본적으로 이 스크립트는 contoso-rg라는 리소스 그룹을 만들거나, 있는 경우 contoso-rg로 시작하는 리소스를 사용합니다. 기본적으로 미국 서부 2 지역(westus2)에도 모든 리소스가 만들어집니다. 마지막으로 SQL 관리자 암호에 대한 임의의 12자 암호를 생성합니다. 이러한 값은 고유 값으로 -rgName, -location-sqlAdminPw 매개 변수 중 하나 이상을 사용하여 변경할 수 있습니다. 암호는 12자 이상의 Azure SQL 암호 복잡성 요구 사항을 충족해야 하며 대문자 1개, 소문자 1개, 숫자 1개, 특수 문자 1개 이상을 포함해야 합니다.

    📝 스크립트는 SQL Server 방화벽 규칙에 현재 공용 IP 주소를 추가합니다.

  5. 스크립트가 완료되면 리소스 그룹 이름, SQL Server 이름 및 데이터베이스 이름, 관리자 사용자 이름 및 암호를 반환합니다. 이러한 값은 랩의 뒷부분에서 필요하므로 기록해 두십시오.


Automation 계정 생성

  1. 랩 가상 머신 또는 로컬 컴퓨터가 제공되지 않은 경우 브라우저 세션을 시작하고 https://portal.azure.com으로 이동합니다. Azure 자격 증명을 사용하여 Portal에 연결합니다.

  2. 검색 표시줄의 Azure Portal에서 automation을 입력하고 검색 결과에서 Automation 계정을 선택한 다음, + 만들기를 선택합니다.

  3. Automation 계정 페이지에서 아래 정보를 입력한 다음 검토 + 만들기를 선택합니다.

    • 리소스 그룹: <리소스 그룹>
    • Automation 계정 이름: autoAccount
    • 지역: 기본값을 사용합니다.
  4. 검토 페이지에서 만들기를 선택합니다.

    📝 자동화 계정을 만드는 데 몇 분 정도 걸릴 수 있습니다.

기존 Azure SQL Database에 연결

  1. Azure Portal에서 sql 데이터베이스를 검색하여 데이터베이스로 이동합니다.

  2. SQL 데이터베이스 AdventureWorksLT를 선택합니다.

  3. SQL Database 페이지의 주 섹션에서 쿼리 편집기(미리 보기) 를 선택합니다.

  4. 데이터베이스 관리자 계정을 사용하여 데이터베이스에 로그인하려면 자격 증명을 입력하라는 메시지가 표시되며 확인을 선택합니다.

    이렇게 하면 브라우저 새 탭이 열립니다. 클라이언트 IP 추가를 선택한 후 저장을 선택합니다. 저장한 후 이전 탭으로 돌아가서 확인을 다시 선택합니다.

    📝 로그인에서 요청한 ‘your-sql-server-name’ 서버를 열 수 없습니다. IP 주소가 ‘xxx.xxx.xxx.xxx’인 클라이언트는 서버에 액세스할 수 없습니다. 라는 오류 메시지가 표시될 수 있습니다. 표시되는 경우 SQL Server 방화벽 규칙에 현재 공용 IP 주소를 추가해야 합니다.

    방화벽 규칙을 설정해야 하는 경우 다음 단계를 수행합니다.

    1. 데이터베이스의 개요 페이지 상단 메뉴 모음에서 서버 방화벽 설정을 선택합니다.
    2. 현재 IPv4 주소(xxx.xxx.xxx) 추가를 선택한 후 저장을 선택합니다.
    3. 저장되면 AdventureWorksLT 데이터베이스 페이지로 돌아가서 쿼리 편집기(미리 보기) 를 다시 선택합니다.
    4. 데이터베이스 관리자 계정을 사용하여 데이터베이스에 로그인하려면 자격 증명을 입력하라는 메시지가 표시되며 확인을 선택합니다.
  5. 쿼리 편집기(미리 보기) 에서 쿼리 열기를 선택합니다.

  6. 폴더 찾아보기 아이콘을 선택하고 C:\LabFiles\dp-300-database-administrator\Allfiles\Labs\Module13 폴더로 이동합니다. usp_AdaptiveIndexDefrag.sql 파일을 선택하고 열기를 선택한 후 확인을 선택합니다.

  7. 쿼리의 줄 5와 6에서 USE msdbGO를 삭제한 후 실행을 선택합니다.

  8. Stored Procedures 폴더를 확장하여 새로 만든 저장 프로시저를 확인합니다.

Automation 계정 자산 구성

다음 단계는 Runbook 만들기를 준비하는 데 필요한 자산을 구성하는 것으로 진행됩니다. 그런 다음 Automation 계정을 선택합니다.

  1. Azure Portal의 상단 검색 상자에 Automation을 입력하고 Automation 계정을 선택합니다.

  2. 생성된 autoAccount Automation 계정을 선택합니다.

  3. Automation 블레이드의 공유 리소스 섹션에서 모듈을 선택합니다. 그런 다음 갤러리 찾아보기를 선택합니다.

  4. 갤러리에서 SqlServer를 검색합니다.

  5. 다음 화면으로 연결되는 SqlServer를 선택한 후 선택 단추를 선택합니다.

  6. 모듈 추가 페이지에서 사용 가능한 최신 런타임 버전을 선택한 다음, 가져오기를 선택합니다. 그러면 PowerShell 모듈을 Automation 계정으로 가져옵니다.

  7. 데이터베이스에 안전하게 로그인하려면 자격 증명을 만들어야 합니다. Automation 계정의 블레이드에서 공유 리소스 섹션으로 이동하여 자격 증명을 선택합니다.

  8. + 자격 증명 추가를 선택하고 아래 정보를 입력한 다음, 만들기를 선택합니다.

    • 이름: SQLUser
    • 사용자 이름: sqladmin
    • 암호: <12자 길이의 강력한 암호를 입력하고 대문자 1개, 소문자 1개, 숫자 1개, 특수 문자 1개 이상을 포함합니다.>
    • 암호 확인: <이전에 입력한 암호를 다시 입력합니다.>

PowerShell Runbook 생성

  1. Azure Portal에서 sql 데이터베이스를 검색하여 데이터베이스로 이동합니다.

  2. SQL 데이터베이스 AdventureWorksLT를 선택합니다.

  3. 개요 페이지에서 Azure SQL Database의 서버 이름을 복사합니다(서버 이름은 dp300-lab으로 시작해야 함). 이후 단계에서 이 이름을 붙여넣습니다.

  4. Azure Portal의 상단 검색 상자에 Automation을 입력하고 Automation 계정을 선택합니다.

  5. autoAccount Automation 계정을 선택합니다.

  6. Automation 계정 블레이드의 프로세스 자동화 섹션으로 확장하여 Runbooks를 선택합니다.

  7. + Runbook 만들기를 선택합니다.

    📝 지금까지 학습한 바와 같이 두 개의 기존 Runbook이 만들어집니다. 이러한 Runbook은 자동화 계정 배포 중에 자동으로 만들어집니다.

  8. Runbook 이름을 IndexMaintenance로 입력하고 runbook 유형은 PowerShell로 입력합니다. 사용 가능한 최신 런타임 버전을 선택한 후 검토 + 만들기를 선택합니다.

  9. Runbook 만들기 페이지에서 만들기를 선택합니다.

  10. Runbook이 만들어지면 아래 Powershell 코드 조각을 복사하여 Runbook 편집기에 붙여넣습니다.

    📝 Runbook을 저장하기 전에 코드가 올바르게 복사되었는지 확인하십시오.

     $AzureSQLServerName = ''
     $DatabaseName = 'AdventureWorksLT'
        
     $Cred = Get-AutomationPSCredential -Name "SQLUser"
     $SQLOutput = $(Invoke-Sqlcmd -ServerInstance $AzureSQLServerName -UserName $Cred.UserName -Password $Cred.GetNetworkCredential().Password -Database $DatabaseName -Query "EXEC dbo.usp_AdaptiveIndexDefrag" -Verbose) 4>&1
    
     Write-Output $SQLOutput
    

    📝 위의 코드는 AdventureWorksLT 데이터베이스에서 저장 프로시저 usp_AdaptiveIndexDefrag를 실행하는 PowerShell 스크립트입니다. 스크립트는 Invoke-Sqlcmd cmdlet을 사용하여 SQL Server에 연결하고 저장 프로시저를 실행합니다. Get-AutomationPSCredential cmdlet은 Automation 계정에 저장된 자격 증명을 검색하는 데 사용됩니다.

  11. 스크립트의 첫 번째 줄에 이전 단계에서 복사한 서버 이름을 붙여넣습니다.

  12. 저장을 선택하고 게시를 선택합니다.

  13. 를 선택하여 게시 작업을 확인합니다.

  14. 이제 IndexMaintenance Runbook이 게시됩니다.

Runbook의 일정 생성

다음으로 runbook이 정기적으로 실행되도록 예약합니다.

  1. IndexMaintenance Runbook의 왼쪽 탐색에 있는 리소스에서 일정을 선택합니다.

  2. + 일정 추가를 선택합니다.

  3. Runbook에 일정 연결을 선택합니다.

  4. + 일정 추가를 선택합니다.

  5. 아래에 정보를 입력한 후 만들기를 선택합니다.

    • 이름: DailyIndexDefrag
    • 설명: AdventureWorksLT 데이터베이스에 대한 일일 인덱스 조각 모음입니다.
    • 시작 날짜: 오전 4:00(다음 날)
    • 표준 시간대:<해당 위치와 일치하는 표준 시간대 선택>
    • 되풀이: 되풀이
    • 되풀이 간격: 1일
    • 만료 설정: 아니요

    📝 시작 시간은 다음 날 오전 4시로 설정됩니다. 표준 시간대는 사용자의 현지 표준 시간대로 설정됩니다. 되풀이는 1일마다로 설정됩니다. 만료는 설정되지 않습니다.

  6. 생성를 선택하고 확인을 선택합니다.

  7. 이제 일정이 만들어지고 Runbook에 연결됩니다. 확인을 선택합니다.

Azure Automation은 Azure 및 Azure 이외의 환경에서 일관된 관리를 지원하는 클라우드 기반 자동화 및 구성 서비스를 제공합니다.


리소스 정리

다른 용도로 Azure SQL Server를 사용하지 않는 경우 이 랩에서 만든 리소스를 정리할 수 있습니다.

리소스 그룹 삭제

이 랩에 대한 새 리소스 그룹을 만든 경우 리소스 그룹을 삭제하여 이 랩에서 만든 모든 리소스를 제거할 수 있습니다.

  1. Azure Portal의 왼쪽 탐색 창에서 리소스 그룹을 선택하거나 검색 창에서 리소스 그룹을 검색하고 결과에서 선택합니다.

  2. 이 랩을 위해 만든 리소스 그룹으로 이동합니다. 리소스 그룹에는 Azure SQL Server 및 이 랩에서 만든 기타 리소스가 포함됩니다.

  3. 위쪽 메뉴에서 리소스 그룹 삭제를 선택합니다.

  4. 리소스 그룹 삭제 대화 상자에서 확인할 리소스 그룹의 이름을 입력한 다음 삭제를 선택합니다.

  5. 리소스 그룹이 삭제될 때까지 기다립니다.

  6. Azure Portal을 닫습니다.

랩 리소스만 삭제합니다.

이 랩에 대한 새 리소스 그룹을 만들지 않았고 리소스 그룹과 이전 리소스를 그대로 유지하려는 경우 이 랩에서 만든 리소스를 계속 삭제할 수 있습니다.

  1. Azure Portal의 왼쪽 탐색 창에서 리소스 그룹을 선택하거나 검색 창에서 리소스 그룹을 검색하고 결과에서 선택합니다.

  2. 이 랩을 위해 만든 리소스 그룹으로 이동합니다. 리소스 그룹에는 Azure SQL Server 및 이 랩에서 만든 기타 리소스가 포함됩니다.

  3. 랩에서 이전에 지정한 SQL Server 이름이 접두사로 지정된 모든 리소스를 선택합니다.

  4. 위쪽 메뉴에서 삭제를 선택합니다.

  5. 리소스 삭제 대화 상자에서 삭제를 입력하고 삭제를 선택합니다.

  6. 리소스 삭제를 확인하려면 삭제를 다시 선택합니다.

  7. 리소스가 삭제될 때까지 기다립니다.

  8. Azure Portal을 닫습니다.

LabFiles 폴더 삭제

이 랩에 대해 새 LabFiles 폴더를 만들었고 더 이상 필요하지 않은 경우 LabFiles 폴더를 삭제하여 이 랩에서 만든 모든 파일을 제거할 수 있습니다.

  1. 랩 가상 머신 또는 로컬 컴퓨터가 제공되지 않은 경우 파일 탐색기를 열고 C:\ 드라이브로 이동합니다.
  2. LabFiles 폴더를 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다.
  3. 를 선택하여 폴더 삭제를 확인합니다.

이 랩을 성공적으로 완료하셨습니다.

이 연습을 완료하면 매일 오전 4시에 실행되도록 SQL Server 데이터베이스에서 인덱스 조각 모음이 자동화됩니다.