Udostępnij za pomocą


ALTER DATABASE (Transact-SQL) Opcje plików i grup plików

Modyfikuje pliki i grupy plików powiązane z bazą danych. Dodaje lub usuwa pliki i grupy plików z bazy danych oraz zmienia atrybuty bazy danych lub jej plików i grup plików. Aby poznać inne opcje ALTER DATABASE, zobacz ALTER DATABASE.

Aby uzyskać więcej informacji na temat konwencji składni, zobacz Transact-SQL konwencje składni.

Wybieranie produktu

W poniższym wierszu wybierz nazwę produktu, którą cię interesuje, i zostanie wyświetlona tylko informacja o tym produkcie.

* SQL Server *  

 

Składnia

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>::=

Określa plik, który ma zostać dodany, usunięty lub zmodyfikowany.

database_name To nazwa bazy danych, która ma być modyfikowana.

ADD FILE Dodaje plik do bazy danych.

TO FILEGROUP { filegroup_name } Określa grupę plików, do której dodać określony plik. Aby wyświetlić aktualne grupy plików i która grupa plików jest domyślna, użyj widoku katalogu sys.filegroups .

DODAJ PLIK LOGA Dodaje plik loga do określonej bazy danych.

USUŃ PLIK logical_file_name Usuwa opis pliku logicznego z instancji SQL Server i usuwa plik fizyczny. Plik nie może zostać usunięty, chyba że jest pusty.

logical_file_name To nazwa logiczna używana w SQL Server podczas odwoływania się do pliku.

Ostrzeżenie

Usunięcie pliku bazy danych, który zawiera FILE_SNAPSHOT powiązane kopie zapasowe, zakończy się sukcesem, ale powiązane migawki nie zostaną usunięte, aby uniknąć unieważnienia kopii zapasowych odnoszących się do pliku bazy danych. Plik zostanie obcięty, ale nie zostanie fizycznie usunięty, aby zachować kopie zapasowe FILE_SNAPSHOT. Aby uzyskać więcej informacji, zobacz Sql Server Backup and Restore with Microsoft Azure Blob Storage (Tworzenie kopii zapasowych i przywracanie programu SQL Server za pomocą usługi Microsoft Azure Blob Storage). Dotyczy do: SQL Server (SQL Server 2016 (13.x) i nowszy).

EDIT FILE Określa plik, który należy zmodyfikować. Można zmienić tylko jedną <właściwość filespec> w danym momencie. NAME musi być zawsze określona w specyfikacji <> pliku, aby zidentyfikować plik do modyfikacji. Jeśli określono SIZE, nowy rozmiar musi być większy niż obecny rozmiar pliku.

Aby zmodyfikować logiczną nazwę pliku danych lub pliku logów, należy określić nazwę pliku logicznego, którą ma zostać przemianowana w klauzuli NAME , oraz określić nową nazwę logiczną pliku w klauzuli NEWNAME . Przykład:

MODIFY FILE ( NAME = logical_file_name, NEWNAME = new_logical_name )

Aby przenieść plik danych lub plik logów do nowej lokalizacji, należy określić aktualną nazwę pliku logicznego w klauzuli NAME oraz nową ścieżkę i nazwę pliku systemu operacyjnego w klauzuli FILENAME . Przykład:

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

Gdy przenosisz katalog pełnotekstowy, określ tylko nową ścieżkę w klauzuli FILENAME. Nie podawaj nazwy pliku systemu operacyjnego.

Więcej informacji można znaleźć w sekcji Pliki Przeniesienia Bazy Danych.

Dla grupy plików FILESTREAM NAME można modyfikować online. NAZWA pliku może być modyfikowana online; Jednak zmiana ta nie wchodzi w życie aż do fizycznego przeniesienia kontenera, wyłączenia serwera i ponownego uruchomienia.

Możesz ustawić plik FILESTREAM na OFFLINE. Gdy plik FILESTREAM jest offline, jego grupa nadrzędna jest wewnętrznie oznaczona jako offline; w związku z tym wszelki dostęp do danych FILESTREAM w tej grupie plików zakończy się niepowodzeniem.

Uwaga / Notatka

<add_or_modify_files> opcje nie są dostępne w Zamkniętej Bazie Danych.

<filespec>::=

Steruje właściwościami pliku.

NAZWA logical_file_name Określa logiczną nazwę pliku.

logical_file_name To nazwa logiczna używana w instancji SQL Server podczas odwoływania się do pliku.

NOWA NAZWA new_logical_file_name Określa nową nazwę logiczną pliku.

new_logical_file_name To nazwa zastępująca istniejącą nazwę pliku logicznego. Nazwa musi być unikalna w bazie danych i spełniać zasady dotyczące identyfikatorów. Nazwa może być znakową lub stałą Unicode, regularnym identyfikatorem lub identyfikatorem z ograniczeniami.

NAZWA PLIKU { 'os_file_name' | 'filestream_path' | 'memory_optimized_data_path'} Określa nazwę pliku systemu operacyjnego (fizyczną).

' os_file_name ' Dla standardowej (WIERSZOWEJ) grupy plików jest to ścieżka i nazwa pliku używana przez system operacyjny podczas tworzenia pliku. Plik musi znajdować się na serwerze, na którym zainstalowany jest SQL Server. Określona ścieżka musi istnieć przed wykonaniem instrukcji ALTER DATABASE.

Uwaga / Notatka

SIZE, MAXSIZE, a FILEGROWTH parametrów nie można ustawić, gdy określona jest ścieżka UNC dla pliku.

Bazy danych systemowe nie mogą znajdować się w katalogach współdzielonych UNC.

Pliki danych nie powinny być umieszczane w skompresowanych systemach plików, chyba że są to pliki pomocnicze tylko do odczytu lub jeśli baza danych jest tylko do odczytu. Pliki dziennika nigdy nie powinny być umieszczane w skompresowanych systemach plików.

Jeśli plik znajduje się na partycji pierwotnej, os_file_name musi określić tylko literę dysku istniejącej partycji pierwotnej. Na każdej surowej partycji można umieścić tylko jeden plik.

'filestream_path' W grupie plików FILESTREAM FILENAME odnosi się do ścieżki, na której przechowywane są dane FILESTREAM. Ścieżka do ostatniego folderu musi istnieć, a ostatni folder nie może istnieć. Na przykład, jeśli określisz ścieżkę C:\MyFiles\MyFilestreamData, to C:\MyFiles musi istnieć przed uruchomieniem ALTER DATABASE, ale folder nie MyFilestreamData może istnieć.

Uwaga / Notatka

Właściwości SIZE i FILEGROWTH nie mają zastosowania do grupy plików FILESTREAM.

'memory_optimized_data_path' W grupie plików zoptymalizowanej pod pamięć FILENAME odnosi się do ścieżki, na której przechowywane są dane zoptymalizowane pod pamięć. Ścieżka do ostatniego folderu musi istnieć, a ostatni folder nie może istnieć. Na przykład, jeśli określisz ścieżkę C:\MyFiles\MyData, to C:\MyFiles musi istnieć przed uruchomieniem ALTER DATABASE, ale folder nie MyData może istnieć.

Grupa plików i plik (<filespec>) muszą zostać utworzone w tej samej instrukcji.

Uwaga / Notatka

Właściwości SIZE i FILEGROWTH nie mają zastosowania do grupy plików MEMORY_OPTIMIZED_DATA.

Więcej informacji o grupach plików zoptymalizowanych pod pamięć można znaleźć w sekcji The Memory Optimized Filegroup.

SIZE Określa rozmiar pliku. SIZE nie dotyczy grup plików FILESTREAM.

rozmiar To rozmiar pliku.

Gdy jest to określone za pomocą ADD FILE, rozmiar jest rozmiarem początkowym pliku. Gdy jest to określone w MODIFY FILE, rozmiar jest nowym rozmiarem pliku i musi być większy niż obecny rozmiar pliku.

Gdy rozmiar pliku głównego nie jest podany, SQL Server używa rozmiaru pliku głównego w bazie modelu . Gdy plik danych lub log jest określony jako dodatkowy, ale rozmiar pliku nie jest określony dla tego pliku, silnik bazy danych nadaje plikowi rozmiar 1 MB.

Przyrostki KB, MB, GB i TB mogą być używane do określania kilobajtów, megabajtów, gigabajtów lub terabajtów. Wartość domyślna to MB. Określ liczbę pełną i nie podawaj liczby dziesiętnej. Aby określić ułamek megabajta, przekonwertuj wartość na kilobajty, mnożąc tę liczbę przez 1024. Na przykład określ 1536 KB zamiast 1,5 MB (1,5 x 1024 = 1536).

Uwaga / Notatka

SIZE nie można ustawić:

  • Gdy dla pliku określona jest ścieżka UNC
  • For FILESTREAM and MEMORY_OPTIMIZED_DATA file groups

MAXSIZE { max_size| UNLIMITED } Określa maksymalny rozmiar pliku, do którego plik może rosnąć.

max_size To maksymalny rozmiar pliku. Przyrostki KB, MB, GB i TB mogą być używane do określania kilobajtów, megabajtów, gigabajtów lub terabajtów. Wartość domyślna to MB. Określ liczbę pełną i nie podawaj liczby dziesiętnej. Jeśli max_size nie jest określona, rozmiar pliku będzie się zwiększał, aż dysk będzie pełny.

UNLIMITED Określa, że plik rośnie, aż dysk się zapełni. W programie SQL Server plik dziennika określony z nieograniczonym wzrostem ma maksymalny rozmiar 2 TB, a plik danych ma maksymalny rozmiar 16 TB. Nie ma maksymalnego rozmiaru, gdy ta opcja jest określona dla kontenera FILESTREAM. Nadal rośnie, dopóki dysk nie zostanie zapełniony.

Uwaga / Notatka

MAXSIZE nie można ustawić, gdy określona jest ścieżka UNC dla pliku.

FILEGROWTH growth_increment Określa automatyczny przyrost pliku do wzrostu. Ustawienie FILEGROWTH dla pliku nie może przekroczyć ustawienia MAXSIZE. FILEGROWTH nie dotyczy grup plików FILESTREAM.

growth_increment To ilość miejsca dodawanego do pliku za każdym razem, gdy potrzebne jest nowe miejsce.

Wartość ta może być określana w MB, KB, GB, TB lub procentach (%). Jeśli liczba jest podana bez przyrostku MB, KB lub %, domyślnie jest to MB. Gdy % jest określany, rozmiar przyrostu to określony procent rozmiaru pliku w momencie zaistnienia przyrostu. Podana wielkość jest zaokrąglana do najbliższych 64 KB.

Wartość 0 oznacza, że automatyczny wzrost jest wyłączony i nie ma dodatkowej przestrzeni.

Jeśli FILEGROWTH nie jest określony, wartości domyślne to:

wersja Wartości domyślne
Począwszy od programu SQL Server 2016 (13.x) Dane 64 MB. Pliki dziennika 64 MB.
Począwszy od programu SQL Server 2005 (9.x) Dane 1 MB. Pliki dziennika 10%.
Przed programem SQL Server 2005 (9.x) Dane 10%. Pliki dziennika 10%.

Uwaga / Notatka

FILEGROWTH nie można ustawić:

  • Gdy dla pliku określona jest ścieżka UNC
  • For FILESTREAM and MEMORY_OPTIMIZED_DATA file groups

OFFLINE Ustawia plik offline i sprawia, że wszystkie obiekty w grupie plików są niedostępne.

Ostrzeżenie

Używaj tej opcji tylko wtedy, gdy plik jest uszkodzony i można go przywrócić. Plik ustawiony na OFFLINE można ustawić online tylko poprzez przywrócenie pliku z kopii zapasowej. Więcej informacji o przywracaniu pojedynczego pliku można znaleźć w artykule RESTORE.

<opcje filespec> nie są dostępne w Zawartej Bazie Danych.

<add_or_modify_filegroups>::=

Dodaj, modyfikuj lub usuwaj grupę plików z bazy danych.

DODAJ GRUPĘ PLIKÓW filegroup_name Dodaje grupę plików do bazy danych.

ZAWIERA FILESTREAM Określa, że grupa plików przechowuje binarne duże obiekty (BLOB) FILESTREAM w systemie plików.

ZAWIERA MEMORY_OPTIMIZED_DATA

Dotyczy do: SQL Server (SQL Server 2014 (12.x) i nowszy)

Określa, że grupa plików przechowuje dane zoptymalizowane pod pamięć w systemie plików. Więcej informacji można znaleźć w In-Memory OLTP - In-Memory Optymalizacja. Tylko jedna MEMORY_OPTIMIZED_DATA grupa plików jest dozwolona dla każdej bazy danych. Do tworzenia tabel zoptymalizowanych pod pamięć grupa plików nie może być pusta. Musi być przynajmniej jeden plik. filegroup_name odnosi się do ścieżki. Ścieżka do ostatniego folderu musi istnieć, a ostatni folder nie może istnieć.

USUŃ GRUPĘ PLIKÓW filegroup_name Usuwa grupę plików z bazy danych. Grupy plików nie można usunąć, chyba że jest pusta. Najpierw usuń wszystkie pliki z grupy plików. Więcej informacji znajdziesz w sekcji "USUŃ FILE logical_file_name" wcześniej w tym temacie.

Uwaga / Notatka

Jeśli FILESTREAM Garbage Collector nie usunie wszystkich plików z kontenera FILESTREAM, operacja ALTER DATABASE REMOVE FILE usunięcia kontenera FILESTREAM nie zostanie zawieszona i zwróci błąd. Zobacz sekcję Usuwanie kontenera FILESTREAM później w tym temacie.

MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DOMYŚLNE | NAME =new_filegroup_name } Modyfikuje grupę plików, ustawiając status na READ_ONLY lub READ_WRITE, czyniąc grupę plików domyślną dla bazy danych lub zmieniając nazwę grupy plików.

<filegroup_updatability_option> Ustawia właściwość tylko do odczytu lub czytania/zapisu na grupę plików.

DEFAULT Zmienia domyślną grupę plików bazy danych na filegroup_name. Tylko jedna grupa plików w bazie danych może być domyślną grupą plików. Więcej informacji można znaleźć w sekcji Pliki bazy danych i grupy plików.

NAME = new_filegroup_name Zmienia nazwę grupy plików na new_filegroup_name.

AUTOGROW_SINGLE_FILE dotyczy do: SQL Server (SQL Server 2016 (13.x) i nowszy)

Gdy plik w grupie plików osiągnie próg autowzrostu, rośnie tylko ten plik. Jest to opcja domyślna.

AUTOGROW_ALL_FILES

Dotyczy do: SQL Server (SQL Server 2016 (13.x) i nowszy)

Gdy plik w grupie plików spełnia próg automatycznego zwiększania, wszystkie pliki w grupie plików rosną.

Uwaga / Notatka

To jest domyślna wartość dla TempDB.

<filegroup_updatability_option>::=

Ustawia właściwość tylko do odczytu lub odczytu/zapisu na grupę plików.

READ_ONLY | READONLY Określa, że grupa plików jest tylko do odczytu. Aktualizacje obiektów w nim nie są dozwolone. Główna grupa plików nie może być dostępna tylko do odczytu. Aby zmienić ten stan, musisz mieć wyłączny dostęp do bazy danych. Aby uzyskać więcej informacji, zobacz klauzulę SINGLE_USER.

Ponieważ baza danych tylko do odczytu nie pozwala na modyfikację danych:

  • Automatyczne odzyskiwanie jest pomijane przy starcie systemu.
  • Zmniejszenie bazy danych nie jest możliwe.
  • W bazach danych tylko do odczytu nie występuje blokada. Może to powodować szybszą wydajność zapytań.

Uwaga / Notatka

Słowo READONLY kluczowe zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania READONLY w nowych projektach deweloperskich i planuj modyfikację aplikacji, które obecnie korzystają z READONLY. Użyj READ_ONLY zamiast tego.

READ_WRITE | READWRITE Określa, że grupa jest READ_WRITE. Aktualizacje są włączone dla obiektów w grupie plików. Aby zmienić ten stan, musisz mieć wyłączny dostęp do bazy danych. Aby uzyskać więcej informacji, zobacz klauzulę SINGLE_USER.

Uwaga / Notatka

Słowo READWRITE kluczowe zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania READWRITE w nowych projektach programistycznych i planuj modyfikację aplikacji, które są używane wcześniej READWRITEREAD_WRITE .

Wskazówka

Status tych opcji można określić, analizując kolumnę is_read_only w widoku katalogu sys.databases lub właściwość Updateability funkcji DATABASEPROPERTYEX .

Uwagi

Aby zmniejszyć rozmiar bazy danych, użyj DBCC SHRINKDATABASE.

Nie można dodawać ani usuwać pliku podczas BACKUP działania instrukcji.

Dla każdej bazy danych można określić maksymalnie 32 767 plików i 32 767 grup plików.

Począwszy od SQL Server 2005 (9.x), stan pliku bazy danych (na przykład online lub offline) jest utrzymywany niezależnie od stanu bazy danych. Aby uzyskać więcej informacji, zobacz File States.

  • Stan plików w grupie plików określa dostępność całej grupy plików. Aby grupa plików był dostępna, wszystkie pliki w grupie plików muszą być w trybie online.
  • Jeśli grupa plików jest offline, każda próba dostępu do grupy plików za pomocą instrukcji SQL zakończy się błędem. Gdy tworzysz plany zapytań dla SELECT instrukcji, optymalizator zapytań unika indeksów nieklastrowanych i widoków indeksowanych znajdujących się w grupach plików offline. Dzięki temu te instrukcje mogą zakończyć się powodzeniem. Jednak jeśli grupa plików offline zawiera kopic lub klastrowany indeks docelowej tabeli, instrukcje nie wychodzą.SELECT Dodatkowo, każde INSERT, UPDATE, lub DELETE polecenie, które modyfikuje tabelę dowolnym indeksem w grupie plików offline, nie ulegnie awarii.

Parametry SIZE, MAXSIZE i FILEGROWTH nie mogą być ustawione, gdy określona jest ścieżka UNC dla pliku.

Parametry SIZE i FILEGROWTH nie mogą być ustawione dla grup plików zoptymalizowanych pod pamięć.

Słowo READONLY kluczowe zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj ich w READONLY nowych projektach deweloperskich i planuj modyfikować aplikacje, które obecnie korzystają z READONLY. Użyj READ_ONLY zamiast tego.

Słowo READWRITE kluczowe zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania READWRITE w nowych projektach programistycznych i planuj modyfikację aplikacji, które są używane wcześniej READWRITEREAD_WRITE .

Przenoszenie plików

Możesz przenosić dane systemowe lub zdefiniowane przez użytkownika pliki i pliki logów, określając nową lokalizację w FILENAME. Może to być przydatne w następujących sytuacjach:

  • Odzyskiwanie awarii. Na przykład baza danych znajduje się w trybie podejrzanym lub wyłączona z powodu awarii sprzętu.
  • Planowana przeprowadzka.
  • Przeprowadzka na zaplanowaną konserwację dysku.

Więcej informacji można znaleźć w sekcji Pliki Przeniesienia Bazy Danych.

Inicjalizacja plików

Domyślnie pliki danych i logów są inicjalizowane przez wypełnienie plików zerami podczas wykonywania jednej z następujących operacji:

  • Utwórz bazę danych.
  • Dodaj pliki do istniejącej bazy danych.
  • Zwiększ rozmiar istniejącego pliku.
  • Przywróć bazę danych lub grupę plików.

Pliki danych mogą być inicjalizowane natychmiast. Umożliwia to szybkie wykonywanie tych operacji plikowych. Aby uzyskać więcej informacji, zobacz Inicjowanie pliku bazy danych.

Usuwanie kontenera FILESTREAM

Chociaż kontener FILESTREAM mógł zostać opróżniony za pomocą operacji "DBCC SHRINKFILE", baza danych może nadal wymagać odwoływania się do usuniętych plików z różnych powodów konserwacyjnych systemu. sp_filestream_force_garbage_collection uruchamia FILESTREAM Garbage Collector, aby usunąć te pliki, gdy będzie to bezpieczne. Jeśli FILESTREAM Garbage Collector nie usunął wszystkich plików z kontenera FILESTREAM, operacja ALTER DATABASE REMOVE FILE nie usunie kontenera FILESTREAM i zwróci błąd. Zaleca się następujący proces usunięcia kontenera FILESTREAM.

  1. Uruchom DBCC SHRINKFILE z opcją EMPTYFILE, aby przenieść aktywną zawartość tego kontenera do innych kontenerów.
  2. Upewnij się, że kopie kopii zapasowe logów zostały wykonane, zarówno w PEŁNYM, jak i BULK_LOGGED modelu odzyskiwania.
  3. Upewnij się, że zadanie czytnika logów replikacyjnych zostało uruchomione, jeśli to istotne.
  4. Uruchom sp_filestream_force_garbage_collection , aby zmusić garbage collector do usunięcia plików, które nie są już potrzebne w tym kontenerze.
  5. Uruchom ALTER DATABASE z opcją USUŃ PLIK, aby usunąć ten kontener.
  6. Powtórz kroki 2 do 4 jeszcze raz, aby ukończyć zbieranie śmieci.
  7. Użyj bazy ALTER... USUŃ PLIK, aby usunąć ten kontener.

Przykłady

A. Dodawanie pliku do bazy danych

Poniższy przykład dodaje plik danych o pojemności 5 MB do bazy danych 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. Dodanie grupy plików z dwoma plikami do bazy danych

Poniższy przykład tworzy grupę Test1FG1 plików w bazie AdventureWorks2025 i dodaje do niej dwa pliki o rozmiarze 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. Dodawanie dwóch plików logów do bazy danych

Poniższy przykład dodaje dwa pliki logów o pojemności 5 MB do bazy danych AdventureWorks2025.

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. Usuwanie pliku z bazy danych

Poniższy przykład usuwa jeden z plików dodanych w przykładzie B.

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

E. Modyfikowanie pliku

Poniższy przykład zwiększa rozmiar jednego z plików dodanych w przykładzie B. ALTER DATABASE z poleceniem MODIFY FILE może tylko powiększyć rozmiar pliku, więc jeśli musisz zmniejszyć rozmiar pliku, musisz użyć DBCC SHRINKFILE.

USE master;
GO

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

Ten przykład zmniejsza rozmiar pliku danych do 100 MB, a następnie określa rozmiar w tej wartości.

USE AdventureWorks2022;
GO

DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO

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

F. Przenoszenie pliku do nowej lokalizacji

Poniższy przykład przenosi plik utworzony Test1dat2 w przykładzie A do nowego katalogu.

Uwaga / Notatka

Musisz fizycznie przenieść plik do nowego katalogu, zanim uruchomisz ten przykład. Następnie zatrzymaj i uruchom instancję SQL Server lub przenieś bazę AdventureWorks2025 danych OFFLINE, a potem ONLINE, aby wdrożyć zmianę.

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

G. Przenoszenie tempdb do nowej lokalizacji

Poniższy przykład przenosi tempdb się z aktualnego miejsca na dysku do innego miejsca dysku. Ponieważ tempdb jest odtwarzana za każdym razem, gdy usługa MSSQLSERVER jest uruchamiana, nie musisz fizycznie przenosić danych i plików logów. Pliki są tworzone po wznowieniu usługi w kroku 3. Do czasu wznowienia tempdb usługi nadal działa w obecnej lokalizacji.

  1. Określ logiczne nazwy tempdb plików bazy danych oraz ich aktualne położenie na dysku.

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    GO
    
  2. Zmień lokalizację każdego pliku, używając 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. Zatrzymaj i zrestartuj instancję SQL Servera.

  4. Zweryfikowaj zmianę pliku.

    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
  5. Usuń pliki tempdb.mdf i templog.ldf z ich pierwotnej lokalizacji.

H. Ustawienie grupy plików jako domyślnej

Poniższy przykład sprawia, że grupa plików utworzona Test1FG1 w przykładzie B jest domyślną grupą plików. Następnie domyślna grupa plików jest resetowana do PRIMARY grupy plików. Należy zauważyć, że musi być PRIMARY wyznaczona nawiasem lub cudzysłowem.

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

I. Dodawanie grupy plików za pomocą ALTER DATABASE

Poniższy przykład dodaje do bazy FILEGROUP danych, która FILESTREAM zawiera klauzulę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

Poniższy przykład dodaje do bazy FILEGROUP danych, która MEMORY_OPTIMIZED_DATA zawiera klauzulęxtp_db. Grupa plików przechowuje dane zoptymalizowane pod pamięć.

--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. Zmień grupę plików tak, aby gdy plik w grupie plików osiągnie próg autowzrostu, wszystkie pliki w grupie plików zaczęły rosnąć

Poniższy przykład generuje wymagane ALTER DATABASE instrukcje do modyfikacji grup plików read-write za pomocą AUTOGROW_ALL_FILES tego ustawienia.

--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

Zobacz też

* Zarządzana instancja SQL *
 

 

Azure SQL Managed Instance

Użyj tego stwierdzenia z bazą danych w Azure SQL Managed Instance.

Składnia dla usługi 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>::=

Określa plik, który ma zostać dodany, usunięty lub zmodyfikowany.

database_name To nazwa bazy danych, która ma być modyfikowana.

ADD FILE Dodaje plik do bazy danych.

TO FILEGROUP { filegroup_name } Określa grupę plików, do której dodać określony plik. Aby wyświetlić aktualne grupy plików i która grupa plików jest domyślna, użyj widoku katalogu sys.filegroups .

USUŃ PLIK logical_file_name Usuwa opis pliku logicznego z instancji SQL Server i usuwa plik fizyczny. Plik nie może zostać usunięty, chyba że jest pusty.

logical_file_name To nazwa logiczna używana w SQL Server podczas odwoływania się do pliku.

EDIT FILE Określa plik, który należy zmodyfikować. Można zmienić tylko jedną <właściwość filespec> w danym momencie. NAME musi być zawsze określona w specyfikacji <> pliku, aby zidentyfikować plik do modyfikacji. Jeśli określono SIZE, nowy rozmiar musi być większy niż obecny rozmiar pliku.

<filespec>::=

Steruje właściwościami pliku.

NAZWA logical_file_name Określa logiczną nazwę pliku.

logical_file_name To nazwa logiczna używana w instancji SQL Server podczas odwoływania się do pliku.

NOWA NAZWA new_logical_file_name Określa nową nazwę logiczną pliku.

new_logical_file_name To nazwa zastępująca istniejącą nazwę pliku logicznego. Nazwa musi być unikalna w bazie danych i spełniać zasady dotyczące identyfikatorów. Nazwa może być znakową lub stałą Unicode, regularnym identyfikatorem lub identyfikatorem z ograniczeniami.

SIZE Określa rozmiar pliku.

rozmiar To rozmiar pliku.

Gdy jest to określone za pomocą ADD FILE, rozmiar jest rozmiarem początkowym pliku. Gdy jest to określone w MODIFY FILE, rozmiar jest nowym rozmiarem pliku i musi być większy niż obecny rozmiar pliku.

Gdy rozmiar pliku głównego nie jest podany, SQL Server używa rozmiaru pliku głównego w bazie modelu . Gdy plik danych lub log jest określony jako dodatkowy, ale rozmiar pliku nie jest określony dla tego pliku, silnik bazy danych nadaje plikowi rozmiar 1 MB.

Przyrostki KB, MB, GB i TB mogą być używane do określania kilobajtów, megabajtów, gigabajtów lub terabajtów. Wartość domyślna to MB. Określ liczbę pełną i nie podawaj liczby dziesiętnej. Aby określić ułamek megabajta, przekonwertuj wartość na kilobajty, mnożąc tę liczbę przez 1024. Na przykład określ 1536 KB zamiast 1,5 MB (1,5 x 1024 = 1536).

MAXSIZE { max_size| UNLIMITED } Określa maksymalny rozmiar pliku, do którego plik może rosnąć.

max_size To maksymalny rozmiar pliku. Przyrostki KB, MB, GB i TB mogą być używane do określania kilobajtów, megabajtów, gigabajtów lub terabajtów. Wartość domyślna to MB. Określ liczbę pełną i nie podawaj liczby dziesiętnej. Jeśli max_size nie jest określona, rozmiar pliku będzie się zwiększał, aż dysk będzie pełny.

UNLIMITED Określa, że plik rośnie, aż dysk się zapełni. W programie SQL Server plik dziennika określony z nieograniczonym wzrostem ma maksymalny rozmiar 2 TB, a plik danych ma maksymalny rozmiar 16 TB.

FILEGROWTH growth_increment Określa automatyczny przyrost pliku do wzrostu. Ustawienie FILEGROWTH dla pliku nie może przekroczyć ustawienia MAXSIZE.

growth_increment To ilość miejsca dodawanego do pliku za każdym razem, gdy potrzebne jest nowe miejsce.

Wartość ta może być określana w MB, KB, GB, TB lub procentach (%). Jeśli liczba jest podana bez przyrostku MB, KB lub %, domyślnie jest to MB. Gdy % jest określany, rozmiar przyrostu to określony procent rozmiaru pliku w momencie zaistnienia przyrostu. Podana wielkość jest zaokrąglana do najbliższych 64 KB.

Wartość 0 oznacza, że automatyczny wzrost jest wyłączony i nie ma dodatkowej przestrzeni.

Jeśli FILEGROWTH nie jest określony, wartości domyślne to:

  • Dane 16 MB
  • Pliki logów 16 MB

<add_or_modify_filegroups>::=

Dodaj, modyfikuj lub usuwaj grupę plików z bazy danych.

DODAJ GRUPĘ PLIKÓW filegroup_name Dodaje grupę plików do bazy danych.

Poniższy przykład tworzy grupę plików, która jest dodawana do bazy danych o nazwie sql_db_mi, oraz dodaje plik do grupy plików.

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;

USUŃ GRUPĘ PLIKÓW filegroup_name Usuwa grupę plików z bazy danych. Grupy plików nie można usunąć, chyba że jest pusta. Najpierw usuń wszystkie pliki z grupy plików. Więcej informacji znajdziesz w sekcji "USUŃ FILE logical_file_name" wcześniej w tym temacie.

MODIFY FILEGROUP filegroup_name { <filegroup_updatability_option> | DOMYŚLNE | NAME =new_filegroup_name } Modyfikuje grupę plików, ustawiając status na READ_ONLY lub READ_WRITE, czyniąc grupę plików domyślną dla bazy danych lub zmieniając nazwę grupy plików.

<filegroup_updatability_option> Ustawia właściwość tylko do odczytu lub czytania/zapisu na grupę plików.

DEFAULT Zmienia domyślną grupę plików bazy danych na filegroup_name. Tylko jedna grupa plików w bazie danych może być domyślną grupą plików. Więcej informacji można znaleźć w sekcji Pliki bazy danych i grupy plików.

NAME = new_filegroup_name Zmienia nazwę grupy plików na new_filegroup_name.

AUTOGROW_SINGLE_FILE

Gdy plik w grupie plików osiągnie próg autowzrostu, rośnie tylko ten plik. Jest to opcja domyślna.

AUTOGROW_ALL_FILES

Gdy plik w grupie plików spełnia próg automatycznego zwiększania, wszystkie pliki w grupie plików rosną.

<filegroup_updatability_option>::=

Ustawia właściwość tylko do odczytu lub odczytu/zapisu na grupę plików.

READ_ONLY | READONLY Określa, że grupa plików jest tylko do odczytu. Aktualizacje obiektów w nim nie są dozwolone. Główna grupa plików nie może być dostępna tylko do odczytu. Aby zmienić ten stan, musisz mieć wyłączny dostęp do bazy danych. Aby uzyskać więcej informacji, zobacz klauzulę SINGLE_USER.

Ponieważ baza danych tylko do odczytu nie pozwala na modyfikację danych:

  • Automatyczne odzyskiwanie jest pomijane przy starcie systemu.
  • Zmniejszenie bazy danych nie jest możliwe.
  • W bazach danych tylko do odczytu nie występuje blokada. Może to powodować szybszą wydajność zapytań.

Uwaga / Notatka

Słowo kluczowe READONLY zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania READONLY w nowych projektach deweloperskich i planuj modyfikować aplikacje, które obecnie korzystają z READONLY. Zamiast tego używaj READ_ONLY.

READ_WRITE | READWRITE Określa, że grupa jest READ_WRITE. Aktualizacje są włączone dla obiektów w grupie plików. Aby zmienić ten stan, musisz mieć wyłączny dostęp do bazy danych. Aby uzyskać więcej informacji, zobacz klauzulę SINGLE_USER.

Uwaga / Notatka

Słowo READWRITE kluczowe zostanie usunięte w przyszłej wersji Microsoft SQL Server. Unikaj używania READWRITE w nowych projektach programistycznych i planuj modyfikację aplikacji, które są używane wcześniej READWRITEREAD_WRITE .

Status tych opcji można określić, analizując kolumnę is_read_only w widoku katalogu sys.databases lub właściwość Updateability funkcji DATABASEPROPERTYEX .

Uwagi

Aby zmniejszyć rozmiar bazy danych, użyj DBCC SHRINKDATABASE.

Nie można dodawać ani usuwać pliku podczas BACKUP działania instrukcji.

Dla każdej bazy danych można określić maksymalnie 32 767 plików i 32 767 grup plików.

Przykłady

A. Dodawanie pliku do bazy danych

Poniższy przykład dodaje plik danych o pojemności 5 MB do bazy danych AdventureWorks2025.

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

B. Dodanie grupy plików z dwoma plikami do bazy danych

Poniższy przykład tworzy grupę Test1FG1 plików w bazie AdventureWorks2025 i dodaje do niej dwa pliki o rozmiarze 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. Usuwanie pliku z bazy danych

Poniższy przykład usuwa jeden z plików dodanych w przykładzie B.

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

D. Modyfikowanie pliku

Poniższy przykład zwiększa rozmiar jednego z plików dodanych w przykładzie B. ALTER DATABASE z poleceniem MODIFY FILE może tylko powiększyć rozmiar pliku, więc jeśli musisz zmniejszyć rozmiar pliku, musisz użyć DBCC SHRINKFILE.

USE master;
GO

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

Ten przykład zmniejsza rozmiar pliku danych do 100 MB, a następnie określa rozmiar w tej wartości.

USE AdventureWorks2022;
GO

DBCC SHRINKFILE (AdventureWorks2022_data, 100);
GO

USE master;
GO

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

E. Ustawienie grupy plików jako domyślnej

Poniższy przykład sprawia, że grupa plików utworzona Test1FG1 w przykładzie B jest domyślną grupą plików. Następnie domyślna grupa plików jest resetowana do PRIMARY grupy plików. Należy zauważyć, że musi być PRIMARY wyznaczona nawiasem lub cudzysłowem.

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

F. Dodawanie grupy plików za pomocą ALTER DATABASE

Poniższy przykład dodaje a FILEGROUP do bazy MyDB danych.

--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. Zmień grupę plików tak, aby gdy plik w grupie plików osiągnie próg autowzrostu, wszystkie pliki w grupie plików zaczęły rosnąć

Poniższy przykład generuje wymagane ALTER DATABASE instrukcje do modyfikacji grup plików read-write za pomocą AUTOGROW_ALL_FILES tego ustawienia.

--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

Zobacz też