DBCC SHRINKDATABASE (Transact-SQL)

Zmniejsza rozmiar plików danych i dziennika w określonej bazie danych.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

DBCC SHRINKDATABASE 
( database_name | database_id | 0 
     [ , target_percent ] 
     [ , { NOTRUNCATE | TRUNCATEONLY } ] 
)
[ WITH NO_INFOMSGS ]

Argumenty

  • database_name | database_id | 0
    Jest to nazwa lub identyfikator bazy danych, aby ściągnąć.Jeśli określono wartość 0, używana jest bieżąca baza danych.

  • target_percent
    To procent wolnego miejsca, który ma być lewym w plik bazy danych po zmniejszono bazy danych.

  • NOTRUNCATE
    Kompaktuje danych w plikach danych, przenosząc przydzielonych stron od końca pliku nieprzydzielone stron na początku pliku.target_percentjest opcjonalne.

    Wolne miejsce na końcu pliku nie jest zwracana do systemu operacyjnego i nie zmienia fizyczny rozmiar pliku.W związku z tym po NOTRUNCATE bazy danych prawdopodobnie nie zmniejszać.

    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 wewnątrz pliku.Plik danych jest ściągnąć tylko do ostatniego przydzielonego fragment.target_percentjest ignorowana, jeśli określony z TRUNCATEONLY.

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

  • Z NO_INFOMSGS
    Pomija wszystkie komunikaty informacyjne, których poziomy ważności od 0 do 10.

Zestawy wyników

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

Nazwa kolumny

Opis

Identyfikator DbId

Baza danych numer identyfikacyjny pliku Aparat baz danych próbował zmniejszania.

Identyfikator FileId

Numer identyfikacyjny pliku plik Aparat baz danych próbował zmniejszania.

CurrentSize

Liczba stron 8 KB, który obecnie zajmuje plik.

Wartość MinimumSize

Liczba stron 8 KB, który plik może zajmować co najmniej.Minimalny rozmiar odpowiada, lub utworzony rozmiar pliku.

UsedPages

Liczba aktualnie używanych przez plik stron 8 KB.

EstimatedPages

Numer 8 KB strony, w których Aparat baz danych szacunków, plik może być zmniejszył się niedziałający do.

Ostrzeżenie

Aparat baz danych Nie są wyświetlane wiersze dla tych plików, nie ściągnąć.

Uwagi

Aby zmniejszyć wszystkie dane i pliki dziennika dla konkretnej bazy danych, wykonać polecenia DBCC SHRINKDATABASE.Aby zmniejszyć jeden danych lub pliku w czas dla konkretnej bazy danych, wykonać dziennika dbcc shrinkfile polecenia.

Aby wyświetlić bieżącą ilość wolnego miejsca (nieprzydzielone) w bazie danych, należy uruchomić sp_spaceused.

DBCC SHRINKDATABASE operacji może być zatrzymana na każdym etapie procesu i wszelkich Praca wykonana jest zachowywana.

Baza danych nie można dokonać mniejszy niż minimalny rozmiar bazy danych.Minimalny rozmiar wynosi rozmiar określony po utworzeniu bazy danych lub ostatniego rozmiaru jawnie zestaw za pomocą rozmiar pliku, zmienianie operacji, takich jak DBCC SHIRNKFILE lub ZMIEŃ bazę danych.Na przykład jeśli utworzony o rozmiarze 10 MB, rozmiar bazy danych przekroczy 100 MB, najmniejszą które bazy danych można zmniejszyć do jest 10 MB, nawet wtedy, gdy wszystkie dane w bazie danych zostały usunięte.

Uruchamianie DBCC SHRINKDATABASE bez określenia opcji NOTRUNCATE lub TRUNCATEONLY opcji jest równoznaczne z uruchomieniem operacji DBCC SHRINKDATABASE z NOTRUNCATE następuje uruchomienie operacji DBCC SHRINKDATABASE z TRUNCATEONLY.

Bazy danych, przy czym ściągnąć nie musi być w trybie pojedynczego użytkownika; inni użytkownicy mogą pracować w bazie danych, aby jest ściągnąć.Obejmuje to bazy danych systemu.

Gdy baza danych jest teraz kopię zapasową bazy danych nie może zostać zmieniona.I odwrotnie nie możesz kopia zapasowa bazy danych podczas procesu Operacja zmniejszania bazy danych.

Jak działa DBCC SHRINKDATABASE

DBCC SHRINKDATABASE zmniejsza pliki danych na podstawie każdego pliku, ale shrinks pliki dziennika, tak jakby istniały wszystkich plików dziennika w jednej puli ciągłe dziennika.Pliki są zawsze ściągnąć od końca.

Założono bazy danych o nazwie mydb z pliku danych i dwa pliki dziennika.Pliki danych i dziennika znajdują się 10 MB, a plik danych zawiera 6 MB danych.

Dla każdego pliku Aparat baz danych oblicza rozmiar miejsce docelowe .Jest to rozmiar pliku jest aby ściągnąć.Gdy określono DBCC SHRINKDATABASE z target_percent, Aparat baz danych oblicza rozmiar miejsce docelowe musi być target_percent ilość wolnego miejsca w pliku po kurczenie.Na przykład, jeśli zostanie określony target_percent 25 do zmniejszania mydb, Aparat baz danych oblicza rozmiar miejsce docelowe plik danych do 8 MB (6 MB danych plus 2 MB wolnego miejsca).W związku z tym Aparat baz danych przenosi wszystkie dane z ostatnich 2 MB pliku danych w celu zwolnienia miejsca w pierwszym 8 MB pliku danych, a następnie zmniejsza pliku.

Założono pliku danych z mydb zawiera 7 MB danych.Określanie target_percent 30 umożliwia dla tego pliku danych ściągnąć wolny procent 30.Można jednak określić target_percent 40 nie zmniejsza pliku danych ponieważ Aparat baz danych nie zmniejszy pliku do rozmiaru mniejszego niż dane aktualnie zajmuje.Można również traktować tej kwestii inny sposób: 40 procent chciał wolnego miejsca + 70 procent pełnych danych pliku (7 MB z 10 MB) jest więcej niż 100 procent.Ponieważ procent wolnego, który jest chciał plus bieżącej wartości procentowej, która zajmuje plik danych jest ponad 100 procent (o 10 procent), każdym target_size większa niż 30 nie zmniejszy się do pliku danych.

Dla plików dziennika Aparat baz danych korzysta z target_percent do obliczania rozmiaru miejsce docelowe dla całego dziennika; w związku z tym target_percent jest ilość wolnego miejsca w dzienniku po operacji zmniejszania.Rozmiar docelowego dla całego dziennika jest następnie tłumaczony wielkości miejsce docelowe dla każdego pliku dziennika.

DBCC SHRINKDATABASE próbuje bezpośrednio zmniejszyć każdego fizycznego pliku dziennika do rozmiaru miejsce docelowe .Jeśli żadna część logicznej dziennika znajduje się w dziennikach wirtualnego poza miejsce docelowe rozmiar pliku dziennika, plik pomyślnie jest obcięty i DBCC SHRINKDATABASE zakończy się bez żadnego komunikatu.Jednakże, jeśli część dziennika logicznych znajduje się w dziennikach wirtualnego poza rozmiar miejsce docelowe Aparat baz danych zwalnia tyle miejsca, jak to możliwe, a następnie wysyła komunikat informacyjny.Wiadomości opisano, jakie akcje są wymagane do przenoszenia logiczne dziennika z dzienników wirtualnych na końcu pliku.Po akcje są wykonywane, można DBCC SHRINKDATABASE pozostałe miejsca.Aby uzyskać więcej informacji, zobacz Zmniejszanie dziennika transakcji.

Ponieważ pliku dziennika można ściągnąć tylko do granicy wirtualny plik dziennika , zmniejszając rozmiar mniejszy niż rozmiar wirtualny plik dziennika pliku dziennika może nie być możliwe, nawet jeśli nie jest on używany.Rozmiar wirtualny plik dziennika wybrano dynamicznie przez Aparat baz danych podczas tworzenia lub rozszerzania plików dziennika.Aby uzyskać więcej informacji o plikach dziennika wirtualnych, zobacz Fizycznej architektury dziennika transakcji.

Najważniejsze wskazówki

Planując zmniejszania bazy danych, 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 obcięciu tabela lub tabela .

  • Większość baz danych wymaga trochę wolnego miejsca, które mają być dostępne dla regularnych codziennej pracy.Jeśli wielokrotnie zmniejszania bazy danych i Zauważ, że rozmiar bazy danych powiększa się ponownie, oznacza to, że został ściągnąć miejsca jest wymagana dla regularnych operacji.W takich przypadkach wielokrotnie zmniejszania bazy danych jest nieużywanego operacji.

  • Operacja zmniejszania nie zachowuje stan fragmentacji indeksów w bazie danych i zazwyczaj zwiększa fragmentacji stopniu.Jest to innym powodem nie wielokrotnie zmniejszania bazy danych.

  • Chyba że istnieje szczególne zapotrzebowanie należy zestaw opcję bazy danych AUTO_SHRINK na.

Rozwiązywanie problemów

Jest możliwe dla operacji zmniejszania zablokowane przez transakcję, która jest uruchomiona w ramach wersji na podstawie wierszy poziom izolacji.Na przykład jeśli operacja usuwania duże, działający w wersji na podstawie wiersza poziom izolacji jest w toku, podczas wykonywania operacji DBCC zmniejszyć w bazie danych, Operacja zmniejszania będzie czekać na operacji usuwania móc zmniejszania plików.W takim przypadku, komunikat informacyjny (5202 SHRINKDATABASE i 5203 SHRINKFILE) do wydrukowania operacji DBCC SHRINKFILE i DBCC SHRINKDATABASE SQL Server dziennik błędów co pięć minut w pierwszej godziny i następnie co godzinę po.Na przykład, jeśli dziennik błędów zawiera następujący komunikat o błędzie:

DBCC SHRINKDATABASE for database ID 9 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 transakcji migawka , które mają sygnatury czasowe starsze niż 109, która jest ostatnia transakcja zakończonej operacji zmniejszenia.On również wskazuje, że transaction_sequence_num, lub first_snapshot_sequence_num kolumn w sys.dm_tran_active_snapshot_database_transactions (języka Transact-SQL) dynamiczny widok zarządzania zawiera wartość 15.Jeśli transaction_sequence_num, lub first_snapshot_sequence_num kolumn w widoku zawiera liczbę, która jest mniejsza od ostatniej transakcji przez operacji zmniejszenia (109), Operacja zmniejszania będzie czekać do zakończenia tych transakcji.

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

  • Zakończyć transakcję, która blokuje operacji zmniejszenia.

  • Zakończenie operacji zmniejszenia.Wszelkie Praca wykonana jest zachowywana.

  • Nic nie rób i umożliwić operacji zmniejszenia dopiero po zakończeniu transakcja blokująca .

Aby uzyskać więcej informacji o SQL Server dziennik błędów, zobacz Wyświetlanie SQL Server dziennik błędów.

Uprawnienia

Wymaga członkostwa w sysadmin stała rola serwera lub db_owner rola bazy danychstałej.

Przykłady

A.Zmniejszania bazy danych i określając procent wolnego miejsca

Poniższy przykład zmniejsza rozmiar plików danych i dziennika w UserDB baza danych użytkownika umożliwiają 10 procent wolnego miejsca w bazie danych.

DBCC SHRINKDATABASE (UserDB, 10);
GO

B.Obcinanie bazy danych

Poniższy przykład zmniejsza pliki danych w AdventureWorks2008R2 przykładowej bazy danych ostatniego przydzielonego fragment.

DBCC SHRINKDATABASE (AdventureWorks2008R2, TRUNCATEONLY);