[SQL Server] JOB(ジョブ)の所有者(JOB OWNER CHANGE)を変更する方法

inno
2013-08-24 12:24 3242 0
下記のSQLを実行して現在設定されている各JOBの所有者を確認しよう。

JOBの所有者を確認
SELECT A.name AS JobName, B.name AS OwnerName
FROM msdb.dbo.sysjobs A 
LEFT OUTER JOIN sys.server_principals B
ON A.owner_sid = B.[sid]
ORDER BY A.name ASC

結果が下記のように表示される。



JOBの所有者を変更するSQLは下記のとおりだ。

ジョブの所有者を変更するSQLクエリ
USE [master]
GO
EXEC msdb.dbo.sp_update_job @job_name='JOB名', @owner_login_name='設定する所有者のSQL SERVER ログイン名'
GO

実習のために結果に表示されている「TestJob02」データベースの所有者を「sa」から「user_tester」に変更してみよう。
USE [master]
GO
EXEC msdb.dbo.sp_update_job @job_name='TestJob2', @owner_login_name='user_tester'
GO

正常に実行されたらJOBの所有者を確認するSQLを再度実行して
変更されたか確認してみよう。
SELECT A.name AS JobName, B.name AS OwnerName
FROM msdb.dbo.sysjobs A 
LEFT OUTER JOIN sys.server_principals B
ON A.owner_sid = B.[sid]
ORDER BY A.name ASC

結果が下記のように表示される。



変更されている。
JOB数が多い場合一個ずつ変更するのは手間がかかる。
それではCURSOR(カーソル)を利用して全JOBの所有者を変更するSQLは下記のとおりだ。
USE [master]
GO

DECLARE @RsJobName [sysname]
DECLARE @RsOwnerName [sysname]

DECLARE DB_Cursor CURSOR FOR

SELECT A.name AS JobName, B.name AS OwnerName
FROM msdb.dbo.sysjobs A 
LEFT OUTER JOIN sys.server_principals B
ON A.owner_sid = B.[sid]
ORDER BY A.name ASC
 
OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor
INTO @RsJobName, @RsOwnerName
WHILE @@FETCH_STATUS = 0
BEGIN

 --SELECT @RsJobName, @RsOwnerName
 EXEC msdb.dbo.sp_update_job @job_name=@RsJobName, @owner_login_name='[設定する所有者のSQL SERVER ログイン名]'

 FETCH NEXT FROM DB_Cursor
 INTO @RsJobName, @RsOwnerName

END

CLOSE DB_Cursor
DEALLOCATE DB_Cursor


それではCURSOR(カーソル)を利用して全JOBの所有者を「user_tester」に変更してみよう。

USE [master]
GO

DECLARE @RsJobName [sysname]
DECLARE @RsOwnerName [sysname]

DECLARE DB_Cursor CURSOR FOR

SELECT A.name AS JobName, B.name AS OwnerName
FROM msdb.dbo.sysjobs A 
LEFT OUTER JOIN sys.server_principals B
ON A.owner_sid = B.[sid]
ORDER BY A.name ASC
 
OPEN DB_Cursor
FETCH NEXT FROM DB_Cursor
INTO @RsJobName, @RsOwnerName
WHILE @@FETCH_STATUS = 0
BEGIN

 --SELECT @RsJobName, @RsOwnerName
 EXEC msdb.dbo.sp_update_job @job_name=@RsJobName, @owner_login_name='user_tester'

 FETCH NEXT FROM DB_Cursor
 INTO @RsJobName, @RsOwnerName

END

CLOSE DB_Cursor
DEALLOCATE DB_Cursor

正常に実行されたらJOBの所有者を確認してみよう。
SELECT A.name AS JobName, B.name AS OwnerName
FROM msdb.dbo.sysjobs A 
LEFT OUTER JOIN sys.server_principals B
ON A.owner_sid = B.[sid]
ORDER BY A.name ASC

実行結果。



念のため「TestJob02」ジョブのプロパティを開いて再度確認してみよう。



所有者の項目に変更した「user_tester」になっていることが確認できる。
これで完了!!!

コメント