SQL Server 作業(yè)的備份(備份作業(yè)非備份數(shù)據(jù)庫(kù))
我的方法是把作業(yè)導(dǎo)出成文件備份起來(lái),因?yàn)楫?dāng)你服務(wù)器維護(hù)的多了的時(shí)候很多你的作業(yè) 就很成問(wèn)題,很麻煩。
最好能夠作業(yè)實(shí)現(xiàn)同步,這個(gè)也是第一步,保存成文件,之后個(gè)人設(shè)想使用powershell 來(lái)把作業(yè)同步起來(lái)
DECLARE @jobname VARCHAR(30),@category_calss_i INT ,@category_calss VARCHAR(50),@category_name VARCHAR(50)
,@category_type VARCHAR(30),@category_id int
,@category_type_i int
SELECT @jobname = 'powershell',@category_calss = '',@category_name='',@category_type = ''
SELECT @category_calss = CASE WHEN tshc.category_class = 1 THEN 'JOB'
WHEN tshc.category_class = 2 THEN 'ALERT'
else 'OPERATOR'
END
, @category_type = CASE WHEN tshc.category_type = 1 THEN 'LOCAL'
WHEN tshc.category_type = 2 THEN 'MULTI-SERVER'
else 'NONE'
END
,@category_name = tshc.name
,@category_type_i = category_type
,@category_calss_i = tshc.category_class
,@category_id = tshc.category_id
FROM
msdb.dbo.sysjobs_view AS sv
INNER JOIN msdb.dbo.syscategories AS tshc ON sv.category_id = tshc.category_id
WHERE
(sv.name=@jobname AND tshc.category_class = 1)
PRINT ' BEGIN TRANSACTION'
PRINT 'DECLARE @ReturnCode INT'
PRINT 'IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N''' + @category_name +'''AND category_class=' +rtrim(@category_calss_i)+')'
PRINT 'BEGIN'
PRINT 'EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'''+ @category_calss+''', @type=N'''+@category_type+''', @name=N'''+@category_name+''''
PRINT 'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
PRINT 'end'
DECLARE @EventLogLevel INT,@EmailLevel INT,@NetSendLevel INT,@PageLevel INT
DECLARE @EmailLeveloprid NVARCHAR(256),@NetSendLeveloprid NVARCHAR(256),@PageLeveloprid NVARCHAR(256)
DECLARE @isenable INT , @description NVARCHAR(1024),@owner_log_name Nvarchar(512),@delete_level INT
DECLARE @jobId UNIQUEIDENTIFIER,@start_step_id INT,@server NVARCHAR(512)
SELECT
@EventLogLevel=sv.notify_level_eventlog
,@EmailLevel=sv.notify_level_email
,@NetSendLevel=sv.notify_level_netsend
,@PageLevel=sv.notify_level_page
,@EmailLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_email_operator_id),'')
,@NetSendLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_netsend_operator_id),'')
,@PageLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_page_operator_id),'')
,@isenable = sv.enabled
,@description = sv.description
,@owner_log_name = ISNULL(suser_sname(sv.owner_sid), N'''')
,@delete_level = sv.delete_level
,@jobId = sv.job_id
,@start_step_id = start_step_id
,@server = originating_server
FROM msdb.dbo.sysjobs_view AS sv
WHERE (sv.name=@jobname and sv.category_id=0)
PRINT 'DECLARE @jobId BINARY(16)'
PRINT 'EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'''+@jobname+''','
PRINT ' @enabled='+RTRIM(@isenable)+', '
PRINT ' @notify_level_eventlog='+RTRIM(@EventLogLevel)+', '
PRINT ' @notify_level_email='+RTRIM(@EmailLevel)+', '
PRINT ' @notify_level_netsend='+RTRIM(@NetSendLevel)+', '
PRINT ' @notify_level_page='+RTRIM(@PageLevel)+', '
PRINT ' @notify_email_operator_name ='''+RTRIM(@EmailLeveloprid)+''', '
PRINT ' @notify_netsend_operator_name='''+RTRIM(@NetSendLeveloprid)+''', '
PRINT ' @notify_page_operator_name='''+RTRIM(@PageLeveloprid)+''', '
PRINT ' @delete_level='+RTRIM(@delete_level)+', '
PRINT ' @description=N'''+@description+''', '
PRINT ' @category_name=N'''+@category_name+''', '
PRINT ' @owner_login_name=N'''+@owner_log_name+''', '
PRINT ' @job_id = @jobId OUTPUT'
PRINT 'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
--SELECT * FROM msdb.dbo.syscategories
DECLARE @step_id INT
declare @step_name nvarchar(512) ,@cmdexec_success_code INT,@on_success_action INT,@on_success_step_id INT
,@on_fail_action INT,@on_fail_step_id INT,@retry_attempts INT,@retry_interval INT,@os_run_priority INT
,@subsystem NVARCHAR(512),@database_name NVARCHAR(512),@flags INT,@command NVARCHAR(max)
DECLARE jbcur CURSOR FOR SELECT step_id FROM msdb..sysjobsteps WHERE job_id = @jobid ORDER BY step_id ;
OPEN jbcur;
FETCH NEXT FROM jbcur INTO @step_id
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @step_name = step_name
,@cmdexec_success_code= cmdexec_success_code
,@on_success_action = on_success_action
,@on_success_step_id = on_success_step_id
,@on_fail_action = on_fail_action
,@on_fail_step_id = on_fail_step_id
,@retry_attempts = retry_attempts
,@retry_interval = retry_interval
,@os_run_priority = os_run_priority
,@subsystem = subsystem
,@database_name = database_name
,@command = command
,@flags = flags
FROM msdb..sysjobsteps a WHERE job_id = @jobid and step_id = @step_id
PRINT ' EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, '
PRINT ' @step_name=N'''+@step_name+''', '
PRINT ' @step_id='+RTRIM(@step_id)+', '
PRINT ' @cmdexec_success_code='+RTRIM(@cmdexec_success_code)+', '
PRINT ' @on_success_action='+RTRIM(@on_success_action)+', '
PRINT ' @on_success_step_id='+RTRIM(@on_success_step_id)+', '
PRINT ' @on_fail_action='+RTRIM(@on_fail_action)+', '
PRINT ' @on_fail_step_id='+RTRIM(@on_fail_step_id)+', '
PRINT ' @retry_attempts='+RTRIM(@retry_attempts)+', '
PRINT ' @retry_interval='+RTRIM(@retry_interval)+', '
PRINT ' @os_run_priority='+RTRIM(@os_run_priority)+', @subsystem=N'''+@subsystem+''', '
PRINT ' @database_name=N'''+@database_name+''','
PRINT ' @flags='+RTRIM(@flags)+' ,'
PRINT ' @command=N'''+REPLACE(@command,'''','''''')+''''
PRINT ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
FETCH NEXT FROM jbcur INTO @step_id
END
CLOSE jbcur
DEALLOCATE jbcur
PRINT ' EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = '+rtrim(@start_step_id)
PRINT ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback '
DECLARE @enabled INT,@freq_type INT,@freq_interval INT,@freq_subday_type INT,@freq_subday_interval INT
,@freq_relative_interval INT,@freq_recurrence_factor INT,@active_start_date INT,@active_end_date INT
,@active_start_time INT,@active_end_time INT,@name VARCHAR(512)
SELECT
@name = a.name
,@enabled = enabled
,@freq_interval = freq_interval
,@freq_type = freq_type
,@freq_subday_type=freq_subday_type
,@freq_subday_interval=freq_subday_interval
,@freq_relative_interval=freq_relative_interval
,@freq_recurrence_factor=freq_recurrence_factor
,@active_start_date=active_start_date
,@active_end_date=active_end_date
,@active_start_time=active_start_time
,@active_end_time=active_end_time
FROM msdb..sysschedules a
INNER JOIN msdb.dbo.sysjobschedules b ON a.schedule_id = b.schedule_id
WHERE job_id = @jobId
IF(@name IS not null)
begin
PRINT ' EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'''+@name+''', '
PRINT ' @enabled='+RTRIM(@enabled)+', '
PRINT ' @freq_type='+RTRIM(@freq_type)+', '
PRINT ' @freq_interval='+RTRIM(@freq_interval)+', '
PRINT ' @freq_subday_type='+RTRIM(@freq_subday_type)+', '
PRINT ' @freq_subday_interval='+RTRIM(@freq_subday_interval)+', '
PRINT ' @freq_relative_interval='+RTRIM(@freq_relative_interval)+', '
PRINT ' @freq_recurrence_factor='+RTRIM(@freq_recurrence_factor)+', '
PRINT ' @active_start_date='+RTRIM(@active_start_date)+', '
PRINT ' @active_end_date='+RTRIM(@active_end_date)+', '
PRINT ' @active_start_time='+RTRIM(@active_start_time)+', '
PRINT ' @active_end_time='+RTRIM(@active_end_time)+', '
PRINT ' @schedule_uid=N'''+RTRIM(NEWID())+''''
PRINT ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
END
PRINT ' EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'''+@server+''''
PRINT ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
PRINT 'COMMIT TRANSACTION'
PRINT 'GOTO EndSave'
PRINT 'QuitWithRollback:'
PRINT ' IF(@@TRANCOUNT>0)ROLLBACK TRANSACTION'
PRINT 'EndSave:'
PRINT ' '
PRINT 'GO'
- sql server代理中作業(yè)執(zhí)行SSIS包失敗的解決辦法
- SQL Server 2012 創(chuàng)建定時(shí)作業(yè)(圖文并茂,教你輕松快速創(chuàng)建)
- SQL Server 作業(yè)同步 (結(jié)合備份作業(yè))
- SQL SERVER數(shù)據(jù)庫(kù)的作業(yè)的腳本及存儲(chǔ)過(guò)程
- SQLServer2005創(chuàng)建定時(shí)作業(yè)任務(wù)
- SQL Server 2005作業(yè)設(shè)置定時(shí)任務(wù)
- sql server定時(shí)作業(yè)調(diào)用Kettle job出錯(cuò)的快速解決方法
- SQL Server Alwayson創(chuàng)建代理作業(yè)的注意事項(xiàng)詳解
- SQL Server作業(yè)報(bào)錯(cuò)特殊案例分析
相關(guān)文章
在SQL Server的try...catch語(yǔ)句中獲取錯(cuò)誤消息代碼的的語(yǔ)句
本文為大家詳細(xì)介紹下如何在SQL Server的try...catch語(yǔ)句中獲取錯(cuò)誤消息的代碼,具體示例如下,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07SQLServer:探討EXEC與sp_executesql的區(qū)別詳解
本篇文章是對(duì)EXEC與sp_executesql的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06MSSQL報(bào)錯(cuò):參數(shù)數(shù)據(jù)類型 text 對(duì)于 replace 函數(shù)的參數(shù) 1 無(wú)效的解決辦法
在sql中使用replace函數(shù)可以替換某個(gè)字段中的一些內(nèi)容,但是如果字段是text類型那么使用replace函數(shù)就會(huì)報(bào)“參數(shù)數(shù)據(jù)類型text 對(duì)于replace 函數(shù)的參數(shù)1 無(wú)效。”,這個(gè)錯(cuò)誤說(shuō)明對(duì)text或ntext類型的數(shù)據(jù)在查詢中不能進(jìn)行字符串操作2014-03-03利用SQL Server觸發(fā)器實(shí)現(xiàn)表的歷史修改痕跡記錄
在很多應(yīng)用程序開發(fā)中,需要記錄某些數(shù)據(jù)表的歷史記錄或修改痕跡,以便日后出現(xiàn)數(shù)據(jù)錯(cuò)誤時(shí)進(jìn)行數(shù)據(jù)排查。這種業(yè)務(wù)需求,我們可以通過(guò)數(shù)據(jù)庫(kù)的觸發(fā)器來(lái)輕松實(shí)現(xiàn)歷史記錄功能2020-02-02如何在navicat中利用sql語(yǔ)句建表+添加數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于如何在navicat中利用sql語(yǔ)句建表+添加數(shù)據(jù)的相關(guān)資料,Navicat是一套快速,專為簡(jiǎn)化數(shù)據(jù)庫(kù)的管理及降低系統(tǒng)管理成本而設(shè),它的設(shè)計(jì)符合數(shù)據(jù)庫(kù)管理員、開發(fā)人員及中小企業(yè)的需要,需要的朋友可以參考下2023-10-10SQL?server中視圖(view)創(chuàng)建、修改與刪除
這篇文章主要給大家介紹了關(guān)于SQL?server中視圖(view)創(chuàng)建、修改與刪除的相關(guān)資料,視圖(View)是從一個(gè)或多個(gè)表或其它視圖導(dǎo)出的,用來(lái)導(dǎo)出視圖的表稱為基表,導(dǎo)出的視圖又稱為虛表,需要的朋友可以參考下2024-01-01SQL?Server無(wú)法連接服務(wù)器的幾種情況分析解決
在我們使用SQL的時(shí)候可能會(huì)遇到無(wú)法連接到服務(wù)器錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于SQL?Server無(wú)法連接服務(wù)器的幾種情況分析解決,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10SQLSERVER分頁(yè)查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同
這篇文章主要介紹了SQLSERVER分頁(yè)查詢關(guān)于使用Top方式和row_number()解析函數(shù)的不同的相關(guān)資料,需要的朋友可以參考下2016-02-02SQL 級(jí)聯(lián)刪除與級(jí)聯(lián)更新的方法
SQL 級(jí)聯(lián)刪除與級(jí)聯(lián)更新的方法,需要的朋友可以參考一下2013-03-03