T-SQL: Script para hacer copia de seguridad todas las bases de datos en SQL Server

·3 min de lectura·

SQL Server

Muchas veces las cosas que parecen complicadas son más fáciles de lo que se cree y esta es una de las ventajas de usar T-SQL para que se encargue de hacer las tareas repetitivas. Una de estas tareas, por ejemplo, puede ser el hacer copias de seguridad de todas las bases de datos en el servidor. A lo mejor si tienes pocas bases de datos es fácil controlarlo, pero evidentemente existen escenarios donde hay más cientos de bases de datos en la misma instancia de SQL Server. Para esto se podría usar SQL Server Management Studio o usar los planes de mantenimiento, pero usar T-SQL es una práctica (en mi caso al menos) mucho más simple y rápida.

Al usar T-SQL se pueden generar loa comandos de Backup en un cursor para luego sacar una copia de todas las bases de datos una por una mediante un bucle. Este es un proceso muy sencillo y sólo necesita unos cuantos comandos para hacer esto.

A continuación muestro el script que permite hacer una copia de seguridad de cada Base de Datos en la instancia de SQL Server.

Importante:  Se tendrá que cambiar el valor del parámetro @path con la ruta deseada.

-- El nombre del fichero tendrá este Formato DB\_YYYYDDMM.BAK 

DECLARE @name VARCHAR(50) -- Nombre de la Base de Datos
DECLARE @path VARCHAR(256) -- Ruta para las copias de seguridad
DECLARE @fileName VARCHAR(256) -- Nombre del Fichero
DECLARE @fileDate VARCHAR(20) -- Usado para el nombre del fichero

-- Ruta para las copias de seguridad
SET @path = 'd:\\BackupSQL\\' -- Formato del nombre del fichero
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) -- excluir estas bases datos
DECLARE db\_cursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name NOT IN ('master','model','msdb','tempdb')

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
END

CLOSE db\_cursor
DEALLOCATE db\_cursor

Notas adicionales:

En este script se omiten las bases de datos del sistema, pero podrían también incluirse. También es posible convertir esto en un procedimiento almacenado y pasarle como parámetro el nombre de la base de datos de la cual se quiere una copia o pasarle NULL si queremos la copia de seguridad de todas las bases de datos. Sea la forma en la que lo uses,  este script te da un punto de partida para obtener una copia de todas tus bases de datos. Además es posible pasar por alto cualquier base de datos que no se quiera incluir en la copia, agregando su nombre en la sección NOT IN.

Si quieres más trucos de este tipo te invito a echarle un vistazo a este libro de SQL Server 2014 en Español

SQL Server 2014 | Amazon Kindle

Comentarios (0)

Sé el primero en comentar.

T-SQL: Re-Indexar todas las tablas de una Base de Datos

·1 min de lectura

El artículo explica cómo re‑indexar todas las tablas de una base de datos SQL Server cuando no existe un comando único para ello. Se presenta un script TSQL que recorre el catálogo de datos, obtiene los nombres de todas las tablas base y ejecuta DBCC DBREINDEX para cada una, evitando mensajes de información. El cursor se cierra y libera al finalizar. El autor sugiere que el código sea útil y menciona un libro de SQL Server 2014 en español como recurso adicional.

Instalando SQL Server en Linux

·3 min de lectura

Microsoft lanzó una versión de SQL Server para Linux, lo que permite a los administradores instalar, usar y mantener el motor en sistemas como Red Hat Enterprise Linux 7, CentOS 7 y Ubuntu 16.04 64 bits. Se requiere al menos 4 GB de RAM. El proceso en Ubuntu implica agregar la clave GPG, añadir el repositorio, actualizar paquetes, instalar dependencias y ejecutar el script de configuración, aceptando los términos de licencia. Una vez instalado, se puede conectar con la línea de comandos, crear bases de datos y usar los mismos comandos que en Windows.

T-SQL: Listar todas las tablas de una base de datos con sus respectivos tamaños

·2 min de lectura

El artículo explica cómo obtener el tamaño de cada tabla en una base de datos SQL Server. Se utiliza una consulta sobre la tabla sysindexes, filtrando solo los índices relevantes (0, 1, 255) y excluyendo objetos no tabulares. La consulta convierte y suma los campos rows, reserved, dpages, used y reserved‑used, multiplicándolos por 8 para obtener bytes. Los resultados se formatean como números legibles y se ordenan descendente por número de registros. Se muestra el código completo y se sugiere consultar un libro de SQL Server para más trucos.