Hallengren是SQl Server集備份和索引重建和DBCC checkdb一起的超級好用的工具

lusklusklusk發表於2021-02-23

下載路徑


備份的各個引數介紹


DBCC checkdb的各個引數介紹


索引重建或重組的各個引數介紹




步驟一:下載後,根據自己需要修改下面兩點
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 ' WHEN SERVERPROPERTY('IsClustered') = 1 THEN ' 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"

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2758813/,如需轉載,請註明出處,否則將追究法律責任。

相關文章