SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Web Apps の Web ジョブを使用した定期的な SQL の実行

leave a comment

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://twitter.com/shibayan/status/659171021442826240(最初、修正できないって書いてしまいました。ごめんなさい、ごめんなさい。)

というような特徴があるのかなと。
Azure Automation では、クエリの実行については、.NET のライブラリ経由で、SQL を実行する必要がありますが、Web ジョブでは、sqlcmd.exe が使用できますので、Web ジョブにアップする ZIP ファイルの中に、SQL ファイルを格納して起き、sqlcmd.exe からその SQL を実行するということができます。
以下のようなファイル構成とし、
image
PS1 には、

sqlcmd.exe -S <サーバー名>.database.windows.net -d <データベース名> -U <ユーザー名> -P &<パスワード> -i .\sql\job1.sql

 
SQL には、

select @@version

を記述しておきます。
あとは、Job フォルダーを ZIP 圧縮して、Web ジョブに登録をすることで実行が可能です。
今回のスクリプトであれば、以下のような実行結果を取得することが可能です。
image
定期的にクエリを実行したい場合の選択肢として、Web ジョブも使用できることを、覚えておくと使えるシチュエーションがあるかもしれないですね。

Share

Written by Masayuki.Ozawa

10月 27th, 2015 at 12:44 pm

Leave a Reply