Удаление всех баз данных на SQL Server

Поделиться

Быстрый ответ

Для оперативного удаления всех несистемных баз данных можно использовать следующую T-SQL команду. Она выполняет удаление данных быстро и эффективно.

SQLСкопировать код

/* Опасно: вы в зоне удаления баз данных! */
DECLARE @sql NVARCHAR(max) = ''
SELECT @sql += 'DROP DATABASE ' + QUOTENAME(name) + '; /* Прощай, данные */'
FROM sys.databases
WHERE database_id > 4 /* Оставляем системные базы данных в покое, они ни при чем */
EXEC sp_executesql @sql

Скрипт будет динамически формировать и выполнять инструкции DROP DATABASE, исключая системные базы данных по их database_id.

Не забывайте: перед удалением обязательно убедитесь, что у вас есть соответствующие полномочия и созданы резервные копии важных данных. Считайте это последним испытанием перед Y2K!

Предупрежден – значит вооружен

Перед началом массового удаления готовьтесь как к обезвреживанию бомбы:

  • Будьте готовы ко всему: создайте резервные копии всех баз данных, чтобы избежать "Титанического" провала.
  • Сортируйте важное: убедитесь, что не удалите случайно те базы, которые нужны.
  • Предупредите пользователей: все должны быть в курсе ваших действий.
  • Выберите подходящее время: планируйте работу на периоды сниженной активности.

Сокровища среди хлама

Не забудьте, что системные базы данных: mastermodelmsdb и tempdb должны остаться неповреждены. Ведь они являются важной частью SQL Server и должны быть исключены из процесса удаления, как трудолюбивые хомяки, поддерживающие работу сервера.

GUI метод – Средство управления SQL Server (SSMS)

Признаватели визуального подхода могут удалить базы данных через SSMS следующим образом:

  1. Подключитесь к необходимому экземпляру Database Engine.
  2. В Обозревателе объектов разверните узел Базы данных.
  3. Выберите нужные БД, удерживая клавиши SHIFT или CTRL.
  4. Кликните правой кнопкой мыши и выберите Удалить — так просто!
  5. В открывшемся окне активируйте опции Закрыть существующие соединения и Продолжить после ошибки.
  6. Нажмите OK и все! Ваши базы данных будут удалены.

Изюминка T-SQL (Проверки безопасности)

Сценарий T-SQL с добавлением нескольких проверок безопасности обеспечит надежное удаление баз данных:

  1. Обеспечьте безопасность, используя функцию DB_ID(). Это как проверить, действительно ли вы – это вы.
  2. Завершите все активные соединения, чтобы избежать неприятных сюрпризов.
  3. Учтите совместимость со старыми версиями SQL Server, включая SQL Server 2005.

SQLСкопировать код

/* Готовимся к действию! */
DECLARE @DbName NVARCHAR(255)
DECLARE db_cursor CURSOR FOR 
SELECT name FROM sys.databases 
WHERE database_id > 4 AND state_desc = 'ONLINE' /* Базы данных онлайн и готовы к удалению... */

OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @DbName  

WHILE @@FETCH_STATUS = 0  
BEGIN  
    EXEC ('ALTER DATABASE ' + @DbName + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE /* Переходим в однопользовательский режим */')
    EXEC ('DROP DATABASE ' + @DbName /* И удаляем! */)
    FETCH NEXT FROM db_cursor INTO @DbName  
END 

CLOSE db_cursor  /* Закрываем курсор */
DEALLOCATE db_cursor  /* Освобождаем ресурсы */

Альтернативы для командной строки

Способ sqlcmd

С помощью sqlcmd.exe вы можете выполнить целый ряд команд одним действием:

shellСкопировать код

/* Работа с командной строкой может быть интересной */
sqlcmd -S YourServerName -E -Q "EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'') BEGIN DROP DATABASE [?] END'"

Стратегия PowerShell

Для тех, кто предпочитает PowerShell или работает с SQL Server 2005, подойдет этот скрипт:

powershellСкопировать код

/* Настоящая мощь PowerShell */
$server = 'YourServerInstanceName'
$databases = Invoke-Sqlcmd -ServerInstance $server -Query "SELECT name FROM sys.databases WHERE database_id > 4"
foreach ($db in $databases) {
    Invoke-Sqlcmd -ServerInstance $server -Query "DROP DATABASE $($db.name) /* Еще одна база данных "ушла" */"
}

Чек-лист для профессионалов

  1. До удаления перепроверьте список баз данных.
  2. После выполненной операции убедитесь в тщательности собственной работы.
  3. Обновите пути к скриптам ($sqlCmdPath) для корректного выполнения в PowerShell.

ВАЖНО: Перед удалением обязательно создайте резервные копии. Это ваша магическая защита от катастроф! 💾⚠️