1. 程式人生 > 其它 >【Vegas原創】SQL Server資料庫備份、差異備份、日誌備份指令碼

【Vegas原創】SQL Server資料庫備份、差異備份、日誌備份指令碼

1,sp指令碼

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabase]    Script Date: 2021/10/22 10:04:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- Parameter1: 備份型別 F=全部, D=差異, L=日誌

ALTER PROCEDURE [dbo].[sp_BackupDatabase]
@backupType CHAR(1)
AS
BEGIN
SET NOCOUNT ON;

declare
@filepath_backup varchar(100) declare @dateTime varchar(30),@del_time_stamp varchar(50) DECLARE @sqlCommand NVARCHAR(1000) DECLARE @sourcePath nvarchar(max) DECLARE @destionationPath nvarchar(max) DECLARE @cmdStr nvarchar(max) ---建立資料庫對應資料夾 EXECUTE master.dbo.xp_create_subdir N'C:\Database_BackUp\Full\
' EXECUTE master.dbo.xp_create_subdir N'C:\Database_BackUp\Difference\' EXECUTE master.dbo.xp_create_subdir N'C:\Database_BackUp\Log_Bak\' IF @backupType = 'F' set @filepath_backup='C:\Database_BackUp\Full\' IF @backupType = 'D' set @filepath_backup='C:\Database_BackUp\Difference\' IF @backupType =
'L' set @filepath_backup='C:\Database_BackUp\Log_Bak\' SET ANSI_WARNINGS OFF SET @dateTime = replace(convert(varchar,current_timestamp, 112)+'_'+convert(varchar,current_timestamp, 108),':','') ----刪除超過14天的備份檔案 DECLARE @delete_time datetime set @delete_time = getdate() -14 EXECUTE master.dbo.xp_delete_file 0,N'C:\Database_BackUp',N'trn',@delete_time,1 EXECUTE master.dbo.xp_delete_file 0,N'C:\Database_BackUp',N'bak',@delete_time,1 SELECT @dateTime = replace(convert(varchar,current_timestamp, 112)+'_'+convert(varchar,current_timestamp, 108),':','') declare db_info cursor for SELECT NAME,recovery_model FROM MASTER.SYS.databases where state = 0 ---只處理online的資料庫 and name in ('OperationSystem') ----填寫需要備份的資料庫 declare @databaseName nvarchar(128) declare @recovery_model int OPEN db_info fetch next from db_info into @databaseName,@recovery_model while @@fetch_status=0 Begin ---recovery_model 1 : FULL 2 : BULK_LOGGED 3:SIMPLE IF @backupType = 'F' begin SET @sqlCommand = 'BACKUP DATABASE '+ @databaseName +' TO DISK = '''+ @filepath_backup + ''+ @databaseName +'_Full_'+@dateTime+'.BAK'' with STATS = 10, INIT, COMPRESSION, CHECKSUM ' set @sourcePath = @filepath_backup + ''+ @databaseName +'_Full_'+@dateTime+'.BAK' end IF @backupType = 'D' and @databaseName not in ('master','msdb','model') begin SET @sqlCommand = 'BACKUP DATABASE '+ @databaseName +' TO DISK = '''+ @filepath_backup + ''+ @databaseName + '_Diff_' + @dateTime + '.BAK '' WITH DIFFERENTIAL, STATS = 10, INIT, COMPRESSION' set @sourcePath = @filepath_backup + ''+ @databaseName +'_Diff_'+@dateTime+'.BAK' end IF @backupType = 'L' and @recovery_model <> 3 and @databaseName not in ('master','msdb','model') begin SET @sqlCommand = 'BACKUP LOG '+ @databaseName +' TO DISK = '''+ @filepath_backup + '' + @databaseName +'_Log_' + @dateTime + '.TRN'' with STATS = 10, INIT, COMPRESSION' set @sourcePath = @filepath_backup + ''+ @databaseName +'_Log_'+@dateTime+'.TRN' end print @sqlCommand EXECUTE sp_executesql @sqlCommand set @destionationPath = REPLACE(@sourcePath,'C:\Database_BackUp','x:') /* exec sp_configure 'show advanced options', 1 --允許配置高階選項 reconfigure --重新配置 exec sp_configure 'xp_cmdshell', 1 --啟用xp_cmdshell reconfigure --重新配置 --配置共享路徑使用者名稱和密碼 exec master..xp_cmdshell 'net use x: \\Server-QC-DB2.zt.com\Database_BackUp P@ssw0rd /user:dbbackuper' --exec sp_configure 'xp_cmdshell', 0 --執行完成後出於安全考慮可以將xp_cmdshell關閉 */ set @cmdStr = 'exec master..xp_cmdshell ''copy '+@sourcePath+' '+@destionationPath+'''' EXEC(@cmdStr) fetch next from db_info into @databaseName,@recovery_model End close db_info deallocate db_info PRINT '-- Backup completed successfully at '+convert(varchar, getdate(), 120) SET ANSI_WARNINGS ON END


2,SQL agent任務指令:

[dbo].[sp_BackupDatabase] 'F'


3,別忘了每週agent任務,跑一下日誌的收縮

USE OperationSystem;

GO 

ALTER DATABASE OperationSystem
SET RECOVERY SIMPLE;  --設定簡單恢復模式

GO

DBCC SHRINKFILE (OperationSystem_log, 1);

GO

ALTER DATABASE OperationSystem
SET RECOVERY FULL;   --恢復為原模式

GO
喜歡請讚賞一下啦^_^