2010-02-04 9 views
5

Ich habe ein C# -Programm, das SQL Server Agent Aufträge unter Verwendung der SQL Server Management Objects (SMO) -Schnittstellen abfeuert. Es sieht so etwas wie:Verwenden von SMO.Agent zum Abrufen des SQL-Ausführungsstatus - Sicherheitsproblem

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."); 
} 

Ich SQL Server Authentication an dieser Stelle mit Dingen simplfy während ich dies funktioniert.

Nun, mein Problem ist, dass es sei denn, der SERVER_USERNAME Teil des ‚Sysadmin‘ DBO Rolle ist, ssis_job.CurrentRunStatus ist immer ‚Idle‘ - auch wenn ich den Job wissen läuft. Es tritt kein Fehler auf, sondern meldet immer nur Leerlauf.
Wenn der Benutzer ein Administrator ist, dann wird der Status als erwartet zurückgegeben.

Rollenmitgliedschaft Sie sagen?
Nun, ich hinzugefügt, um die SERVER_USERNAME SQL Server-Anmeldung zu der msdb Rolle SQLAgentOperatorRole, die nicht zu helfen schien.
der Besitzer Job ist ein System-Administrator-Konto - wenn das das Problem ist nicht sicher, ob ich bin, wie um ihn zu arbeiten.

Irgendwelche Ideen?

Antwort

3

Sie müssen den Job aktualisieren, indem Sie die Refresh() -Methode auf ssis_job Aufruf, bevor der Status überprüft, dann werden Sie die richtigen Informationen erhalten.

+1

Die [Refresh] (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx) Methode auf dem [Job] (http: // msdn .microsoft.com/de-de/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx) Objekt hat es für mich behoben. Danke, dass du es aufgezeigt hast. –

+0

Das Refresh() funktioniert nicht für mich, wenn ich es direkt nach dem Start() anrufe. Es funktioniert, wenn ich meinen Code debugge. Könnte es eine Verzögerung zwischen dem Start() und dem Start des SQL-Jobs sein? – jambis