Automation Runbook をデプロイして、インデックスを自動的に再構築する

推定所要時間:30 分

あなたは、データベース管理の日常業務自動化を支援するシニア データベース管理者として採用されました。 この自動化はピーク時のパフォーマンスで AdventureWorks のデータベースの稼働を確実に続けるうえで役に立つだけでなく、特定の条件に基づいてアラートを生成することもできるようにします。 AdventureWorks では、サービスとしてのインフラストラクチャ (IaaS) とサービスとしてのプラットフォーム (PaaS) の両方のオファリングで SQL Server を利用しています。

注: これらの演習では、T-SQL コードをコピーして貼り付け、既存の SQL リソースを使うように求められることがあります。 コードを実行する前に、コードが正しくコピーされていることを確認してください。

Automation アカウントを作成する

  1. ラボの仮想マシンからブラウザー セッションを開始し、https://portal.azure.com に移動します。 このラボ仮想マシンの [リソース] タブで提供されている Azure の [ユーザー名][パスワード] を使用してポータルに接続します。

    Azure portal のサインイン ページのスクリーンショット

  2. Azure portal の検索バーに「automation」と入力し、検索結果から [Automation アカウント] を選択して、 [+ 作成] を選択します。

    Automation アカウントを選択しているスクリーンショット。

  3. [Automation アカウントの作成] ページで、次の詳細を入力して、 [確認と作成] を選択します。

    • リソース グループ: <お使いのリソース グループ>
    • 名前: autoAccount
    • 場所: 既定値を使用します。

    [Automation アカウントの追加] 画面のスクリーンショット。

  4. [レビュー] ページで、 [作成] を選択します。

    [Automation アカウントの追加] 画面のスクリーンショット。

    [!NOTE] Automation アカウントは約 3 分で作成されます。

既存の Azure SQL Database に接続する

  1. Azure portal 内で、「sql データベース」を検索して、自分のデータベースに移動します。

    既存の SQL データベースの検索のスクリーンショット。

  2. SQL データベース AdventureWorksLT を選択します。

    AdventureWorks SQL データベースを選択しているスクリーンショット。

  3. SQL Database ページのメイン セクションで、 [クエリ エディター (プレビュー)] を選択します。

    [クエリ エディター (プレビュー)] を選択しているスクリーンショット。

  4. データベースにサインインするための資格情報を入力するように求められます。 次の資格情報を使用します。

    • ログイン: sqladmin
    • パスワード: P@ssw0rd01
  5. 次のエラー メッセージが表示されます。

    サインイン エラーのスクリーンショット。

  6. 上記のエラー メッセージの最後にある [許可リスト IP …] リンクを選択します。 これにより、クライアント IP が SQL Database のファイアウォール規則エントリとして自動的に追加されます。

    ファイアウォール規則の作成のスクリーンショット。

  7. クエリ エディターに戻り、 [OK] を選択して、データベースにサインインします。

  8. ブラウザーで新しいタブを開き、GitHub ページに移動して、AdaptativeIndexDefragmentation スクリプトにアクセスします。 次に、 [Raw] を選択します。

    GitHub で [Raw](未フォーマット) を選択しているスクリーンショット。

    これにより、コピー可能な形式でコードが提供されます。 すべてのテキストを選択し ( CTRL + A )、クリップボードにコピーします ( CTRL + C )。

    [!NOTE] このスクリプトの目的は、1 つ以上のデータベースに対して、1 つ以上のインデックスのインテリジェントな最適化と、必要な統計情報の更新を実行することです。

  9. GitHub ブラウザー タブを閉じ、Azure portal に戻ります。

  10. コピーしたテキストを [クエリ 1] ペインに貼り付けます。

    新しいクエリ ウィンドウにコードを貼り付けているスクリーンショット。

  11. クエリの 5 行目と 6 行目の USE msdbGO (スクリーンショットで強調表示されています) を削除し、[実行] を選択します。

  12. [ストアド プロシージャ] フォルダーを展開して、作成された内容を確認します。

    新しいストアド プロシージャのスクリーンショット。

Automation アカウント資産を構成する

次の手順で、Runbook の作成準備として必要な資産を構成します。 次に、[Automation アカウント] を選択します。

  1. Azure portal 上で、上部の検索ボックスに「automation」と入力します。

    Automation アカウントを選択しているスクリーンショット。

  2. 作成した Automation アカウントを選択します。

    autoAccount Automation アカウントを選択しているスクリーンショット。

  3. Automation ブレードの [共有リソース] セクションで、 [モジュール] を選択します。 [ギャラリーの参照] を選択します。

    [モジュール] メニューを選択しているスクリーンショット。

  4. ギャラリー内で sqlserver を検索します。

    SqlServer モジュールを選択しているスクリーンショット。

  5. SqlServer を選択すると、次の画面に移動するので、 [選択] を選択します。

    [選択] を選択しているスクリーンショット。

  6. [モジュールの追加] ページで、使用可能な最新のランタイム バージョンを選択し、 [インポート] を選択します。 これにより、PowerShell モジュールが Automation アカウントにインポートされます。

    [インポート] を選択しているスクリーンショット。

  7. データベースに安全にサインインするには、資格情報を作成する必要があります。 Automation アカウントのブレードから、[共有リソース] セクションに移動し、[資格情報] を選択します。

    [資格情報] オプションを選択しているスクリーンショット。

  8. [+ 資格情報の追加] を選択し、以下の情報を入力して、 [作成] を選択します。

    • 名前: SQLUser
    • ユーザー名: sqladmin
    • パスワード: P@ssw0rd01
    • パスワードの確認: P@ssw0rd01

    アカウント資格情報の追加のスクリーンショット。

PowerShell Runbook を作成する

  1. Azure portal 内で、「sql データベース」を検索して、自分のデータベースに移動します。

    既存の SQL データベースの検索のスクリーンショット。

  2. SQL データベース AdventureWorksLT を選択します。

    AdventureWorks SQL データベースを選択しているスクリーンショット。

  3. [概要] ページで、次に示すように、Azure SQL データベースの [サーバー名] をコピーします (サーバー名は dp300-lab で始まるはずです)。 これは後の手順で貼り付けます。

    サーバー名をコピーしているスクリーンショット。

  4. Azure portal 上で、上部の検索ボックスに「automation」と入力します。

    Automation アカウントを選択しているスクリーンショット。

  5. 作成した Automation アカウントを選択します。

    autoAccount Automation アカウントを選択しているスクリーンショット。

  6. Automation アカウント ブレードの [プロセス オートメーション] セクションまでスクロールし、 [Runbook][+ Runbook の作成] の順に選択します。

    [Runbook の作成] を選択している [Runbook] ページのスクリーンショット。

    [!NOTE] 学習したように、2 つの既存の Runbook が作成されていることに注意してください。 これらは、Automation アカウントのデプロイ中に自動的に作成されました。

  7. Runbook の名前として「IndexMaintenance」を、Runbook の種類として「PowerShell」を入力します。 使用可能な最新のランタイム バージョンを選択し、 [作成] を選択します。

    Runbook を作成しているスクリーンショット。

  8. Runbook が作成されたら、以下の PowerShell コード スニペットをコピーして Runbook エディターに貼り付けます。 スクリプトの 1 行目に、上記の手順でコピーしたサーバー名を貼り付けます。 [保存] を選択してから、[公開] を選択します。

    メモ: 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
    

    貼り付けコードを切り取っているスクリーンショット。

  9. すべてが問題なければ、成功メッセージを受け取るはずです。

    Runbook 作成の成功メッセージのスクリーンショット。

Runbook のスケジュールの作成

次に、Runbook をスケジュールして定期的に実行されるようにします。

  1. IndexMaintenance Runbook の左側のナビゲーションにある [リソース] の下で、 [スケジュール] を選択します。 次に、[+ スケジュールの追加] を選択します。

    [スケジュールの追加] を選択している[スケジュール] ページのスクリーンショット。

  2. [スケジュールを Runbook にリンクします] を選択します。

    [スケジュールを Runbook にリンクします] を選択しているスクリーンショット。

  3. [+ スケジュールの追加] を選択します。

    スケジュールの作成リンクのスクリーンショット。

  4. 必要に応じて、わかりやすいスケジュール名と説明を入力します。

  5. 翌日の午前 4 時 00 分の開始時刻を太平洋時間のタイム ゾーンで指定します。 1 日ごとの繰り返しを構成します。 有効期限は設定しないでください。

    情報例が入力された [新しいスケジュール] ポップアウトのスクリーンショット。

  6. [作成] を選択してから [OK] を選択します。

  7. これでスケジュールが作成され、Runbook にリンクされました。 [OK] を選択します。

    作成されたスケジュールのスクリーンショット。

Azure Automation から、Azure 環境と非 Azure 環境にわたって一貫した管理をサポートするクラウドベースのオートメーションと構成サービスが提供されています。

この演習を完了することで、SQL サーバー データベースのインデックスの最適化を、毎日午前 4 時に実行するように自動化しました。