6

SQL Server管理オブジェクト(SMO)インターフェイスを使用してSQL Serverエージェントジョブを起動するC#プログラムがあります。次のようになります。

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

この時点では、 SQL Server認証を使用して、作業を簡素化しています。

さて、私の問題は、SERVER_USERNAMEが'sysadmin' dboロールの一部でない限り、ssis_job.CurrentRunStatus常に' Idle'であるということです-ジョブが実行されていることがわかっている場合でも。エラーは発生せず、常にアイドル状態を報告します。
ユーザーが管理者の場合、ステータスは期待どおりに返されます。

あなたが言う役割のメンバーシップ?
さて、私はSERVER_USERNAMESQLServerログインをmsdbロールSQLAgentOperatorRoleに追加しましたが、それは役に立たなかったようです。
ジョブの所有者はシステム管理者アカウントです。それが問題である場合、回避方法がわかりません。

何か案は?

4

1 に答える 1

6

ステータスを確認する前に、ssis_job で Refresh() メソッドを呼び出してジョブを更新する必要があります。そうすれば、正しい情報が得られます。

于 2013-02-01T16:29:03.360 に答える