下载路径
https://ola.hallengren.com/downloads.html
备份的各个参数介绍
https://ola.hallengren.com/sql-server-backup.html
DBCC checkdb的各个参数介绍
https://ola.hallengren.com/sql-server-integrity-check.html
索引重建或重组的各个参数介绍
https://ola.hallengren.com/sql-server-index-and-statistics-maintenance.html
步骤一:下载后,根据自己需要修改下面两点
1、它的一些工具脚本默认是放在master数据库下,如果想放入其他数据库下,只需要把下面代码中的master修改为其他数据库就行
USE [master] -- Specify the database in which the objects will be created
2、如果实例名@@ServerName和服务器SERVERPROPERTY(‘machinename’)不一致,则注释掉如下代码
IF @@SERVERNAME <> CAST(SERVERPROPERTY('ServerName') AS nvarchar(max)) AND SERVERPROPERTY('IsHadrEnabled') = 1
BEGIN
INSERT INTO @Errors ([Message], Severity, [State])
SELECT 'The @@SERVERNAME does not match SERVERPROPERTY(''ServerName''). See ' + CASE WHEN SERVERPROPERTY('IsClustered') = 0 THEN 'https://docs.microsoft.com/en-us/sql/database-engine/install-windows/rename-a-computer-that-hosts-a-stand-alone-instance-of-sql-server' WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'https://docs.microsoft.com/en-us/sql/sql-server/failover-clusters/install/rename-a-sql-server-failover-cluster-instance' END + '.', 16, 1
END
步骤二:下载后的脚本修改好后,就可以直接执行该脚本,执行后,会生成如下7个job,4个备份job,2个DBCC CHECKDB的job,1个index rebuild\reorganize的job
DatabaseBackup - SYSTEM_DATABASES - FULL
DatabaseBackup - USER_DATABASES - DIFF
DatabaseBackup - USER_DATABASES - FULL
DatabaseBackup - USER_DATABASES - LOG
DatabaseIntegrityCheck - SYSTEM_DATABASES
DatabaseIntegrityCheck - USER_DATABASES
IndexOptimize - USER_DATABASES
步骤三:直接修改job的步骤信息和给job添加schedule调度计划就行
优点
1、备份的时候,可供选择的选项很多,非常方便,比如备份后是否执行Verify操作,备份是否Compress,是否启用mirror目录,备份超过多长时间删除等等
EXECUTE [dbo].[DatabaseBackup]
@Databases = 'USER_DATABASES',
@Directory = '\\backup1\DBPROD2',
@BackupType = 'FULL',
@Verify = 'Y',
@CleanupTime = 360,
@CheckSum = 'Y',
@LogToTable = 'Y',
@MAXTRANSFERSIZE = 66666,
@Compress = 'Y',
@Updateability = 'READ_WRITE',
@MirrorDirectory = '\\backup2\DBPROD2',
@MirrorCleanupTime= 480
2、就算job配置好了,批量修改或添加参数也很方便,只要登录服务器执行如下即可
use msdb
exec sp_update_jobstep @job_name = N'IndexOptimize - USER_DATABASES',
@step_id = 1,
@command = N'EXECUTE [dbo].[IndexOptimize] @Databases = ''USER_DATABASES'', @LogToTable = ''Y'', @Timelimit = 18000'
exec sp_update_jobstep @job_name = N'DatabaseIntegrityCheck - USER_DATABASES',
@step_id = 1,
@command = N'EXECUTE [dbo].[DatabaseIntegrityCheck] @Databases = ''USER_DATABASES'', @LogToTable = ''Y'', @Timelimit = 18000'
3、遇到sqlserver express版本,没有sqlserver agent服务导致没有job的情况下,也可以使用bat批处理脚本调用sqlcmd操作系统命令去调用hallengren的存储过程,当然-Q后面的必须用""双引号,参数的值如果为字符串,必须要用单引号包含起来,每个参数之间不能换行,这点和TSQL不一样
sqlcmd -E -d DBA -Q "EXEC DatabaseBackup @Databases = 'SYSTEM_DATABASES',@Directory = '\\sanbackup9',@BackupType = 'FULL',@Verify = 'Y',@CleanupTime = 360,@CheckSum = 'Y',@LogToTable = 'Y',@MAXTRANSFERSIZE = 66666"