Jak wymusić upuszczenie bazy danych w SQL Server 2008

68

Próbuję wymusić usunięcie bazy danych, ale po usunięciu bazy danych, gdy próbuję odtworzyć bazę danych, pojawia się błąd

nie można utworzyć pliku C: \ Program Files ..... [nazwa bazy danych] .mdf, ponieważ już istnieje

Oto moje zapytanie, aby wymusić usunięcie bazy danych

Use master;
ALTER database [databasename] set offline with ROLLBACK IMMEDIATE;
DROP database [databasename];

Zrozumiałem, że powyższe zapytanie usuwa bazę danych, ale nie usuwa plików .ldfi .mdf. Jak dokładnie usunąć bazę danych?

Normalne zapytanie

Drop database [databasename] ; //deletes the database completely, including the ldf and mdf's.

Jak wymusić upuszczenie bazy danych, która również usuwa pliki .mdfi .ldf?

srk
źródło

Odpowiedzi:

116

Jest to oczekiwane i udokumentowane zachowanie :

Usunięcie bazy danych powoduje usunięcie bazy danych z instancji SQL Server i plików fizycznych dysków używanych przez bazę danych. Jeśli baza danych lub jeden z jej plików jest odłączony po upuszczeniu, pliki na dysku nie są usuwane. Pliki te można usunąć ręcznie za pomocą Eksploratora Windows. Aby usunąć bazę danych z bieżącego serwera bez usuwania plików z systemu plików, użyj sp_detach_db.

Dlaczego więc najpierw przełączasz bazę danych w tryb offline? Po prostu ustaw go w SINGLE_USERtryb, a następnie upuść zgodnie z dokumentacją w SQL Server Books Online. -

USE master;
ALTER DATABASE [databasename] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [databasename] ;

Uwaga: kopie zapasowe bazy danych nie zostaną usunięte w ramach procesu opisanego powyżej.

marc_s
źródło