Базите данни на SQL Server съхраняват своите данни и обекти във файлове. Всяка база данни има поне един файл с данни (и регистрационен файл), но не е ограничена само до един – може да има много файлове с данни. Ако някога се окажете в ситуация, в която трябва да премахнете файл с данни от база данни, първо ще трябва да изпразните този файл, преди да го премахнете.
Но не се притеснявайте, изпразването на файл всъщност не изтрива данните. Той просто мигрира данните на файла към други файлове в същата файлова група.
Примерите по-долу показват как да изпразните файл с данни, след което да го премахнете от базата данни с помощта на Transact-SQL.
Бърз пример
Ето един бърз пример, който да ви покаже как да изпразните файл с данни и да го премахнете от базата данни:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Така че, както беше обяснено, това изпразва файла, след което го премахва напълно от базата данни. Когато използвате EMPTYFILE
, това премества всички данни от файла в други файлове в същата файлова група. Следователно, ще трябва да се уверите, че това не е единственият файл във файловата група (в противен случай ще получите грешка). EmptyFile също така ви уверява, че няма да бъдат добавени нови данни към файла.
По-дълъг пример
В случай, че сте объркани от предишния пример, нека преминем през процеса на създаване на нова база данни, добавяне на нов файл с данни, след което го изпразваме и след това го премахваме.
Създайте база данни и прегледайте информацията за нейния файл с данни
-- 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
Първо преминаваме към главната база данни, преди да създадем нова база данни, наречена Test
. След това преминаваме към новата база данни и избираме определена информация за нейните файлове от базата данни от sys.database_files
изглед на системния каталог.
Добавяне на нов файл с данни
-- 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
Сега добавяме нов файл с данни с логическо име Test2
и физически път на /var/opt/mssql/data/Test2.mdf
(обърнете внимание, че това е път за Linux/Mac. Ако използвате Windows, използвайте обратна наклонена черта вместо наклонена черта напред). Отново правим заявка за sys.database_files
изглед на системния каталог, за да можем да видим подробностите за нашия нов файл.
Изпразнете файла с данни и го премахнете
За целите на този пример, нека приемем, че базата данни е въведена в производство и файлът с данни, който току-що създадохме, е зареден с данни. Сега искаме да премахнем този файл (по някаква причина). Но преди да премахнем файла, трябва да го изпразним (да мигрираме данните му в друг файл).
Ето как да направите това:
-- 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
Така че това е точно като първия пример на тази страница, освен че нашата база данни има различно име. И в този пример ние отправяме заявка към sys.database_files
за да потвърдите, че файлът наистина е изтрит.