過去1年間、私はAzure SQL Databaseに関する多くのセッションを紹介し、多数の記事やブログを作成してきました。 Azure SQL Databaseを使用する場合、データベースのメンテナンスが依然として重要な要素であるかどうかをよく尋ねられます。はい–インデックスの保守、統計の更新、整合性チェックなどのタスクは依然として重要であり、これらのタスクをスケジュールするのはDBAの責任です。混乱は、Azure SQLDatabaseがPlatformasa Serviceであり、Microsoftがインフラストラクチャとバックアップの処理を担当していることに起因しています。物理的な破損のいくつかの側面が説明される場合がありますが、データベース内の論理的な破損は説明されません。そのため、クライアントはDBCC CHECKDB
を実行することをお勧めします それらが完全に保護されていることを確認します。
Azure SQL Databaseを使用する新しいDBAで発生する問題は、SQLServerStandardおよびEnterpriseEditionで使用されているような組み込みのSQLServerエージェントがないことです。
Azure SQLデータベースに対してメンテナンスジョブをスケジュールするには、いくつかのオプションがあります。
- リンクされたサーバー
- データベース保守計画
- Powershell
- Azureサービス
- エラスティックジョブ
次のデモは、Azure SQLデータベースにリモートアクセスするためのログインアカウント、ファイアウォールルール、およびその他のセキュリティ設定が既に構成されていることを前提としています。
リンクサーバー
ほとんどのDBAはリンクサーバーの作成と管理に既に精通しているため、リンクサーバーを使用してAzureSQLデータベースに接続することは非常に一般的なアプローチです。リンクサーバーを使用しているクライアントを確認した最も一般的な2つの方法は、SQLServerネイティブクライアントまたはMicrosoftOLEDBプロバイダーforODBCドライバーのいずれかをプロバイダーとして使用することです。ネイティブクライアントを使用する場合は、データソースとしてサーバー名を指定する必要があります。ただし、ODBCドライバーを使用する場合は、接続文字列を取得し、それをプロバイダー文字列として使用する必要があります。これらの値は両方とも、データベースのAzureポータルにあります。データベースをクリックすると、サーバー名とデータベース接続文字列を表示するオプションが表示されます。このサーバー名sqlperformance.database.windows.netは、SQLServerネイティブクライアントデータソースに使用するものです。
「データベース接続文字列の表示」をクリックすると、現在、ADO.NET、JDBC、ODBC、およびPHPのオプションがあります。 ODBCの接続文字列を表示するには、[ODBC]タブをクリックします。
次に、SSMSでリンクサーバーを作成する必要があります。 [サーバーオブジェクト]で[リンクサーバー]を右クリックし、[新しいリンクサーバー]を選択して、データソースプロバイダーの選択に応じて必要な情報を入力します。
次に「セキュリティ」をクリックして、設定を定義します。通常、リモートログインとパスワードが提供された「このセキュリティコンテキストを使用して作成する」オプションが表示されます。
これをすべて定義したら、[OK]をクリックします。これで、新しいリンクサーバーを右クリックして、接続をテストできます。
リンクサーバーを参照して、SQLAgentジョブステップでOlaHallengrenのIndexOptimizeやDatabaseIntegrityCheckなどのストアドプロシージャをAzureSQLDatabaseに対して直接呼び出すことができるようになりました。
データベース保守計画
メンテナンスにデータベースメンテナンスプランを使用する場合は、プロセスが少し簡単になります。開始するには、手動またはウィザードを使用してメンテナンスプランを作成するだけです。ウィザードを使用している場合は、メンテナンスプランを作成したら、プランを編集してからAzure接続を追加できます。次に、新しい接続を使用するように各タスクを変更します。接続画面は次のようになります。
これで、データベースのメンテナンス計画をメンテナンス期間中に実行するようにスケジュールできます。
PowerShell
PowerShellは、繰り返し可能なタスクを操作するための優れたオプションであり、AzureSQLDatabaseでPowerShellを使用するのは簡単です。 Invoke-SqlCmd関数を使用して、データベースに対してステートメントを照会または実行できます。
一般的なアプローチは、次のようなスクリプトを使用することです。
$params = @{ 'Database' = 'YourDatabase' 'ServerInstance' = 'instance.database.windows.net' 'Username' = 'UserName' 'Password' = 'ComplexP@$$word' 'Query' = 'Your Query Here' } Invoke-Sqlcmd @params
クエリには、Ola Hallengrenのインデックス最適化と整合性チェック、または使用しているカスタムスクリプトを使用できます。次に、組織で使用しているスケジューラーを使用してPowerShellスクリプトをスケジュールする必要があります。
Azureサービス
AzureプラットフォームにはAzureAutomationが組み込まれており、開始するには、自動化アカウントを作成する必要があります。アカウントの名前を指定し、サブスクリプション、リソースグループ、場所を選択して、AzureRunAsアカウントを作成するかどうかを決定する必要があります。
アカウントを作成したら、Runbookの作成を開始できます。 Runbookではほぼ何でもできます。プロビジョニング、監視、ライフサイクル管理など、自分で使用するために参照および変更できる既存のRunBookが多数あります。
Runbookはオフラインで作成することも、Azure Portalを使用して作成することもでき、PowerShellを使用して作成されます。この例では、PowerShellデモのコードを再利用し、組み込みのAzureサービススケジューラを使用して既存のPowerShellコードを実行し、オンプレミススケジューラ、タスクスケジューラ、またはAzureVMに依存する必要がないことを示します。ジョブをスケジュールします。
Runbooksをクリックして開始します
次に「Runbookを追加」をクリックします
「新しいRunbookを作成する」をクリックします
名前とRunbookタイプを入力し、デモにPowerShellを選択しました。
次に、新しいRunbookの編集画面が表示されます。ここで、詳細を構成してRunbookを作成できます。このデモでは、PowerShellスクリプトを実行して、データベースに対してストアドプロシージャを呼び出しています。すべてのコードが完成したら、Runbookを公開して保存できます。
ここから、Runbookを開始し、すべてが適切に機能することを検証し、Runbookを特定の時間に実行するようにスケジュールすることができます。 [スケジュール]をクリックして、このプロセスを進めましょう
[スケジュールをRunbookにリンクする]をクリックする必要があります。これまでにスケジュールを作成したことがないため、[新しいスケジュールを作成する]をクリックして新しいスケジュールを定義する必要があります。
SQL Serverエージェントの場合と同じように、スケジュール名、必要に応じて説明、開始するタイミング、および実行する頻度を指定します。これは毎日午前2時に発生するように設定しました。
これで、データベースの1つでインデックスのメンテナンスを実行するために、毎晩午前2時に実行するようにスケジュールされたRunbookが公開されました。
弾力性のある仕事
Elastic Jobsは現在プレビュー中です。画面や機能が変更される可能性が高いため、詳細については説明しません。
Elastic Jobsを使用するには、Elasticデータベースプールを定義し、ジョブを実行するために少なくとも1つのデータベースをプールに割り当てる必要があります。エラスティックプールを作成してデータベースを追加したら、[ジョブの作成]をクリックできます。
ジョブにわかりやすい名前を付け、データベースに接続するためのユーザー名とパスワード、および実行するスクリプトを指定します。 [保存]をクリックすると、弾力性のある仕事ができます。
次に、ジョブを実行するか、スクリプトを表示するか、実行中の場合はジョブをキャンセルするかを選択できます。
弾力性のあるジョブを使用してAzurePortalを介して実行できる特定のことがありますが、実際の電源と構成のオプションはPowerShellAPIを介して利用できます。ジョブをスケジュールするには、コマンドレットNew-AzureSQLJobScheduleを使用する必要があります。追加機能とジョブのスケジュール方法の詳細については、こちらをご覧ください:
- PowerShellを使用してSQLデータベースエラスティックジョブを作成および管理する
全体的に、Elastic Jobs機能が気に入っており、一般に利用可能になったときに、PowerShellで管理しなくてもAzurePortalにさらに多くの機能が組み込まれることを期待しています。 PowerShell内でT-SQLを実行しなくても、T-SQLを直接実行できることと、プール内のすべてのデータベースに対してT-SQLを実行する方法が気に入っています。
概要
Azure SQLデータベースに関しては、はい、データベースの特定のメンテナンスは引き続き責任を負います。ジョブをスケジュールする方法は多数あり、ニーズと環境のサイズに応じて、特定のオプションがより優れたソリューションになります。リンクサーバーとデータベースのメンテナンスプランは、SQLサーバーが既に構成されているオンプレミスまたはAzure VMがあり、小規模なAzureデプロイメントがある場合、すばやく簡単な方法です。 PowerShellは常に優れたオプションであり、実行するスクリプトをスケジュールするためのソリューションを見つける必要があります。 Azureの自動化は非常に堅牢なソリューションであり、Runbookを作成してほぼすべてを実行し、Runbookを簡単にスケジュールできます。エラスティックプール内のデータベースのグループに対して実行する必要のあるタスクがある場合は、エラスティックジョブも優れたAzureベースのソリューションです。