定時執行sql預存程序

來源:互聯網
上載者:User
  

--建立作業就行了.

--建立作業
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應用程式系統日誌] ->確定。

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

  SQLSERVERAGENT服務必須正常運行,啟動它的NT登入使用者要跟啟動SQL Server資料庫的NT登入使用者一致。

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

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

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

  看了SQL Server的線上協助文檔,裡面介紹說:

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

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

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

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

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

 

  如果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:\區等

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.