J'ai un programme C# qui déclenche les tâches SQL Server Agent en utilisant les interfaces SQL Server Management Objects (SMO). Il ressemble à:Utilisation de SMO.Agent pour récupérer l'état d'exécution des travaux SQL - problème de sécurité
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.");
}
J'utilise SQL Server Authentication à ce stade de simplfy choses pendant que je travaille ça.
Maintenant, mon problème est que si l'SERVER_USERNAME
fait partie de la « sysadmin » dbo rôle, ssis_job.CurrentRunStatus
est toujours « Idle
» - même si je sais que le travail est en cours d'exécution. Il ne se trompe pas, il signale toujours le ralenti.
Si l'utilisateur est un administrateur, le statut est renvoyé comme prévu.
Vous êtes membre?
Eh bien, j'ai ajouté la connexion SQL Server SERVER_USERNAME
au rôle msdb SQLAgentOperatorRole, qui n'a pas semblé aider.
Le propriétaire du travail est un compte d'administrateur système. Si tel est le problème, je ne suis pas sûr de savoir comment le contourner.
Des idées?
La méthode [Actualiser] (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.sqlsmoobject.refresh.aspx) sur [Job] (http: // msdn L'objet .microsoft.com/fr-us/library/Microsoft.SqlServer.Management.Smo.Agent.Job.aspx) l'a corrigé pour moi. Merci de l'avoir signalé. –
Le Refresh() ne fonctionne pas pour moi si je l'appelle juste après le début(). Cela fonctionne quand je débogue mon code. Serait-ce un délai entre le début() et le début du travail sql? – jambis