Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Modifierar filer och filgrupper kopplade till databasen. Lägger till eller tar bort filer och filgrupper från en databas, och ändrar attributen för en databas eller dess filer och filgrupper. För andra alternativ för ALTER DATABASE, se ALTER DATABASE.
Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.
Välj en produkt
På följande rad väljer du det produktnamn som du är intresserad av och endast den produktinformationen visas.
* SQL Server *
Syntax
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>::=
Specificerar filen som ska läggas til, tas bort eller ändras.
database_name Är namnet på databasen som ska ändras.
LÄGG TILL FIL Lägger till en fil i databasen.
TILL FILGRUPP { filegroup_name } Specificerar filgruppen till vilken fil som ska läggas till. För att visa de aktuella filgrupperna och vilken filgrupp som är standard, använd katalogvyn sys.filegroups .
LÄGG TILL LOGGFIL Lägger till en loggfil som läggs till i den angivna databasen.
REMOVE FILE logical_file_name Tar bort den logiska filbeskrivningen från en instans av SQL Server och tar bort den fysiska filen. Filen kan inte tas bort om den inte är tom.
logical_file_name Är det logiska namnet som används i SQL Server när man refererar till filen.
Varning
Att ta bort en databasfil som har FILE_SNAPSHOT backuper kopplade till sig lyckas, men eventuella tillhörande snapshots kommer inte att raderas för att undvika att ogiltigförklara säkerhetskopiorna som hänvisar till databasfilen. Filen kommer att förkortas, men kommer inte att tas bort fysiskt för att bevara FILE_SNAPSHOT säkerhetskopior intakta. Mer information finns i Säkerhetskopiering och återställning av SQL Server med Microsoft Azure Blob Storage.
Gäller för: SQL Server (SQL Server 2016 (13.x) och senare).
ÄNDRA FIL Anger vilken fil som ska ändras. Endast en <filspec-egenskap> kan ändras åt gången. NAME måste alltid anges i <filspecifikationen> för att identifiera filen som ska ändras. Om STORLEK anges måste den nya storleken vara större än den aktuella filstorleken.
För att ändra det logiska namnet på en datafil eller loggfil, ange det logiska filnamnet som ska bytas namn i klausulen NAME och ange det nya logiska namnet för filen i klausulen NEWNAME . Till exempel:
MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name )
För att flytta en datafil eller loggfil till en ny plats, ange det aktuella logiska filnamnet i klausulen NAME och ange den nya sökvägen och operativsystemets filnamn i klausulen FILENAME . Till exempel:
MODIFY FILE ( NAME = logical_file_name, FILENAME = ' new_path/os_file_name ' )
När du flyttar en fulltextkatalog, ange endast den nya sökvägen i FILENAME-klausulen. Ange inte operativsystemets filnamn.
För mer information, se Flytta databasfiler.
För en FILESTREAM-filgrupp kan NAME ändras online. FILNAMN kan ändras online; Dock träder ändringen inte i kraft förrän efter att containern fysiskt flyttats och servern stängts av och sedan startats om.
Du kan ställa in en FILESTREAM-fil till OFFLINE. När en FILESTREAM-fil är offline markeras dess föräldrafilgrupp internt som offline; därför kommer all åtkomst till FILESTREAM-data inom den filgruppen att misslyckas.
Anmärkning
<add_or_modify_files> alternativ finns inte tillgängliga i en Innesluten databas.
<filspec:>:=
Styr filegenskaperna.
NAME logical_file_name Anger filens logiska namn.
logical_file_name Är det logiska namnet som används i en instans av SQL Server när man refererar till filen.
NEWNAME new_logical_file_name Anger ett nytt logiskt namn för filen.
new_logical_file_name Är namnet som ersätter det befintliga logiska filnamnet. Namnet måste vara unikt inom databasen och följa reglerna för identifierare. Namnet kan vara en tecken- eller Unicode-konstant, en vanlig identifierare eller en avgränsad identifierare.
FILNAMN { 'os_file_name' | 'filestream_path' | 'memory_optimized_data_path'} Specificerar operativsystemets (fysiska) filnamn.
' os_file_name ' För en standard (ROWS) filgrupp är detta sökvägen och filnamnet som operativsystemet använder när du skapar filen. Filen måste finnas på servern där SQL Server är installerad. Den angivna sökvägen måste finnas innan ALTER DATABASE-satsen exekveras.
Anmärkning
SIZE, MAXSIZE, och FILEGROWTH parametrar kan inte sättas när en UNC-sökväg anges för filen.
Systemdatabaser kan inte finnas i UNC:s aktiekataloger.
Datafiler bör inte läggas på komprimerade filsystem om inte filerna är skrivskyddade sekundärfiler, eller om databasen är skrivskyddad. Loggfiler bör aldrig sättas på komprimerade filsystem.
Om filen finns på en raw-partition måste os_file_name endast ange enhetsbeteckningen för en befintlig råpartition. Endast en fil kan läggas på varje rå partition.
'filestream_path' För en FILESTREAM-filgrupp avser FILENAME en sökväg där FILESTREAM-data kommer att lagras. Sökvägen till den sista mappen måste finnas och den sista mappen får inte finnas. Till exempel, om du anger sökvägen C:\MyFiles\MyFilestreamData, måste existera C:\MyFiles innan du kör ALTER DATABASE, men MyFilestreamData mappen får inte existera.
Anmärkning
Egenskaperna SIZE och FILEGROWTH gäller inte för en FILESTREAM-filgrupp.
'memory_optimized_data_path' För en minnesoptimerad filgrupp avser FILNAMN en sökväg där minnesoptimerad data lagras. Sökvägen till den sista mappen måste finnas och den sista mappen får inte finnas. Till exempel, om du anger sökvägen C:\MyFiles\MyData, måste existera C:\MyFiles innan du kör ALTER DATABASE, men MyData mappen får inte existera.
Filgruppen och filen (<filespec>) måste skapas i samma instruktion.
Anmärkning
Egenskaperna SIZE och FILEGROWTH gäller inte för en MEMORY_OPTIMIZED_DATA filgrupp.
För mer information om minnesoptimerade filgrupper, se The Memory Optimized Filegroup.
STORLEK Anger filstorleken. SIZE gäller inte för FILESTREAM-filgrupper.
storlek Är filens storlek.
När den anges med ADD FILE är storleken den initiala storleken för filen. När det anges med MODIFY FILE är storleken den nya storleken för filen och måste vara större än den aktuella filstorleken.
När storleken inte anges för primärfilen använder SQL Server storleken på primärfilen i modelldatabasen . När en sekundär datafil eller loggfil anges men storleken inte anges för filen, gör databasmotorn filen 1 MB.
Suffixen KB, MB, GB och TB kan användas för att specificera kilobyte, megabyte, gigabyte eller terabyte. Standardvärdet är MB. Ange ett heltal och inkludera inte decimal. För att specificera en bråkdel av en megabyte, konvertera värdet till kilobyte genom att multiplicera talet med 1024. Till exempel, ange 1536 KB istället för 1,5 MB (1,5 x 1024 = 1536).
Anmärkning
SIZE Kan inte sättas:
- När en UNC-sökväg anges för filen
- För
FILESTREAMochMEMORY_OPTIMIZED_DATAfilgrupper
MAXSIZE { max_size| UNLIMITED } Anger den maximala filstorleken som filen kan växa till.
max_size Är den maximala filstorleken. Suffixen KB, MB, GB och TB kan användas för att specificera kilobyte, megabyte, gigabyte eller terabyte. Standardvärdet är MB. Ange ett heltal och inkludera inte decimal. Om max_size inte anges ökar filstorleken tills disken är full.
UNLIMITED specificerar att filen växer tills disken är full. I SQL Server har en loggfil som angetts med obegränsad tillväxt en maximal storlek på 2 TB och en datafil har en maximal storlek på 16 TB. Det finns ingen maximal storlek när detta alternativ anges för en FILESTREAM-container. Den fortsätter att växa tills disken är full.
Anmärkning
MAXSIZE kan inte sättas när en UNC-sökväg anges för filen.
FILEGROWTH growth_increment Specificerar den automatiska tillväxtökningen av filen. FILEGROWTH-inställningen för en fil får inte överstiga MAXSIZE-inställningen. FILEGROWTH gäller inte för FILESTREAM-filgrupper.
growth_increment Är mängden utrymme som läggs till i filen varje gång nytt utrymme behövs.
Värdet kan anges i MB, KB, GB, TB eller procent (%). Om ett nummer anges utan MB, KB eller % suffix är standardvärdet MB. När % anges är tillväxtinkrementstorleken den angivna procentandelen av filstorleken vid tidpunkten för inkrementet. Den angivna storleken avrundas till närmaste 64 KB.
Värdet 0 indikerar att automatisk tillväxt är satt till av och att inget extra utrymme tillåts.
Om FILEGROWTH inte specificeras är standardvärdena:
| Utgåva | Standardvärden |
|---|---|
| Börjar med SQL Server 2016 (13.x) | Uppgifter 64 MB. Loggfiler 64 MB. |
| Börjar med SQL Server 2005 (9.x) | Uppgifter 1 MB. Loggfiler 10%. |
| Före SQL Server 2005 (9.x) | Uppgifter 10%. Loggfiler 10%. |
Anmärkning
FILEGROWTH Kan inte sättas:
- När en UNC-sökväg anges för filen
- För
FILESTREAMochMEMORY_OPTIMIZED_DATAfilgrupper
OFFLINE Sätter filen offline och gör alla objekt i filgruppen otillgängliga.
Försiktighet
Använd detta alternativ endast när filen är korrupt och kan återställas. En fil som är inställd på OFFLINE kan endast sättas online genom att återställa filen från backup. För mer information om återställning av en enskild fil, se RESTORE.
<filspec-alternativ> finns inte tillgängliga i en Innesluten databas.
<add_or_modify_filegroups>::=
Lägg till en filgrupp, modifiera eller ta bort en filgrupp från databasen.
LÄGG TILL FILGRUPP filegroup_name Lägger till en filgrupp i databasen.
CONTAINS FILESTREAM Specificerar att filgruppen lagrar FILESTREAM binära stora objekt (BLOBs) i filsystemet.
INNEHÅLLER MEMORY_OPTIMIZED_DATA
Gäller för: SQL Server (SQL Server 2014 (12.x) och senare)
Specificerar att filgruppen lagrar minnesoptimerad data i filsystemet. För mer information, se In-Memory OLTP - In-Memory Optimering. Endast en MEMORY_OPTIMIZED_DATA filgrupp tillåts per databas. För att skapa minnesoptimerade tabeller kan filgruppen inte vara tom. Det måste finnas minst en fil.
filegroup_name syftar på en väg. Sökvägen till den sista mappen måste finnas och den sista mappen får inte finnas.
TA BORT FILGRUPP filegroup_name Tar bort en filgrupp från databasen. Filgruppen kan inte tas bort om den inte är tom. Ta bort alla filer från filgruppen först. För mer information, se "REMOVE FILE logical_file_name" tidigare i detta ämne.
Anmärkning
Om inte FILESTREAM Garbage Collector har tagit bort alla filer från en FILESTREAM-container, kommer operationen ALTER DATABASE REMOVE FILE att ta bort en FILESTREAM-container att misslyckas och ge ett fel. Se avsnittet Att ta bort en FILESTREAM Container senare i detta ämne.
MODIFIERA FILGRUPP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME =new_filegroup_name } Ändrar filgruppen genom att sätta statusen till READ_ONLY eller READ_WRITE, göra filgruppen till standardfilgrupp för databasen eller ändra filgruppens namn.
<filegroup_updatability_option> Sätter egenskapen read-only eller read/write till filgruppen.
DEFAULT Ändrar standardfilgruppen i databasen till filegroup_name. Endast en filgrupp i databasen kan vara standardfilgruppen. För mer information, se Databasfiler och filgrupper.
NAMN = new_filegroup_name Ändrar filgruppens namn till new_filegroup_name.
AUTOGROW_SINGLE_FILE Gäller för: SQL Server (SQL Server 2016 (13.x) och senare)
När en fil i filgruppen når autogrow-tröskeln växer endast den filen. Det här är standardinställningen.
AUTOGROW_ALL_FILES
Gäller för: SQL Server (SQL Server 2016 (13.x) och senare)
När en fil i filgruppen uppfyller tröskelvärdet för autogrow växer alla filer i filgruppen.
Anmärkning
Detta är standardvärdet för TempDB.
<filegroup_updatability_option>::=
Sätter egenskapen read-only eller read/write till filgruppen.
READ_ONLY | READONLY: Specificerar att filgruppen är skrivskyddad. Uppdateringar av objekt i den är inte tillåtna. Den primära filgruppen kan inte göras skrivskyddad. Om du vill ändra det här tillståndet måste du ha exklusiv åtkomst till databasen. Mer information finns i SINGLE_USER-satsen.
Eftersom en skrivskyddad databas inte tillåter dataändringar:
- Automatisk återställning hoppas över vid systemstart.
- Att krympa databasen är inte möjligt.
- Ingen låsning sker i skrivskyddade databaser. Detta kan leda till snabbare frågeprestanda.
Anmärkning
Nyckelordet READONLY kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READONLY i nytt utvecklingsarbete och planera att modifiera applikationer som för närvarande använder READONLY. Använd READ_ONLY i stället.
READ_WRITE | READWRITE specificerar att gruppen är READ_WRITE. Uppdateringar är aktiverade för objekten i filgruppen. Om du vill ändra det här tillståndet måste du ha exklusiv åtkomst till databasen. Mer information finns i SINGLE_USER-satsen.
Anmärkning
Nyckelordet READWRITE kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READWRITE i nytt utvecklingsarbete och planera att modifiera applikationer som redan används READWRITE istället READ_WRITE .
Tips/Råd
Status för dessa alternativ kan bestämmas genom att undersöka kolumnen is_read_only i sys.databases-katalogvyn eller funktionen Updateability-egenskapenDATABASEPROPERTYEX.
Anmärkningar
Om du vill minska storleken på en databas använder du DBCC SHRINKDATABASE.
Du kan inte lägga till eller ta bort en fil medan en BACKUP sats körs.
Högst 32 767 filer och 32 767 filgrupper kan anges för varje databas.
Från och med SQL Server 2005 (9.x) underhålls tillståndet för en databasfil (till exempel online eller offline) oberoende av databasens tillstånd. Mer information finns i filtillstånd.
- Tillståndet för filerna i en filgrupp avgör tillgängligheten för hela filgruppen. För att en filgrupp ska vara tillgänglig måste alla filer i filgruppen vara online.
- Om en filgrupp är offline kommer varje försök att komma åt filgruppen via en SQL-sats att misslyckas med ett fel. När du bygger frågeplaner för
SELECTsatser undviker frågeoptimeraren icke-klustrade index och indexerade vyer som finns i offline-filgrupper. Detta gör att dessa instruktioner kan lyckas. Om offline-filgruppen innehåller heap- eller klustrade indexet för måltabellen misslyckas dock satsernaSELECT. Dessutom kommer allaINSERT,UPDATE, ellerDELETEsatser som modifierar en tabell med något index i en offline-filgrupp att misslyckas.
SIZE, MAXSIZE och FILEGROWTH-parametrarna kan inte sättas när en UNC-sökväg anges för filen.
SIZE- och FILEGROWTH-parametrarna kan inte ställas in för minnesoptimerade filgrupper.
Nyckelordet READONLY kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READONLY i nytt utvecklingsarbete och planera att modifiera applikationer som för närvarande använder READONLY. Använd READ_ONLY i stället.
Nyckelordet READWRITE kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READWRITE i nytt utvecklingsarbete och planera att modifiera applikationer som redan används READWRITE istället READ_WRITE .
Flytta filer
Du kan flytta system- eller användardefinierade data och loggfiler genom att ange den nya platsen i FILNAMN. Detta kan vara användbart i följande scenarier:
- Misslyckande återhämtning. Till exempel är databasen i misstänkt läge eller avstängning orsakad av hårdvarufel.
- Planerad flytt.
- Flytt för schemalagd diskunderhåll.
För mer information, se Flytta databasfiler.
Initialisering av filer
Som standard initieras data och loggfiler genom att fylla filerna med nollor när du utför någon av följande operationer:
- Skapa en databas.
- Lägg till filer i en befintlig databas.
- Öka storleken på en befintlig fil.
- Återställ en databas eller filgrupp.
Datafiler kan initieras omedelbart. Detta möjliggör snabb exekvering av dessa filoperationer. Mer information finns i Databasfilinitiering.
Att ta bort en FILESTREAM-behållare
Även om FILESTREAM-containern kan ha tömmats med operationen "DBCC SHRINKFILE", kan databasen ändå behöva behålla referenser till de raderade filerna av olika systemunderhållsskäl. sp_filestream_force_garbage_collection kör FILESTREAM Garbage Collector för att ta bort dessa filer när det är säkert att göra det. Om inte FILESTREAM Garbage Collector har tagit bort alla filer från en FILESTREAM-container, kommer ALTER DATABASE REMOVE FILE-operationen att misslyckas med att ta bort en FILESTREAM-container och returnera ett fel. Följande process rekommenderas för att ta bort en FILESTREAM-container.
- Kör DBCC SHRINKFILE med alternativet EMPTYFILE för att flytta det aktiva innehållet i denna container till andra containrar.
- Se till att loggkopior har tagits, i FULL eller BULK_LOGGED återställningsmodell.
- Säkerställ att replikationsloggläsarjobbet har körts, om relevant.
- Kör sp_filestream_force_garbage_collection för att tvinga skräpsamlaren att radera alla filer som inte längre behövs i denna container.
- Kör ALTER DATABASE med alternativet REMOVE FILE för att ta bort denna container.
- Upprepa steg 2 till 4 en gång till för att slutföra sophämtningen.
- Använd ALTER-databasen... REMOVE FILE för att ta bort denna container.
Examples
A. Att lägga till en fil i en databas
Följande exempel lägger till en 5 MB stor datafil i AdventureWorks2025-databasen.
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. Att lägga till en filgrupp med två filer i en databas
Följande exempel skapar filgruppen Test1FG1 i AdventureWorks2025-databasen och lägger till två 5-MB-filer till filgruppen.
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. Att lägga till två loggfiler i en databas
Följande exempel lägger till två 5 MB stora loggfiler till AdventureWorks2025-databasen.
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. Ta bort en fil från en databas
Följande exempel tar bort en av filerna som lades till i exempel B.
USE master;
GO
ALTER DATABASE AdventureWorks2022
REMOVE FILE test1dat4;
GO
E. Att ändra en fil
Följande exempel ökar storleken på en av filerna som lagts till i exempel B. ALTER DATABASE med kommandot MODIFY FILE kan bara göra en fil större, så om du behöver göra filstorleken mindre måste du använda DBCC SHRINKFILE.
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO
Detta exempel krymper storleken på en datafil till 100 MB och specificerar sedan storleken vid den mängden.
USE AdventureWorks2022;
GO
DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO
F. Flytta en fil till en ny plats
Följande exempel flyttar Test1dat2 filen som skapats i exempel A till en ny katalog.
Anmärkning
Du måste fysiskt flytta filen till den nya katalogen innan du kör detta exempel. Därefter, stoppa och starta instansen av SQL Server eller ta databasen AdventureWorks2025 OFFLINE och sedan ONLINE för att implementera ändringen.
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(
NAME = Test1dat2,
FILENAME = N'c:\t1dat2.ndf'
);
GO
G. Flytta tempdb till en ny plats
Följande exempel flyttar tempdb från sin nuvarande plats på disken till en annan diskplats. Eftersom tempdb den återskapas varje gång MSSQLSERVER-tjänsten startas behöver du inte fysiskt flytta data och loggfiler. Filerna skapas när tjänsten startas om i steg 3. Tills tjänsten återstartas fortsätter den tempdb att fungera på sin nuvarande plats.
Bestäm databasens logiska filnamn
tempdboch deras nuvarande plats på disken.SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb'); GOÄndra platsen för varje fil genom att använda
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'); GOStoppa och starta om instansen av SQL Server.
Verifiera filändringen.
SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb');Radera filerna tempdb.mdf och templog.ldf från deras ursprungliga plats.
H. Att göra en filgrupp till standard
Följande exempel gör filgruppen Test1FG1 som skapats i exempel B till standardfilgruppen. Därefter återställs standardfilgruppen till filgruppen PRIMARY . Observera att PRIMARY måste avgränsas med parenteser eller citationstecken.
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO
I. Lägga till en filgrupp med hjälp av ALTER DATABASE
Följande exempel lägger till en FILEGROUP som innehåller klausulen FILESTREAM i databasen FileStreamPhotoDB .
--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
Följande exempel lägger till en FILEGROUP som innehåller klausulen MEMORY_OPTIMIZED_DATA i databasen xtp_db . Filgruppen lagrar minnesoptimerad data.
--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. Ändra filgruppen så att när en fil i filgruppen når autogrow-tröskeln, växer alla filer i filgruppen
Följande exempel genererar de nödvändiga ALTER DATABASE satserna för att ändra läs-skriv-filgrupper med inställningen AUTOGROW_ALL_FILES .
--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
Se även
* SQL Managed Instance *
Hanterad instans i Azure SQL
Använd detta uttalande med en databas i Azure SQL Managed Instance.
Syntax för Azure SQL Managed Instance
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>::=
Specificerar filen som ska läggas til, tas bort eller ändras.
database_name Är namnet på databasen som ska ändras.
LÄGG TILL FIL Lägger till en fil i databasen.
TILL FILGRUPP { filegroup_name } Specificerar filgruppen till vilken fil som ska läggas till. För att visa de aktuella filgrupperna och vilken filgrupp som är standard, använd katalogvyn sys.filegroups .
REMOVE FILE logical_file_name Tar bort den logiska filbeskrivningen från en instans av SQL Server och tar bort den fysiska filen. Filen kan inte tas bort om den inte är tom.
logical_file_name Är det logiska namnet som används i SQL Server när man refererar till filen.
ÄNDRA FIL Anger vilken fil som ska ändras. Endast en <filspec-egenskap> kan ändras åt gången. NAME måste alltid anges i <filspecifikationen> för att identifiera filen som ska ändras. Om STORLEK anges måste den nya storleken vara större än den aktuella filstorleken.
<filspec:>:=
Styr filegenskaperna.
NAME logical_file_name Anger filens logiska namn.
logical_file_name Är det logiska namnet som används i en instans av SQL Server när man refererar till filen.
NEWNAME new_logical_file_name Anger ett nytt logiskt namn för filen.
new_logical_file_name Är namnet som ersätter det befintliga logiska filnamnet. Namnet måste vara unikt inom databasen och följa reglerna för identifierare. Namnet kan vara en tecken- eller Unicode-konstant, en vanlig identifierare eller en avgränsad identifierare.
STORLEK Anger filstorleken.
storlek Är filens storlek.
När den anges med ADD FILE är storleken den initiala storleken för filen. När det anges med MODIFY FILE är storleken den nya storleken för filen och måste vara större än den aktuella filstorleken.
När storleken inte anges för primärfilen använder SQL Server storleken på primärfilen i modelldatabasen . När en sekundär datafil eller loggfil anges men storleken inte anges för filen, gör databasmotorn filen 1 MB.
Suffixen KB, MB, GB och TB kan användas för att specificera kilobyte, megabyte, gigabyte eller terabyte. Standardvärdet är MB. Ange ett heltal och inkludera inte decimal. För att specificera en bråkdel av en megabyte, konvertera värdet till kilobyte genom att multiplicera talet med 1024. Till exempel, ange 1536 KB istället för 1,5 MB (1,5 x 1024 = 1536).
MAXSIZE { max_size| UNLIMITED } Anger den maximala filstorleken som filen kan växa till.
max_size Är den maximala filstorleken. Suffixen KB, MB, GB och TB kan användas för att specificera kilobyte, megabyte, gigabyte eller terabyte. Standardvärdet är MB. Ange ett heltal och inkludera inte decimal. Om max_size inte anges ökar filstorleken tills disken är full.
UNLIMITED specificerar att filen växer tills disken är full. I SQL Server har en loggfil som angetts med obegränsad tillväxt en maximal storlek på 2 TB och en datafil har en maximal storlek på 16 TB.
FILEGROWTH growth_increment Specificerar den automatiska tillväxtökningen av filen. FILEGROWTH-inställningen för en fil får inte överstiga MAXSIZE-inställningen.
growth_increment Är mängden utrymme som läggs till i filen varje gång nytt utrymme behövs.
Värdet kan anges i MB, KB, GB, TB eller procent (%). Om ett nummer anges utan MB, KB eller % suffix är standardvärdet MB. När % anges är tillväxtinkrementstorleken den angivna procentandelen av filstorleken vid tidpunkten för inkrementet. Den angivna storleken avrundas till närmaste 64 KB.
Värdet 0 indikerar att automatisk tillväxt är satt till av och att inget extra utrymme tillåts.
Om FILEGROWTH inte specificeras är standardvärdena:
- Data 16 MB
- Loggfiler 16 MB
<add_or_modify_filegroups>::=
Lägg till en filgrupp, modifiera eller ta bort en filgrupp från databasen.
LÄGG TILL FILGRUPP filegroup_name Lägger till en filgrupp i databasen.
Följande exempel skapar en filgrupp som läggs till i en databas som heter sql_db_mi, och lägger till en fil i filgruppen.
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;
TA BORT FILGRUPP filegroup_name Tar bort en filgrupp från databasen. Filgruppen kan inte tas bort om den inte är tom. Ta bort alla filer från filgruppen först. För mer information, se "REMOVE FILE logical_file_name" tidigare i detta ämne.
MODIFIERA FILGRUPP filegroup_name { <filegroup_updatability_option> | DEFAULT | NAME =new_filegroup_name } Ändrar filgruppen genom att sätta statusen till READ_ONLY eller READ_WRITE, göra filgruppen till standardfilgrupp för databasen eller ändra filgruppens namn.
<filegroup_updatability_option> Sätter egenskapen read-only eller read/write till filgruppen.
DEFAULT Ändrar standardfilgruppen i databasen till filegroup_name. Endast en filgrupp i databasen kan vara standardfilgruppen. För mer information, se Databasfiler och filgrupper.
NAMN = new_filegroup_name Ändrar filgruppens namn till new_filegroup_name.
AUTOGROW_SINGLE_FILE
När en fil i filgruppen når autogrow-tröskeln växer endast den filen. Det här är standardinställningen.
AUTOGROW_ALL_FILES
När en fil i filgruppen uppfyller tröskelvärdet för autogrow växer alla filer i filgruppen.
<filegroup_updatability_option>::=
Sätter egenskapen read-only eller read/write till filgruppen.
READ_ONLY | READONLY: Specificerar att filgruppen är skrivskyddad. Uppdateringar av objekt i den är inte tillåtna. Den primära filgruppen kan inte göras skrivskyddad. Om du vill ändra det här tillståndet måste du ha exklusiv åtkomst till databasen. Mer information finns i SINGLE_USER-satsen.
Eftersom en skrivskyddad databas inte tillåter dataändringar:
- Automatisk återställning hoppas över vid systemstart.
- Att krympa databasen är inte möjligt.
- Ingen låsning sker i skrivskyddade databaser. Detta kan leda till snabbare frågeprestanda.
Anmärkning
Nyckelordet READONLY kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READONLY i nytt utvecklingsarbete och planera att modifiera applikationer som för närvarande använder READONLY. Använd READ_ONLY istället.
READ_WRITE | READWRITE specificerar att gruppen är READ_WRITE. Uppdateringar är aktiverade för objekten i filgruppen. Om du vill ändra det här tillståndet måste du ha exklusiv åtkomst till databasen. Mer information finns i SINGLE_USER-satsen.
Anmärkning
Nyckelordet READWRITE kommer att tas bort i en framtida version av Microsoft SQL Server. Undvik att använda READWRITE i nytt utvecklingsarbete och planera att modifiera applikationer som redan används READWRITE istället READ_WRITE .
Status för dessa alternativ kan bestämmas genom att undersöka kolumnen is_read_only i sys.databases-katalogvyn eller funktionen Updateability-egenskapenDATABASEPROPERTYEX.
Anmärkningar
Om du vill minska storleken på en databas använder du DBCC SHRINKDATABASE.
Du kan inte lägga till eller ta bort en fil medan en BACKUP sats körs.
Högst 32 767 filer och 32 767 filgrupper kan anges för varje databas.
Examples
A. Att lägga till en fil i en databas
Följande exempel lägger till en 5 MB stor datafil i AdventureWorks2025-databasen.
USE master;
GO
ALTER DATABASE AdventureWorks2022
ADD FILE
(
NAME = Test1dat2,
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
);
GO
B. Att lägga till en filgrupp med två filer i en databas
Följande exempel skapar filgruppen Test1FG1 i AdventureWorks2025-databasen och lägger till två 5-MB-filer till filgruppen.
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. Ta bort en fil från en databas
Följande exempel tar bort en av filerna som lades till i exempel B.
USE master;
GO
ALTER DATABASE AdventureWorks2022
REMOVE FILE test1dat4;
GO
D. Att ändra en fil
Följande exempel ökar storleken på en av filerna som lagts till i exempel B. ALTER DATABASE med kommandot MODIFY FILE kan bara göra en fil större, så om du behöver göra filstorleken mindre måste du använda DBCC SHRINKFILE.
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO
Detta exempel krymper storleken på en datafil till 100 MB och specificerar sedan storleken vid den mängden.
USE AdventureWorks2022;
GO
DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILE
(NAME = test1dat3,
SIZE = 200MB);
GO
E. Att göra en filgrupp till standard
Följande exempel gör filgruppen Test1FG1 som skapats i exempel B till standardfilgruppen. Därefter återställs standardfilgruppen till filgruppen PRIMARY . Observera att PRIMARY måste avgränsas med parenteser eller citationstecken.
USE master;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP Test1FG1 DEFAULT;
GO
ALTER DATABASE AdventureWorks2022
MODIFY FILEGROUP [PRIMARY] DEFAULT;
GO
F. Lägga till en filgrupp med hjälp av ALTER DATABASE
Följande exempel lägger till en FILEGROUP i databasen 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. Ändra filgruppen så att när en fil i filgruppen når autogrow-tröskeln, växer alla filer i filgruppen
Följande exempel genererar de nödvändiga ALTER DATABASE satserna för att ändra läs-skriv-filgrupper med inställningen AUTOGROW_ALL_FILES .
--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