スケーラビリティのためにデータベース タスクを自動化する

完了

SQL Server から自動化を使用する場合、SQL エージェントを使用して自動化の目的でジョブをスケジュールするのが一般的です。 Azure 仮想マシン上で実行されている Azure SQL Managed Instance と SQL Server には引き続きそのオプションがありますが、Azure SQL Database には対応していないため、同様の結果を得るために代替の自動化方法を使用する必要がある場合があります。

Azure Automation

Azure Automation を使用すると、プロセスの自動化、構成管理、ロールベースのアクセス制御や Microsoft Entra ID などの Azure プラットフォーム オプションとの完全な統合が可能になり、Azure とオンプレミスのリソースを管理できます。

Azure Automation を使用すると、Azure とオンプレミスの両方の VM のリソースを簡単に制御できます。 たとえば、ハイブリッド Runbook を使用して、VM の起動、SQL Server バックアップの実行、VM のシャットダウンなどのタスクを自動化して、コスト効率と効率を高めることができます。

もう 1 つの一般的なシナリオは、古いデータの消去や、SQL データベースのインデックスの再作成など、定期的なメンテナンス操作に Azure Automation を使用することです。

コンポーネント

Azure Automation では 、自動化と構成管理の両方のアクティビティがサポートされています。 ここではオートメーション コンポーネントに焦点を当てますが、Azure Automation を使用してサーバーの更新と構成を管理することもできます。

コンポーネント 説明
Runbook Runbook は、Azure Automation での実行単位です。 Runbook は、PowerShell に基づくグラフィカル Runbook、PowerShell スクリプト、Python スクリプトの 3 種類のいずれかとして定義されます。 PowerShell Runbook は、Azure SQL リソースの管理に最もよく使用されます。
モジュール Azure Automation では、Runbook で実行している PowerShell または Python コードの実行コンテキストを定義します。 コードを実行するには、サポート モジュールをインポートする必要があります。 たとえば、 Get-AzSqlDatabase PowerShell コマンドレットを実行する必要がある場合は、 Az.SQL PowerShell モジュールを Automation アカウントにインポートする必要があります。
資格情報 資格情報には、Runbook または構成が実行時に使用できる機密情報が格納されます。
スケジュール スケジュールは Runbook にリンクされ、特定の時刻に Runbook がトリガーされます。

Azure SQL Database と Azure SQL Managed Instance リソースを管理するために使用できる Azure CLI と PowerShell コマンドの詳細については、次のリンクを参照してください。 Azure SQL 用 PowerShell モジュールAzure SQL 用 Azure CLI

柔軟なジョブ

多くの DBA が Azure Automation をよく使うようになった理由の 1 つは、Azure SQL Database にはスケジュールされたジョブに関する機能がもともとなかったことです。

この制限により、DBA はこれらの重要なタスクを効率的に処理するための代替ソリューションを見つける必要がありました。 Azure Automation は、スケジュールされたジョブを作成および管理し、データベース移行プロセスを自動化し、定期的なメンテナンス タスクを実行する手段を提供する、このシナリオで貴重なツールとして登場しました。

アーキテクチャ

エラスティック ジョブ 機能を使用すると、サーバーまたはデータベースのコレクションに対して、1 回限りのジョブとして、または定義されたスケジュールを使用して、一連の T-SQL スクリプトを実行できます。 エラスティック ジョブは、SQL Server エージェントのジョブと同様に機能しますが、T-SQL の実行に限定される点が異なります。 ジョブは、Azure SQL Database のすべてのレベルで動作します。

エラスティック ジョブ アーキテクチャ図のスクリーンショット。

エラスティック ジョブを構成するには、ジョブの管理専用のジョブ エージェントとデータベースが必要です。 ジョブ データベースに推奨されるサービス レベルは S1 以上であり、最適なサービス レベルは、実行しているジョブの数と、それらのジョブの頻度によって決まります。

エラスティック ジョブのコンポーネントを確認してみましょう。

  • エラスティック ジョブ エージェント - ジョブを実行および管理するための Azure リソース。
  • ジョブ データベース - ジョブ管理専用のデータベース。
  • ターゲット グループ - ジョブが実行されるサーバー、エラスティック プール、単一データベースのコレクション。
  • ジョブ - ジョブ ステップを構成する 1 つ以上の T-SQL スクリプト。

サーバーまたはエラスティック プールがターゲットである場合は、ジョブ エージェントが内部のデータベースを列挙できるように、サーバーまたはプールの master データベース内に資格情報を作成する必要があります。 単一データベースの場合、必要なのはデータベース資格情報だけです。 資格情報には、ジョブ ステップの実行に最小限必要な権限だけを設定します。

エラスティック ジョブ エージェントの作成ページのスクリーンショット。

エラスティック ジョブ エージェントは Azure portal で作成できます。 [エラスティック ジョブ エージェント] ページで、エージェントの名前を指定し、ジョブ データベース用の SQL データベースを指定します。

次の PowerShell スクリプトは、 MyFirstElasticJob という名前のエラスティック ジョブを作成してジョブ ステップを追加し、データベースにテーブルが存在しない場合は SQL コマンドを実行してテーブルを作成します。

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

最後に、 MyFirstElasticJob エラスティック ジョブを実行します。

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

ユース ケース シナリオ

エラスティック ジョブは、次のシナリオで使用できます。

  • 特定のスケジュールで実行する管理タスクを自動化します。
  • スキーマの変更をデプロイします。
  • データ移動。
  • レポートまたはその他の目的でデータを収集し、集計します。
  • Azure Blob Storage からデータを読み込む。
  • データベース コレクションを対象として (ピーク外の時間などに) 定期的に実行するジョブを構成します。
  • テレメトリ収集など、多数のデータベースに対するデータ処理。 結果は 1 つの対象テーブルにまとめられて、分析に使用されます。

SQL エージェント ジョブをエラスティック ジョブに移行する

SQL エージェント ジョブをエラスティック ジョブに移行するための独自のスクリプトを作成することもできますが、より便利なオプションがあります。 既存の SQL エージェント ジョブをエラスティック ジョブにコピーしやすくするダウンロード可能なスクリプトが存在します。

スクリプトは、これらのジョブを変換するプロセスを自動化するツールであり、新しい環境で手動で再作成する必要がある時間と労力を節約します。

ファイルは、スクリプトと関連ドキュメントを含む zip 形式のフォルダーです。 これを使用するには、ファイルをダウンロードし、指示に従います。

手順に一覧表示されているすべてのパラメーターを入力すると、ジョブの一覧が表示されます。 その後、スクリプトは、まだ存在しないと仮定して、各ジョブを個別に無効な状態で作成します。 ジョブの作成後、手順は同じ ID、コマンド テキスト、再試行回数、および初期再試行間隔秒数で追加されます。 ジョブ ステップにリンクされているデータベースがターゲット グループになります。 ターゲット グループが存在しない場合は、自動的に作成されます。 コピーには、スケジュール、アラート、通知は含まれません。

SQL エージェント ジョブを Azure 上の SQL エージェントに移行する

オンプレミスの SQL Server から仮想マシン上で実行されている Azure SQL Managed Instance または SQL Server へのジョブの移行は、ほとんどの DBA に慣れていると感じるプロセスに従います。

このシナリオでは、オンプレミスの SQL Server を Azure SQL Managed Instance に移行したとします。 Azure 環境でシームレスに機能させるために、複数の SQL エージェント ジョブを移行して調整する必要があります。

  • 依存関係を評価する: 移行する SQL エージェント ジョブを特定します。 ジョブが依存するすべての依存関係 (リンク サーバー、資格情報、データベースなど) を一覧表示します

  • SQL エージェント ジョブのスクリプトを作成します。 SQL Server 上の SQL エージェント ジョブを SQL スクリプトとしてスクリプトします。 これを行うには、SQL Server Management Studio (SSMS) でジョブを右クリックし、[スクリプト ジョブ名] -> [CREATE To] -> [新しいクエリ エディター ウィンドウ] を選択します。

  • ジョブの依存関係を変更します。 SQL スクリプトを確認し、移行によって変更された可能性があるジョブの依存関係を変更します。 たとえば、ジョブがローカル サーバー上のリンク サーバーまたはファイル パスを参照している場合は、新しい環境に合わせて更新します。

  • Azure SQL MI ジョブの作成: SSMS または Azure Data Studio を開き、Azure SQL Managed Instance に接続します。 前に生成したスクリプトを使用して、新しい SQL エージェント ジョブを作成します。

  • Azure SQL MI への依存関係を作成します。 SQL エージェント ジョブがリンク サーバーまたは資格情報に依存している場合は、Azure SQL MI 環境で作成します。 オンプレミスの SQL Server の構成と一致していることを確認します。

  • ジョブをスケジュールします。 SQL Server エージェントを使用して、Azure SQL MI でジョブ スケジュールを設定します。 新しいスケジュールを作成し、ジョブにリンクすることができます。

  • テスティング: Azure SQL MI 環境で SQL エージェント ジョブを十分にテストして、想定どおりに実行されることを確認します。 オンプレミスの SQL Server と Azure SQL MI の違いによって発生する可能性のあるエラーまたは問題を確認します。

  • 監視とメンテナンス: ジョブのパフォーマンスを監視し、Azure SQL MI 環境で引き続き要件を満たしていることを確認します。 必要に応じて、構成またはスケジュールを調整します。