數據庫做業

SQL Server:定時做業的設置方法
--------------------------------------------------------------------------------

若是在SQL Server 裏須要定時或者每隔一段時間執行某個存儲過程或3200字符之內的SQL語句時,能夠用管理->SQL Server代理->做業來實現。

一、管理->SQL Server代理->做業(按鼠標右鍵)->新建做業

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

建立做業分類的步驟: SQL Server代理->做業->右鍵選全部任務->添加、修改、刪除

三、 新建做業屬性(步驟)->新建->步驟名[自定義第一步驟名稱]->類型[Transact-SQL(TSQL)腳本]->數據 庫[要操做的數據庫]->命令 [ 若是是簡單的SQL直接寫進去便可,也可用打開按鈕輸入一個已寫好的*.sql。文件若是要執行存儲過程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN] ->肯定 (若是有多個步驟,能夠再次調用下面的新建按鈕;也能夠對已有的多個步驟插入、編輯、刪除);

四、建做業屬性(調度)->新建調度->名稱[自定義調度名稱]->啓用的方框內是勾號->調度->反覆出現-> 更改[調度時間表]->肯定(若是隻要保存此做業,不要定時作能夠把啓用的方框內是勾號去掉);

五、建做業屬性(通知)->用默認的通知方法就好[看成業失敗時,寫入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;281642說SQL Server 2000系統裏msdb..sysjobs 裏originating_server 字段裏存的是原來的服務器的名稱。24X7在用的系統確定不能按上面Microsoft的文檔說的那樣把名字改回來又改過去。因而 想,msdb..sysjobs 可否update originating_server 字段成如今在用的新服務器名?

use msdb
select * from sysjobs


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

update sysjobs set originating_server='new_server_name'
where job_id='B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14'


(所影響的行數爲 1 行)

這樣就能夠添加、更新或刪除那些曾經出error 14274 的做業了。

若是想把做業由一臺機器遷移到另外一臺機器,能夠先保留好建立做業的腳本, 而後在另外一臺機器上運行。

導出全部做業的建立腳本操做步驟:

管理->SQL Server代理->做業(鼠標右鍵)->全部任務->生成SQL腳本->保存到操做系統下的某個sql文件

導出某一個做業的建立腳本操做步驟:

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

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

********************************************數據庫

--每個月執行的做業
exec p_createjob @jobname='mm',@sql='select * from syscolumns',@freqtype='month'
--每週執行的做業
exec p_createjob @jobname='ww',@sql='select * from syscolumns',@freqtype='week'
--每日執行的做業
exec p_createjob @jobname='a',@sql='select * from syscolumns'
--每日執行的做業,天天隔4小時重複的做業
exec p_createjob @jobname='b',@sql='select * from syscolumns',@fsinterval=4
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_createjob]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_createjob]
GO
create proc p_createjob
@jobname varchar(100),--做業名稱
@sql varchar(8000),--要執行的命令
@dbname sysname='',--默認爲當前的數據庫名
@freqtype varchar(6)='day',--時間週期,month 月,week 周,day 日
@fsinterval int=1,--相對於每日的重複次數
@time int=170000--開始執行時間,對於重複執行的做業,將從0點到23:59分
as
if isnull(@dbname,'')='' set @dbname=db_name()
--建立做業
exec msdb..sp_add_job @job_name=@jobname
--建立做業步驟
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '數據處理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重試次數
@retry_interval = 5 --重試間隔
--建立調度
declare @ftype int,@fstype int,@ffactor int
select @ftype=case @freqtype when 'day' then 4
when 'week' then 8
when 'month' then 16 end
,@fstype=case @fsinterval when 1 then 0 else 8 end
if @fsinterval<>1 set @time=0
set @ffactor=case @freqtype when 'day' then 0 else 1 end
EXEC msdb..sp_add_jobschedule @job_name=@jobname,
@name = '時間安排',
@freq_type=@ftype , --天天,8 每週,16 每個月
@freq_interval=1,--重複執行次數
@freq_subday_type=@fstype,--是否重複執行
@freq_subday_interval=@fsinterval, --重複週期
@freq_recurrence_factor=@ffactor,
@active_start_time=@time --下午17:00:00分執行
-- 添加目標服務器
EXEC msdb.dbo.sp_add_jobserver
@job_name = @jobname ,
@server_name = N'(local)'
go
——建立存儲過程—在「管理」—「做業」中進行操做服務器

相關文章
相關標籤/搜索