Войти

Показать полную графическую версию : [решено] Удаление баз кроме ...


Butunin Klim
01-04-2009, 11:41
Не могу написать скрипт который бы удалял все базы кроме 3.
У меня есть программа которая создает базы даных за неделю их получается около 2000...
Приходится вычищать все это руками.
При этом есть 2 базы который 100% необходимы для работы + естественно служебные.
Как написать все это или сделать через SQl2000 не приложу ума

Delirium
02-04-2009, 01:16
У меня есть программа которая создает базы даных за неделю »
Имеется в виду удаление прямо из SQL сервера? ИЛи бекапов? А имена у баз все время разные или одинаковые?
это (http://www.intuit.ru/department/database/sqlserver2000/9/5.html) не поможет?

Butunin Klim
02-04-2009, 17:20
ну да только есть у меня базы постоянно создаються название поднаковаое меняется переменная
echo_db_1 [..n]
Из всего этого N нужно оставить 10 баз с определенными номерами ... вот если бы можно было переменную какую нибудь включить

Delirium
03-04-2009, 01:46
ну да только есть у меня базы постоянно создаються название поднаковаое меняется переменная »
Ниче не понял с этого предложения.
Давай так: идем в ICQ(в профиле), посмотрим, может мне проще будет написать программку для таких целей, чем мудрить со скриптом.

Delirium
06-04-2009, 04:48
После попытки написать программу для удаления был рожден SQL скрипт, который все делает сам:

DECLARE @name VARCHAR(128)
DECLARE @SQL VARCHAR(254)
SELECT @name = (SELECT top 1 [name] FROM master.dbo.sysdatabases WHERE [name] like N'echo_db_%' and [name] <> N'echo_db_2008' and [name] <> N'echo_db_2009')
WHILE @name is not null
BEGIN

SELECT @SQL = 'DROP DATABASE [' + RTRIM(@name) +']'
EXEC (@SQL)

PRINT 'Dropped Databases: ' + @name

SELECT @name = (SELECT top 1 name FROM master.dbo.sysdatabases WHERE name like N'echo_db_%' and [name] <> N'echo_db_2008' and [name] <> N'echo_db_2009')

END
GO

Смысл прост - выбирается база, не равная echo_db_2008 или echo_db_2009, и удаляется полностью, т.е. стирается с винта. Затем из списка всех баз опять выбирается следующая неудаленная и удаляется.

в PRINT 'Dropped Databases: ' + @name
в итоге выводится вот что:

Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_2_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_2.mdf'.
Dropped Databases: echo_db_2
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_3_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_3.mdf'.
Dropped Databases: echo_db_3
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_4_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_4.mdf'.
Dropped Databases: echo_db_4
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_5_log.LDF'.
Deleting database file 'C:\Program Files\Microsoft SQL Server\MSSQL\data\echo_db_5.mdf'.
Dropped Databases: echo_db_5

Butunin Klim
23-04-2009, 10:01
Спасибо! Супер!




© OSzone.net 2001-2012