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?
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. –
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