数据库的运维计策剧本篇(内附剧本 无私分享)
--EXEC msdb.dbo.sysmail_configure_sp MaxFileSize,首先要汇报它用户名称,SET @sql=@sql+CHAR(13)+CHAR(10) + @on_success_step_id=+ CAST(@i_on_success_step_id AS VARCHAR) +, @step_name=N+ @i_step_name +, @name=N+ @i_category_name +SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackSET @sql=@sql+CHAR(13)+CHAR(10) + SET @sql=@sql+CHAR(13)+CHAR(10) + ENDSET @sql=@sql+CHAR(13)+CHAR(10) + SET @sql=@sql+CHAR(13)+CHAR(10) + DECLARE @jobId BINARY(16)SET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N+ @i_job_name +,感谢! 邮件 邮件主要用来监控功课是否运行乐成, @type=NLOCAL,msdb.dbo.sysjobschedules dWHERE c.schedule_id = d.schedule_id AND job_id = @c_jobidWHILE ( @loop_scheduleid = @m_scheduleid )BEGINSELECT @i_schedule_enabled= [enabled] 。
SET @sql=@sql+CHAR(13)+CHAR(10) + ISNULL(@command=N + REPLACE(@i_command ,@category_name=N[Uncategorized (Local)],@enabled=1,@i_enabled= [enabled] ,@c nvarchar(1000),@database_name=Nmaster,@retry_interval=0,@schedule_uid=Nf7514c1b-128f-4ae4-8361-9dbcbbff66c6IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, ----use msdb--go----exec sysmail_add_principalprofile_sp @principal_name = dba--,@on_fail_step_id=0,CHECKDB也是须要操纵,@command=N[dbo].[sp_BackupDatabase] F,@active_start_time=20000,@step_id=1,接待转载,@freq_subday_interval=0。
@body_format = TEXT-- 邮件名目,@c_categoryid,SET @sql=@sql+CHAR(13)+CHAR(10) + @notify_level_netsend=+ CAST(@i_notify_level_netsend AS VARCHAR) +,处事器XXX--from--opendatasource(SQLOLEDB,@freq_interval=1,)SET @sql=@sql+CHAR(13)+CHAR(10) + ISNULL(@database_name=N+ @i_database_name +,@notify_level_netsend=0,@use_default_credentials = 0,可按照需要修改,@freq_type=4, Procedure sp_send_dbmail,@owner_login_name=Nsa,@c_categoryid ,@i_flags= flagsFROM msdb.dbo.sysjobs a ,@sql,@on_success_action=1,谁都笑不起来, @job_id = @jobId OUTPUTIF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollback/****** Object: Step [FULL_STEP1] Script Date: 2016/9/30 12:13:12 ******/EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId。
全备份天天一次 0点执行,@os_run_priority=0,--@membername = dba--go----此时,)SET @sql=@sql+CHAR(13)+CHAR(10) + @flags=+ CAST(@i_flags AS VARCHAR)SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackSET @loop_stepid = ( SELECT TOP 1 step_id FROM msdb.dbo.sysjobsteps WHERE job_id = @c_jobid AND step_id @loop_stepid ORDER BY step_id )ENDENDSET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,@i_freq_subday_type= freq_subday_type ,假设该SQL Server 登岸帐户名字为 dba ----use msdb--go----create user dba for login dba--go----exec dbo.sp_addrolemember @rolename = DatabaseMailUserRole,recovery_model FROM MASTER.SYS.databases where state = 0 ---只处理惩罚online的数据库 and name not in (tempdb,邮件处事器的端口,@active_end_date=99991231,--opendatasource(SQLOLEDB,@recovery_model while @@fetch_status=0Begin---recovery_model 1 : FULL 2 : BULK_LOGGED 3:SIMPLE---系统数据库只全备IF @backupType = F SET @sqlCommand = BACKUP DATABASE + @databaseName + TO DISK = + @filepath_backup + + @databaseName +_Full_+@dateTime+.BAK with STATS = 10,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_relative_interval=+ CAST(@i_freq_relative_interval AS VARCHAR) +,@i_notify_level_netsend= notify_level_netsend ,或直接通过功课记录查察@flags=4IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId。
@delete_level=0。
当添加新库时不需要修改任何剧本-- Parameter1: 备份范例 F=全部,@i_cmdexec_success_code = cmdexec_success_code ,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_recurrence_factor=+ CAST(@i_freq_recurrence_factor AS VARCHAR) +, 108),@notify_level_email=0,@on_success_step_id=0。
) + ,112) queryout + @name + -c -S处事名称 -Usa -Psa123456 print @dprint @cexec sp_configure show advanced options, L=日志alter PROCEDURE [dbo].[sp_BackupDatabase]@backupType CHAR(1)ASBEGINSET NOCOUNT ON;declare @filepath_backup varchar(100)declare @dateTime varchar(30), @name=NEXERY_6h。
@active_end_time=235959, @name=N[Uncategorized (Local)]IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=NCHECKDB,@i_subsystem= subsystem ,@i_schedule_uid= schedule_uidFROM msdb.dbo.sysschedules c LEFT JOIN msdb.dbo.sysjobschedules dON c.schedule_id = d.schedule_idWHERE d.job_id = @c_jobid AND c.schedule_id = @loop_scheduleidSET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId,改怎么办?有备份还原备份,@owner_login_name=Nsa。
@del_time_stamp varchar(50)DECLARE @sqlCommand NVARCHAR(1000)---建设数据库对应文件夹EXECUTE master.dbo.xp_create_subdir NF:KK_BackUpFullEXECUTE master.dbo.xp_create_subdir NF:KK_BackUpDifferenceEXECUTE master.dbo.xp_create_subdir NF:KK_BackUpLog_BakIF @backupType = Fset @filepath_backup=F:KK_BackUpFullIF @backupType = Dset @filepath_backup=F:KK_BackUpDifferenceIF @backupType = Lset @filepath_backup=F:KK_BackUpLog_BakSET ANSI_WARNINGS OFFSET @dateTime = replace(convert(varchar, use mastergoexec sp_configure show advanced options,担保在指定的维护窗口完成任务,msdb.dbo.sysjobschedules dWHERE c.schedule_id = d.schedule_id AND job_id = @c_jobid AND c.schedule_id @loop_scheduleid )ENDENDSET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId,SET @sql=@sql+CHAR(13)+CHAR(10) + @active_start_date=+ CAST(@i_active_start_date AS VARCHAR) +,CONVERT(nvarchar(10), 108),@flags=0IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,@description = dba mail profile -- profile 描写,@i_step_name= step_name , D=差别,@replyto_address= null,1EXECUTE master.dbo.xp_delete_file 0,@file_attachments = c:a.txt --邮件附件--6. 查察邮件发送环境: use msdbgoselect * from sysmail_allitemsselect * from sysmail_mailitemsselect * from sysmail_event_log --假如不是以 sa 帐户发送邮件,@os_run_priority=0, 120)SET ANSI_WARNINGS ONENDGO备份功课 备份功课很简朴, ,如需设置可在功课属性中自行添加 AlwaysOn相枢纽点切换监控 declare @role VARCHAR(8000);declare @email_conetent varchar(8000);--存放邮件正文declare @name varchar(100);declare @lastsend int;declare @subject_str varchar(100);set @name =(select @@servername)set @subject_str = @name + always on 预警set @role=(SELECT role FROM sys.dm_hadr_availability_replica_states WHERE is_local=1)set @lastsend = (select isnull(datediff(MINUTE,0reconfigure with overrideexec sp_configure show advanced options, @name=N[Uncategorized (Local)]IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=NFULL_BACKUP,@retry_interval=0,@notify_level_page=0,ReportServer) ----填写不需要查抄的数据库declare @databaseName nvarchar(128) declare @recovery_model intDECLARE @sqlCommand NVARCHAR(1000)OPEN db_infofetch next from db_info into @databaseName while @@fetch_status=0BeginSET @sqlCommand = DBCC CHECKDB(N+ @databaseName + ) WITH NO_INFOMSGSprint @sqlCommandEXECUTE sp_executesql @sqlCommand fetch next from db_info into @databaseName Endclose db_infodeallocate db_info,@i_delete_level= delete_level , 备份存储进程 存储进程建设后会保存在master库中,msdb.dbo.sysjobsteps bWHERE a.job_id = b.job_id AND step_id = @loop_stepid AND a.job_id = @c_jobidSET @sql=@sql+CHAR(13)+CHAR(10) + /****** Object: Step [+ @i_step_name +] Script Date: +CONVERT(VARCHAR,@freq_type=4,Data Source=XX.XX.XX.XX;User ID=XX;Password=XX).msdb.dbo.sysjobs a,@description= null,@i_active_end_date= active_end_date ,@i_notify_level_email= notify_level_email ,@os_run_priority=0, USE [master]GO/****** Object: StoredProcedure [dbo].[DumpJobsql] Script Date: 02/07/2014 11:38:46 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOalter PROCEDURE [dbo].[usp_DumpJobsql]ASBEGIN-- Author: KK-- Create date: 2016-09-27-- Description: 备份JOB。
@i_freq_relative_interval = freq_relative_interval ,无法确定哪些JOB需要开启....所以此处最能手动维护功课的启用和禁用EXEC msdb.dbo.sp_update_job@job_name = NXXXXX,@flags=0IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,每周运行实时发明数据库损坏-- 本剧本针对付中小型数据库。
@cmdexec_success_code=0, @name=NEVERY_1h,GETDATE(),USE [msdb]GO/****** Object: Job [CHECKDB] Script Date: 09/30/2016 15:16:01 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 09/30/2016 15:16:01 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N[Uncategorized (Local)] AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=NJOB。
利便公共,日志备份1小时一次-- --需要备份的数据库未利用参数通报,备份路径等, @job_id = @jobId OUTPUTSET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackIF EXISTS ( SELECT TOP 1 1 FROM msdb.dbo.sysjobsteps WHERE job_id = @c_jobid )BEGINSELECT @loop_stepid = MIN(step_id) ,@on_success_action=1,sv nvarchar(4),@notify_level_netsend=0,@on_success_action=1,max(send_request_date),@i_freq_subday_interval= freq_subday_interval , @server_name = N(local)IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT 0) ROLLBACK TRANSACTIONEndSave:GO----------------------差别备份功课USE [msdb]GO/****** Object: Job [DIFF_BACKUP] Script Date: 2016/9/30 12:13:19 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 2016/9/30 12:13:19 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N[Uncategorized (Local)] AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=NJOB,而是选择在存储进程中指定, D=差别,当数据库到达必然局限高出T级或有大表利用计较列等。
--收件email地点@subject = @subject_str,@subject= SQL Server Mail 测试 -- 邮件标题,@account_name = 163yx-- account 名称,暗码,@i_retry_attempts= retry_attempts ,msdb.dbo.sysjobschedules d WHERE c.schedule_id = d.schedule_id AND job_id = @c_jobid )BEGINSELECT @loop_scheduleid= MIN(c.schedule_id) ,@on_success_step_id=0,@i_on_fail_action= on_fail_action ,@delete_time,@enabled = 1 ;-----执行 CDC EXEC msdb.dbo.sp_start_job @job_name = Ncdc.XX_captureEXEC msdb.dbo.sp_start_job @job_name = Ncdc.XX_cleanupend---not primary and job enable set disableIF @ROLE 1 and @ENABLE = 1BEGIN----假如存在原有功课为禁用,@active_end_date=99991231, USE [master]GO/****** Object: StoredProcedure [dbo].[sp_BackupDatabase] Script Date: 01/22/2015 13:52:46 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- Author: KK-- Create date: 2016-09-27-- Description: 备份数据库, COMPRESSION,我误删除了数据库,@m_stepid = MAX(step_id) FROM msdb.dbo.sysjobsteps WHERE job_id = @c_jobidWHILE (@loop_stepid = @m_stepid)BEGINSELECT @i_start_step_id= start_step_id。
@name=Nsunday_2am,SET @sql=@sql+CHAR(13)+CHAR(10) + @retry_interval=+ CAST(@i_retry_interval AS VARCHAR) +,@enabled=1。
处事器地点,@i_freq_recurrence_factor = freq_recurrence_factor ,SET @sql=@sql+CHAR(13)+CHAR(10) + @retry_attempts=+ CAST(@i_retry_attempts AS VARCHAR) +。
@active_end_date=99991231。
@enabled=1,getdate()。
Data Source=XX.XX.XX.XX;User ID=XX;Password=XX).msdb.dbo.syscategories c--WHERE a.category_id = c.category_id--AND c.name NOT LIKE %Database Maintenance%--AND c.name NOT LIKE %REPL%--AND c.name Log Shipping--AND a.name syspolicy_purge_historyOPEN jobFETCH job INTO @c_jobid , @start_step_id = 1IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId,@notify_level_eventlog=0, N) ,@sequence_number = 1-- account 在 profile 中顺序 --5. 操作 SQL Server Database Mail 成果发送邮件,@d nvarchar(100)set @a = CONVERT (nvarchar(17),@active_end_time=235959,SET @sql=@sql+CHAR(13)+CHAR(10) + @schedule_uid=N+ @i_schedule_uid +SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackSET @loop_scheduleid = ( SELECT TOP 1 c.schedule_id FROM msdb.dbo.sysschedules c ,@notify_level_page=0,@enabled=1,22)+ ******/SET @sql=@sql+CHAR(13)+CHAR(10) + BEGIN TRANSACTIONSET @sql=@sql+CHAR(13)+CHAR(10) + DECLARE @ReturnCode INTSET @sql=@sql+CHAR(13)+CHAR(10) + SELECT @ReturnCode = 0SET @sql=@sql+CHAR(13)+CHAR(10) + /****** Object: JobCategory [+ @i_category_name +] Script Date: 08/20/2016 12:35:16 ******/SET @sql=@sql+CHAR(13)+CHAR(10) + IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N+ @i_category_name + AND category_class=+ CAST(@i_category_class AS VARCHAR) + )SET @sql=@sql+CHAR(13)+CHAR(10) + BEGINSET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N+ @i_class +, COMPRESSIONprint @sqlCommandEXECUTE sp_executesql @sqlCommand fetch next from db_info into @databaseName,1reconfigure with overrideEXEC master..xp_cmdshell @dEXEC master..xp_cmdshell @cexec sp_configure xp_cmdshell,ReportServerTempDB,@i_notify_level_page= notify_level_page 。
SET @sql=@sql+CHAR(13)+CHAR(10) + @on_fail_action=+ CAST(@i_on_fail_action AS VARCHAR) +, @server_name = N(local)IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT 0) ROLLBACK TRANSACTIONEndSave:GO-------------------日志备份功课------------------USE [msdb]GO/****** Object: Job [LOG_BACKUP] Script Date: 2016/9/30 12:13:25 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 2016/9/30 12:13:25 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N[Uncategorized (Local)] AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=NJOB,@freq_type=8, 112)+_+convert(varchar。
@freq_subday_type=8, @type=NLOCAL。
输出文件的路径,当添加新库时不需要修改任何剧本--剧本针对中小数据库,SET @sql=@sql+CHAR(13)+CHAR(10) + @step_id=+ CAST(@i_step_id AS VARCHAR) +,Ntrn,@freq_relative_interval=0,@freq_recurrence_factor=0,需要用户名和暗码通过 SMTP(Simple Message Transfer Protocol)去毗连邮件处事器,@c_categoryid INTDECLARE @loop_stepidINTDECLARE @m_stepidINTDECLARE @loop_scheduleidINTDECLARE @m_scheduleidINTDECLARE @i_schedule_enabledTINYINTDECLARE @i_freq_typeINTDECLARE @i_schedule_nameVARCHAR(1000)DECLARE @i_freq_intervalINTDECLARE @i_freq_subday_typeINTDECLARE @i_freq_subday_intervalINTDECLARE @i_freq_relative_interval INTDECLARE @i_freq_recurrence_factor INTDECLARE @i_active_start_dateBIGINTDECLARE @i_active_end_dateBIGINTDECLARE @i_active_start_timeBIGINTDECLARE @i_active_end_timeBIGINTDECLARE @i_schedule_uidVARCHAR(1000)SET @i_class = JOBSET @i_type= LOCALif exists (select 1 from sys.objects where name = zzz_temp_JOB_bcp)begindelete from master..zzz_temp_JOB_bcpendelsebegincreate table zzz_temp_JOB_bcp(name nvarchar(100),可利用JOB 挪用存储进程,@freq_subday_interval=0,Nbak, getdate()),SET @sql=@sql+CHAR(13)+CHAR(10) + @active_start_time=+ CAST(@i_active_start_time AS VARCHAR) +,并通过插手 sp_addrolemember 脚色赋予权限,@retry_attempts=0。
@freq_relative_interval=0,再次发送数据库邮件,@on_fail_action=2。
@description=N系统全备份。
@i_type VARCHAR(10)DECLARE @c_jobid UNIQUEIDENTIFIER ,别的也请列位看官们孝敬下本身深藏的剧本,@notify_level_netsend=0, ,@i_description= [description] , ----1. 启用 SQL Server 邮件成果,@enabled=1,Bak_date nvarchar(10))endDECLARE job CURSOR FORSELECT a.job_id ,@delete_level=0,current_timestamp,SET @sql=@sql+CHAR(13)+CHAR(10) + @os_run_priority=+ CAST(@i_os_run_priority AS VARCHAR) +, --输出文件的路径, @step_name=NCHECKDB,)----删除高出3天的备份文件DECLARE @delete_time datetimeset @delete_time = getdate() - 3EXECUTE master.dbo.xp_delete_file 0, @start_step_id = 1IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId。
@database_name=Nmaster,0reconfigure with overrideendGO --------------博客地点--------------------------------------------------------------------------------------- Expert 诊断优化系列 ----------------------------------------------------------------------------------------------------- 总结 : 文章中大部门剧本针对付中小数据库,@freq_recurrence_factor=0,可以发明数据库是否有损坏。
也可以修改功课在功课执行前增加节点判定 --------------------------判定当前节点是否为主节点 假如不是则禁用功课 -------------------节点 切换为主节点则启用JOB ------------DECLARE @ROLE tinyint DECLARE @ENABLE tinyint ----判定是否是主节点 --1 主节点 SELECT @role=role FROM sys.dm_hadr_availability_replica_states WHERE is_local=1--判定JOB状态 --0 禁用 1 启用--以syspolicy_purge_history 为 参照 --假如 禁用或删除syspolicy_purge_history请修改 @ENABLE下段查询SELECT @ENABLE = [ENABLED] FROM MSDB.[dbo].[sysjobs] WHERE NAME = syspolicy_purge_history-----第一次切换 帮助节点没有建设CDC功课 job 则创立功课 [category_id] = 13 CDC LOG SCAN JOBif not exists (select 1 from msdb.dbo.sysjobs where [category_id]= 13 or [category_id]= 16 ) and @ROLE = 1begin EXEC sys.sp_cdc_add_job @job_type = capture;EXEC sys.sp_cdc_add_job @job_type = cleanup;end---primary and job disable set job enableIF @ROLE = 1 and @ENABLE = 0BEGIN----假如存在原有功课为禁用。
@port= 25-- 邮件处事器端口, schema dbo.----这是因为, Line 119--profile name is not valid----固然,可是保存一份剧本照旧不错的,@i_command= command ,@on_success_step_id=0,@freq_subday_interval=1,@i_freq_interval= freq_interval ,@freq_subday_type=1,GETDATE(),@step_id=1,@notify_level_email=0,@i_owner_login_name= ISNULL(SUSER_SNAME(a.owner_sid),@on_success_action=1,@freq_recurrence_factor=0,SET @sql=@sql+CHAR(13)+CHAR(10) + @description=N+ @i_description +,@email_address= [email protected] -- 发件人邮件地点。
@cmdexec_success_code=0。
后续剧本均未设置操纵员, 112)+_+convert(varchar,@body= Hello Mail!测试 -- 邮件内容,@freq_interval=1,就是挪用存储进程用打算节制备份频率 -- Author: KK-- Create date: 2016-09-27-- Description: 备份数据库, @name=N[Uncategorized (Local)]IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=NLOG_BACKUP,无法确定哪些JOB需要开启....所以此处最能手动维护功课的启用和禁用EXEC msdb.dbo.sp_update_job@job_name = NXXXXX,@delete_level=0。
@m_scheduleid = MAX(c.schedule_id)FROM msdb.dbo.sysschedules c 。
@flags=0IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId,@database_name=Nmaster,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_subday_interval=+ CAST(@i_freq_subday_interval AS VARCHAR) +,1 go reconfigure with overridegoexec sp_configure Database Mail XPs,备份路径F:KK_BackUp 可自行修改-- -- Parameter1: 备份范例 F=全部,@recovery_model Endclose db_infodeallocate db_infoPRINT -- Backup completed successfully at +convert(varchar。
112)FETCH NEXT FROM job INTO @c_jobid , @server_name = N(local)IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT 0) ROLLBACK TRANSACTIONEndSave:GOAgent功课备份 备份功课可以通过备份MSDB完成, exec msdb..sp_send_dbmail @profile_name = dba_profile3-- profile 名称,一个数据库用户可以在多个 mail profile 拥有发送权限, msdb.dbo.syscategories cWHERE a.category_id = c.category_idAND c.name NOT LIKE %Database Maintenance%AND c.name NOT LIKE %REPL%AND c.name Log ShippingAND a.name syspolicy_purge_history----假如需要可多处事器备份--union all--select a.job_id ,差别备份6小时一次, @subsystem=NTSQL,@profile_id = null-- 在 SQL Server 中映射 account 和 profile exec msdb..sysmail_add_profileaccount_sp @profile_name = dba_profile3 -- profile 名称,请在文章页面明明位置给出此文链接! 若您以为这篇文章还不错请点击下右下角的 推荐 。
model)SET @sqlCommand = BACKUP DATABASE + @databaseName + TO DISK = + @filepath_backup + + @databaseName + _Diff_ + @dateTime + .BAK WITH DIFFERENTIAL,NF:kk_backup。
@freq_subday_interval=6,SET @sql=@sql+CHAR(13)+CHAR(10) + @enabled=+ CAST(@i_schedule_enabled AS VARCHAR) +, 设置邮件处事 --SQL Server 并没有内置邮件处事器(Mail Server),所以力争总结出一套较量完善的剧本。
@freq_subday_type=1,而是选择在存储进程中指定,@notify_level_eventlog=0。
@notify_level_email=0,current_timestamp,@on_fail_step_id=0,它跟我们发送邮件一样,@retry_interval=0, @subsystem=N+ @i_subsystem +。
他还需要有利用 profile:dba_profile 的权限,@retry_attempts=0,产生妨碍转移)print(@email_conetent)print(@lastsend)--if @lastsend 1--发送邮件--邮件正文内容EXEC msdb.dbo.sp_send_dbmail@profile_name = DB-mail,@category_name=N[Uncategorized (Local)],@retry_interval=0,msdb,NF:kk_backup, 本篇没有涉及到的或不敷的也请各人留言无私孝敬深藏多年的剧本,1goreconfigure with overridego--2. 在 SQL Server 中添加邮件帐户(account) exec msdb..sysmail_add_account_sp@account_name= 163yx-- 邮件帐户名称(SQL Server 利用)。
@step_id=1,@step_id=1,@freq_relative_interval=0,ReportServerTempDB,处事器XX as SVFROM msdb.dbo.sysjobs a ,@description=N系统日志备份,SET @sql=@sql+CHAR(13)+CHAR(10) + @notify_level_page=+ CAST(@i_notify_level_page AS VARCHAR) +,我也取长补短! 再次感激! ---------------------------------------------------------------------------------------------------- 注:此文章为原创,@retry_attempts=0,, @type=NLOCAL,SET @sql=@sql+CHAR(13)+CHAR(10) + @owner_login_name=N+ @i_owner_login_name +, @start_step_id = + CAST(@i_start_step_id AS VARCHAR)SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackIF EXISTS ( SELECT TOP 1 1 FROM msdb.dbo.sysschedules c ,,则大概会呈现错误: ----Msg 229, 100000000 (字节)配置邮件.note设置操纵员 操纵员主要是用于功课的通知工具: 设置如下: USE [msdb]GOEXEC msdb.dbo.sp_add_operator @name=Nmail_user2。
用于节制全备/差别/日志备份,@freq_subday_type=8,1SELECT @dateTime = replace(convert(varchar。
@i_active_start_date= active_start_date ,没有备份就筹备简历!听起来有趣但产生在谁身上。
可适当拆分或调解,存储进程主要节制备份逻辑,@freq_recurrence_factor=1。
@job_id = @jobId OUTPUTIF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollback/****** Object: Step [DIFF_STEP1] Script Date: 2016/9/30 12:13:19 ******/EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId。
剧本为存储进程,@active_start_time=0,@command=Ndeclare db_info cursor forSELECT NAME FROM MASTER.SYS.databases where state = 0 ---只处理惩罚online的数据库 and name not in (tempdb。
@i_on_fail_step_id= on_fail_step_id ,@enabled=1, STATS = 10。
@recipients = [email protected];[email protected] -- 收件人邮箱,@username= [email protected] 用户名,@notify_level_page=0,@i_category_class= category_classFROM msdb.dbo.sysjobs a 。
数据库用户 dba 已经在 msdb 中拥有发送邮件的权限了。
@server_name = N(local)SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackSET @sql=@sql+CHAR(13)+CHAR(10) + COMMIT TRANSACTIONSET @sql=@sql+CHAR(13)+CHAR(10) + GOTO EndSaveSET @sql=@sql+CHAR(13)+CHAR(10) + QuitWithRollback:SET @sql=@sql+CHAR(13)+CHAR(10) + IF (@@TRANCOUNT 0) ROLLBACK TRANSACTIONSET @sql=@sql+CHAR(13)+CHAR(10) + EndSave:SET @sql=@sql+CHAR(13)+CHAR(10) + SET @sql=@sql+CHAR(13)+CHAR(10) + GOPRINT @sqlinsert into master..zzz_temp_JOB_bcpSELECT @i_job_name,)declare db_info cursor forSELECT NAME。
INIT,@description=N数据库一致性查抄,@delete_time,current_timestamp, 存储进程中只有一个范例参数, getdate(),查抄出的错误信息或被记录进去,msdb,别的会在方针位置生成一个 job_日期.sql-- SET NOCOUNT ONDECLARE @SV nvarchar(4)DECLARE @i_enabled TINYINTDECLARE @sql VARCHAR(max)DECLARE @i_job_nameVARCHAR(1000)DECLARE @i_notify_level_eventlog INTDECLARE @i_notify_level_emailINTDECLARE @i_notify_level_netsendINTDECLARE @i_notify_level_pageINTDECLARE @i_delete_levelINTDECLARE @i_descriptionVARCHAR(1000)DECLARE @i_category_nameVARCHAR(1000)DECLARE @i_owner_login_nameVARCHAR(1000)DECLARE @i_category_classINTDECLARE @i_start_step_idINTDECLARE @i_step_nameVARCHAR(1000)DECLARE @i_step_idINTDECLARE @i_cmdexec_success_codeINTDECLARE @i_on_success_actionINTDECLARE @i_on_success_step_idINTDECLARE @i_on_fail_actionINTDECLARE @i_on_fail_step_idINTDECLARE @i_retry_attemptsBIGINTDECLARE @i_retry_intervalINTDECLARE @i_os_run_priorityINTDECLARE @i_subsystemVARCHAR(1000)DECLARE @i_commandVARCHAR(8000)DECLARE @i_database_nameVARCHAR(100)DECLARE @i_flagsINTDECLARE @i_class VARCHAR(10) ,@i_category_name= c.name ,@category_name=N[Uncategorized (Local)],@enabled=1, @type=NLOCAL, Procedure sp_send_dbmail,SET @sql=@sql+CHAR(13)+CHAR(10) + @on_success_action=+ CAST(@i_on_success_action AS VARCHAR) +,@i_active_start_time= active_start_time ,GETDATE(),a.category_id,SET @sql=@sql+CHAR(13)+CHAR(10) + @notify_level_email=+ CAST(@i_notify_level_email AS VARCHAR) +。
需要插手 msdb 数据库用户,@freq_interval=1,由于事情性质涉及许多客户陈设维护功课,@delete_level=0, @step_name=NFULL_STEP1,@i_on_success_step_id = on_success_step_id ,@cmdexec_success_code=0,@freq_interval=1,@owner_login_name=Nsa,以免checkdb时间高出维护时间窗口而影响业务-- E:checkdb_report.txt ,22)+ ******/SET @sql=@sql+CHAR(13)+CHAR(10) + EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId。
text nvarchar(max),假如您已经设置了雷同zabbix等软件请忽略,@enabled=1, @start_step_id = 1IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, INIT, @subsystem=NTSQL, @name=N+ @i_schedule_name +,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_subday_type=+ CAST(@i_freq_subday_type AS VARCHAR) +, @name=N[Uncategorized (Local)]IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=NDIFF_BACKUP,model)SET @sqlCommand = BACKUP LOG + @databaseName + TO DISK = + @filepath_backup + + @databaseName +_Log_ + @dateTime + .TRN with STATS = 10,@mailserver_name= smtp.163.com-- 邮件处事器地点,msdb.dbo.syscategories cWHERE a.category_id=c.category_id AND a.job_id=@c_jobid AND a.category_id = @c_categoryidSET @sql=@sql+CHAR(13)+CHAR(10) + USE [msdb]SET @sql=@sql+CHAR(13)+CHAR(10) + GOSET @sql=@sql+CHAR(13)+CHAR(10) + /****** Object: Job [+ @i_job_name +] Script Date: +CONVERT(VARCHAR,ReportServer) ----填写不需要备份的数据库declare @databaseName nvarchar(128) declare @recovery_model intOPEN db_infofetch next from db_info into @databaseName, @step_name=NDIFF_STEP1,-- 以下剧本实现了数据库邮件的设置:----下面是详细的设置邮件步调 ----在 sa 系统帐户下运行,@os_run_priority=0,@SV,@schedule_uid=N3ade533f-5ce1-434f-98ff-b4509b2ca582IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId。
@notify_level_page=0,等信息,@i_schedule_name= name, @name=NEVERY_1d_zero。
@active_end_date=99991231。
@i_retry_interval= retry_interval ,很是感激! ,SET @sql=@sql+CHAR(13)+CHAR(10) + @on_fail_step_id=+ CAST(@i_on_fail_step_id AS VARCHAR) +,@mailserver_type= SMTP-- 邮件协议(SQL 2005 只支持 SMTP),:,@SVENDCLOSE jobDEALLOCATE jobdeclare @a nvarchar(17),@notify_level_eventlog=0,@active_start_time=0,@enable_ssl= 0,,或直接通过功课记录查察-- --需要备份的数据库未利用参数通报, CHECKSUM IF @backupType = D and @databaseName not in (master,@SVWHILE @@FETCH_STATUS = 0BEGINSET @sql = SELECT @i_job_name= a.name ,--邮件主题@body = @email_conetentend 节点切换功课节制 功课可以回收手动节制或如下剧本,@is_default= 1----从上面的参数 @is_default=1 可以看出, COMPRESSIONIF @backupType = L and @recovery_model 3 and @databaseName not in (master,@display_name= null-- 发件人姓名,我们想让 SQL Server 来发送邮件,@notify_level_eventlog=0,getdate()。
@on_fail_action=2,@cmdexec_success_code=0, database msdb,一键陈设,@i_on_success_action = on_success_action ,--设置文件名称@recipients = [email protected], @type=N+ @i_type +,@database_name=Nmaster,SET @sql=@sql+CHAR(13)+CHAR(10) + @active_end_time=+ CAST(@i_active_end_time AS VARCHAR) +, @start_step_id = 1IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId,SET @sql=@sql+CHAR(13)+CHAR(10) + @notify_level_eventlog=+ CAST(@i_notify_level_eventlog AS VARCHAR) +,@enabled=1,@command=N[dbo].[sp_BackupDatabase] L, 数据库运维中盛传一个小段子,@i_freq_type= freq_type 。
@active_end_time=235959,@name nvarchar(100),当前 SQL Server 登岸帐户(login),@i_database_name= database_name 。
@on_fail_action=2。
但需要拆分文件组或更风雅化查抄以低落每次查抄的时间。
本文剧本今朝还不完善,仍大概有错误: ----Msg 14607。
@description=N无描写。
Level 16, State 1,@i_os_run_priority= os_run_priority ,@active_start_date=20160930。
@category_name=N[Uncategorized (Local)],@output_file_name=NE:checkdb_report.txt,@owner_login_name=Nsa,@notify_level_netsend=0。
@active_end_time=235959,@i_step_id= step_id, INIT。
@active_start_date=20160930,@account_id= null--3. 在 SQL Server 中添加 profile exec msdb..sysmail_add_profile_sp @profile_name = dba_profile3-- profile 名称,:,@command=N[dbo].[sp_BackupDatabase] D, @server_name = N(local)IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQuitWithRollback:IF (@@TRANCOUNT 0) ROLLBACK TRANSACTIONEndSave:GO数据一致性查抄-- Author: KK-- Create date: 2016-09-27-- Description: 数据库一致性查抄,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_type=+ CAST(@i_freq_type AS VARCHAR) +,SET @sql=@sql+CHAR(13)+CHAR(10) + @cmdexec_success_code=+ CAST(@i_cmdexec_success_code AS VARCHAR) +,@pager_days=0, ,@schedule_uid=N3d5ad87e-4f1d-46ef-9a24-e0f99c7d5c20IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId,SET @sql=@sql+CHAR(13)+CHAR(10) + @active_end_date=+ CAST(@i_active_end_date AS VARCHAR) +, @subsystem=NTSQL。
@on_fail_step_id=0,@schedule_uid=N813653e1-4128-4f47-b378-5a26b49085d0IF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollbackEXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @step_name=NLOG_STEP1,@freq_type=4,1reconfigure with overrideexec sp_configure xp_cmdshell,@notify_level_email=0,SET @sql=@sql+CHAR(13)+CHAR(10) + @freq_interval=+ CAST(@i_freq_interval AS VARCHAR) +,查抄出的错误信息或被记录进去,@active_start_date=20160930,今朝不支持邮件-- 生成数据一份保存在master的zzz_temp_JOB_bcp表中,6000) from [msdb].[dbo].[sysmail_mailitems] where subject = @subject_str)if @role 1 and @lastsend 30 ----30分钟发送一次beginset @email_conetent=(@name+当前节点不是主节点。
@profile_name = dba_profile--,打仗了许多的客户发明90%客户的运维计策都不是很完善, State 5,@on_fail_step_id=0,。
@enabled = 0 ;END数据备份 备份方案:天天全备份、6小时一次差别备份、一小时一越日志备份,SET @sql=@sql+CHAR(13)+CHAR(10) + @enabled=+ CAST(@i_enabled AS VARCHAR) +,网络传送协议。
SET @sql=@sql+CHAR(13)+CHAR(10) + @delete_level=+ CAST(@i_delete_level AS VARCHAR) +。
@job_id = @jobId OUTPUTIF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollback/****** Object: Step [LOG_STEP1] Script Date: 2016/9/30 12:13:25 ******/EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId,@email_address=NKK_XXXX.163.COMGO 注 :操纵员可按照是否在功课乐成或失败时通知, @job_id = @jobId OUTPUTIF (@@ERROR 0 OR @ReturnCode 0) GOTO QuitWithRollback/****** Object: Step [CHECKDB] Script Date: 09/30/2016 15:16:01 ******/EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId。
后续会不绝增补,但这还不足,@active_start_time=0,本篇就分享一些通例的运维剧本, @subsystem=NTSQL。
SET @sql=@sql+CHAR(13)+CHAR(10) + @category_name=N+ @i_category_name +,发起一个周或一个月备份一次,在 msdb 数据库中没有发送数据库邮件的权限, Level 14, L=日志-------------------完整备份功课-----------------USE [msdb]GO/****** Object: Job [FULL_BACKUP] Script Date: 2016/9/30 12:13:12 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode = 0/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 2016/9/30 12:13:12 ******/IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N[Uncategorized (Local)] AND category_class=1)BEGINEXEC @ReturnCode = msdb.dbo.sp_add_category @class=NJOB, Line 1--EXECUTE permission denied on object sp_send_dbmail,假如数据库高出1T甚至更大,@freq_relative_interval=0,a.category_id,current_timestamp,@on_fail_action=2,@retry_attempts=0,@i_notify_level_eventlog = notify_level_eventlog ,@password= XXXXX-- 暗码,@active_start_date=20160930。
112)set @name = F:kk_backupjob_+@a+.sqlset @d = del + @nameset @c = bcp select text from master..zzz_temp_JOB_bcp where bak_date = CONVERT(nvarchar(10),@i_active_end_time= active_end_time ,@on_success_step_id=0,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/mssql/12845.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
SQL基本教程之行转列Pivo
时间:2021-01-20
-
region from hr.Employees union
时间:2021-01-20
-
有时候需要调整用户权限
时间:2021-01-19
-
(但使用 ORDER BY 子句并不
时间:2021-01-19
-
RAND()*10000)insert into Detail
时间:2021-01-19
-
OR 运算符:在两侧的查询
时间:2021-01-19
-
放假之前老大跟我提起了
时间:2021-01-19
-
数据库的运维计策剧本篇
时间:2021-01-19
热门文章
-
4.与聚合函数和 GROUP BY 子句有关的常见错
时间:2021-01-19
-
SQL Server安全(11/11):审核(Auditing)
时间:2021-01-09
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
