SQLServer:定時作業的設置方法

如果在SQL Server 裏需要定時或者每隔一段時間執行某個存儲過程或3200字符以內的SQL語句時,可以用管理-SQL Server代理-作業來實現

 

1、管理-SQL Server代理-作業(按鼠標右鍵)- 新建作業

2、新建作業屬性(常規)-名稱[自定義本次作業的名稱]-啓用的方框內是勾號-分類處可選擇也可用默認的[未分類(本地)]-所有者默認爲登錄SQL Server用戶[也可選其它的登錄]-描述[填寫本次工作詳細描述內容]

 

 

3、新建作業屬性(步驟)-新建-步驟名[自定義第一步驟名稱]-類型[Transact-SQL(TSQL)腳本]-數據庫[要操作的數據庫]-命令 [ 如果是簡單的SQL直接寫進去即可,也可用打開按鈕輸入一個已寫好的.sql。文件如果要執行存儲過程,填 exec p_procedure_name v_parameter1[ v_parameter2v_parameterN] -確定 (如果有多個步驟,可以再次調用下面的新建按鈕;也可以對已有的多個步驟插入、、刪除)

 

4、建作業屬性(調度)-新建調度-名稱[自定義調度名稱]-啓用的方框內是勾號-調度-反覆出現- 更改[調度時間表]-確定(如果只要保存此作業,不要定時做可以把啓用的方框內是勾號去掉)

 

5、建作業屬性(通知)-用默認的通知方法就好[當作業失敗時,寫入Windows應用程序系統日誌] -確定。

 

 

跟作業執行相關的一些SQL Server知識:

SQL Server Agent服務必須正常運行,啓動它的NT登錄用戶要跟啓動SQL Server數據庫的NT登錄用戶一致;

點作業右鍵可以查看作業執行的歷史記錄情況,也可以立即啓動作業和停止作業。

最近在看作業歷史記錄時,發現有的作業記錄的歷史記錄多,有的作業記錄的記錄的歷史記錄少。如何能使某些作業按各自的需求,保留一段時間.比如保留一個月的歷史記錄.看了SQL Server的在線幫助文檔,裏面介紹說:

在管理-SQL Server代理-右鍵選屬性-作業系統-限製作業歷史記錄日誌的大小

作業歷史記錄日誌的最大大小(行數) ,默認爲1000 。如果某臺機器的作業數量很多,一定要提高它,例如爲100000

每個作業歷史記錄日誌的最大行數,默認爲100。如果作業每天執行兩次,需要保留一個月的日誌,可以設爲60

它們之間有一個相互制約關係, 我們可以根據自己的需要來改.

如果SQL Server服務器改過機器名,管理是舊名稱時建立的job的時候可能會遇到。錯誤14274: 無法添加、更新或刪除從MSX服務器上發起的作業(或其步驟或調度)。看了Microsoft的文檔:http//support.microsoft.com/default.aspx?scid=kb;en-us;281642SQL Server 2000系統裏msdb..sysjobs 裏originating_server 字段裏存的是原來的服務器的名稱。24X7在用的系統肯定不能按上面Microsoft的文檔說的那樣把名字改回來又改過去。於是想,msdb..sysjobs 能否update originating_server 字段成現在在用的新服務器名?

use msdbselect  from sysjobs

找到originating_server 字段還是舊服務器的job_id,然後執行update語句:

update sysjobs set originating_server=‘new_server_name‘where job_id=‘B23BBEBE-A 3C1-4874-A4AB-0E2B7CD01E14‘

(所影響的行數爲 1 行)

這樣就可以添加、更新或刪除那些曾經出error 14274 的作業了。

如果想把作業由一臺機器遷移到另一臺機器,可以先保留好創建作業的腳本, 然後在另一臺機器上運行。

導出所有作業的創建腳本操作步驟:

管理-SQL Server代理-作業(鼠標右鍵)-所有任務-生成SQL腳本-保存到下的某個sql文件 [Page]

導出某一個作業的創建腳本操作步驟:

管理-SQL Server代理-作業-選中待轉移的作業(鼠標右鍵)-所有任務-生成SQL腳本-保存到OS下的某個sql文件

然後在目的服務器上運行剛纔保存下來的創建作業的sql腳本。( 如果建作業的用戶或者提醒的用戶不存在, 則會出錯; 我們需要在目的服務器上建立相關的WINDOWS用戶或者SQL Server數據庫登錄,也可以修改創建作業的腳本,把目的服務器上不存在的用戶替換成已經有的用戶。如果生成日誌的物理文件目錄不存在,也應該做相關的修改,例如d\區轉f\區等字符串的@command 命令裏有分隔符號 go 也會出錯,可以把它去掉)

 下面來看看如何按日期定期備份數據庫

 通常備份的方式有兩種:手動備份和自動備份,如果數據庫服務器中有這麼多的數據庫需要備份,那麼手動備份必定是一個很大的工作量,這個時候我們可以採用另外一種備份方式---定時自動備份

 

SQLServer的維護計劃裏面自帶了備份數據庫任務,但不會自動按日期命名,不方便,下面的方法是以存儲過程來解決的,以sql2000爲例:

首先要確認SQL Server Agent服務是在啓動狀態,

 

下一步,我們來創建作業,在創建作業之前,我們需要創建備份數據庫及命名的存儲過程

比如是對TestDB操作,打開查詢分析器,把下面的存儲過程拷到裏面執行下就行了,當然了,命名規則可以自動更改

 

複製代碼
USE [TestDB]    GO  
SET ANSI_NULLS ON   GO  
  SET QUOTED_IDENTIFIER ON   GO  
  CREATE PROCEDURE [BackupDatabase](
@FolderPath varchar(500)) 
   as   DECLARE @FullPath varchar(1000
   set @FullPath = @FolderPath+ 'TestDB_'+convert(VARCHAR(4),year(getdate()))+right'0'+convert(VARCHAR(2),MONTH(getdate())),2)+right('0'+convert(VARCHAR(2),DAY(getdate())),2)+ '.bak'   backup database [TestDB] to disk=@FullPath WITH INIT   
 return 
複製代碼

 

這樣就創建了一個BackupDatabase的存儲過程。

下面來創建作業吧。

常規裏添加名稱,選擇下分類就行了,

下面的步驟很重要。

 

添加步驟的時候,有點很重要,就是執行剛纔我們創建的存儲過程如圖

use [TestDB]   

exec BackupDatabase 'E:\SqlData\TestDB\' 

最後設置下自動備份的時間,也就是調度下即可

發佈了45 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章