sql >> Database >  >> RDS >> Sqlserver

Een gegevensbestand verwijderen uit een SQL Server-database (T-SQL)

SQL Server-databases slaan hun gegevens en objecten op in bestanden. Elke database heeft ten minste één gegevensbestand (en een logbestand), maar het is niet beperkt tot slechts één - het kan veel gegevensbestanden bevatten. Als u zich ooit in de situatie bevindt waarin u een gegevensbestand uit een database moet verwijderen, moet u dat bestand eerst leegmaken voordat u het verwijdert.

Maar maak je geen zorgen, als je een bestand leegt, worden de gegevens niet echt verwijderd. Het migreert eenvoudig de gegevens van het bestand naar andere bestanden binnen dezelfde bestandsgroep.

De onderstaande voorbeelden laten zien hoe u een gegevensbestand leegmaakt en vervolgens uit de database verwijdert met Transact-SQL.

Snel voorbeeld

Hier is een snel voorbeeld om u te laten zien hoe u een gegevensbestand leegmaakt en uit de database verwijdert:

-- Empty the file
DBCC SHRINKFILE (Solutions2, EMPTYFILE);  
GO 

-- Remove the file
ALTER DATABASE Solutions  
REMOVE FILE Solutions2;  
GO

Zoals uitgelegd, wordt het bestand hierdoor leeggemaakt en vervolgens volledig uit de database verwijderd. Wanneer u EMPTYFILE gebruikt , dit verplaatst alle gegevens van het bestand naar andere bestanden in dezelfde bestandsgroep. Daarom moet je ervoor zorgen dat dit niet het enige bestand in de bestandsgroep is (anders krijg je een foutmelding). EmptyFile zorgt er ook voor dat er geen nieuwe gegevens aan het bestand worden toegevoegd.

Een langer voorbeeld

Als u in de war bent door het vorige voorbeeld, laten we het proces doorlopen van het maken van een nieuwe database, het toevoegen van een nieuw gegevensbestand, het vervolgens legen en vervolgens verwijderen.

Maak een database en bekijk de gegevensbestandsinformatie

-- 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

Eerst schakelen we over naar de hoofddatabase voordat we een nieuwe database maken met de naam Test . We schakelen dan over naar de nieuwe database en selecteren bepaalde informatie over de databasebestanden uit de sys.database_files systeemcatalogusweergave.

Een nieuw gegevensbestand toevoegen

-- 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

We voegen nu een nieuw gegevensbestand toe met de logische naam Test2 en een fysiek pad van /var/opt/mssql/data/Test2.mdf (merk op dat dit een Linux/Mac-pad is. Als u Windows gebruikt, gebruik dan backslashes in plaats van forwardslashes). Opnieuw vragen we de sys.database_files systeemcatalogusweergave zodat we de details van ons nieuwe bestand kunnen zien.

Leeg het gegevensbestand en verwijder het

Laten we voor dit voorbeeld aannemen dat de database in productie is genomen en dat het gegevensbestand dat we zojuist hebben gemaakt, is geladen met gegevens. Nu willen we dat bestand verwijderen (om welke reden dan ook). Maar voordat we het bestand verwijderen, moeten we het leegmaken (de gegevens migreren naar een ander bestand).

Zo doe je dat:

-- 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

Dit is dus hetzelfde als het eerste voorbeeld op deze pagina, behalve dat onze database een andere naam heeft. En in dit voorbeeld vragen we sys.database_files om te bevestigen dat het bestand inderdaad is verwijderd.


  1. Activiteit en achtergrondservice Toegang tot SQLite-database

  2. Wat u moet weten over databasegestuurde websites

  3. Concat-groepen in SQL Server

  4. Hoe kan ik deze opmerkingen in een MySQL-dump verwijderen?