Azure Automation: クラウド内の SQL エージェント で紹介されていますが、SQL Database では、機能として、SQL Server Agent (SQL Server エージェント) はありませんので、定期的な SQL 実行が必要な場合は、Azure の他のサービスを使用して、実装する必要があります。
上記のブログでは、Azure Automation を使用していますが、Web Apps の Web ジョブを使用することでも、定期的な SQL 実行ができますので、少し見てみたいと思います。
先日、Azure Automation で Native PowerShell が使用できるようになり、ワークフローでなくても処理を実装できるようになりました。
Web Apps の Web ジョブでも Web ジョブでバックグラウンド タスクを実行する で紹介されているように、各種スクリプトをジョブとして登録することができます。
現状の、Azure Automation と Web ジョブをデフォルトの状態で、定期的な SQL の実行の観点で比較してみると、
- Azure Automation
- ジョブのスケジュールを、作成後に変更可能
- Automation で実行するのは単一の PS1 だが、モジュールを別にインポートすることが可能
- Runbook のスクリプトを直接修正可能
- Web ジョブ
- ジョブのスケジュールを、作成後に変更可能
- Web ジョブのスケジュールの実体は、Azure スケジューラーサービス
- Web ジョブでは ZIP 圧縮したスクリプト群をアップロードし、実行することが可能
- sqlcmd.exe が実行可能
- ポータルからスクリプトを入れ替え場合は、kudu で「D:\home\site\wwwroot\App_Data\jobs\triggered」のファイルを入れ替えればよさげみたいですね。
2 大雑記の中の人に教えてもらいました。https://t.co/lIXWhOabql ムッシュ先生、いちおうWebジョブは修正可能です
— こすもす.えび (@kosmosebi) October 27, 2015
https://twitter.com/shibayan/status/659171021442826240(最初、修正できないって書いてしまいました。ごめんなさい、ごめんなさい。)
- ジョブのスケジュールを、作成後に変更可能
というような特徴があるのかなと。
Azure Automation では、クエリの実行については、.NET のライブラリ経由で、SQL を実行する必要がありますが、Web ジョブでは、sqlcmd.exe が使用できますので、Web ジョブにアップする ZIP ファイルの中に、SQL ファイルを格納して起き、sqlcmd.exe からその SQL を実行するということができます。
以下のようなファイル構成とし、
PS1 には、
sqlcmd.exe -S <サーバー名>.database.windows.net -d <データベース名> -U <ユーザー名> -P &<パスワード> -i .\sql\job1.sql
SQL には、
select @@version
を記述しておきます。
あとは、Job フォルダーを ZIP 圧縮して、Web ジョブに登録をすることで実行が可能です。
今回のスクリプトであれば、以下のような実行結果を取得することが可能です。
定期的にクエリを実行したい場合の選択肢として、Web ジョブも使用できることを、覚えておくと使えるシチュエーションがあるかもしれないですね。