Copy the script and create the procedure.
Just execute the procedure:
EXECUTE [USP_BACKUPDATABASES]
Copy the script and create the procedure.
Just execute the procedure:
EXECUTE [USP_BACKUPDATABASES]
CREATE PROCEDURE [dbo].[USP_BACKUPDATABASES] AS SET NOCOUNT ON BEGIN BEGIN TRY DECLARE @backup_path nvarchar(4000); DECLARE @dbname nvarchar(max); --DECLARE @recovery_model varchar(30); DECLARE @sql nvarchar(4000); DECLARE @backupfile nvarchar(4000); DECLARE @BackupDirectory NVARCHAR(4000); DECLARE @SERVERNAME SYSNAME; -- Reading the default backup location from registry. EXEC master..xp_instance_regread @rootkey = 'HKEY_LOCAL_MACHINE', @key = 'Software\Microsoft\MSSQLServer\MSSQLServer', @value_name = 'BackupDirectory', @BackupDirectory = @BackupDirectory OUTPUT ; SET @backup_path = (SELECT @BackupDirectory AS [SQL Server default backup Value]) + '\' --select @backup_path Declare @len INT, @i INT, @Left varchar(max), @right varchar(max) SET @SERVERNAME = (SELECT @@servername); --SELECT @SERVERNAME AS [SERVER NAME]; IF @SERVERNAME like '%\%' BEGIN SET @Left= (select Left(@SERVERNAME, charindex('\', @SERVERNAME) - 1)) --SELECT @Left AS [DEFAULT SERVER NAME] SET @len = (SELECT LEN(@SERVERNAME)) --SELECT @LEN SET @right = (SELECT SUBSTRING(@SERVERNAME,Charindex ('\', @SERVERNAME)+1,@len)) --SELECT @right AS [SQL INSTANCE NAME] END ELSE BEGIN SELECT @left = @SERVERNAME --SELECT @Left AS [DEFAULT SERVER NAME] SELECT @right = 'default' --SELECT @right AS [SQL INSTANCE NAME] END -- Determine if BACKUP COMPESSION is available based on SQL Server Version and Edition DECLARE @CompressYN CHAR(1); DECLARE @verinfoTbl TABLE ( Verinfo sql_variant, SPinfo sql_variant, EditionInfo sql_variant ) INSERT INTO @verinfoTbl (Verinfo, SPinfo, EditionInfo) SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition'); IF ( -- Check for SQL 2014 -- Editions that support backup compression: -- Enterprise, Business Intelligence, Standard ((SELECT CONVERT(VARCHAR(16), Verinfo) FROM @verinfoTbl) LIKE '12.%') AND ( ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Enterprise%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Business%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Developer%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Standard%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Express%') ) ) OR ( -- Check for SQL 2012 -- Editions that support backup compression: -- Enterprise, Business Intelligence, Standard ((SELECT CONVERT(VARCHAR(16), Verinfo) FROM @verinfoTbl) LIKE '11.%') AND ( ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Enterprise%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Business%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Developer%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Standard%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Express%') ) ) OR ( -- Check for SQL 2008 R2 -- Editions that support backup compression: -- DataCenter, Enterprise, Standard ((SELECT CONVERT(VARCHAR(16), Verinfo) FROM @verinfoTbl) LIKE '10.50%') AND ( ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Enterprise%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Business%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Developer%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Standard%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Express%') ) ) OR ( -- Check for SQL 2008 -- Editions that support backup compression: -- Enterprise ((SELECT CONVERT(VARCHAR(16), Verinfo) FROM @verinfoTbl) LIKE '10.00%') AND ( ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Enterprise%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Business%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Developer%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Standard%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Express%') ) ) OR ( -- Check for SQL 2005 -- No SQL Edition supports compression ((SELECT CONVERT(VARCHAR(16), Verinfo) FROM @verinfoTbl) LIKE '9.00%') AND ( ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Enterprise%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Business%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Developer%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Standard%') OR ((SELECT CONVERT(VARCHAR(16), EditionInfo) FROM @verinfoTbl) LIKE 'Express%') ) ) BEGIN SET @CompressYN = 'Y' END ELSE ---- BACKUP COMPRESSION not available BEGIN SET @CompressYN = 'N' END -- Close all the opened Cursors. IF (SELECT Cursor_status('global', 'c')) >= -1 BEGIN IF (SELECT Cursor_status('global', 'c')) > -1 BEGIN CLOSE c END DEALLOCATE c END -- Get the names of all qualifying databases DECLARE c CURSOR FOR SELECT name FROM sys.databases WHERE state_desc = 'ONLINE' --AND is_read_only 1 AND source_database_id is null /* Non-NULL = ID of the source database of this database snapshot.*/AND name NOT IN ('tempdb') ORDER BY name; OPEN c FETCH NEXT FROM c INTO @dbname -- Backup each database WHILE (@@FETCH_STATUS -1) BEGIN -- Create the backup output file name SET @backupfile = -- Backup path @backup_path -- Add the db name + @dbname + '_' + '[' + @left +']' + '_' + '[' + @right +']' + '_' +'_' -- Add the date and time to the file name + CONVERT (varchar, GETDATE(), 112) + '_' -- date + REPLACE (LEFT (CONVERT (varchar, GETDATE(), 108), 5), ':', '_') -- time -- SELECT @backupfile BEGIN IF @CompressYN = 'Y' BEGIN SET @sql = 'BACKUP DATABASE' + quotename(@dbname) + ' TO DISK = ''' + @backupfile + '.BAK'' WITH INIT, COMPRESSION;' -- select @sql --PRINT @sql EXEC (@sql) END ELSE BEGIN SET @sql = 'BACKUP DATABASE [' + @dbname + '] TO DISK = ''' + @backupfile + '.BAK'' WITH INIT;' select @sql --PRINT @sql EXEC (@sql) END END -- Move on to the next database FETCH NEXT FROM c INTO @dbname END CLOSE c DEALLOCATE c END TRY BEGIN catch DECLARE @ErrorNumber INT; DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; DECLARE @ErrorLine INT; DECLARE @ErrorProcedure NVARCHAR(4000); DECLARE @ErrorMessage NVARCHAR(4000); SELECT @ErrorNumber = Error_number(), @ErrorSeverity = Error_severity(), @ErrorState = Error_state(), @ErrorLine = Error_line(), @ErrorProcedure = Error_procedure(); SELECT @ErrorMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' + 'Message: ' + Error_message(); SELECT @ErrorMessage AS [Error_Message]; SELECT @ErrorProcedure AS [Error_Procedure]; PRINT 'Error ' + CONVERT(VARCHAR(50), Error_number()) + ', Severity ' + CONVERT(VARCHAR(5), Error_severity()) + ', State ' + CONVERT(VARCHAR(5), Error_state()) + ', Procedure ' + Isnull(Error_procedure(), '-') + ', Line ' + CONVERT(VARCHAR(5), Error_line()); PRINT Error_message(); END catch SET NOCOUNT OFF END