I database di SQL Server archiviano i propri dati e oggetti in file. Ogni database ha almeno un file di dati (e un file di registro), ma non è limitato a uno solo:potrebbe avere molti file di dati. Se ti trovi mai nella situazione in cui devi rimuovere un file di dati da un database, dovrai prima svuotare quel file, prima di rimuoverlo.
Ma non preoccuparti, lo svuotamento di un file non elimina effettivamente i dati. Migra semplicemente i dati del file in altri file all'interno dello stesso filegroup.
Gli esempi seguenti mostrano come svuotare un file di dati, quindi rimuoverlo dal database utilizzando Transact-SQL.
Esempio rapido
Ecco un rapido esempio per mostrarti come svuotare un file di dati e rimuoverlo dal database:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Quindi, come spiegato, questo svuota il file, quindi lo rimuove completamente dal database. Quando usi EMPTYFILE
, questo sposta tutti i dati dal file ad altri file nello stesso filegroup. Pertanto, dovrai assicurarti che questo non sia l'unico file nel filegroup (altrimenti riceverai un errore). EmptyFile ti assicura inoltre che non verranno aggiunti nuovi dati al file.
Un esempio più lungo
Nel caso in cui tu sia confuso dall'esempio precedente, esaminiamo il processo di creazione di un nuovo database, aggiungendo un nuovo file di dati, quindi svuotandolo, quindi rimuovendolo.
Crea un database e visualizza le informazioni sui file di dati
-- 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
Per prima cosa passiamo al database principale prima di creare un nuovo database chiamato Test
. Passiamo quindi al nuovo database e selezioniamo determinate informazioni sui suoi file di database da sys.database_files
vista catalogo di sistema.
Aggiungi un nuovo file di dati
-- 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
Ora aggiungiamo un nuovo file di dati con un nome logico di Test2
e un percorso fisico di /var/opt/mssql/data/Test2.mdf
(notare che questo è un percorso Linux/Mac. Se si utilizza Windows, utilizzare barre inverse anziché barre in avanti). Ancora una volta interroghiamo il sys.database_files
vista del catalogo di sistema in modo da poter vedere i dettagli del nostro nuovo file.
Svuota il file di dati e rimuovilo
Ai fini di questo esempio, supponiamo che il database sia stato messo in produzione e che il file di dati che abbiamo appena creato sia stato caricato con i dati. Ora vogliamo rimuovere quel file (per qualsiasi motivo). Ma prima di rimuovere il file, dobbiamo svuotarlo (migrare i suoi dati in un altro file).
Ecco come farlo:
-- 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
Quindi questo è proprio come il primo esempio in questa pagina, tranne per il fatto che il nostro database ha un nome diverso. E in questo esempio, interroghiamo sys.database_files
per confermare che il file è stato effettivamente eliminato.