2010-02-04 20 views
5

SQL Server Agent işlerini SQL Server Management Objects (SMO) arabirimlerini kullanarak işleyen bir C# programım var.SQL iş yürütme durumu almak için SMO.Agent kullanma - güvenlik sorunu

Server ssis_server = new Server(
    new ServerConnection(SERVER_NAME, SERVER_USERNAME, SERVER_PASSWORD) 
); 

var agent = ssis_server.JobServer; 
var ssis_job = agent.Jobs[job_name]; 

var current_status = ssis_job.CurrentRunStatus; 

if (current_status == JobExecutionStatus.Idle) 
{ 
    ssis_job.Start(); 
    OnSuccess("Job started: " + job_name); 
} 
else 
{ 
    OnError("Job is already running or is not ready."); 
} 

Ben bu işe iken şeyler simplfy bu noktada SQL Server Authentication kullanıyorum: Bu gibi görünür.

Şimdi, benim sorunum SERVER_USERNAME 'sysadmin' Dbo rolün parçası olmadığı sürece, ssis_job.CurrentRunStatus hep ' Idle' olmasıdır - Ben iş çalıştıran biliyoruz bile. Hata yapmıyor, her zaman boşta olduğunu bildiriyor.
Kullanıcı bir yönetici ise, durum beklendiği gibi döndürülür.

Rol üyeliği diyorsunuz?
SERVER_USERNAME SQL Server oturum açma işlemini msdb Rolü SQLAgentOperatorRole'a ekledim, yardımcı olmadı.
İşin sahibi bir sistem yöneticisi hesabıdır - sorun buysa, nasıl çalıştığını bilmiyorum.

Herhangi bir fikrin var mı?

cevap

3

Durumu kontrol etmeden önce ssis_job'deki Refresh() yöntemini çağırarak işi yenilemeniz gerekir, ardından doğru bilgileri alırsınız.

+1

[Yenile] (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx) yöntemi [İş] (http: // msdn) .microsoft.com/en-us/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx) nesnesi benim için düzeltildi. İşaret ettiğin için teşekkürler. –

+0

Başlat() öğesinden hemen sonra çağırıyorsam, Refresh() benim için çalışmaz. Kodumu hata ayıkladığımda çalışır. Start() ile sql işinin başlangıcı arasında gecikme olabilir mi? – jambis

İlgili konular