Script per Backup di tutti i database SQL


Qui di seguito uno script .sql per effettuare un backup di tutti i database in una cartella del file system dedicata.

-- this turns on advanced options and is needed to configure xp_cmdshell
sp_configure 'show advanced options', '1';
GO
RECONFIGURE;
GO
-- this enables xp_cmdshell
sp_configure 'xp_cmdshell', '1'; 
GO
RECONFIGURE;
GO

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name
 
-- specify database backup directory
SET @path = 'MD MyDisk:\MyDestinationFolderPath\' + CONVERT(VARCHAR(20),GETDATE(),112) +'\'; 

exec xp_cmdshell @path;
 
SET @path = 'MyDisk:\MyDestinationFolderPath\' + CONVERT(VARCHAR(20),GETDATE(),112) +'\'; 

-- specify filename format
-- SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + '_' + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')
 
DECLARE db_cursor CURSOR READ_ONLY FOR  
SELECT name 
FROM master.sys.databases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases
AND state = 0 -- database is online
AND is_in_standby = 0 -- database is not read only for log shipping
 
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   
 
WHILE @@FETCH_STATUS = 0   
BEGIN   
   SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
   BACKUP DATABASE @name TO DISK = @fileName  
   FETCH NEXT FROM db_cursor INTO @name   
   SELECT @name	
END   

CLOSE db_cursor   
DEALLOCATE db_cursor

GO
-- this turns on advanced options and is needed to configure xp_cmdshell
sp_configure 'show advanced options', '1'
GO
RECONFIGURE
GO
-- this disables xp_cmdshell
sp_configure 'xp_cmdshell', '0' 
GO
RECONFIGURE
GO