SQL Serverで定期的な処理を行いたいときにメモしておきます。
1.SQL Agentのジョブ
まず前提条件で、現時点で無料版のExpress Editionでは使えないようです。
ジョブをSQL Server Management Studioから確認します。開いたら左側のオブジェクトエクスプローラーの下のほうにあります。
ジョブと書いているところを右クリックすることでジョブの追加ができます。ジョブの使い方はほぼタスクスケジューラのようなもので、使用するクエリをステップという部分で書き、スケジュールを決めて定期的に実行したりができます。
2.Powershellとタスクスケジューラ
こちらはPowershellとタスクスケジューラを使う手法です。無料のExpress Editionでも使用できます。
SQL Server用のInvoke-Sqlcmdなどを使ってPowershellからSQL Serverにクエリを送信することができます。
VDI環境構築の時に作成したInvoke-SQLQueryというコマンドもこちらに置いておきます。
Function Invoke-SQLQuery{
param (
[Parameter(Mandatory = $true)][String] $SQLQuery
)
$ConnectionString = New-Object -TypeName System.Data.SqlClient.SqlConnectionStringBuilder
#サーバー
$ConnectionString['Data Source'] = "DBserver"
#データベース
$ConnectionString['Initial Catalog'] = "hypervdi"
#Windows認証
$ConnectionString['Integrated Security'] = $true
$resultsDataTable = New-Object System.Data.DataTable
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SQLQuery, $SqlConnection)
# データベース接続
$SqlConnection.Open()
#クエリ実行
$resultsDataTable.Load($SqlCommand.ExecuteReader())
$SqlConnection.Close()
# 画面表示
return $resultsDataTable
}
これらを利用してPowershellスクリプトを作成し、タスクスケジューラでそのPowershellスクリプトの実行タスクを作成できます。
どっちがいいのか
まず無料版だとジョブは使えないのでPowershellとタスクスケジューラとなります。
Express Edition以外だとどっちでもいいと思いますが、管理しやすさで選ぶべきだと思いました。
タスクスケジューラを利用する機会が多い環境ならPowershellとタスクスケジューラで良いと思いますし、そうでないならジョブでやったほうが運用しやすいかなと思います。