Udostępnij za pośrednictwem


DBCC SHRINKFILE (języka Transact-SQL)

Zmniejsza rozmiar określonego pliku danych lub dziennika dla bieżącej bazy danych lub usuwa zawartość pliku przez przeniesienie danych z określonego pliku do innych plików w tym samym grupa plików, co plik, który ma być usunięte z bazy danych.Plik można zmniejszyć, aby rozmiar jest mniejszy niż rozmiar określony podczas jego tworzenia.Ta opcja resetuje rozmiar minimalny pliku na nową wartość.

Topic link iconKonwencje składni języka Transact-SQL

DBCC SHRINKFILE 
(
    { file_name | file_id } 
    { [ , EMPTYFILE ] 
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
    }
)
[ WITH NO_INFOMSGS ]

Argumenty

  • file_name
    To nazwa logiczna pliku, który ma być ściągnąć.

  • file_id
    Jest numerem identyfikacyjnym (ID) pliku, który ma być ściągnąć.Aby uzyskać identyfikator pliku, należy użyć FILE_IDEX Funkcja systemowa lub kwerendysys.database_files wykazu widoku w bieżącej bazie danych.

  • target_size
    Jest to rozmiar pliku w megabajtach, wyrażona jako liczba całkowita.Jeśli nie zostanie określony, SHRINKFILE DBCC zmniejsza rozmiar z domyślnego rozmiaru pliku.Domyślny rozmiar wynosi rozmiar określony plik został utworzony.

    Uwaga

    Można zmniejszyć rozmiar domyślny pusty plik przy użyciu SHRINKFILE DBCC target_size. Na przykład jeżeli utworzenie pliku 5 MB, a następnie zmniejsz pliku do 3 MB, w czasie, gdy plik jest nadal pusty, domyślny rozmiar pliku jest równa 3 MB.Dotyczy to tylko puste pliki, które nigdy nie są zawarte w danych.

    Jeśli target_size jest określony, SHRINKFILE DBCC próbuje zmniejszyć pliku do określonego rozmiaru. Strony używane w części pliku, który ma zostać zwolnione są przeniesiony do ilości wolnego miejsca w części pliku zachowywane.Na przykład, jeśli istnieje plik 10 MB danych operacji SHRINKFILE DBCC z target_size przyczyny 8 wszystkie używane strony w ostatnich 2 MB w pliku, aby przesunąć się do wszystkich stron nieprzydzielone w pierwszych 8 MB pliku. DBCC SHRINKFILE nie zmniejszanie pliku poza rozmiar, niezbędne do przechowywania danych w pliku.Jeśli używany jest 7 MB pliku 10-MB danych, na przykład instrukcja SHRINKFILE DBCC z target_size 6 zmniejsza plik tylko 7 MB, nie 6 MB.

  • EMPTYFILE
    Migruje wszystkie dane z określonego pliku do innych plików w tym samym grupa plików.Ponieważ Database Engine nie zezwala już dane, które mają być umieszczone w pliku pusty plik można usunąć za pomocą ZMIENIANIE BAZY DANYCH instrukcja.

  • NOTRUNCATE
    Przenosi przydzielonych stron od końca pliku danych do nieprzydzielone stron z przodu plik z lub bez określenia target_percent. Ilość wolnego miejsca na końcu pliku nie są zwracane do systemu operacyjnego, a fizyczny rozmiar pliku nie ulega zmianie.W związku z tym kiedy NOTRUNCATE jest określony, plik pojawia się nie, aby zmniejszyć.

    NOTRUNCATE ma zastosowanie tylko do plików danych.Pliki dziennika nie są zagrożone.

  • TRUNCATEONLY
    Zwalnia wszystkie wolne miejsce na końcu pliku do systemu operacyjnego, ale nie wykonuje wszelkie przemieszczanie strona pliku.Plik danych jest zmniejszył się tylko do ostatniego przydzielonego fragment.

    target_size są ignorowane w przypadku, gdy określona TRUNCATEONLY.

    TRUNCATEONLY ma zastosowanie tylko do plików danych.

  • Z NO_INFOMSGS
    Pomija wszystkie komunikaty informacyjne.

Zestawy wyników

W poniższej tabela opisano kolumny zestaw wyników.

Nazwa kolumna

Description

DbId

Baza danych numer identyfikacyjny pliku Database Engine Próba zmniejszenia.

FileId

Numer identyfikacyjny pliku pliku Database Engine Próba zmniejszenia.

CurrentSize

Liczba stron 8 KB aktualnie zajmuje plik.

MinimumSize

Liczba stron 8 KB, plik może zajmować co najmniej.To odpowiada minimalny rozmiar lub utworzony rozmiar pliku.

UsedPages

Liczba aktualnie używanych przez plik stron 8 KB.

EstimatedPages

Strony, w których liczba 8 KB Database Engine Plik może być ściągnąć do oszacowania.

Remarks

DBCC SHRINKFILE stosuje się do plików w bieżącej bazie danych.Aby uzyskać więcej informacji na temat zmiany bieżącej bazy danych zobacz USE (Transact-SQL).

DBCC SHRINKFILE operacje mogą zostać zatrzymane w dowolnym punkcie w procesie, a wszelkie Praca wykonana zostanie zachowane.

Gdy niepowodzenie operacji SHRINKFILE DBCC, powstaje błąd.

Bazy danych, przy czym ściągnąć nie musi być tryb jednego użytkownika, inni użytkownicy mogą pracować w bazie danych, gdy plik jest ściągnąć.Nie trzeba uruchomić wystąpienie SQL Server tryb jednego użytkownika, aby zmniejszyć bazy danych systemu.

Zmniejszanie pliku dziennika

W przypadku plików dziennika Database Engine używa target_size do obliczania miejsce docelowe rozmiar całego dziennika; dlatego target_size jest ilość wolnego miejsca w dzienniku po wykonaniu operacji zmniejszania. miejsce docelowe rozmiaru dla całego dziennika jest następnie tłumaczony miejsce docelowe rozmiar każdego pliku dziennika.DBCC SHRINKFILE próbuje zmniejszyć każdego fizycznego pliku dziennika do rozmiaru miejsce docelowe natychmiast.Niemniej jednak, jeśli część dziennika logicznych znajduje się w dziennikach wirtualnego poza rozmiar docelowego Database Engine zwalnia tyle miejsca, jak to możliwe, a następnie wysyła komunikat informacyjny. Zawiera opis wiadomości, jakie akcje są wymagane, aby przenieść logiczne dziennika z wirtualnego dzienników na końcu pliku.Po akcje są wykonywane, SHRINKFILE DBCC można zwolnić pozostałe miejsce.Aby uzyskać więcej informacji zobaczShrinking the Transaction Log.

Ponieważ plik dziennika może być tylko ściągnąć do wirtualny plik dziennika granicę, zmniejszając rozmiar mniejszy niż rozmiar pliku dziennika wirtualny plik dziennika może być niemożliwe, nawet wtedy, gdy nie jest on używany.Rozmiar pliku dziennika wirtualnego wybrano dynamicznie przez Database Engine Jeśli pliki dzienników są tworzone lub rozszerzone. Aby uzyskać więcej informacji na temat wirtualnych plików dziennika Zobacz Architektura fizyczny dziennik transakcji.

Najważniejsze wskazówki

Planując zmniejszyć plik, należy wziąć pod uwagę następujące informacje:

  • Operacja zmniejszania jest najbardziej efektywne, po operacji, która tworzy partii nieużywane miejsce, takie jak tabela obcięciu lub operacją tabeli upuszczania.

  • Większość baz danych wymaga pewnych wolnego miejsca, aby były dostępne dla zwykłego codziennej pracy.Należy zauważyć, że rozmiar bazy danych powiększa się ponownie podczas wielokrotnego zmniejszyć bazy danych, oznacza to, że miejsca, które było ściągnąć jest wymagane dla zwykłych działań.W takich przypadkach wielokrotnie zmniejszania bazy danych jest operacją nieużywanego.

  • Operacja zmniejszania stanu fragmentacji indeksów w bazie danych nie zostaną zachowane, a na ogół wzrasta fragmentacji stopniu.Jest to powód innym nie, aby zmniejszyć wielokrotnie w bazie danych.

Rozwiązywanie problemów

W tej sekcji opisano sposób zdiagnozować i rozwiązać problemy występujące podczas uruchamiania polecenia DBCC SHRINKFILE.

Plik nie Zmniejsz

Jeśli operacja zmniejszania jest uruchamiany bez błędów, ale plik nie uległy zmianie rozmiaru, należy sprawdzić, czy plik ma odpowiednia ilość wolnego miejsca, aby usunąć, wykonując jedną z następujących czynności:

  • Uruchom następującą kwerendę.

    SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB
    FROM sys.database_files;
    
  • Uruchom DBCC SQLPERF polecenie, aby powrócić do miejsca dziennik transakcji.

Jeśli dostępny jest za mało wolnego miejsca, Operacja zmniejszania nie można zmniejszyć rozmiar pliku wszelkie dalsze.

Zazwyczaj jest plik dziennika, który pojawia się na nie, aby zmniejszyć.Jest to zazwyczaj wynikiem plik dziennika, w którym nie ma być obcięta.Dziennik można skrócić przez ustawienie bazy danych model odzyskiwanie SIMPLE lub tworzenie kopii zapasowych w dzienniku, a następnie uruchamiając SHRINKFILE DBCC operację.Aby uzyskać więcej informacji zobacz Transaction Log Truncation i Shrinking the Transaction Log.

Zmniejszanie operacji jest zablokowana.

Może się zdarzyć, że być blokowany przez transakcję, która jest uruchomiona w ramach operacji zmniejszania poziom izolacji na przechowywanie wersji wiersza.Na przykład jeżeli operacja usuwania dużych, działający w wierszu na przechowywanie wersji poziom izolacji jest w toku podczas wykonywania operacji bazy danych DBCC zmniejszyć Operacja zmniejszania będzie czekać na zakończenie przed zmniejszanie pliki operacji usuwania.W takim przypadku SHRINKFILE DBCC i SHRINKDATABASE DBCC operacji drukowania poza komunikat informacyjny (5202 dla SHRINKDATABASE) i 5203 dla SHRINKFILE błędu programu SQL Server, rejestrowanie co pięć minut w pierwszej godziny, a następnie co godzinę po.Na przykład, jeśli dziennik błędów następujący komunikat o błędzie:

DBCC SHRINKFILE for file ID 1 is waiting for the snapshot 
transaction with timestamp 15 and other snapshot transactions linked to 
timestamp 15 or with timestamps older than 109 to finish.

Oznacza to, że operacja zmniejszania jest blokowany przez transakcje migawka, które mają sygnatury czasowe starsze niż 109, który jest ostatniej transakcji, które ukończyć operacji zmniejszania.Ponadto informuje, transaction_sequence_num, or first_snapshot_sequence_num kolumnsys.dm_tran_active_snapshot_database_transactions dynamicznego zarządzania widok zawiera wartość równą 15.Jeśli albo transaction_sequence_num, or first_snapshot_sequence_num kolumn w widoku zawiera liczbę, która jest mniejsza od ostatniej transakcji przez Operacja zmniejszania (109), Operacja zmniejszania będzie czekał na zakończenie tych transakcji zakończyć.

Aby rozwiązać ten problem, wykonaj jedną z następujących czynności:

  • Należy zakończyć transakcję, która blokuje Operacja zmniejszania.

  • Zakończenie operacji zmniejszania.Jeśli operacja zmniejszania jest zakończone, wszystkie Praca wykonana jest zachowywana.

  • Nic nie rób i pozwala na wykonanie operacji zmniejszania dopiero po zakończeniu transakcji blokowania.

Aby uzyskać więcej informacji na temat SQL Server Dziennik błędów, zobacz Viewing the SQL Server Error Log.

Uprawnienia

Członkostwo w grupie wymaga sysadmin Rola serwera lub db_owner stała rola bazy danych.

Przykłady

A.Zmniejszanie rozmiaru określone miejsce docelowe pliku danych

W poniższym przykładzie zmniejsza rozmiar pliku danych o nazwie DataFile1 w UserDB użytkownik bazy danych 7 MB.

B.Zmniejszanie pliku dziennika do rozmiaru określony obiekt miejsce docelowe

W poniższym przykładzie zmniejsza w pliku dziennika AdventureWorks Baza danych do 1 MB. Aby zezwolić na polecenie DBCC SHRINKFILE, aby zmniejszyć plik, plik jest najpierw obcięty przez ustawienie SIMPLE modelu odzyskiwanie bazy danych.

C.Obcinanie pliku danych

W poniższym przykładzie obcina plik danych podstawowych w AdventureWorks Baza danych. The sys.database_files catalog view is queried to obtain the file_id of the data file.

D.Opróżnianie pliku

W poniższym przykładzie zademonstrowano procedury opróżnienie pliku, dzięki czemu można go usunąć z bazy danych.Dla celów tego przykładu najpierw jest tworzony plik danych i zakłada się, że plik zawiera dane.