sql >> データベース >  >> RDS >> Sqlserver

SQL Server エージェント ジョブのタイムアウト

    夜間のジョブ処理サブシステムの一部として、以下のコードのようなことを行います - 実際にはこれよりも複雑です。たとえば、複数の相互に依存する一連のジョブを処理し、構成テーブルからジョブ名とタイムアウト値を読み込みますが、これはアイデアを捉えています:

        DECLARE @JobToRun NVARCHAR(128) = 'My Agent Job'
    DECLARE @dtStart DATETIME = GETDATE(), @dtCurr DATETIME
    DECLARE @ExecutionStatus INT, @LastRunOutcome INT, @MaxTimeExceeded BIT = 0
    DECLARE @TimeoutMinutes INT = 180 
    
    EXEC msdb.dbo.sp_start_job @JobToRun
    SET @dtCurr = GETDATE()
    WHILE 1=1
    BEGIN
        WAITFOR DELAY '00:00:10'
        SELECT @ExecutionStatus=current_execution_status, @LastRunOutcome=last_run_outcome 
        FROM OPENQUERY(LocalServer, 'set fmtonly off; exec msdb.dbo.sp_help_job') where [name] = @JobToRun
        IF @ExecutionStatus <> 4
        BEGIN -- job is running or finishing (not idle)
            SET @dtCurr=GETDATE()
            IF DATEDIFF(mi, @dtStart, @dtCurr) > @TimeoutMinutes
            BEGIN   
                EXEC msdb.dbo.sp_stop_job @[email protected]                   
                -- could log info, raise error, send email etc here
            END
            ELSE
            BEGIN
                CONTINUE
            END
        END
        IF @LastRunOutcome = 1  -- the job just finished with success flag
        BEGIN
            -- job succeeded, do whatever is needed here
            print 'job succeeded'                                   
        END
    
    END
    


    1. PDOにLIKEクエリを実装する

    2. !の引数として指定されたMySQLエラーの空の文字列キャラクター

    3. MySQL:単純なテーブルid | parent | textの更新カスケードで、不可能ですか?

    4. SSHトンネル経由のPostgreSQL