SQL Server 作业同步 (结合备份作业)

感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!

核心导出作业的 代码 和 作业备份是相似的

代码如下:

 
alter PROC DumpJob (@job VARCHAR(100)) 
AS 
DECLARE @retrun NVARCHAR(max) 
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 @jobname = @job 
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) 

SET @retrun = ' BEGIN TRANSACTION' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'DECLARE @ReturnCode INT' 
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) + 'BEGIN' 
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+'''' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + '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) 


SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'DECLARE @jobId BINARY(16)' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'''+@jobname+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @enabled='+RTRIM(@isenable)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_eventlog='+RTRIM(@EventLogLevel)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_email='+RTRIM(@EmailLevel)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_netsend='+RTRIM(@NetSendLevel)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_level_page='+RTRIM(@PageLevel)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_email_operator_name ='''+RTRIM(@EmailLeveloprid)+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_netsend_operator_name='''+RTRIM(@NetSendLeveloprid)+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @notify_page_operator_name='''+RTRIM(@PageLeveloprid)+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @delete_level='+RTRIM(@delete_level)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @description=N'''+@description+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @category_name=N'''+@category_name+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @owner_login_name=N'''+@owner_log_name+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @job_id = @jobId OUTPUT' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + '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 

SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @step_name=N'''+@step_name+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @step_id='+RTRIM(@step_id)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @cmdexec_success_code='+RTRIM(@cmdexec_success_code)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_success_action='+RTRIM(@on_success_action)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_success_step_id='+RTRIM(@on_success_step_id)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_fail_action='+RTRIM(@on_fail_action)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @on_fail_step_id='+RTRIM(@on_fail_step_id)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @retry_attempts='+RTRIM(@retry_attempts)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @retry_interval='+RTRIM(@retry_interval)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @os_run_priority='+RTRIM(@os_run_priority)+',@subsystem=N'''+@subsystem+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @database_name=N'''+@database_name+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @flags='+RTRIM(@flags)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @command=N'''+REPLACE(@command,'''','''''')+'''' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback' 

FETCH NEXT FROM jbcur INTO @step_id 

END 

CLOSE jbcur 
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) 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' 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 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId,@name=N'''+@name+''',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @enabled='+RTRIM(@enabled)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_type='+RTRIM(@freq_type)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_interval='+RTRIM(@freq_interval)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_subday_type='+RTRIM(@freq_subday_type)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_subday_interval='+RTRIM(@freq_subday_interval)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_relative_interval='+RTRIM(@freq_relative_interval)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @freq_recurrence_factor='+RTRIM(@freq_recurrence_factor)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_start_date='+RTRIM(@active_start_date)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_end_date='+RTRIM(@active_end_date)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_start_time='+RTRIM(@active_start_time)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @active_end_time='+RTRIM(@active_end_time)+',' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' @schedule_uid=N'''+RTRIM(NEWID())+'''' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback' 
END 


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) + ' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'COMMIT TRANSACTION' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'GOTO EndSave' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'QuitWithRollback:' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' IF(@@TRANCOUNT>0)ROLLBACK TRANSACTION' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + 'EndSave:' 
SET @retrun = @retrun+CHAR(13)+CHAR(10) + ' ' 

select @retrun 

我创建了一个存储过程,用来导出 作业,只有用powershell 脚本来实现同步,你可以powershell 脚本放入 sqlagent 中 定时运行起到同步的效果

一下是powershell 代码:

代码如下:

 
$server = (local) 
$uid = sa 
$db=master 
$pwd=fanzhouqi 
$mailprfname = sina 
$recipients = 32116057@qq.com 
$subject = 'System Log' 
function execproc($message) 
{ 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$CnnString =Server = $server; Database = $db;User Id = $uid; Password = $pwd 
$SqlConnection.ConnectionString = $CnnString 
$CC = $SqlConnection.CreateCommand(); 

$CC.CommandText=$message 
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter $CC 
$dataset = New-Object System.Data.DataSet 
#$SqlConnection.SelectCommand = $CC 
if (-not ($SqlConnection.State -like Open)) { $SqlConnection.Open() } 

$adapter.Fill($dataset) |out-null 
$dataset.Tables[0].Rows[0][0] 
$SqlConnection.Close(); 
} 
function execsql($message) 
{ 
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$CnnString =Server = fanr-pc\sql2012; Database = $db;User Id = $uid; Password = $pwd 
$SqlConnection.ConnectionString = $CnnString 
$CC = $SqlConnection.CreateCommand(); 
if (-not ($SqlConnection.State -like Open)) { $SqlConnection.Open() } 

$cc.CommandText=$message 
$cc.ExecuteNonQuery()|out-null 
$SqlConnection.Close(); 
} 
$jobscript = execproc  EXEC master..DumpJob @job = 'backup' 
#$jobscript 
execsql $jobscript 

有什么问题可以联系我:如果blog 的代码没办法使用也可以 加我qq 联系我,问我要。qq:32116057 fanr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


本篇内容主要讲解“sqlalchemy的常用数据类型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sqlalche...
今天小编给大家分享一下sqlServer实现分页查询的方式有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家
这篇文章主要介绍“sqlmap之osshell怎么使用”,在日常操作中,相信很多人在sqlmap之osshell怎么使用问题上存在疑惑,小编查阅了各式资料,整理出
本篇内容介绍了“SQL注入的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧...
1. mssql权限sa权限:数据库操作,文件管理,命令执行,注册表读取等system。是mssql的最高权限db权限:文件管理,数据库操作等 users-administratorspublic权限:数据库操作 guest-users2、sql server注入执行命令查
sql执行计划如何查看?在SPL庞大的数据中我们不知道如何查看实际数据库中发生了什么事情,有必要定期进行查询优化和索引否则会影响我们后期的SQL的查询速度。那么针对这样的问题我们必须要知道SQL执行的计划,在本文中winwin7小编给大家分享下SQL执
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点应用非常广泛。不过在使用中,我们会遇到非常多的错误,面对这么庞大的数据库环境,当然会有精确的错误代码的对照季,下面小编分享的
SQL Server本地账户无法登陆出现错误提示:error:40-Could not open a connenction to SQL Server的问题很常见,对于初学者来说可能不知道如何解决,一起来看看下面的解决方案。解决步骤如下:1、这种情况需要开启 SQL Server service
微软推出的SQL2008是一款非常好用的数据库软件,它稳定、功能强大,为众多企业提供了最佳的数据库解决方案,那么我们如何在Windows中安装它呢,一些朋友对SQL Server 2008的安装过程还不是很熟悉,下面就一起来看看SQL Server 2008详细安装图解...
本页概要如果您使用的是 SQL Server 2005备份和还原Sp_detach_db 和 Sp_attach_db 存储过程关于排序规则的说明导入和导出数据(在 SQL Server 数据库之间复
DBCC CHECKIDENT 检查指定表的当前标识值,如有必要,还对标识值进行更正。 语法 DBCC CHECKIDENT ( &#39;table_name&#39; [ , { NORESEED
这里对 SQL Server 字符串函数进行分门别类地列出,便于查阅和记忆,相信大家都在其它方面有高深的编程基础,从字面上来说大家都知道这些函数的意义,就不对这些函数作过多的解释了,主要谈些经验,具体
查询及删除重复记录的方法 1、查找表(people)中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpe
微软发SQL Server 2008第二个CTP预览版from: http://news.csdn.net/n/20070807/107158.html8月7日消息,微软公司本周发布了SQL Serv
症状当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。本文介绍了如何解决孤立用户问题。更多信息虽然术
当登录SQL Server 2005时可能碰到错误: &#39;No Process is on the Other End of the Pipe&#39;。解决方法:(1)Open up SQL
概要本文描述如何映射标准登录和集成登录来解决在运行 SQL Server 的服务器之间移动数据库时的权限问题。更多信息当您将数据库从一个运行 SQL Server 的服务器移到另一个运行 SQL Se
----------------------------------------问题:该用户与可信的SQL SERVER 连接无关联使用sa用户或自建用户使用“SQL SERVER 身份认证”连接数据
更新日期: 2007 年 5 月 20 日 使用下表可以确定各种版本的 Microsoft SQL Server 2005 支持哪些功能。有关 SQL Server 2005 Enterprise E
当从Excel导入数据到Sql Sever中,可能会出现以下问题:&#xD;&#xA;对于指定的缓冲区大小而言,源列的数据太大