sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan fjerner du en datafil fra en SQL Server-database (T-SQL)

SQL Server-databaser gemmer deres data og objekter i filer. Hver database har mindst én datafil (og en logfil), men den er ikke begrænset til kun én – den kan have mange datafiler. Hvis du nogensinde kommer i den situation, hvor du skal fjerne en datafil fra en database, skal du først tømme filen, før du fjerner den.

Men bare rolig, tømning af en fil sletter faktisk ikke dataene. Det migrerer simpelthen filens data til andre filer inden for samme filgruppe.

Eksemplerne nedenfor viser, hvordan man tømmer en datafil og derefter fjerner den fra databasen ved hjælp af Transact-SQL.

Hurtigt eksempel

Her er et hurtigt eksempel, der viser dig, hvordan du tømmer en datafil og fjerner den fra databasen:

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

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

Så som forklaret tømmer dette filen og fjerner den derefter fuldstændigt fra databasen. Når du bruger EMPTYFILE , dette flytter alle data fra filen til andre filer i samme filgruppe. Derfor skal du sørge for, at dette ikke er den eneste fil i filgruppen (ellers får du en fejl). EmptyFile forsikrer dig også om, at ingen nye data vil blive tilføjet til filen.

Et længere eksempel

Hvis du er forvirret over det forrige eksempel, så lad os gennemgå processen med at oprette en ny database, tilføje en ny datafil, tømme den og derefter fjerne den.

Opret en database og se dens datafiloplysninger

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

Først skifter vi til masterdatabasen, før vi opretter en ny database kaldet Test . Vi skifter derefter til den nye database og vælger visse oplysninger om dens databasefiler fra sys.database_files systemkatalogvisning.

Tilføj en ny datafil

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

Vi tilføjer nu en ny datafil med det logiske navn Test2 og en fysisk sti til /var/opt/mssql/data/Test2.mdf (bemærk, at dette er en Linux/Mac-sti. Hvis du bruger Windows, skal du bruge skråstreger i stedet for fremadgående skråstreger). Igen forespørger vi sys.database_files systemkatalogvisning, så vi kan se detaljerne i vores nye fil.

Tøm datafilen og fjern den

Med henblik på dette eksempel, lad os antage, at databasen er blevet sat i produktion, og den datafil, vi lige har oprettet, er blevet indlæst med data. Nu vil vi fjerne den fil (uanset grund). Men før vi fjerner filen, skal vi tømme den (migrer dens data til en anden fil).

Sådan gør du det:

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

Så dette er ligesom det første eksempel på denne side, bortset fra at vores database har et andet navn. Og i dette eksempel forespørger vi sys.database_files for at bekræfte, at filen faktisk er blevet slettet.


  1. Indsættelse af data i Oracle-database ved hjælp af php

  2. Tilføj et linket server-login i SQL Server (T-SQL-eksempel)

  3. Sådan oprettes tjekbegrænsning på enkelt kolonne i SQL Server - SQL Server / TSQL vejledning del 83

  4. Installer utf8-sortering i PostgreSQL