Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So entfernen Sie eine Datendatei aus einer SQL Server-Datenbank (T-SQL)

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.