mssql 作業,mssql

來源:互聯網
上載者:User

mssql 作業,mssql

1.什麼叫作業?

作業是一系列由 SQL Server Agent按順序執行的指定操作。 一個作業可以執行各種類型的活動,包括運行 Transact-SQL 指令碼、命令提示字元應用程式、Microsoft ActiveX 指令碼、Integration Services 包、Analysis Services 命令和查詢或複製任務。 作業可以運行重複或可計劃的任務,然後它們可以通過生

成警報來自動通知使用者作業狀態,從而極大地簡化了 SQL Server 管理。

2.先看一個常用通過GUI利用作業動態備份資料據庫。

    1、開啟SQL Server Management Studio    2、啟動SQL Server代理    3、點擊作業->新增作業    4、"常規"中輸入作業的名稱    5、建立步驟,類型選T-SQL,在下面的命令中輸入下面語句     DECLARE @strPath NVARCHAR(200)        set @strPath = convert(NVARCHAR(20),getdate(),120)        set @strPath = REPLACE(@strPath, ':' , '.')        set @strPath = 'E:\DATA_db\MSSQL.1\MSSQL\Backup' + @strPath + '.bak'        BACKUP DATABASE [資料庫名] TO DISK = @strPath WITH NOINIT , NOUNLOAD , NOSKIP , STATS = 10, NOFORMAT     6、添加計劃,設定頻率,時間等。基本把以上的流程基本的填寫完,就可以正常作業了。

3.作業系統資料表
    SELECT * FROM msdb.dbo.sysjobs            --儲存將由 SQL Server Agent執行的各個預定作業的資訊  SELECT * FROM msdb.dbo.sysjobschedules    --包含將由 SQL Server Agent執行的作業的計劃資訊  SELECT * FROM msdb.dbo.sysjobactivity;    --記錄當前 SQL Server Agent作業活動和狀態  SELECT * FROM msdb.dbo.sysjobservers      --儲存特定作業與一個或多個目標伺服器的關聯或關係  SELECT * FROM msdb.dbo.sysjobsteps;       --包含 SQL Server Agent要執行的作業中的各個步驟的資訊  SELECT * FROM msdb.dbo.sysjobstepslogs;   --包含所有 SQL Server Agent作業步驟的作業步驟日誌  SELECT * FROM msdb.dbo.sysjobs_view;      --  SELECT * FROM msdb.dbo.sysjobhistory      --包含有關 SQL Server Agent執行預定作業的資訊  SELECT * FROM msdb.dbo.syscategories      --包含由 SQL Server Management Studio 用來組織作業、警報和操作員的類別
4.建立作業
 建立作業的步驟一般如下所示:  執行 sp_add_job 來建立作業。  執行 sp_add_jobstep 來建立一個或多個作業步驟。  執行 sp_add_schedule 來建立計劃。  執行 sp_attach_schedule 將計劃附加到作業。  執行 sp_add_jobserver 來設定作業的伺服器。  本地作業是由本地 SQL Server Agent進行緩衝的。因此,任何修改都會隱式強制 SQL Server Agent重新緩衝該作業。由於直到調用 sp_add_jobserver 時,SQL Server Agent才緩衝作業,因此最後調用 sp_add_jobserver 將更為有效。

啟動作業

        1:通過SSMS工具啟動作業[略]

        2:通過SQL命令啟動作業

啟動作業一般通過sp_start_job來實現,具體文法與操作見下面。

文法:

sp_start_job 

     {   [@job_name =] 'job_name'

       | [@job_id =] job_id }

     [ , [@error_flag =] error_flag]

     [ , [@server_name =] 'server_name']

     [ , [@step_name =] 'step_name']

     [ , [@output_flag =] output_flag]

     

例子:

 

exec msdb.dbo.sp_start_job @job_name='JOB_CYCLE_ERRORLOG'

停止作業

        1:通過SSMS工具停作業[略]

        2:通過SQL命令停止作業

文法:

sp_stop_job 

      [@job_name =] 'job_name'

    | [@job_id =] job_id 

    | [@originating_server =] 'master_server'

    | [@server_name =] 'target_server'

例子:

exec msdb.dbo.sp_stop_job    @job_name='JOB_CYCLE_ERRORLOG'

啟用或禁用作業

1:通過SSMS工具啟用作業[略]

        2:通過SQL命令禁用作業

文法:

列子:EXEC msdb.dbo.sp_update_job

    @job_name = N'JOB_CYCLE_ERRORLOG',

    @enabled = 0 ;  --0 禁用作業、  1啟用作業

GO

刪除作業

1:通過SSMS工具刪除作業[略]

2:通過SQL命令刪除作業

例子:

EXEC msdb.dbo.sp_delete_job  @job_name = 'JOB_CYCLE_ERRORLOG';

    

5.查看作業的T-SQL語句

  --1:查看屬於某個資料庫的所有作業。  SELECT job.job_id        AS JOB_ID            ,         name            AS JOB_NAME          ,         enabled         AS JOB_ENABLED       ,         description     AS JOB_DESCRIPTION   ,         date_created    AS DATE_CREATED      ,         date_modified   AS DATE_MODIFIED  FROM msdb.dbo.sysjobs job  WHERE   job_id IN( SELECTjob_id                    FROM    msdb.dbo.sysjobsteps                    WHERE   database_name = 'DataBaseName' )   --2:查看某個作業類別的所有作業  SELECT  job.name             AS Job_Name       ,           job.description      AS Job_Description ,           job.date_created     AS Date_Created    ,           job.date_modified    AS Date_Modified   ,           type .name             AS Job_Class  FROM  msdb.dbo.sysjobs job        LEFT JOIN msdb.dbo.syscategories type ON job.category_id = type .category_id   WHERE type.name = '[Uncategorized (Local)]'     --3:查看禁用/啟用的作業  SELECT * FROM msdb.dbo.sysjobs WHERE  enabled=0    --0:禁用 1:為啟用     --4:查看出錯的作業記錄     --4.1:查詢那些作業在今天出錯(如果要查詢曆史出錯作業,去掉查詢時間條件即可)  SELECT name               AS JOB_NAME        ,        description         AS JOB_Description ,        date_created        AS Date_Created    ,        date_modified       AS Date_Modified  FROM  msdb.dbo.sysjobs  WHERE enabled = 1        AND job_id IN(        SELECT  job_id        FROM    Msdb.dbo.sysjobhistory        WHERE   run_status = 0                AND run_date = CAST(CONVERT(VARCHAR(8), GETDATE(), 112) AS INT) )     --4.2:查看出錯詳細資料  SELECT job.name                AS JOB_NAME ,        h.step_id              AS STEP_ID  ,        h.step_name            AS STEP_NAME,        h.message              AS ERR_MSG  ,        h.run_date             AS RUN_DATE ,        h.run_time             AS RUN_TIME ,        msdb.dbo.agent_datetime(h.run_date, h.run_time) AS 'RunDateTime' ,        CAST(run_duration / 10000 AS VARCHAR(2)) + N'小時'      + CAST(( run_duration - run_duration / 10000 * 10000 ) / 100 AS VARCHAR(2))      + N'分鐘' + SUBSTRING(CAST(run_duration AS VARCHAR(10)),                            LEN(CAST(run_duration AS VARCHAR(10))) - 1, 2)      + N'秒' AS run_duration  FROM  msdb.dbo.sysjobhistory h        LEFT JOIN msdb.dbo.sysjobs job ON h.job_id = job.job_id  WHERE run_status = 0        AND run_date = CAST(CONVERT(VARCHAR(8), GETDATE(), 112) AS INT)     --5:查看作業的執行時間:  --5.1:查看當天成功執行的作業的時間(查看的是作業Step資訊)  SELECT job.name         AS job_name ,        h.step_id      AS step_id  ,        h.step_name     AS step_name,        h.message       AS Message  ,        h.run_date      AS Run_date ,        h.run_time      AS run_time ,        msdb.dbo.agent_datetime(h.run_date, h.run_time) AS 'RunDateTime' ,        CAST(run_duration / 10000 AS VARCHAR(2)) + N'小時'        + CAST(( run_duration - run_duration / 10000 * 10000 ) / 100 AS VARCHAR(2))        + N'分鐘' + SUBSTRING(CAST(run_duration AS VARCHAR(10)),                            LEN(CAST(run_duration AS VARCHAR(10))) - 1, 2)        + N'秒' AS run_duration  FROM msdb.dbo.sysjobhistory h        LEFT JOIN msdb.dbo.sysjobs job ON h.job_id = job.job_id   WHERE run_status = 1        AND run_date = CAST(CONVERT(VARCHAR(8), GETDATE(), 112) AS INT)        ORDER BY run_duration DESC     --5.2:查詢每個作業的執行時間、按執行時間降序  SELECT  job.name            AS JOB_NAME ,          h.run_date        AS RUN_DATE ,          SUM(run_duration) AS SUM_DURATION  FROM  msdb.dbo.sysjobhistory h          LEFT JOIN msdb.dbo.sysjobs job ON h.job_id = job.job_id  WHERE run_status = 1          AND run_date = CAST(CONVERT(VARCHAR(8), GETDATE(), 112) AS INT)  GROUP BY name ,          run_date  ORDER BY Sum_Duration DESC




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.