定時執行儲存過程

2021-08-28 15:48:46 字數 3458 閱讀 7643

下面是我在網上抄的一段話.其實有傻瓜式的方法.

開啟sql server管理器,如果版本高的話,可以看到有sql server**,點開它自己琢磨下就會了.太簡單就不寫出來了.

--建立作業就行了.

--建立作業

exec msdb..sp_add_job @job_name='資料處理'

--建立作業步驟

declare @sql varchar(800),@dbname varchar(250)

select @sql='exec p_proc'    --要定時執行的儲存過程

,@dbname=db_name() --執行資料處理的資料庫名

exec msdb..sp_add_jobstep @job_name='資料處理',

@step_name = '資料同步',

@subsystem = 'tsql',

@database_name=@dbname,

@command = @sql,

@retry_attempts = 5, --重試次數

@retry_interval = 5    --重試間隔

--建立排程

exec msdb..sp_add_jobschedule @job_name = '資料處理',

@name = '時間安排',

@freq_type=44 ? --4 每天,8 每週,16 每月

@freq_interval=14 ? --作業執行的天數

@freq_subday_type=04 ? --是否重複執行,0x1 在指定的時間, 0x4 分鐘, 0x8 小時

@freq_subday_interval=1, --重複週期

@freq_recurrence_factor=04 ?--重複執行,則設定為1,否則設定為0

@active_start_time = 00000 --0點開始執行

______________________________________

如果在sql server 裡需要定時或者每隔一段時間執行某個儲存過程或3200字元以內的sql語句時,可以用管理->sql server**->作業來實現。

1、管理->sql server**->作業(按滑鼠右鍵)->新建作業->

2、新建作業屬性(常規)->名稱[自定義本次作業的名稱]->啟用的方框內是勾號->

分類處可選擇也可用預設的[未分類(本地)]->所有者預設為登入sql server使用者[也可選其它的登入]->

描述[填寫本次工作詳細描述內容];

[ 建立作業分類的步驟:

sql server**->作業->右鍵選所有任務->新增、修改、刪除 ]

3、新建作業屬性(步驟)->新建->步驟名[自定義第一步驟名稱]->型別[transact-sql(tsql)指令碼]->

資料庫[要操作的資料庫]->命令

[ 如果是簡單的sql直接寫進去即可,也可用開啟按鈕輸入乙個已寫好的*.sql檔案

如果要執行儲存過程,填

exec p_procedure_name v_parameter1,[ v_parameter2…v_parametern]

]->確定

(如果有多個步驟,可以再次呼叫下面的新建按鈕;也可以對已有的多個步驟插入、編輯、刪除);

4、建作業屬性(排程)->新建排程->名稱[自定義排程名稱]->啟用的方框內是勾號->排程->反覆出現->

更改[排程時間表]->確定

(如果只要儲存此作業,不要定時做可以把啟用的方框內是勾號去掉);

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

sqlserveragent服務必須正常執行,啟動它的nt登入使用者要跟啟動sql server資料庫的nt登入使用者一致。

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

最近在看作業歷史記錄時,發現有的作業記錄的歷史記錄多,有的作業記錄的記錄的歷史記錄少.

如何能使某些作業按各自的需求,保留一段時間.比如保留乙個月的歷史記錄.

在管理->sql server**->右鍵選屬性->作業系統->限制作業歷史記錄日誌的大小->

作業歷史記錄日誌的最大大小(行數)     預設為1000     如果某台機器的作業數量很多,一定要提高它,例如為100000

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

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

如果在sql server 裡需要定時或者每隔一段時間執行某個儲存過程或3200字元以內的sql語句時,可以用管理->sql server**->作業來實現。

如果sql server伺服器改過機器名, 管理是舊名稱時建立的job的時候可能會遇到

錯誤14274: 無法新增、更新或刪除從msx伺服器上發起的作業(或其步驟或排程)

看了microsoft的文件:

說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 也會出錯, 可以把它去掉)

儲存過程定時執行

有兩種方法 1 編寫 shell 指令碼,使用 crontab 在後台定時執行 a shell 指令碼pr merge query report.sh bin sh oracle base oracle home 指定環境變數 oracle home oracle home data nls lan...

儲存過程定時執行

儲存過程定時執行 有兩種方法 1 編寫 shell 指令碼,使用 crontab 在後台定時執行 a shell 指令碼bash 2.03 more pr merge query report.sh bin sh oracle base oracle home 指定環境變數 oracle home ...

定時執行sql儲存過程

定時執行sql儲存過程 2007 03 21 15 47 建立作業就行了.建立作業 exec msdb.sp add job job name 資料處理 建立作業步驟 declare sql varchar 800 dbname varchar 250 select sql exec p proc ...