sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo eliminar un archivo de datos de una base de datos de SQL Server (T-SQL)

Las bases de datos de SQL Server almacenan sus datos y objetos en archivos. Cada base de datos tiene al menos un archivo de datos (y un archivo de registro), pero no está restringida a uno solo:podría tener muchos archivos de datos. Si alguna vez se encuentra en la situación en la que necesita eliminar un archivo de datos de una base de datos, primero deberá vaciar ese archivo antes de eliminarlo.

Pero no se preocupe, al vaciar un archivo en realidad no se eliminan los datos. Simplemente migra los datos del archivo a otros archivos dentro del mismo grupo de archivos.

Los ejemplos a continuación muestran cómo vaciar un archivo de datos y luego eliminarlo de la base de datos mediante Transact-SQL.

Ejemplo rápido

Aquí hay un ejemplo rápido para mostrarle cómo vaciar un archivo de datos y eliminarlo de la base de datos:

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

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

Entonces, como se explicó, esto vacía el archivo y luego lo elimina por completo de la base de datos. Cuando usas EMPTYFILE , esto mueve todos los datos del archivo a otros archivos en el mismo grupo de archivos. Por lo tanto, deberá asegurarse de que este no sea el único archivo en el grupo de archivos (de lo contrario, obtendrá un error). EmptyFile también le asegura que no se agregarán nuevos datos al archivo.

Un ejemplo más largo

En caso de que esté confundido con el ejemplo anterior, repasemos el proceso de crear una nueva base de datos, agregar un nuevo archivo de datos, luego vaciarlo y luego eliminarlo.

Cree una base de datos y vea su información de archivo de datos

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

Primero cambiamos a la base de datos maestra antes de crear una nueva base de datos llamada Test . Luego cambiamos a la nueva base de datos y seleccionamos cierta información sobre sus archivos de base de datos de sys.database_files vista del catálogo del sistema.

Agregar un nuevo archivo de datos

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

Ahora agregamos un nuevo archivo de datos con un nombre lógico de Test2 y una ruta física de /var/opt/mssql/data/Test2.mdf (Tenga en cuenta que esta es una ruta de Linux/Mac. Si usa Windows, use barras diagonales inversas en lugar de barras diagonales). Nuevamente consultamos el sys.database_files vista del catálogo del sistema para que podamos ver los detalles de nuestro nuevo archivo.

Vacíe el archivo de datos y elimínelo

Para los fines de este ejemplo, supongamos que la base de datos se ha puesto en producción y el archivo de datos que acabamos de crear se ha cargado con datos. Ahora queremos eliminar ese archivo (por el motivo que sea). Pero antes de eliminar el archivo, debemos vaciarlo (migrar sus datos a otro archivo).

Así es como se hace:

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

Así que esto es como el primer ejemplo de esta página, excepto que nuestra base de datos tiene un nombre diferente. Y en este ejemplo, consultamos sys.database_files para confirmar que el archivo se ha eliminado.