sql server 如何查詢出數據庫作業所有者的信息並完成批量替換


今天數據庫對入職一年的我建立了獨立的數據庫賬號,之前我是和其他同事共享的,之前的所有者賬號被廢棄了,這時導致很多數據庫作業執行失敗。

下面是說明如何把之前所有的作業的所有者替換成正在使用的賬號:

下面講一下如何進行上面批量修改:

1、首先介紹幾個所有者相關的表sys.syslogins每個登錄帳戶在表中對應一行;

直接查詢這個表:

select * from msdb.dbo.syslogins  

select * from sys.database_principals 

可以查看都有哪些登錄用戶的被限制權限了

2、查詢所有作業的表:sysjobs(可以去官網了解文檔內容)

select * from msdb.dbo.sysjobs  

其中的sid和所有者表里的owner_sid是一致的

所以下面查詢被廢棄的所有者號下的所有作業

復制代碼
--可以用這個先查一遍。
select a.*,b.name from
(
select * from msdb.dbo.sysjobs where owner_sid<>'0x01'
) a
left join master.sys.syslogins b on a.owner_sid=b.sid
where b.name like '%這里換成將要刪除的帳號%'

下面是自動化更新所有涉及到的作業的所有者

declare @job_id varchar(300)
select a.job_id into #ttt from
(
select name,[enabled],owner_sid,job_id from msdb.dbo.sysjobs where owner_sid<>'0x01'
) a
left join master.sys.syslogins b on a.owner_sid=b.sid
where b.name is null or b.name like '%這里換成將要刪除的帳號%'
while (select count(1) from #ttt)>0
begin
select top 1 @job_id=job_id from #ttt order by job_id asc
declare @sql varchar(500)
select @sql = 'EXEC msdb.dbo.sp_update_job @job_id=N'''+@job_id+''', @owner_login_name=N''sa'''
print (@sql)
exec (@sql)
delete from #ttt where job_id=@job_id
end
truncate table #ttt
drop table #ttt

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM