Muchas veces, a medida que vamos agregando bases de datos a un servidor SQL, se hace cada vez más complicado hacer respaldo (BackUp) de todas las bases de datos. A continuación les presento un Script SQL que permite guardar un respaldo de todas las bases de datos alojadas en el servidor sin incluir las del sistema. El código de dicho script es el siguiente:
--*****************************************************************************************************
-- Declaración de las variables--*****************************************************************************************************
DECLARE @NombreDB VARCHAR(50) -- Nombre de la Base de Datos
DECLARE @Ruta_Base VARCHAR(256) -- Ruta Base de la carpeta de respaldo
DECLARE @Subdirectorio VARCHAR(256) -- carpeta que contiene el respaldo del día con fecha
DECLARE @NombreArchivo VARCHAR(256) -- Nombre del archivo a respaldar
DECLARE @FechaArchivo VARCHAR(20) -- Fecha del archivo
DECLARE @Comando nvarchar(500) -- Almacena el comando
DECLARE @Nombre_dB nvarchar(100) -- Nombre de la base de datos
-- Establece la ruta de la carpeta base donde se van a guardar los respaldos en carpetas clasificados por fecha:
SET @Ruta_Base = 'D:\RESP_DATA\'
-- Crea un Subdirectorio con la fecha y hora actual con formato dd-MM-yyyy_hh_mm:
SET @Subdirectorio = @Ruta_Base + CONVERT(VARCHAR(20),GETDATE(),105) + '_' + Convert(varchar(2), DatePart(hh, GetDate())) + '_' + Convert(varchar(2), DatePart(mi, GetDate())) + '\ '
SET @Comando = 'MD "' + @Subdirectorio + '"'
EXEC master..xp_cmdshell @Comando
-- Busca el nombre de todas las bases de datos, excepto las de sistema:
DECLARE db_cursor CURSOR FOR SELECT Name FROM master.dbo.sysdatabases WHERE Category != 16 AND Name NOT IN ('master','model','msdb','tempdb') ORDER BY Name
-- Crea un cursor para recorrer las bases de datos:
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @Nombre_dB
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRY
-- Hace el respaldo de todas las bases de datos menos las del sistema:
SET @NombreArchivo = @Subdirectorio + @Nombre_dB + '.bak'
BACKUP DATABASE @Nombre_dB TO DISK = @NombreArchivo
END TRY
BEGIN CATCH
END CATCH;
FETCH NEXT FROM db_cursor INTO @Nombre_dB
END
-- Se elimina el cursor:
CLOSE db_cursor
DEALLOCATE db_cursor
--******************************************************************************************************
Para poder usar xp_cmdshell se debe activar primero la opción en el servidor la cual viene desactivada por defecto, con el siguiente script:
--******************************************************************************************************
-- Para permitir que las opciones avanzadas sean cambiadas.
EXEC sp_configure 'show advanced options', 1;
GO
-- Para configurar los valores actuales.
RECONFIGURE;
GO
-- Para activar la característica.
EXEC sp_configure 'xp_cmdshell', 1;
GO
-- Para actualizar con la nueva configuración.
RECONFIGURE;
GO



El mejor hosting gratuito https://www.zz.com.ve/ ofrece: alojamiento gratuito, hasta 100GB de espacio en disco, dominios gratuitos, cuentas de correo, base de datos MySQL y SQLite, banda ancha ilimitada.
ResponderBorrarExcelente!!
ResponderBorrar