Bazy danych SQL Server przechowują swoje dane i obiekty w plikach. Każda baza danych zawiera co najmniej jeden plik danych (i plik dziennika), ale nie jest ograniczony tylko do jednego — może zawierać wiele plików danych. Jeśli kiedykolwiek znajdziesz się w sytuacji, w której musisz usunąć plik danych z bazy danych, musisz najpierw opróżnić ten plik, zanim go usuniesz.
Ale nie martw się, opróżnienie pliku w rzeczywistości nie usuwa danych. Po prostu migruje dane pliku do innych plików w tej samej grupie plików.
Poniższe przykłady pokazują, jak opróżnić plik danych, a następnie usunąć go z bazy danych za pomocą języka Transact-SQL.
Szybki przykład
Oto krótki przykład pokazujący, jak opróżnić plik danych i usunąć go z bazy danych:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Jak wyjaśniono, to opróżnia plik, a następnie usuwa go całkowicie z bazy danych. Gdy używasz EMPTYFILE
, przenosi wszystkie dane z pliku do innych plików w tej samej grupie plików. Dlatego musisz upewnić się, że nie jest to jedyny plik w grupie plików (w przeciwnym razie pojawi się błąd). EmptyFile zapewnia również, że żadne nowe dane nie zostaną dodane do pliku.
Dłuższy przykład
W przypadku zdezorientowania poprzedniego przykładu, przejdźmy przez proces tworzenia nowej bazy danych, dodawania nowego pliku danych, a następnie opróżniania go, a następnie usuwania.
Utwórz bazę danych i wyświetl informacje o jej pliku danych
-- Switch to the master database USE master; GO -- Create a new database CREATE DATABASE Test; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Najpierw przełączamy się na główną bazę danych przed utworzeniem nowej bazy danych o nazwie Test
. Następnie przełączamy się do nowej bazy danych i wybieramy określone informacje o jej plikach bazy danych z sys.database_files
widok katalogu systemowego.
Dodaj nowy plik danych
-- Add a new data file ALTER DATABASE Test ADD FILE ( NAME = Test2, FILENAME = '/var/opt/mssql/data/Test2.mdf', SIZE = 8MB ); GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
Teraz dodajemy nowy plik danych o logicznej nazwie Test2
i fizyczna ścieżka /var/opt/mssql/data/Test2.mdf
(zauważ, że jest to ścieżka Linux/Mac. Jeśli używasz systemu Windows, użyj ukośników odwrotnych zamiast ukośników). Ponownie pytamy sys.database_files
widok katalogu systemowego, dzięki czemu możemy zobaczyć szczegóły naszego nowego pliku.
Opróżnij plik danych i usuń go
Na potrzeby tego przykładu załóżmy, że baza danych została wprowadzona do produkcji, a utworzony przed chwilą plik danych został załadowany danymi. Teraz chcemy usunąć ten plik (z jakiegokolwiek powodu). Ale zanim usuniemy plik, musimy go opróżnić (przenieść jego dane do innego pliku).
Oto jak to zrobić:
-- Empty the new data file DBCC SHRINKFILE (Test2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Test REMOVE FILE Test2; GO -- View it's data file and log file info USE Test; GO SELECT file_id, name, type_desc, physical_name, size, max_size FROM sys.database_files ; GO
To jest jak pierwszy przykład na tej stronie, z tą różnicą, że nasza baza danych ma inną nazwę. W tym przykładzie pytamy sys.database_files
aby potwierdzić, że plik został rzeczywiście usunięty.