作业备份,不是备份数据库,是备份作业。
我的方法是把作业导出成文件备份起来,因为当你服务器维护的多了的时候很多你的作业 就很成问题,很麻烦。
最好能够作业实现同步,这个也是第一步,保存成文件,之后个人设想使用powershell 来把作业同步起来
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
'

