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.