Microsoft SQL Server エージェント ジョブを作成して Linux 上で実行する
適用対象: SQL Server - Linux
SQL Server ジョブを使用して、SQL Server データベースで同じ一連のコマンドを定期的に実行します。 このチュートリアルでは、Transact-SQL と SQL Server Management Studio (SSMS) の両方を使用して、Linux 上で実行される SQL Server エージェント ジョブを作成する方法の例を示します。
- Linux 上に SQL Server エージェントをインストールする
- データベースのバックアップを毎日実行する新しいジョブを作成する
- ジョブのスケジュールを設定して実行する
- SSMS で同じ手順を実行する (省略可能)
Linux 上の SQL Server エージェントに関する既知の問題については、「Linux 上の SQL Server 2017 のリリース ノート」を参照してください。
前提条件
このチュートリアルを完了するには、次の前提条件を満たす必要があります。
次の前提条件を満たしている Linux コンピューター:
次の前提条件には対応しなくてもかまいません。
- SSMS を備えた Windows マシン:
- オプションの SSMS 手順を実行するための SQL Server Management Studio (SSMS) をダウンロードする。
SQL Server エージェントを有効にする
Linux 上で SQL Server エージェントを使用するには、まず SQL Server が既にインストールされているコンピューターで SQL Server エージェントを有効にする必要があります。
SQL Server エージェントを有効にするには、次の手順に従います。
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
次のコマンドを使用して SQL Server を再起動します。
sudo systemctl restart mssql-server
Note
SQL Server 2017 (14.x) CU 4 以降、SQL Server エージェントは mssql-server
パッケージに含まれており、既定では無効になっています。 CU4 より前のバージョンでエージェントを設定するには、「Linux 上に SQL Server エージェントをインストールする」を参照してください。
サンプル データベースの作成
次の手順に従って、SampleDB
という名前のサンプル データベースを作成します。 このデータベースは、毎日のバックアップ ジョブを実行するために使用されます。
Linux コンピューター上で、bash ターミナル セッションを開きます。
sqlcmd を使用して Transact-SQL
CREATE DATABASE
コマンドを実行します。/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -Q 'CREATE DATABASE SampleDB'
サーバー上のデータベースを一覧表示して、データベースが作成されていることを確認します。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -Q 'SELECT Name FROM sys.Databases'
Transact-SQL を使用してジョブを作成する
次の手順では、Transact-SQL コマンドを使用して、Linux 上に SQL Server エージェント ジョブを作成します。 このジョブによって、サンプル データベース (SampleDB
) の毎日バックアップが実行されます。
ヒント
任意の T-SQL クライアントを使用して、これらのコマンドを実行できます。 たとえば、Linux 上では、Linux に SQL Server コマンドライン ツール sqlcmd および bcp をインストールすることや Visual Studio Code 用 SQL Server 拡張機能を使用することができます。 リモート Windows Server から SQL Server Management Studio (SSMS) でクエリを実行したり、次のセクションで説明されているジョブ管理用の UI インターフェイスを使用したりすることもできます。
sp_add_job を実行して、
Daily SampleDB Backup
という名前のジョブを作成します。-- Adds a new job executed by the SQLServerAgent service -- called 'Daily SampleDB Backup' USE msdb; GO EXEC dbo.sp_add_job @job_name = N'Daily SampleDB Backup'; GO
sp_add_jobstep を呼び出して、
SampleDB
データベースのバックアップを作成するジョブ ステップを作成します。-- Adds a step (operation) to the job EXEC sp_add_jobstep @job_name = N'Daily SampleDB Backup', @step_name = N'Backup database', @subsystem = N'TSQL', @command = N'BACKUP DATABASE SampleDB TO DISK = \ N''/var/opt/mssql/data/SampleDB.bak'' WITH NOFORMAT, NOINIT, \ NAME = ''SampleDB-full'', SKIP, NOREWIND, NOUNLOAD, STATS = 10', @retry_attempts = 5, @retry_interval = 5; GO
次に、sp_add_schedule を使用して、ジョブの日次スケジュールを作成します。
-- Creates a schedule called 'Daily' EXEC dbo.sp_add_schedule @schedule_name = N'Daily SampleDB', @freq_type = 4, @freq_interval = 1, @active_start_time = 233000; USE msdb; GO
sp_attach_schedule を使用して、ジョブのスケジュールをジョブにアタッチします。
-- Sets the 'Daily' schedule to the 'Daily SampleDB Backup' Job EXEC sp_attach_schedule @job_name = N'Daily SampleDB Backup', @schedule_name = N'Daily SampleDB'; GO
sp_add_jobserver を使用して、対象サーバーにジョブを割り当てます。 この例では、ターゲットはローカル サーバーです。
EXEC dbo.sp_add_jobserver @job_name = N'Daily SampleDB Backup', @server_name = N'(local)'; GO
sp_start_job を使用してジョブを開始します。
EXEC dbo.sp_start_job N' Daily SampleDB Backup' ; GO
SSMS でジョブを作成する
Windows 上で SQL Server Management Studio (SSMS) を使用して、ジョブをリモートで作成して管理することもできます。
Windows 上で SSMS を起動し、Linux SQL Server インスタンスに接続します。 詳細については、「Windows で SQL Server Management Studio を使用して SQL Server on Linux を管理する」を参照してください。
SampleDB
という名前のサンプル データベースが作成されていることを確認します。SQL Agent によって Linux 上への SQL Server エージェントのインストールと構成が正しく行われていることを確認します。 オブジェクト エクスプローラーで [SQL Server エージェント] の横にあるプラス記号を見つけます。 SQL Server エージェントが有効になっていない場合は、Linux 上で mssql-server サービスを再起動してみてください。
新しいジョブを作成します。
ジョブの名前を指定し、ジョブ ステップを作成します。
使用するサブシステムとジョブ ステップで実行する操作を指定します。
新しいジョブ スケジュールを作成します。
ジョブを開始します。
次のステップ
このチュートリアルでは、以下の内容を学習しました。
- Linux 上に SQL Server エージェントをインストールする
- Transact-SQL とシステム ストアド プロシージャを使用してジョブを作成する
- データベース バックアップを毎日実行するジョブを作成する
- SSMS UI を使用してジョブの作成と管理を行う
次に、ジョブの作成と管理に関するその他の機能を確認してください。