1. 程式人生 > >SQL Server 批量主分割槽備份(One Job)

SQL Server 批量主分割槽備份(One Job)

--批量備份資料庫
DECLARE @DBName VARCHAR(100)
DECLARE @CurrentTime VARCHAR(50)
DECLARE @FileName VARCHAR(200)
DECLARE @WithType CHAR(20)
DECLARE @Backup_Date VARCHAR(50)
DECLARE @Backup_Time VARCHAR(50)
DECLARE @Backup_Duration VARCHAR(50)
DECLARE @Backup_Start DATETIME
DECLARE @Backup_End DATETIME
DECLARE
@BackupType CHAR(4) DECLARE @SQL VARCHAR(MAX) --防止作業遺漏備份 INSERT INTO [msdb].[dbo].[JobLog]([DB_Name],[Backup_Date],[Backup_Time],[Backup_Duration],[Backup_Type]) SELECT name,0,0,0,NULL FROM sys.databases WHERE name LIKE '%Opinion%' AND STATE =0 AND name NOT IN (SELECT DISTINCT [DB_Name] FROM [msdb
].[dbo].[JobLog]) ORDER BY name DECLARE CurDBName CURSOR FOR SELECT name FROM sys.databases WHERE name LIKE '%Opinion%' AND STATE =0 ORDER BY name OPEN CurDBName FETCH NEXT FROM CurDBName INTO @DBName WHILE @@FETCH_STATUS = 0 BEGIN --Execute Backup --捕獲異常
BEGIN TRY PRINT @DBName SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','') IF(DATEPART(DW, GETDATE()) = 2)--星期一 BEGIN SET @FileName = 'E:\DBBackup\'+@DBName+'\'+@DBName+'_Primary_Full_' + @CurrentTime+'.bak' SET @WithType = ' FORMAT' SET @BackupType = 'Full' END ELSE BEGIN SET @FileName = 'E:\DBBackup\'+@DBName+'\'+@DBName+'_Primary_Diff_' + @CurrentTime+'.bak' SET @WithType = ' DIFFERENTIAL,FORMAT' SET @BackupType = 'Diff' END SET @Backup_Start = GETDATE() SET @SQL = ' --1設定完整模式 ALTER DATABASE ['+@DBName+'] SET RECOVERY FULL WITH NO_WAIT; --2備份主分割槽 BACKUP DATABASE ['+@DBName+'] FILEGROUP=''PRIMARY'' TO DISK='''+@FileName+''' WITH '+@WithType+'; --3設定簡單模式 ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH NO_WAIT; ' EXEC(@SQL) SET @Backup_End = GETDATE() SET @Backup_Date = CONVERT(VARCHAR, GETDATE(),112) SET @Backup_Time = REPLACE(CONVERT(VARCHAR, GETDATE(),24),':','') SET @Backup_Duration = CONVERT(VARCHAR,DATEDIFF(ss,@Backup_Start,@Backup_End)) PRINT @Backup_Date +@Backup_Time +@Backup_Duration SET @SQL = ' INSERT INTO [msdb].[dbo].[JobLog]([DB_Name],[Backup_Date],[Backup_Time],[Backup_Duration],[Backup_Type]) VALUES('''+@DBName+''','+@Backup_Date+','+@Backup_Time+','+@Backup_Duration+','''+@BackupType+'''); ' EXEC(@SQL) END TRY BEGIN CATCH INSERT INTO [dbo].[ErrorLog]([DB_Name],[ErrorMessage]) VALUES(@DBName,ERROR_MESSAGE()) --ROLLBACK TRANSACTION END CATCH --Get Next DataBase FETCH NEXT FROM CurDBName INTO @DBName END CLOSE CurDBName DEALLOCATE CurDBName