SQL Server 作业同步 (结合备份作业)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_email='+RTRIM(@EmailLevel)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_interval='+RTRIM(@freq_interval)+', '
,@category_type VARCHAR(30),@category_id int
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_end_date='+RTRIM(@active_end_date)+', '
核心导出作业的 代码 和 作业备份是相似的
FETCH NEXT FROM jbcur INTO @step_id
,@freq_relative_interval=freq_relative_interval
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @job_id = @jobId OUTPUT'
CLOSE jbcur
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @description=N'''+@description+''', '
,@EmailLevel=sv.notify_level_email
,@PageLevel=sv.notify_level_page
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_page='+RTRIM(@PageLevel)+', '
,@delete_level = sv.delete_level
select @retrun
,@PageLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_page_operator_id),'')
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_start_date='+RTRIM(@active_start_date)+', '
,@category_type_i int
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'''+@jobname+''','
一下是powershell 代码:
,@jobId = sv.job_id
DECLARE @jobId UNIQUEIDENTIFIER,@start_step_id INT,@server NVARCHAR(512)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_eventlog='+RTRIM(@EventLogLevel)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @retry_attempts='+RTRIM(@retry_attempts)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @category_name=N'''+@category_name+''', '
END
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_email_operator_name ='''+RTRIM(@EmailLeveloprid)+''', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @step_name=N'''+@step_name+''', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_relative_interval='+RTRIM(@freq_relative_interval)+', '
,@category_calss_i = tshc.category_class
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF(@@TRANCOUNT>0)ROLLBACK TRANSACTION'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_type='+RTRIM(@freq_type)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_fail_step_id='+RTRIM(@on_fail_step_id)+', '
,@owner_log_name = ISNULL(suser_sname(sv.owner_sid), N'''')
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'GOTO EndSave'
,@EmailLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_email_operator_id),'')
AS
alter PROC DumpJob (@job VARCHAR(100))
FETCH NEXT FROM jbcur INTO @step_id
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
DECLARE @isenable INT , @description NVARCHAR(1024),@owner_log_name Nvarchar(512),@delete_level INT
DECLARE @retrun NVARCHAR(max)
,@os_run_priority = os_run_priority
,@freq_subday_type=freq_subday_type
,@active_end_time=active_end_time
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'end'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_success_step_id='+RTRIM(@on_success_step_id)+', '
DECLARE @EventLogLevel INT,@EmailLevel INT,@NetSendLevel INT,@PageLevel INT
,@flags = flags
,@freq_interval = freq_interval
SELECT @jobname = @job
,@active_start_date=active_start_date
,@on_fail_action = on_fail_action
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_end_time='+RTRIM(@active_end_time)+', '
SELECT
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N''(local)'''
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @flags='+RTRIM(@flags)+' ,'
,@active_start_time INT,@active_end_time INT,@name VARCHAR(512)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'COMMIT TRANSACTION'
,@start_step_id = start_step_id
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_success_action='+RTRIM(@on_success_action)+', '
,@cmdexec_success_code= cmdexec_success_code
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'EndSave:'
WHERE job_id = @jobId
,@freq_subday_interval=freq_subday_interval
DEALLOCATE jbcur
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = '+rtrim(@start_step_id)
,@NetSendLeveloprid = ISNULL((SELECT TOP 1 name FROM msdb..sysoperators WHERE id = sv.notify_netsend_operator_id),'')
END
WHILE @@FETCH_STATUS = 0
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @delete_level='+RTRIM(@delete_level)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_netsend='+RTRIM(@NetSendLevel)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N''' + @category_name +'''AND category_class=' +rtrim(@category_calss_i)+')'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @retry_interval='+RTRIM(@retry_interval)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @enabled='+RTRIM(@isenable)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @command=N'''+REPLACE(@command,'''','''''')+''''
SELECT @category_calss = CASE WHEN tshc.category_class = 1 THEN 'JOB'
,@server = originating_server
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, '
,@retry_attempts = retry_attempts
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @step_id='+RTRIM(@step_id)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback '
SELECT
,@active_start_time=active_start_time
--SELECT * FROM msdb.dbo.syscategories
msdb.dbo.sysjobs_view AS sv
DECLARE jbcur CURSOR FOR SELECT step_id FROM msdb..sysjobsteps WHERE job_id = @jobid ORDER BY step_id ;
,@freq_recurrence_factor=freq_recurrence_factor
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'BEGIN'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_recurrence_factor='+RTRIM(@freq_recurrence_factor)+', '
IF(@name IS not null)
,@database_name = database_name
FROM msdb..sysjobsteps a WHERE job_id = @jobid and step_id = @step_id
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'''+@name+''', '
,@subsystem NVARCHAR(512),@database_name NVARCHAR(512),@flags INT,@command NVARCHAR(max)
,@isenable = sv.enabled
,@freq_relative_interval INT,@freq_recurrence_factor INT,@active_start_date INT,@active_end_date INT
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @schedule_uid=N'''+RTRIM(NEWID())+''''
DECLARE @jobname VARCHAR(30),@category_calss_i INT ,@category_calss VARCHAR(50),@category_name VARCHAR(50)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_fail_action='+RTRIM(@on_fail_action)+', '
else 'OPERATOR'
,@retry_interval = retry_interval
WHERE
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_subday_type='+RTRIM(@freq_subday_type)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_netsend_operator_name='''+RTRIM(@NetSendLeveloprid)+''', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' '
,@category_name = tshc.name
,@on_fail_action INT,@on_fail_step_id INT,@retry_attempts INT,@retry_interval INT,@os_run_priority INT
,@active_end_date=active_end_date
我创建了一个存储过程,用来导出 作业,只有用powershell 脚本来实现同步,你可以powershell 脚本放入 sqlagent 中 定时运行起到同步的效果
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @enabled='+RTRIM(@enabled)+', '
END
, @category_type = CASE WHEN tshc.category_type = 1 THEN 'LOCAL'
FROM msdb..sysschedules a
,@description = sv.description
,@command = command
,@NetSendLevel=sv.notify_level_netsend
,@category_id = tshc.category_id
SET @retrun = ' BEGIN TRANSACTION'
declare @step_name nvarchar(512) ,@cmdexec_success_code INT,@on_success_action INT,@on_success_step_id INT
SELECT @step_name = step_name
@name = a.name
FROM msdb.dbo.sysjobs_view AS sv
复制代码 代码如下:
,@enabled = enabled
WHEN tshc.category_class = 2 THEN 'ALERT'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_start_time='+RTRIM(@active_start_time)+', '
DECLARE @enabled INT,@freq_type INT,@freq_interval INT,@freq_subday_type INT,@freq_subday_interval INT
OPEN jbcur;
begin
else 'NONE'
,@subsystem = subsystem
INNER JOIN msdb.dbo.sysjobschedules b ON a.schedule_id = b.schedule_id
WHERE (sv.name=@jobname and sv.category_id=0)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @database_name=N'''+@database_name+''','
DECLARE @EmailLeveloprid NVARCHAR(256),@NetSendLeveloprid NVARCHAR(256),@PageLeveloprid NVARCHAR(256)
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @owner_login_name=N'''+@owner_log_name+''', '
,@on_success_action = on_success_action
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'DECLARE @jobId BINARY(16)'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @cmdexec_success_code='+RTRIM(@cmdexec_success_code)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
BEGIN
@EventLogLevel=sv.notify_level_eventlog
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'DECLARE @ReturnCode INT'
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_page_operator_name='''+RTRIM(@PageLeveloprid)+''', '
FROM
DECLARE @step_id INT
INNER JOIN msdb.dbo.syscategories AS tshc ON sv.category_id = tshc.category_id
WHEN tshc.category_type = 2 THEN 'MULTI-SERVER'
SELECT @jobname = 'powershell',@category_calss = '',@category_name='',@category_type = ''
,@on_success_step_id = on_success_step_id
END
,@freq_type = freq_type
复制代码 代码如下:
(sv.name=@jobname AND tshc.category_class = 1)SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_subday_interval='+RTRIM(@freq_subday_interval)+', '
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback'
,@category_type_i = category_type
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'''+ @category_calss+''', @type=N'''+@category_type+''', @name=N'''+@category_name+''''
,@on_fail_step_id = on_fail_step_id
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/1923.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
