Azure エラスティックジョブを利用すると、多数のデータベースを対象にまとまったSQL文(Transact-SQL,T-SQL)を並列実行することができる。
Azure エラスティックジョブについては、以下のサイトを参照のこと。
https://learn.microsoft.com/ja-jp/azure/azure-sql/database/elastic-jobs-overview?view=azuresql
今回は、Azure Portal上でAzure エラスティックジョブを作成してみたので、その手順を共有する。
前提条件
SQLデータベース(azureSqlDatabase)上に、USER_DATAテーブルを作成済であること。


やってみたこと
- エラスティックジョブエージェントの作成
- ジョブユーザーの作成
- データベーススコープ認証情報の作成
- ターゲットグループの作成
- ジョブの作成
- ジョブステップの作成
- ジョブステップの手動実行確認
- ジョブステップの自動実行確認
エラスティックジョブエージェントの作成
ジョブを作成・実行・管理するためのAzureリソースであるエラスティックジョブエージェントは、Azure Portal上で作成できる。その手順は、以下の通り。
1) Azure Portalにログインし、「エラスティックジョブエージェント」を選択する。

3) エージェント名・サーバーを指定後、ジョブのデータベースで「新規作成」リンクを押下する。

4) ジョブデータベース名を指定し、「適用」ボタンを押下する。

5) 基本情報の指定内容を確認後、「確認と作成」ボタンを押下する。

7) デプロイが完了すると以下の画面が表示されるため、「リソースに移動」ボタンを押下する。

8) 以下のように、エラスティックジョブエージェントの作成が確認できる。


ジョブユーザーの作成
ジョブ ステップの実行対象となるターゲットサーバー(azureSqlDatabase)上で、ジョブユーザ-(job_user)を作成する。その手順は、以下の通り。
1) SQL Server認証で、ターゲットサーバー(azureSqlDatabase)にログインする。

2) ログイン時のパスワードを指定しながらジョブユーザ-(job_user)を作成する。
CREATE USER [job_user] WITH PASSWORD='(ログインパスワード)'

3) ジョブユーザ-(job_user)に、必要な権限を付与する。今回は、データの読み書き権限を付与している。
ALTER ROLE [db_datareader] ADD MEMBER [job_user]; ALTER ROLE [db_datawriter] ADD MEMBER [job_user]; GO

4) ジョブユーザ-(job_user)に付与された権限は、以下で確認できる。
SELECT dp.name AS UserName, dr.name AS DatabaseRoleName FROM sys.database_role_members drm JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id WHERE dp.name = 'job_user'

データベーススコープ認証情報の作成
ジョブのデータベース(azure-job-db-purinit)上で、エラスティックジョブのジョブステップから参照する資格情報である、データベースのスコープ認証情報(job_cred)を作成する。その手順は、以下の通り。
1) SQL Server認証で、ジョブのデータベース(azure-job-db-purinit)にログインする。

2) データベースのスコープ認証情報を作成するために必要なマスターキーを作成する。
CREATE MASTER KEY ENCRYPTION BY PASSWORD='(マスターキーのパスワード)'

3) データベースのスコープ認証情報(job_cred)を作成する。クエリに黄色の警告が表示されるが、そのまま実行できる。
CREATE DATABASE SCOPED CREDENTIAL [job_cred] WITH IDENTITY = 'job_user', SECRET = '(job_userのログインパスワード)'

4) 作成したデータベースのスコープ認証情報は、以下のように確認できる。
SELECT * FROM sys.database_scoped_credentials

5) Azure Portal上でジョブステップを作成できるよう、データベースのスコープ認証情報(job_cred)の参照権限をpublicユーザーに付与する。
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[job_cred] TO [public]

ターゲットグループの作成
ジョブステップで実行対象となるターゲットサーバー(azureSqlDatabase)の値を指定するためのターゲットグループは、Azure Portalで作成できる。その手順は、以下の通り。
1) 作成したエラスティックジョブの「ターゲットグループ」メニューを選択し、「作成」ボタンを押下する。

2) ターゲットグループ名を指定し「作成」ボタンを押下する。

3) ターゲットグループのメンバーの「作成」ボタンを押下する。

4) サーバー名・データベース名を指定し、「作成」ボタンを押下する。

なお、サーバー名・データベース名は、以下のジョブ ステップの実行対象となるターゲットサーバー(azureSqlDatabase)の値を指定している。

5) 以下のように、ターゲットグループが追加されたことが確認できる。


ジョブの作成
ジョブはAzure Portalで作成でき、実行タイミングを指定できる。その手順は、以下の通り。
2) 1日1回ジョブを実行するようにするため、ジョブスケジュールを有効化するに「はい」、スケジュール間隔の種類を「定期的」、スケーリング間隔を「P1D」を指定する。さらに、ジョブ名と、2026/1/18以降毎日15時に実行するようにするため開始時刻に「2026/1/18 15:00」を指定し、「作成」ボタンを押下する。

ジョブステップの作成
ジョブステップの作成も、Azure Portalで行える。その手順は、以下の通り。
3) ステップ名(任意)、資格情報にデータベースのスコープ認証情報(job_cred)、ターゲットグループに作成したazure-tgroup-purinitを指定し、SQLスクリプトに実行したいSQL文を指定後、「確認と作成」ボタンを押下する。

なお、指定したSQLスクリプトは、以下の通り。
DECLARE @RowCount INT = 1; -- 現在の処理件数
DECLARE @BatchSize INT = 2; -- 一括処理件数(最大値:1000)
DECLARE @RoopCount INT = 1; -- ループカウント数
-- 更新前に、user_data.memoをNULLにリセットする
UPDATE dbo.user_data SET memo = NULL;
WHILE (@RowCount > 0)
BEGIN
-- memoが未設定で、@BatchSizeに設定した件数分のidを取得し、[target_id]に格納
-- [target_id]に格納したレコードのmemoを一括更新する
WITH [target_id] AS (
SELECT TOP (@BatchSize) id
FROM dbo.user_data
WHERE memo IS NULL
)
UPDATE u
SET u.memo = N'ループカウント数:' + CAST(@RoopCount AS NVARCHAR)
+ N'、実行時刻:' + FORMAT(DATEADD(HOUR, 9, GETUTCDATE())
, 'yyyy/MM/dd HH:mm:ss')
FROM dbo.user_data u
INNER JOIN [target_id] ti
ON u.id = ti.id;
-- 先ほどのupdate文での処理件数を格納
SET @RowCount = @@ROWCOUNT;
-- ループカウント数を更新
SET @RoopCount = @RoopCount + 1;
END6) 作成したジョブステップにチェックを入れると、以下のように、SQLスクリプトが表示されることが確認できる。

ジョブステップの手動実行確認
ジョブステップの手動実行は、Azure Portal上で行える。その手順は、以下の通り。
1) SQL Server認証で、ターゲットサーバー(azureSqlDatabase)にログインする。

2) エラスティックジョブで更新対象となるUSER_DATAテーブルを確認した結果は、以下の通り。

3) 作成したエラスティックジョブの「ジョブの開始」ボタンを押下する。

5) ジョブの実行が終わると、以下のように、ジョブ実行が正常終了したことが確認できる。ここで「最後のジョブの実行を表示する」リンクを押下する。

6) 以下のように、ジョブの実行開始・終了時間が確認できる。

7) エラスティックジョブ実行後に、更新対象となるUSER_DATAテーブルを確認した結果は以下の通りで、MEMO列が想定通りに更新されていることが確認できる。

ジョブステップの自動実行確認
ジョブステップの自動実行後確認は、Azure Portal上で行える。その手順は、以下の通り。
1) 作成したエラスティックジョブを表示し、「最後のジョブの実行を表示する」リンクを押下する。

2) 以下のように、ジョブの実行開始・終了時間が確認でき、日本時間の15:00頃に完了していることが確認できる。

3) エラスティックジョブ自動実行後に更新対象となるUSER_DATAテーブルを確認した結果は以下の通りで、MEMO列が想定通りに更新されていることが確認できる。

要点まとめ
- Azure エラスティックジョブを利用すると、多数のデータベースを対象にまとまったSQL文(Transact-SQL,T-SQL)を並列実行することができる。
- エラスティックジョブのジョブステップを作成するには、あらかじめデータベーススコープ認証情報・ターゲットグループを作成しておく必要がある。














