核心导出作业的 代码 和 作业备份是相似的 复制代码 代码如下: 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