Last Updated on 22 agosto, 2017 by Pablo Ariel Di Loreto
En algunas ocasiones necesitamos borrar TODAS las bases de datos de una instancia de SQL Server, ya sea porque estamos en un laboratorio o porque necesitamos cambiar la Collation de la Instancia y no podemos hacerlo si tenemos bases de datos.
Este script permite generar una salida de texto que tendrá, por cada base de datos, dos líneas de scripts que nos permitirá eliminarlas en forma masiva.
Esta publicación es de utilidad tanto para IT Pros como para Devs, dado que su uso es simple y sencillo. ¡Vamos a conocerlo más en detalle!
Tabla de Contenidos
Introducción
Objetivo
Esta publicación tiene como objetivo demostrar a los Administradores de IT y Base de Datos cómo realizar una eliminación de todas las bases de datos de una instancia de Microsoft SQL Server a través de un script dinámico que identifique todas las bases de datos presentes en el servidor y las borre.
Audiencia
Este documento está dirigido a Consultores, Profesionales IT y personas que desarrollan tareas de Consultoría, Administración y Soporte o que simplemente están interesados en leer e investigar sobre la tecnología alcanzada por esta publicación.
Comentarios y Corrección de Errores
Hemos realizado nuestro mejor esfuerzo para no cometer errores, pero al fin y al cabo somos seres humanos. Si deseás reportar algún error o darnos feedback de qué te pareció esta publicación, por favor no dejes de comunicarte con nosotros a través de correo electrónico a la siguiente dirección: info@tectimes.net.
Alcance Técnico
Entender cuál es el alcance de la publicación nos ayuda a tener una expectativa real de lo que encontraremos en la misma, de modo tal que quién lo lee no espere ni más ni menos de lo que encontrará. Vamos a describir el objetivo técnico, tecnologías alcanzadas, escenario de trabajo y plan de trabajo en alto nivel.
Objetivo Técnico
El objetivo técnico de este tutorial es demostrar en forma práctica cómo eliminar todas las bases de datos de una instancia de Microsoft SQL Server 2014 a través de un script dinámico que identifique todas las bases de datos presentes en el servidor y las borre. Este script dinámico deberá tomar cada base de datos con acceso «exlusivo» y luego borrarla. Una vez borradas, podremos (por ejemplo) cambiar la Intercalación (Collation) de la instancia.
Tecnologías Alcanzadas
Las tecnologías alcanzadas por esta publicación son las siguientes:
- SQL Server 2005 y superior.
- Lenguaje SQL.
Escenario de Trabajo
El escenario de trabajo que da marco a esta publicación es el siguiente:
- SQL Server 2014 instalado en una instancia llamada «MSSQLSERVER».
- SQL Management Studio.
Plan de Trabajo
El plan de trabajo a desarrollar en esta publicación es el siguiente:
- Descripció y Análisis de la situación incial.
- Preparación del Script de Borrado de base de datos.
- Ejecución del Script de Borrado de base de datos.
Desarrollo
Vamos a iniciar los pasos necesarios para borrar dinámicamente bases de datos (todas) de una instancia de SQL Server 2014 (si bien puede aplicarse desde SQL Server 2005). ¡Manos a la obra!
Descripción de Situación
La situación inicial es una instancia de SQL Server que tiene una Intercalación (Collation) seleccionada que es errónea para el software que estamos instando. Por este motivo, queremos cambiar la Intercalación (Collation) sin reinstalar la instancia del servidor.
Por este motivo vamos a identificar las bases de datos presentes, eliminarlas de una manera automática, y luego proceder a cambiar la Collation. Las bases que hoy tenemos en esta instancia son las siguientes:
Vamos a generar el procedimiento necesario para hacerlo ágilmente.
Preparación del Script de Borrado
Lo primero que debemos hacer es preparar el script. Dado que no queremos tipear a mano cada base de datos y ejecutar el comando para eliminarlas, vamos a utilizar el Script Panel de SQL Server para que nos genere dinámicamente el comando de borrado para cada base:
Vamos a ejecutar el siguiente script de SQL Server desde el Panel de Scripts:
EXEC sp_MSforeachdb ' IF DB_ID(''?'') > 4 BEGIN PRINT ('' ALTER DATABASE [?] SET SINGLE_USER WITH ROLLBACK IMMEDIATE DROP DATABASE [?]'') END '
Esto tendrá el siguiente resultado:
El texto que tenemos en la salida del script es el que vamos a reutilizar para poder eliminar TODAS las bases de datos de la instancia.
Ejecución del Script de Borrado
Copiamos y pegamos el texto resultante, y pegamos el mismo en otro panel de script. Nótese que cada línea contiene las siguientes partes:
- ALTER DATABASE [nombre de base de datos] SET SINGLE_USER WITH ROLLBACK INMEDIATE: este segmento pone la base de datos en modo «Single User» para evitar que otro usuario o proceso lo bloquee.
- -DROP DATABASE [nombre de base de datos]: este segmento elimina la base de datos.
El script automático que generamos nos permite que por cada base de datos se generen estos dos comandos, por lo cual lo único que tenemos que hacer es ejecutarlo y aguardar el resultado:
Una vez ejecutado el script el resultado se debería ver reflejado en el panel de resultados:
Luego de actualizar el estado de base de datos, notamos que ya no hay base de datos existentes en la instancia:
¡Trabajo terminado! Ya podemos cambiar la Intercalación (Collation) de la instancia en la que estamos trabajando. Pero esta tarea será para otra publicación. ¡Nos leemos!
Conclusiones
Hemos demostrado cómo podemos generar dinámicamente un script en SQL Server y utilizarlo para poder borrar todas las bases de datos presentes en una instancia de Microsoft SQL Server.
Este script es muy útil, tanto para Administradores de IT como para Administradores de Bases de Datos, para poder ágilmente despejar y dejar limpia una Instancia del Motor en vez de eliminarla y reinstalarla.
Esperamos que el script les haya resultado de interés, dejamos todos los links al mismo (gallería de Microsoft) en las «Referencias y Links» y estamos en contacto a través de los comentarios. ¡Saludos!
Referencias y Links
- Delete a Database: https://msdn.microsoft.com/en-us/library/ms177419.aspx
- DROP DATABASE (Transact-SQL): https://msdn.microsoft.com/en-us/library/ms178613.aspx
- SQL Server | Eliminar todas las Bases de Datos de una Instancia: https://gallery.technet.microsoft.com/SQL-Server-Eliminar-todas-86e47822
Acerca del Autor
- [Evento] Microsoft Azure | Tendencias Digitales 2019 – 26/03/2019 - 30 marzo, 2019
- [Evento] Microsoft Azure | Tendencias Digitales 2019 – 06/02/2019 - 12 febrero, 2019
- [Evento] Microsoft Azure | Modernización de Apps con la Nube de Azure – 20/12/2018 - 22 diciembre, 2018