SQL Server-Datenbanken speichern ihre Daten und Objekte in Dateien. Jede Datenbank hat mindestens eine Datendatei (und eine Protokolldatei), ist aber nicht auf nur eine beschränkt – sie kann viele Datendateien enthalten. Wenn Sie sich jemals in der Situation befinden, dass Sie eine Datendatei aus einer Datenbank entfernen müssen, müssen Sie diese Datei zuerst leeren, bevor Sie sie entfernen.
Aber keine Sorge, das Leeren einer Datei löscht die Daten nicht wirklich. Es migriert einfach die Daten der Datei in andere Dateien innerhalb derselben Dateigruppe.
Die folgenden Beispiele zeigen, wie eine Datendatei geleert und dann mit Transact-SQL aus der Datenbank entfernt wird.
Schnelles Beispiel
Hier ist ein kurzes Beispiel, das Ihnen zeigt, wie Sie eine Datendatei leeren und aus der Datenbank entfernen:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Wie bereits erläutert, wird die Datei dadurch geleert und dann vollständig aus der Datenbank entfernt. Wenn Sie EMPTYFILE
verwenden , verschiebt dies alle Daten aus der Datei in andere Dateien in derselben Dateigruppe. Daher müssen Sie sicherstellen, dass dies nicht die einzige Datei in der Dateigruppe ist (andernfalls erhalten Sie eine Fehlermeldung). EmptyFile versichert Ihnen auch, dass der Datei keine neuen Daten hinzugefügt werden.
Ein längeres Beispiel
Falls Sie das vorherige Beispiel verwirrt, lassen Sie uns den Prozess des Erstellens einer neuen Datenbank, des Hinzufügens einer neuen Datendatei, des anschließenden Leerens und anschließenden Entfernens durchgehen.
Erstellen Sie eine Datenbank und zeigen Sie ihre Datendateiinformationen an
-- 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
Zuerst wechseln wir zur Master-Datenbank, bevor wir eine neue Datenbank namens Test
erstellen . Wir wechseln dann zur neuen Datenbank und wählen bestimmte Informationen über ihre Datenbankdateien aus den sys.database_files
aus Systemkatalogansicht.
Neue Datendatei hinzufügen
-- 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
Wir fügen jetzt eine neue Datendatei mit dem logischen Namen Test2
hinzu und einen physischen Pfad von /var/opt/mssql/data/Test2.mdf
(Beachten Sie, dass dies ein Linux/Mac-Pfad ist. Wenn Sie Windows verwenden, verwenden Sie umgekehrte Schrägstriche anstelle von Schrägstrichen). Wieder fragen wir die sys.database_files
ab Systemkatalogansicht, damit wir die Details unserer neuen Datei sehen können.
Datendatei leeren und entfernen
Nehmen wir für dieses Beispiel an, dass die Datenbank in Produktion gegangen ist und die gerade erstellte Datendatei mit Daten geladen wurde. Jetzt wollen wir diese Datei entfernen (aus welchem Grund auch immer). Aber bevor wir die Datei entfernen, müssen wir sie leeren (ihre Daten in eine andere Datei migrieren).
So geht's:
-- 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
Das ist also genau wie das erste Beispiel auf dieser Seite, außer dass unsere Datenbank einen anderen Namen hat. Und in diesem Beispiel fragen wir sys.database_files
ab um zu bestätigen, dass die Datei tatsächlich gelöscht wurde.