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」になっていることが確認できる。
これで完了!!!
EmoticonEmoticon