Ho un programma C# che attiva i lavori SQL Server Agent utilizzando le interfacce SQL Server Management Objects (SMO). Sembra qualcosa di simile:Utilizzo di SMO.Agent per recuperare lo stato di esecuzione del lavoro SQL - problema di sicurezza
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.");
}
sto usando SQL Server Authentication a questo punto per simplfy cose mentre io lavoro questo fuori.
Ora, il mio problema è che a meno che il SERVER_USERNAME
fa parte della 'sysadmin' dbo ruolo, ssis_job.CurrentRunStatus
è sempre 'Idle
' - anche quando so che il processo è in esecuzione. Non ha errori, ma riporta sempre inattivo.
Se l'utente è un amministratore, lo stato viene restituito come previsto.
Appartenenza al ruolo che dici?
Bene, ho aggiunto l'accesso al server SQL SERVER_USERNAME
al ruolo msgd SQLAgentOperatorRole, che non sembra essere di aiuto.
Il proprietario del lavoro è un account di amministratore di sistema. Se questo è il problema, non sono sicuro su come aggirarlo.
Qualche idea?
Il metodo [Aggiorna] (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx) sul [Lavoro] (http: // msdn .microsoft.com/it-it/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx) oggetto risolto per me. Grazie per segnalarlo. –
L'aggiornamento() non funziona per me se lo chiamo subito dopo Start(). Funziona quando eseguo il debug del mio codice. Potrebbe essere un ritardo tra Start() e l'avvio del lavoro sql? – jambis