Sdílet prostřednictvím


ALTER DATABASE (Transact-SQL) Možnosti souboru a skupin souborů

Upravuje soubory a skupiny souborů spojené s databází. Přidává nebo odstraňuje soubory a skupiny souborů z databáze a mění atributy databáze nebo jejích souborů a skupin souborů. Pro další možnosti ALTER DATABASE viz ALTER DATABASE.

Další informace o konvencích syntaxe najdete v tématu Transact-SQL konvence syntaxe.

Výběr produktu

V následujícím řádku vyberte název produktu, který vás zajímá, a zobrazí se jenom informace o daném produktu.

* SQL Server *  

 

Syntaxe

ALTER DATABASE database_name
{
    <add_or_modify_files>
  | <add_or_modify_filegroups>
}

<add_or_modify_files>::=
{
    ADD FILE <filespec> [ ,...n ]
        [ TO FILEGROUP { filegroup_name } ]
  | ADD LOG FILE <filespec> [ ,...n ]
  | REMOVE FILE logical_file_name
  | MODIFY FILE <filespec>
}

<filespec>::=
(
    NAME = logical_file_name
    [ , NEWNAME = new_logical_name ]
    [ , FILENAME = {'os_file_name' | 'filestream_path' | 'memory_optimized_data_path' } ]
    [ , SIZE = size [ KB | MB | GB | TB ] ]
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ]
    [ , OFFLINE ]
)

<add_or_modify_filegroups>::=
{
    | ADD FILEGROUP filegroup_name
        [ CONTAINS FILESTREAM | CONTAINS MEMORY_OPTIMIZED_DATA ]
    | REMOVE FILEGROUP filegroup_name
    | MODIFY FILEGROUP filegroup_name
        { <filegroup_updatability_option>
        | DEFAULT
        | NAME = new_filegroup_name
        | { AUTOGROW_SINGLE_FILE | AUTOGROW_ALL_FILES }
        }
}
<filegroup_updatability_option>::=
{
    { READONLY | READWRITE }
    | { READ_ONLY | READ_WRITE }
}

Arguments

<add_or_modify_files>::=

Specifikuje soubor, který má být přidán, odstraněn nebo upraven.

database_name Je název databáze, která má být upravována.

PŘIDAT SOUBOR Přidá soubor do databáze.

TO FILEGROUP { filegroup_name } Specifikuje skupinu souborů, do které se má daný soubor přidat. Pro zobrazení aktuálních skupin souborů a toho, která skupina souborů je aktuálně výchozí, použijte katalogový pohled sys.filegroups .

PŘIDAT LOG SOUBOR Přidá log soubor, který by měl být přidán do určené databáze.

ODSTRANIT SOUBOR logical_file_name Odstraní popis logického souboru z instance SQL Serveru a smaže fyzický soubor. Soubor nelze odstranit, pokud není prázdný.

logical_file_name Je logický název používaný v SQL Serveru při odkazování na soubor.

Výstraha

Odstranění databázového souboru, který obsahuje FILE_SNAPSHOT zálohy, uspěje, ale žádné související snímky nebudou smazány, aby se zabránilo zneplatnění záloh odkazujících na databázový soubor. Soubor bude zkrácen, ale fyzicky nebude smazán, aby FILE_SNAPSHOT zálohy zůstaly neporušené. Další informace najdete v tématu Zálohování a obnovení SQL Serveru pomocí služby Microsoft Azure Blob Storage. Platí na: SQL Server (SQL Server 2016 (13.x) a novější).

UPRAVIT SOUBOR Specifikuje soubor, který by měl být upraven. Vždy lze změnit pouze jednu <vlastnost filespec> . NAME musí být vždy uveden ve specifikaci <> souboru, aby identifikoval soubor k úpravě. Pokud je specifikována VELIKOST, nová velikost musí být větší než současná velikost souboru.

Pro úpravu logického názvu datového souboru nebo log souboru určete logický název souboru v klauzuli NAME a zadejte nový logický název souboru ve klauzuli NEWNAME . Například:

MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name )

Pro přesun datového souboru nebo log souboru na nové místo zadejte aktuální název logického souboru v klauzuli NAME a v klauzuli FILENAME zadejte novou cestu a název souboru operačního systému. Například:

MODIFY FILE ( NAME = logical_file_name, FILENAME = ' new_path/os_file_name ' )

Když přesouváte katalog s plným textem, specifikujte pouze novou cestu v klauzuli FILENAME. Neuvádějte název souboru operačního systému.

Pro více informací viz Přesunout databázové soubory.

Pro souborovou skupinu FILESTREAM lze NAME upravit online. NÁZEV souboru lze upravovat online; Změna však nastává účinnosti až poté, co je kontejner fyzicky přesunut, server vypnut a následně znovu spuštěn.

Můžete nastavit soubor FILESTREAM na OFFLINE. Když je soubor FILESTREAM offline, jeho nadřazená skupina souborů bude interně označena jako offline; proto veškerý přístup k datům FILESTREAM v rámci této skupiny souborů selže.

Poznámka:

<add_or_modify_files> možnosti nejsou v uzavřené databázi dostupné.

<filespec>::=

Řídí vlastnosti souboru.

NÁZEV logical_file_name Specifikuje logický název souboru.

logical_file_name Je logický název používaný v instanci SQL Serveru při odkazování na soubor.

NEWNAME new_logical_file_name Specifikuje nový logický název souboru.

new_logical_file_name Je název, který nahrazuje stávající logický název souboru. Název musí být v databázi jedinečný a musí splňovat pravidla pro identifikátory. Název může být znaková nebo Unicode konstanta, pravidelný identifikátor nebo vymezený identifikátor.

NÁZEV souboru { ' | ' | 'memory_optimized_data_path'} Specifikuje název souboru operačního systému (fyzického).

' os_file_name ' Pro standardní (ROWS) souborovou skupinu je to cesta a název souboru, který operační systém používá při vytváření souboru. Soubor musí být umístěn na serveru, na kterém je SQL Server nainstalován. Specifikovaná cesta musí existovat před vykonáním příkazu ALTER DATABASE.

Poznámka:

SIZE, MAXSIZE, a FILEGROWTH parametry nelze nastavit, pokud je pro soubor specifikována cesta UNC.

Systémové databáze nemohou být umístěny v adresářích sdílení UNC.

Datové soubory by neměly být ukládány na komprimované souborové systémy, pokud nejsou soubory pouze pro čtení, nebo pokud je databáze pouze pro čtení. Soubory protokolů by nikdy neměly být vloženy do komprimovaných systémů souborů.

Pokud je soubor v nezpracovaném oddílu, os_file_name musí zadat pouze písmeno jednotky existujícího nezpracovaného oddílu. Na každý surový oddíl lze umístit pouze jeden soubor.

'filestream_path' Pro skupinu souborů FILESTREAM označuje FILENAME cestu, do které budou data FILESTREAM uložena. Cesta až do poslední složky musí existovat a poslední složka nesmí existovat. Například pokud zadáte cestu C:\MyFiles\MyFilestreamData, C:\MyFiles pak musí existovat před spuštěním ALTER DATABASE, ale složka MyFilestreamData nesmí existovat.

Poznámka:

Vlastnosti VELIKOST a FILEGROWTH se nevztahují na skupinu souborů FILESTREAM.

'memory_optimized_data_path' Pro paměťově optimalizovanou skupinu souborů označuje FILENAME cestu, do které budou uložena paměťově optimalizovaná data. Cesta až do poslední složky musí existovat a poslední složka nesmí existovat. Například pokud zadáte cestu C:\MyFiles\MyData, C:\MyFiles pak musí existovat před spuštěním ALTER DATABASE, ale složka MyData nesmí existovat.

Skupina souborů a soubor (<filespec>) musí být vytvořeny ve stejném příkazu.

Poznámka:

Vlastnosti VELIKOST a FILEGROWTH se nevztahují na MEMORY_OPTIMIZED_DATA souborovou skupinu.

Pro více informací o paměťově optimalizovaných souborových skupinách viz The Memory Optimized Filegroup.

VELIKOST Specifikuje velikost souboru. VELIKOST se nevztahuje na souborové skupiny FILESTREAM.

velikost je velikost souboru.

Pokud je specifikováno pomocí ADD FILE, velikost je počáteční velikost souboru. Pokud je specifikováno pomocí UPRAVIT SOUBOR, velikost je nová velikost souboru a musí být větší než současná velikost souboru.

Pokud není určena velikost primárního souboru, SQL Server používá velikost primárního souboru v modelové databázi. Když je specifikován sekundární datový soubor nebo log soubor, ale velikost souboru není určena, databázový engine nastaví soubor na 1 MB.

Přípony KB, MB, GB a TB lze použít k určení kilobajtů, megabajtů, gigabajtů nebo terabajtů. Výchozí hodnota je MB. Uveďte celé číslo a nezahrňte desetinnou čáru. Pro určení zlomku megabajtu převeďte hodnotu na kilobajty násobením čísla 1024. Například uveďte 1536 KB místo 1,5 MB (1,5 x 1024 = 1536).

Poznámka:

SIZE nelze nastavit:

  • Když je pro soubor specifikována cesta UNC
  • Pro FILESTREAM a MEMORY_OPTIMIZED_DATA souborové skupiny

MAXSIZE { max_size| UNLIMITED } Specifikuje maximální velikost souboru, na kterou může soubor narůst.

max_size Je maximální velikost souboru. Přípony KB, MB, GB a TB lze použít k určení kilobajtů, megabajtů, gigabajtů nebo terabajtů. Výchozí hodnota je MB. Uveďte celé číslo a nezahrňte desetinnou čáru. Pokud max_size není specifikováno, velikost souboru se zvýší, dokud nebude disk plný.

UNLIMITED Specifikuje, že soubor roste, dokud není disk plný. V SQL Serveru má soubor protokolu zadaný s neomezeným růstem maximální velikost 2 TB a datový soubor má maximální velikost 16 TB. Neexistuje žádná maximální velikost, pokud je tato možnost specifikována pro kontejner FILESTREAM. Dokud nebude disk plný, bude se dál zvětšovat.

Poznámka:

MAXSIZE nelze nastavit, pokud je pro soubor specifikována cesta UNC.

FILEGROWTH growth_increment Specifikuje automatický růstový inkrement souboru. Nastavení FILEGROWTH pro soubor nesmí překročit MAXSIZE. FILEGROWTH se nevztahuje na souborové skupiny FILESTREAM.

growth_increment Je množství místa, které se přidává do souboru pokaždé, když je potřeba nové místo.

Hodnota může být určena v MB, KB, GB, TB nebo v procentech (%). Pokud je číslo uvedeno bez přípony MB, KB nebo %, výchozí je MB. Když je % specifikováno, velikost růstového inkrementu je specifikované procento velikosti souboru v době, kdy k tomuto přírůstku dojde. Specifikovaná velikost je zaokrouhlena na nejbližších 64 KB.

Hodnota 0 znamená, že automatický růst je nastaven na vypnutý a navíc není povoleno žádné další místo.

Pokud není specifikováno FILEGROWTH, výchozí hodnoty jsou:

Version Výchozí hodnoty
Počínaje SQL Serverem 2016 (13.x) Data 64 MB. Soubory protokolu 64 MB.
Počínaje SQL Serverem 2005 (9.x) Data 1 MB. Soubory protokolu 10%.
Před SQL Serverem 2005 (9.x) Údaje 10%. Soubory protokolu 10%.

Poznámka:

FILEGROWTH nelze nastavit:

  • Když je pro soubor specifikována cesta UNC
  • Pro FILESTREAM a MEMORY_OPTIMIZED_DATA souborové skupiny

OFFLINE Nastaví soubor offline a znepřístupní všechny objekty ve skupině souborů.

Upozornění

Tuto možnost používejte pouze tehdy, když je soubor poškozený a lze ho obnovit. Soubor nastavený na OFFLINE lze online nastavit pouze obnovením souboru ze zálohy. Pro více informací o obnově jednoho souboru viz RESTORE.

<možnosti filespec> nejsou dostupné v Contained Database.

<add_or_modify_filegroups>::=

Přidát, upravit nebo odstranit skupinu souborů z databáze.

PŘIDAT SOUBOROVOU SKUPINU filegroup_name Přidá souborovou skupinu do databáze.

OBSAHUJE FILESTREAM Specifikuje, že souborová skupina ukládá binární velké objekty (BLOB) FILESTREAM v souborovém systému.

OBSAHUJE MEMORY_OPTIMIZED_DATA

Platí na: SQL Server (SQL Server 2014 (12.x) a novější)

Specifikuje, že souborová skupina ukládá data optimalizovaná pro paměť v souborovém systému. Pro více informací viz In-Memory OLTP - In-Memory Optimalizace. Pro každou databázi je povolená pouze jedna MEMORY_OPTIMIZED_DATA skupina souborů. Pro vytváření tabulek optimalizovaných pro paměť nemůže být souborová skupina prázdná. Musí tam být alespoň jeden spis. filegroup_name označuje cestu. Cesta až do poslední složky musí existovat a poslední složka nesmí existovat.

ODSTRAŇTE SOUBOROVOU SKUPINU filegroup_name Odstraní souborovou skupinu z databáze. Souborová skupina nemůže být odstraněna, pokud není prázdná. Nejdřív odstraňte všechny soubory ze skupiny souborů. Pro více informací viz "ODSTRANIT SOUBOR logical_file_name" dříve v tomto tématu.

Poznámka:

Pokud FILESTREAM Garbage Collector neodstranil všechny soubory z kontejneru FILESTREAM, ALTER DATABASE REMOVE FILE operace odstranění kontejneru FILESTREAM selže a vrátí chybu. Viz sekce Odstranění kontejneru FILESTREAM později v tomto tématu.

MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | VÝCHOZÍ | NAME =new_filegroup_name } Upravuje skupinu souborů nastavením stavu na READ_ONLY nebo READ_WRITE, změní soubor jako výchozí skupinu databáze nebo změní název souborové skupiny.

<filegroup_updatability_option> Nastavuje vlastnost pouze pro čtení nebo čtení/zápis do souborové skupiny.

DEFAULT Změní výchozí skupinu souborů databáze na filegroup_name. Pouze jedna souborová skupina v databázi může být výchozí souborovou skupinou. Pro více informací viz Databázové soubory a skupiny souborů.

NAME = new_filegroup_name Změní název skupiny souborů na new_filegroup_name.

AUTOGROW_SINGLE_FILE Platí na: SQL Server (SQL Server 2016 (13.x) a novější)

Když soubor ve skupině dosáhne prahu automatického růstu, roste pouze tento soubor. Toto je výchozí hodnota.

AUTOGROW_ALL_FILES

Platí na: SQL Server (SQL Server 2016 (13.x) a novější)

Když soubor ve skupině souborů splňuje prahovou hodnotu automatického zvětšování, zvětší se všechny soubory ve skupině souborů.

Poznámka:

Toto je výchozí hodnota pro TempDB.

<filegroup_updatability_option>::=

Nastavuje vlastnost pouze pro čtení nebo čtení/zápis do souborové skupiny.

READ_ONLY | READONLY Specifikuje, že skupina souborů je pouze pro čtení. Aktualizace objektů v něm nejsou povoleny. Primární souborová skupina nemůže být pouze pro čtení. Pokud chcete tento stav změnit, musíte mít výhradní přístup k databázi. Další informace najdete v klauzuli SINGLE_USER.

Protože databáze pouze pro čtení neumožňuje úpravy dat:

  • Automatické obnovení se při spuštění systému přeskočí.
  • Zmenšování databáze není možné.
  • V databázích pouze pro čtení nedochází k žádnému zamykání. To může vést k rychlejšímu výkonu dotazů.

Poznámka:

Klíčové slovo READONLY bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se použití READONLY v nové vývojové práci a plánujte upravovat aplikace, které aktuálně používají READONLY. Místo toho použijte READ_ONLY.

READ_WRITE | READWRITE Specifikuje, že skupina je READ_WRITE. Aktualizace jsou povoleny pro objekty ve skupině souborů. Pokud chcete tento stav změnit, musíte mít výhradní přístup k databázi. Další informace najdete v klauzuli SINGLE_USER.

Poznámka:

Klíčové slovo READWRITE bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se používání READWRITE v nové vývojové práci a plánujte upravovat aplikace, které se READWRITE dříve používají READ_WRITE .

Návod

Stav těchto možností lze určit zkoumáním sloupce is_read_only v katalogu sys.databases nebo vlastnosti Updateability funkce DATABASEPROPERTYEX .

Poznámky

Chcete-li zmenšit velikost databáze, použijte DBCC SHRINKDATABASE.

Soubor nelze přidávat ani odebírat, dokud je BACKUP příkaz běží.

Pro každou databázi je možné zadat maximálně 32 767 souborů a 32 767 skupin souborů.

Od SQL Server 2005 (9.x) je stav databázového souboru (například online nebo offline) udržován nezávisle na stavu databáze. Další informace naleznete v tématu Stav souborů.

  • Stav souborů v rámci skupiny souborů určuje dostupnost celé skupiny souborů. Aby byla skupina souborů dostupná, musí být všechny soubory v rámci skupiny souborů online.
  • Pokud je souborová skupina offline, jakýkoli pokus o přístup do skupiny souborů pomocí SQL příkazu selže s chybou. Když vytváříte plány dotazů pro SELECT příkazy, optimalizátor dotazů se vyhýbá neklastrovaným indexům a indexovaným pohledům, které se nacházejí v offline souborových skupinách. To umožňuje úspěšné provedení těchto příkazů. Pokud však offline souborová skupina obsahuje haldu nebo shlukovaný index cílové tabulky, příkazy SELECT selžou. Navíc jakýkoli INSERT, UPDATE, nebo DELETE příkaz, který upravuje tabulku s libovolným indexem v offline souborové skupině, selže.

Parametry SIZE, MAXSIZE a FILEGROWTH nelze nastavit, pokud je pro soubor specifikována cesta UNC.

Parametry SIZE a FILEGROWTH nelze nastavit pro paměťově optimalizované souborové skupiny.

Klíčové slovo READONLY bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se použití READONLY v nové vývojové práci a plánujte upravovat aplikace, které aktuálně používají READONLY. Místo toho použijte READ_ONLY.

Klíčové slovo READWRITE bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se používání READWRITE v nové vývojové práci a plánujte upravovat aplikace, které se READWRITE dříve používají READ_WRITE .

Přesouvání souborů

Systémová nebo uživatelsky definovaná data a logovací soubory můžete přesunout zadáním nové polohy v názvu souboru. To může být užitečné v následujících situacích:

  • Obnova selhání. Například databáze je v podezřelém režimu nebo je vypnuta způsobená hardwarovou poruchou.
  • Plánované stěhování.
  • Přemístění kvůli plánované údržbě disku.

Pro více informací viz Přesunout databázové soubory.

Inicializace souborů

Ve výchozím nastavení jsou datová a logovací soubory inicializovány vyplněním souborů nulami při provedení jedné z následujících operací:

  • Vytvořte databázi.
  • Přidejte soubory do existující databáze.
  • Zvětšit velikost existujícího souboru.
  • Obnovte databázi nebo souborovou skupinu.

Datové soubory lze inicializovat okamžitě. To umožňuje rychlé provádění těchto operací se soubory. Další informace naleznete v tématu Inicializace souboru databáze.

Odstranění kontejneru FILESTREAM

I když mohl být kontejner FILESTREAM vyprázdněn pomocí operace "DBCC SHRINKFILE", databáze může stále potřebovat uchovávat odkazy na smazané soubory z různých důvodů údržby systému. sp_filestream_force_garbage_collection spustí FILESTREAM Garbage Collector, aby tyto soubory odstranil, když je to bezpečné. Pokud sběrač odpadu FILESTREAM neodstranil všechny soubory z kontejneru FILESTREAM, operace ALTER DATABASE REMOVE FILE selže při odstranění kontejneru FILESTREAM a vrátí chybu. Následující postup se doporučuje k odstranění kontejneru FILESTREAM.

  1. Spusť DBCC SHRINKFILE s možností EMPTYFILE, abys přesunul aktivní obsah tohoto kontejneru do jiných kontejnerů.
  2. Ujistěte se, že zálohy logů byly provedeny, ať už v úplném nebo BULK_LOGGED modelu obnovy.
  3. Pokud je to relevantní, ujistěte se, že byla spuštěna replikační čtečka logů.
  4. Spusť sp_filestream_force_garbage_collection , aby garbage collector musel smazat všechny soubory, které už v tomto kontejneru nejsou potřeba.
  5. Spusť ALTER DATABASE s možností ODSTRANIT SOUBOR pro odstranění tohoto kontejneru.
  6. Opakujte kroky 2 až 4 ještě jednou, abyste dokončili sběr odpadu.
  7. Použijte databázi ALTER... ODSTRAŇTE SOUBOR pro odstranění tohoto kontejneru.

Examples

A. Přidání souboru do databáze

Následující příklad přidává datový soubor o velikosti 5 MB do databáze AdventureWorks2025.

USE master;
GO
ALTER DATABASE AdventureWorks2022
ADD FILE
(
    NAME = Test1dat2,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t1dat2.ndf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
);
GO

B. Přidání skupiny souborů se dvěma soubory do databáze

Následující příklad vytváří skupinu Test1FG1 souborů v databázi AdventureWorks2025 a přidává do ní dva soubory o velikosti 5 MB.

USE master
GO
ALTER DATABASE AdventureWorks2022
ADD FILEGROUP Test1FG1;
GO
ALTER DATABASE AdventureWorks2022
ADD FILE
(
    NAME = test1dat3,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t1dat3.ndf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),  
(  
    NAME = test1dat4,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\t1dat4.ndf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)  
TO FILEGROUP Test1FG1;
GO

C. Přidání dvou logovacích souborů do databáze

Následující příklad přidává do databáze AdventureWorks2025 dva záznamy o velikosti 5 MB.

USE master;
GO
ALTER DATABASE AdventureWorks2022
ADD LOG FILE
(
    NAME = test1log2,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\test2log.ldf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1log3,
    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test3log.ldf',
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
);
GO

D. Odstranění souboru z databáze

Následující příklad odstraní jeden ze souborů přidaných v příkladu B.

USE master;
GO
ALTER DATABASE AdventureWorks2022
REMOVE FILE test1dat4;
GO

E. Úprava souboru

Následující příklad zvětšuje velikost jednoho ze souborů přidaných v příkladu B. ALTER DATABASE s příkazem MODIFY FILE dokáže zvětšit pouze velikost souboru, takže pokud potřebujete zmenšit velikost souboru, musíte použít DBCC SHRINKFILE.

USE master;
GO

ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO

Tento příklad zmenšuje velikost datového souboru na 100 MB a poté specifikuje velikost na této hodnotě.

USE AdventureWorks2022;
GO

DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO

USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO

F. Přesun souboru na nové místo

Následující příklad přesune soubor vytvořený Test1dat2 v příkladu A do nového adresáře.

Poznámka:

Musíte soubor fyzicky přesunout do nového adresáře před spuštěním tohoto příkladu. Poté zastavte a spusťte instanci SQL Serveru nebo vezměte databázi AdventureWorks2025 OFFLINE a poté ONLINE, abyste změnu provedli.

USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(
    NAME = Test1dat2,
    FILENAME = N'c:\t1dat2.ndf'
);
GO

G. Přesun tempdb na nové místo

Následující příklad se přesune tempdb ze svého aktuálního umístění na disku na jiné místo na disku. Protože tempdb se znovu vytváří pokaždé, když se spustí služba MSSQLSERVER, nemusíte fyzicky přesouvat data a logovací soubory. Soubory se vytvoří při restartu služby ve 3. kroku. Dokud není služba znovu spuštěna, pokračuje tempdb ve svém současném provozu.

  1. Určte logická jména souborů databáze tempdb a jejich aktuální umístění na disku.

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    GO
    
  2. Změňte umístění každého souboru pomocí ALTER DATABASE.

    USE master;
    GO
    ALTER DATABASE tempdb
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE tempdb
    MODIFY FILE (NAME = templog, FILENAME = 'E:\SQLData\templog.ldf');
    GO
    
  3. Zastavte a restartujte instanci SQL Serveru.

  4. Ověřte změnu souboru.

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
  5. Smažte soubory tempdb.mdf a templog.ldf z jejich původního umístění.

H. Nastavení skupiny souborů jako výchozí

Následující příklad činí souborovou skupinu vytvořenou Test1FG1 v příkladu B výchozí souborovou skupinou. Poté se výchozí skupina souborů resetuje na souborovou skupinu PRIMARY . Všimněte si, že musí být PRIMARY vymezeno závorkami nebo uvozovkami.

USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO

I. Přidání souborové skupiny pomocí ALTER DATABASE

Následující příklad přidává do databáze FILEGROUP , FILESTREAM která obsahuje tuto klauzuliFileStreamPhotoDB.

--Create and add a FILEGROUP that CONTAINS the FILESTREAM clause.
ALTER DATABASE FileStreamPhotoDB
ADD FILEGROUP TodaysPhotoShoot
CONTAINS FILESTREAM;
GO

--Add a file for storing database photos to FILEGROUP
ALTER DATABASE FileStreamPhotoDB
ADD FILE
(
  NAME= 'PhotoShoot1',
  FILENAME = 'C:\Users\Administrator\Pictures\TodaysPhotoShoot.ndf'
)
TO FILEGROUP TodaysPhotoShoot;
GO

Následující příklad přidává do databáze FILEGROUP , MEMORY_OPTIMIZED_DATA která obsahuje tuto klauzulixtp_db. Souborová skupina ukládá data optimalizovaná pro paměť.

--Create and add a FILEGROUP that CONTAINS the MEMORY_OPTIMIZED_DATA clause.
ALTER DATABASE xtp_db
ADD FILEGROUP xtp_fg
CONTAINS MEMORY_OPTIMIZED_DATA;
GO

--Add a file for storing memory optimized data to FILEGROUP
ALTER DATABASE xtp_db
ADD FILE
(
  NAME='xtp_mod',
  FILENAME='d:\data\xtp_mod'
)
TO FILEGROUP xtp_fg;
GO

J. Změňte skupinu souborů tak, aby když soubor ve skupině dosáhne prahu automatického růstu, všechny soubory ve skupině souborů rostly

Následující příklad generuje požadované ALTER DATABASE příkazy pro úpravu skupin souborů pro čtení a zápis s tímto AUTOGROW_ALL_FILES nastavením.

--Generate ALTER DATABASE ... MODIFY FILEGROUP statements
--so that all read-write filegroups grow at the same time.
SET NOCOUNT ON;

DROP TABLE IF EXISTS #tmpdbs
CREATE TABLE #tmpdbs (id INT IDENTITY(1,1), [dbid] INT, [dbname] sysname, isdone BIT);

DROP TABLE IF EXISTS #tmpfgs
CREATE TABLE #tmpfgs (id INT IDENTITY(1,1), [dbid] INT, [dbname] sysname, fgname sysname, isdone BIT);

INSERT INTO #tmpdbs ([dbid], [dbname], [isdone])
SELECT database_id, name, 0 FROM master.sys.databases (NOLOCK) WHERE is_read_only = 0 AND state = 0;

DECLARE @dbid INT, @query VARCHAR(1000), @dbname sysname, @fgname sysname

WHILE (SELECT COUNT(id) FROM #tmpdbs WHERE isdone = 0) > 0
BEGIN
  SELECT TOP 1 @dbname = [dbname], @dbid = [dbid] FROM #tmpdbs WHERE isdone = 0

  SET @query = 'SELECT ' + CAST(@dbid AS NVARCHAR) + ', ''' + @dbname + ''', [name], 0 FROM [' + @dbname + '].sys.filegroups WHERE [type] = ''FG'' AND is_read_only = 0;'
  INSERT INTO #tmpfgs
  EXEC (@query)

  UPDATE #tmpdbs
  SET isdone = 1
  WHERE [dbid] = @dbid
END;

IF (SELECT COUNT(ID) FROM #tmpfgs) > 0
BEGIN
  WHILE (SELECT COUNT(id) FROM #tmpfgs WHERE isdone = 0) > 0
  BEGIN
    SELECT TOP 1 @dbname = [dbname], @dbid = [dbid], @fgname = fgname FROM #tmpfgs WHERE isdone = 0

    SET @query = 'ALTER DATABASE [' + @dbname + '] MODIFY FILEGROUP [' + @fgname + '] AUTOGROW_ALL_FILES;'

    PRINT @query

    UPDATE #tmpfgs
    SET isdone = 1
    WHERE [dbid] = @dbid AND fgname = @fgname
  END
END;
GO

Viz také

* SQL spravovaná instance *
 

 

Azure SQL Managed Instance

Použijte tento příkaz s databází v Azure SQL Managed Instance.

Syntaxe pro spravovanou instanci Azure SQL

ALTER DATABASE database_name
{
    <add_or_modify_files>
  | <add_or_modify_filegroups>
}
[;]

<add_or_modify_files>::=
{
    ADD FILE <filespec> [ ,...n ]
        [ TO FILEGROUP { filegroup_name } ]
  | REMOVE FILE logical_file_name
  | MODIFY FILE <filespec>
}

<filespec>::=
(
    NAME = logical_file_name
    [ , SIZE = size [ KB | MB | GB | TB ] ]
    [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ]
    [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB| % ] ]
)

<add_or_modify_filegroups>::=
{
    | ADD FILEGROUP filegroup_name
    | REMOVE FILEGROUP filegroup_name
    | MODIFY FILEGROUP filegroup_name
        { <filegroup_updatability_option>
        | DEFAULT
        | NAME = new_filegroup_name
        | { AUTOGROW_SINGLE_FILE | AUTOGROW_ALL_FILES }
        }
}  
<filegroup_updatability_option>::=
{
    { READONLY | READWRITE }
    | { READ_ONLY | READ_WRITE }
}

Arguments

<add_or_modify_files>::=

Specifikuje soubor, který má být přidán, odstraněn nebo upraven.

database_name Je název databáze, která má být upravována.

PŘIDAT SOUBOR Přidá soubor do databáze.

TO FILEGROUP { filegroup_name } Specifikuje skupinu souborů, do které se má daný soubor přidat. Pro zobrazení aktuálních skupin souborů a toho, která skupina souborů je aktuálně výchozí, použijte katalogový pohled sys.filegroups .

ODSTRANIT SOUBOR logical_file_name Odstraní popis logického souboru z instance SQL Serveru a smaže fyzický soubor. Soubor nelze odstranit, pokud není prázdný.

logical_file_name Je logický název používaný v SQL Serveru při odkazování na soubor.

UPRAVIT SOUBOR Specifikuje soubor, který by měl být upraven. Vždy lze změnit pouze jednu <vlastnost filespec> . NAME musí být vždy uveden ve specifikaci <> souboru, aby identifikoval soubor k úpravě. Pokud je specifikována VELIKOST, nová velikost musí být větší než současná velikost souboru.

<filespec>::=

Řídí vlastnosti souboru.

NÁZEV logical_file_name Specifikuje logický název souboru.

logical_file_name Je logický název používaný v instanci SQL Serveru při odkazování na soubor.

NEWNAME new_logical_file_name Specifikuje nový logický název souboru.

new_logical_file_name Je název, který nahrazuje stávající logický název souboru. Název musí být v databázi jedinečný a musí splňovat pravidla pro identifikátory. Název může být znaková nebo Unicode konstanta, pravidelný identifikátor nebo vymezený identifikátor.

VELIKOST Specifikuje velikost souboru.

velikost je velikost souboru.

Pokud je specifikováno pomocí ADD FILE, velikost je počáteční velikost souboru. Pokud je specifikováno pomocí UPRAVIT SOUBOR, velikost je nová velikost souboru a musí být větší než současná velikost souboru.

Pokud není určena velikost primárního souboru, SQL Server používá velikost primárního souboru v modelové databázi. Když je specifikován sekundární datový soubor nebo log soubor, ale velikost souboru není určena, databázový engine nastaví soubor na 1 MB.

Přípony KB, MB, GB a TB lze použít k určení kilobajtů, megabajtů, gigabajtů nebo terabajtů. Výchozí hodnota je MB. Uveďte celé číslo a nezahrňte desetinnou čáru. Pro určení zlomku megabajtu převeďte hodnotu na kilobajty násobením čísla 1024. Například uveďte 1536 KB místo 1,5 MB (1,5 x 1024 = 1536).

MAXSIZE { max_size| UNLIMITED } Specifikuje maximální velikost souboru, na kterou může soubor narůst.

max_size Je maximální velikost souboru. Přípony KB, MB, GB a TB lze použít k určení kilobajtů, megabajtů, gigabajtů nebo terabajtů. Výchozí hodnota je MB. Uveďte celé číslo a nezahrňte desetinnou čáru. Pokud max_size není specifikováno, velikost souboru se zvýší, dokud nebude disk plný.

UNLIMITED Specifikuje, že soubor roste, dokud není disk plný. V SQL Serveru má soubor protokolu zadaný s neomezeným růstem maximální velikost 2 TB a datový soubor má maximální velikost 16 TB.

FILEGROWTH growth_increment Specifikuje automatický růstový inkrement souboru. Nastavení FILEGROWTH pro soubor nesmí překročit MAXSIZE.

growth_increment Je množství místa, které se přidává do souboru pokaždé, když je potřeba nové místo.

Hodnota může být určena v MB, KB, GB, TB nebo v procentech (%). Pokud je číslo uvedeno bez přípony MB, KB nebo %, výchozí je MB. Když je % specifikováno, velikost růstového inkrementu je specifikované procento velikosti souboru v době, kdy k tomuto přírůstku dojde. Specifikovaná velikost je zaokrouhlena na nejbližších 64 KB.

Hodnota 0 znamená, že automatický růst je nastaven na vypnutý a navíc není povoleno žádné další místo.

Pokud není specifikováno FILEGROWTH, výchozí hodnoty jsou:

  • Data 16 MB
  • Logové soubory 16 MB

<add_or_modify_filegroups>::=

Přidát, upravit nebo odstranit skupinu souborů z databáze.

PŘIDAT SOUBOROVOU SKUPINU filegroup_name Přidá souborovou skupinu do databáze.

Následující příklad vytváří skupinu souborů, která je přidána do databáze s názvem sql_db_mi, a přidá do ní soubor.

ALTER DATABASE sql_db_mi ADD FILEGROUP sql_db_mi_fg;
GO
ALTER DATABASE sql_db_mi ADD FILE (NAME='sql_db_mi_mod') TO FILEGROUP sql_db_mi_fg;

ODSTRAŇTE SOUBOROVOU SKUPINU filegroup_name Odstraní souborovou skupinu z databáze. Souborová skupina nemůže být odstraněna, pokud není prázdná. Nejdřív odstraňte všechny soubory ze skupiny souborů. Pro více informací viz "ODSTRANIT SOUBOR logical_file_name" dříve v tomto tématu.

MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | VÝCHOZÍ | NAME =new_filegroup_name } Upravuje skupinu souborů nastavením stavu na READ_ONLY nebo READ_WRITE, změní soubor jako výchozí skupinu databáze nebo změní název souborové skupiny.

<filegroup_updatability_option> Nastavuje vlastnost pouze pro čtení nebo čtení/zápis do souborové skupiny.

DEFAULT Změní výchozí skupinu souborů databáze na filegroup_name. Pouze jedna souborová skupina v databázi může být výchozí souborovou skupinou. Pro více informací viz Databázové soubory a skupiny souborů.

NAME = new_filegroup_name Změní název skupiny souborů na new_filegroup_name.

AUTOGROW_SINGLE_FILE

Když soubor ve skupině dosáhne prahu automatického růstu, roste pouze tento soubor. Toto je výchozí hodnota.

AUTOGROW_ALL_FILES

Když soubor ve skupině souborů splňuje prahovou hodnotu automatického zvětšování, zvětší se všechny soubory ve skupině souborů.

<filegroup_updatability_option>::=

Nastavuje vlastnost pouze pro čtení nebo čtení/zápis do souborové skupiny.

READ_ONLY | READONLY Specifikuje, že skupina souborů je pouze pro čtení. Aktualizace objektů v něm nejsou povoleny. Primární souborová skupina nemůže být pouze pro čtení. Pokud chcete tento stav změnit, musíte mít výhradní přístup k databázi. Další informace najdete v klauzuli SINGLE_USER.

Protože databáze pouze pro čtení neumožňuje úpravy dat:

  • Automatické obnovení se při spuštění systému přeskočí.
  • Zmenšování databáze není možné.
  • V databázích pouze pro čtení nedochází k žádnému zamykání. To může vést k rychlejšímu výkonu dotazů.

Poznámka:

Klíčové slovo READONLY bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se používání READONLY v nové vývojové práci a plánujte upravovat aplikace, které v současnosti používají READONLY. Použijte READ_ONLY místo toho.

READ_WRITE | READWRITE Specifikuje, že skupina je READ_WRITE. Aktualizace jsou povoleny pro objekty ve skupině souborů. Pokud chcete tento stav změnit, musíte mít výhradní přístup k databázi. Další informace najdete v klauzuli SINGLE_USER.

Poznámka:

Klíčové slovo READWRITE bude v budoucí verzi Microsoft SQL Server odstraněno. Vyhněte se používání READWRITE v nové vývojové práci a plánujte upravovat aplikace, které se READWRITE dříve používají READ_WRITE .

Stav těchto možností lze určit zkoumáním sloupce is_read_only v katalogu sys.databases nebo vlastnosti Updateability funkce DATABASEPROPERTYEX .

Poznámky

Chcete-li zmenšit velikost databáze, použijte DBCC SHRINKDATABASE.

Soubor nelze přidávat ani odebírat, dokud je BACKUP příkaz běží.

Pro každou databázi je možné zadat maximálně 32 767 souborů a 32 767 skupin souborů.

Examples

A. Přidání souboru do databáze

Následující příklad přidává datový soubor o velikosti 5 MB do databáze AdventureWorks2025.

USE master;
GO
ALTER DATABASE AdventureWorks2022
ADD FILE
(
  NAME = Test1dat2,
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
);
GO

B. Přidání skupiny souborů se dvěma soubory do databáze

Následující příklad vytváří skupinu Test1FG1 souborů v databázi AdventureWorks2025 a přidává do ní dva soubory o velikosti 5 MB.

USE master
GO
ALTER DATABASE AdventureWorks2022
ADD FILEGROUP Test1FG1;
GO
ALTER DATABASE AdventureWorks2022
ADD FILE
(
    NAME = test1dat3,
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
),
(
    NAME = test1dat4,
    SIZE = 5MB,
    MAXSIZE = 100MB,
    FILEGROWTH = 5MB
)  
TO FILEGROUP Test1FG1;
GO

C. Odstranění souboru z databáze

Následující příklad odstraní jeden ze souborů přidaných v příkladu B.

USE master;
GO
ALTER DATABASE AdventureWorks2022
REMOVE FILE test1dat4;
GO

D. Úprava souboru

Následující příklad zvětšuje velikost jednoho ze souborů přidaných v příkladu B. ALTER DATABASE s příkazem MODIFY FILE dokáže zvětšit pouze velikost souboru, takže pokud potřebujete zmenšit velikost souboru, musíte použít DBCC SHRINKFILE.

USE master;
GO

ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO

Tento příklad zmenšuje velikost datového souboru na 100 MB a poté specifikuje velikost na této hodnotě.

USE AdventureWorks2022;
GO

DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO

USE master;
GO

ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO

E. Nastavení skupiny souborů jako výchozí

Následující příklad činí souborovou skupinu vytvořenou Test1FG1 v příkladu B výchozí souborovou skupinou. Poté se výchozí skupina souborů resetuje na souborovou skupinu PRIMARY . Všimněte si, že musí být PRIMARY vymezeno závorkami nebo uvozovkami.

USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO

F. Přidání souborové skupiny pomocí ALTER DATABASE

Následující příklad přidává a FILEGROUP do databáze MyDB .

--Create and add a FILEGROUP
ALTER DATABASE MyDB
ADD FILEGROUP NewFG;
GO

--Add a file to FILEGROUP
ALTER DATABASE MyDB
ADD FILE
(
    NAME= 'MyFile',
)
TO FILEGROUP NewFG;
GO

G. Změňte skupinu souborů tak, aby když soubor ve skupině dosáhne prahu automatického růstu, všechny soubory ve skupině souborů rostly

Následující příklad generuje požadované ALTER DATABASE příkazy pro úpravu skupin souborů pro čtení a zápis s tímto AUTOGROW_ALL_FILES nastavením.

--Generate ALTER DATABASE ... MODIFY FILEGROUP statements
--so that all read-write filegroups grow at the same time.
SET NOCOUNT ON;

DROP TABLE IF EXISTS #tmpdbs
CREATE TABLE #tmpdbs (id INT IDENTITY(1,1), [dbid] INT, [dbname] sysname, isdone BIT);

DROP TABLE IF EXISTS #tmpfgs
CREATE TABLE #tmpfgs (id INT IDENTITY(1,1), [dbid] INT, [dbname] sysname, fgname sysname, isdone BIT);

INSERT INTO #tmpdbs ([dbid], [dbname], [isdone])
SELECT database_id, name, 0 FROM master.sys.databases (NOLOCK) WHERE is_read_only = 0 AND state = 0;

DECLARE @dbid INT, @query VARCHAR(1000), @dbname sysname, @fgname sysname

WHILE (SELECT COUNT(id) FROM #tmpdbs WHERE isdone = 0) > 0
BEGIN
    SELECT TOP 1 @dbname = [dbname], @dbid = [dbid] FROM #tmpdbs WHERE isdone = 0

    SET @query = 'SELECT ' + CAST(@dbid AS NVARCHAR) + ', ''' + @dbname + ''', [name], 0 FROM [' + @dbname + '].sys.filegroups WHERE [type] = ''FG'' AND is_read_only = 0;'
    INSERT INTO #tmpfgs
    EXEC (@query)

    UPDATE #tmpdbs
    SET isdone = 1
    WHERE [dbid] = @dbid
END;

IF (SELECT COUNT(ID) FROM #tmpfgs) > 0
BEGIN
    WHILE (SELECT COUNT(id) FROM #tmpfgs WHERE isdone = 0) > 0
    BEGIN
        SELECT TOP 1 @dbname = [dbname], @dbid = [dbid], @fgname = fgname FROM #tmpfgs WHERE isdone = 0

        SET @query = 'ALTER DATABASE [' + @dbname + '] MODIFY FILEGROUP [' + @fgname + '] AUTOGROW_ALL_FILES;'

        PRINT @query

        UPDATE #tmpfgs
        SET isdone = 1
        WHERE [dbid] = @dbid AND fgname = @fgname
    END
END;
GO

Viz také