Windows タスク スケジューラを使って毎日実行されるジョブをスケジュールする方法
SQL Server で毎日実行される SQL クエリをスケジュールする方法
SQL Server エージェントは、SQL Server でジョブを作成してスケジュールするためのツールです。ジョブは、Transact-SQL スクリプトを実行したり、データベースメンテナンスタスクを実行したり、外部プログラムを実行したりするなど、さまざまなタスクを実行できます。
SQL Server エージェントを使用して毎日実行される SQL クエリをスケジュールするには、次の手順を実行します。
- SQL Server Management Studio を開きます。
- オブジェクト エクスプローラで、SQL Server エージェント ノードまで展開します。
- ジョブ フォルダを右クリックし、新しいジョブ を選択します。
- 新しいジョブ ダイアログ ボックスで、ジョブの名前と説明を入力します。
- ステップ ページで、ステップ を追加ボタンをクリックします。
- ステップの追加 ダイアログ ボックスで、Transact-SQL スクリプト アクションを選択し、OK をクリックします。
- Transact-SQL スクリプト エディタ ウィンドウで、毎日実行する SQL クエリを貼り付けます。
- スケジュール ページで、ジョブの実行スケジュールを設定します。
- OK をクリックして、ジョブを作成します。
Windows タスク スケジューラは、Windows オペレーティング システムでタスクをスケジュールするためのツールです。SQL Server Management Studio を使用せずに、SQL クエリをスケジュールする方法を提供します。
- Windows タスク スケジューラ を開きます。
- タスクの作成 をクリックします。
- タスクの作成ウィザード で、基本設定 ページでタスクの名前と説明を入力します。
- トリガー ページで、新しい をクリックし、毎日の トリガーを選択します。
- トリガーの編集 ダイアログ ボックスで、トリガーの実行スケジュールを設定します。
- プログラムの実行 ダイアログ ボックスで、SQL Server を実行するファイルへのパスを入力します。
- 引数 フィールドに、/S /Q /N /X <sql_script_path> オプションを入力します。ここで、<sql_script_path> は、実行する SQL クエリを含むスクリプト ファイルのパスです。
どちらの方法を選択するかは、ニーズによって異なります。 SQL Server エージェントは、SQL Server でジョブをスケジュールするためのより強力で柔軟なツールです。一方、Windows タスク スケジューラは、SQL Server Management Studio を使用せずに SQL クエリをスケジュールする方法を提供します。
補足
- 上記の手順は、SQL Server 2019 を使用していることを前提としています。他のバージョンでは、手順が多少異なる場合があります。
- SQL クエリを実行する前に、必要な権限を持っていることを確認してください。
- ジョブまたはタスクが正常に実行されていることを確認するために、ログを定期的に確認してください。
-- サンプルコード:毎日実行されるジョブを作成する
-- ジョブの名前と説明を定義します。
DECLARE @job_name NVARCHAR(128) = N'Daily ETL Job';
DECLARE @job_description NVARCHAR(4000) = N'このジョブは、毎日 ETL プロセスを実行します。';
-- ジョブを作成します。
EXEC sp_add_job @job_name, @job_description;
-- ジョブ ステップを作成します。
DECLARE @job_step_id INT;
EXEC sp_add_jobstep @job_name, @job_step_id OUT, N'ETL 処理を実行する',
N'OSコマンドを実行する', N'C:\path\to\etl.exe', N'-p 2024-04-15';
-- スケジュールを作成します。
DECLARE @schedule_id INT;
EXEC sp_add_schedule @schedule_name = N'Daily Schedule',
@schedule_type = N'D', @freq_interval = 1, @freq_subcode = 6,
@start_date = 20240415, @start_time = 000000,
@active_start_date = 20240415, @active_end_date = 20991231,
@active_start_time = 000000, @active_end_time = 235959,
@schedule_id = @schedule_id OUT;
-- ジョブにスケジュールをアタッチします。
EXEC sp_attach_schedule @job_name, @schedule_id;
-- ジョブを有効にします。
EXEC sp_enable_job @job_name;
このコードは、Daily ETL Job
という名前のジョブを作成し、毎日午前 0 時に etl.exe
プログラムを実行するようにスケジュールします。
sp_add_job
プロシージャは、ジョブを作成するために使用されます。sp_add_jobstep
プロシージャは、ジョブ ステップを作成するために使用されます。ジョブ ステップは、ジョブによって実行される個々のタスクです。この例では、ジョブ ステップはetl.exe
プログラムを実行します。sp_add_schedule
プロシージャは、スケジュールを作成するために使用されます。スケジュールは、ジョブの実行タイミングを定義します。この例では、スケジュールはジョブを毎日午前 0 時に実行するように設定します。sp_attach_schedule
プロシージャは、ジョブにスケジュールをアタッチするために使用されます。
このコードをカスタマイズするには、次の手順を実行します。
job_name
変数とjob_description
変数を、ジョブの名前と説明に変更します。etl.exe
を実行するコマンドを、実行する必要があるコマンドに変更します。- スケジュールの開始日と開始時刻を、ジョブを実行する必要がある日時と時刻に変更します。
SQL Server で毎日実行される SQL クエリをスケジュールする方法(その他の方法)
SQL Server Integration Services (SSIS) を使用する
SSIS は、SQL Server でデータの抽出、変換、ロード (ETL) を自動化するためのツールです。SSIS パッケージを作成して、毎日実行される SQL クエリを含めることができます。
- SQL Server Data Tools を開きます。
- ファイル メニューで 新規 > プロジェクト を選択します。
- 新しいプロジェクト ダイアログ ボックスで、統合サービスプロジェクト テンプレートを選択し、OK をクリックします。
- ソリューション エクスプローラで、パッケージ フォルダを右クリックし、新しいパッケージ を選択します。
- パッケージ エディタで、データ フロー タブをクリックします。
- ソース コンポーネントをドラッグしてデザイン ペインにドロップし、SQL Server ネイティブ クエリ データ ソース タイプを選択します。
- 接続マネージャー を編集して、SQL Server データベースへの接続を定義します。
- クエリ エディタ で、毎日実行する SQL クエリを入力します。
- 変換 コンポーネントをドラッグしてデザイン ペインにドロップし、必要に応じてデータを変換します。
- パッケージ メニューで スケジュール を選択します。
- 保存 ボタンをクリックして、パッケージを保存します。
PowerShell は、Windows を自動化するためのスクリプト言語です。PowerShell スクリプトを作成して、SQL Server Management Studio を使用せずに SQL クエリを実行できます。
- テキスト エディタ で、新しい PowerShell スクリプトを作成します。
- 以下のスクリプトを編集して、SQL Server データベースへの接続情報と実行する SQL クエリを指定します。
# SQL Server データベースへの接続
$serverName = "yourServerName"
$databaseName = "yourDatabaseName"
$username = "yourUsername"
$password = "yourPassword"
# 実行する SQL クエリ
$query = "SELECT * FROM yourTable"
# SQL Server に接続します。
$connection = New-Object System.Data.SqlClient.SqlConnection("Server=$serverName;Database=$databaseName;Integrated Security=SSPI")
$connection.Open()
# SQL クエリを実行します。
$command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
$command.ExecuteNonQuery()
# 接続を閉じます。
$connection.Close()
- スクリプトの実行 ダイアログ ボックスで、PowerShell スクリプトへのパスを入力します。
Linux 上で cron を使用する
Linux 上で SQL Server を実行している場合は、cron
ジョブを使用して毎日実行される SQL クエリをスケジュールできます。
0 0 * * * /usr/bin/sqlcmd -S yourServerName -d yourDatabaseName -U yourUsername -P yourPassword -Q "SELECT * FROM yourTable"
sql sql-server database