SQL Serverに定期的な処理をさせたい場合の手段

SQL Serverで定期的な処理を行いたいときにメモしておきます。

1.SQL Agentのジョブ

まず前提条件で、現時点で無料版のExpress Editionでは使えないようです。

ジョブをSQL Server Management Studioから確認します。開いたら左側のオブジェクトエクスプローラーの下のほうにあります。

ジョブと書いているところを右クリックすることでジョブの追加ができます。ジョブの使い方はほぼタスクスケジューラのようなもので、使用するクエリをステップという部分で書き、スケジュールを決めて定期的に実行したりができます。

SQLServerのジョブのtips

ジョブで毎日ずっと回したいタスクがある場合、開始時刻~終了時刻にしないでください。終了時刻がその日最後の実行としたい場合、終了時刻と実行時刻がかぶると実行してくれないため少し伸ばさないといけません。

例1: 0:20から23:50まで30分間隔で実行 23:50で終了となるため23:50のタスクは実行されない

例2: 0:20から23:59まで30分間隔で実行 これだと23:50も実行される 

2.Powershellとタスクスケジューラ

こちらはPowershellとタスクスケジューラを使う手法です。無料のExpress Editionでも使用できます。

この記事のAPI用スクリプトにあるInvoke-SQLqueryで使用している部分の処理などを使ってPowershellからSQL Serverにクエリを送信することができます。

これを利用してPowershellスクリプトを作成し、タスクスケジューラでそのPowershellスクリプトの実行タスクを作成できます。

どっちがいいのか

まず無料版だとジョブは使えないのでPowershellとタスクスケジューラとなります。

Express Edition以外だとどっちでもいいと思いますが、管理しやすさで選ぶべきだと思いました。

タスクスケジューラを利用する機会が多い環境ならPowershellとタスクスケジューラで良いと思いますし、そうでないならジョブでやったほうが運用しやすいかなと思います。

タイトルとURLをコピーしました