Databáze SQL Server ukládají svá data a objekty do souborů. Každá databáze má alespoň jeden datový soubor (a soubor protokolu), ale není omezena pouze na jeden – může mít mnoho datových souborů. Pokud se někdy ocitnete v situaci, kdy potřebujete odstranit datový soubor z databáze, budete muset tento soubor nejprve vyprázdnit, než jej odstraníte.
Ale nebojte se, vyprázdněním souboru ve skutečnosti data nesmažete. Jednoduše migruje data souboru do jiných souborů ve stejné skupině souborů.
Níže uvedené příklady ukazují, jak vyprázdnit datový soubor a poté jej odstranit z databáze pomocí Transact-SQL.
Rychlý příklad
Zde je rychlý příklad, který vám ukáže, jak vyprázdnit datový soubor a odstranit jej z databáze:
-- Empty the file DBCC SHRINKFILE (Solutions2, EMPTYFILE); GO -- Remove the file ALTER DATABASE Solutions REMOVE FILE Solutions2; GO
Jak bylo vysvětleno, tímto se soubor vyprázdní a poté se zcela odstraní z databáze. Když použijete EMPTYFILE
, to přesune všechna data ze souboru do jiných souborů ve stejné skupině souborů. Proto se musíte ujistit, že to není jediný soubor ve skupině souborů (jinak se zobrazí chyba). EmptyFile vás také ujišťuje, že do souboru nebudou přidána žádná nová data.
Delší příklad
V případě, že jste z předchozího příkladu zmateni, pojďme si projít proces vytvoření nové databáze, přidání nového datového souboru, jeho vyprázdnění a odstranění.
Vytvoření databáze a zobrazení informací o jejím datovém souboru
-- 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
Nejprve se přepneme do hlavní databáze, než vytvoříme novou databázi s názvem Test
. Poté přepneme na novou databázi a vybereme určité informace o jejích databázových souborech z sys.database_files
zobrazení systémového katalogu.
Přidat nový datový soubor
-- 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
Nyní přidáme nový datový soubor s logickým názvem Test2
a fyzickou cestu /var/opt/mssql/data/Test2.mdf
(Všimněte si, že toto je cesta pro Linux/Mac. Pokud používáte Windows, použijte zpětná lomítka namísto dopředných lomítek). Znovu se zeptáme na sys.database_files
zobrazení systémového katalogu, abychom mohli vidět podrobnosti o našem novém souboru.
Vyprázdněte datový soubor a odeberte jej
Pro účely tohoto příkladu předpokládejme, že databáze byla uvedena do provozu a datový soubor, který jsme právě vytvořili, byl načten daty. Nyní chceme tento soubor odstranit (z jakéhokoli důvodu). Než však soubor odstraníme, musíme jej vyprázdnit (migrovat jeho data do jiného souboru).
Zde je návod, jak to udělat:
-- 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
Takže toto je stejné jako první příklad na této stránce, až na to, že naše databáze má jiný název. A v tomto příkladu se dotazujeme sys.database_files
pro potvrzení, že soubor byl skutečně smazán.