Jak w programie SQL Server (w tym przypadku w 2008 r.) Mogę szybko zmniejszyć wszystkie pliki, zarówno dziennik, jak i dane, dla wszystkich baz danych w instancji? Mógłbym przejść przez SSMS i kliknąć każdy z nich prawym przyciskiem myszy i wybrać Zadania -> Zmniejsz, ale szukam czegoś szybszego.
Skryptowałem niektóre skrypty „Utwórz bazę danych” i zapomniałem, że miały one domyślne ustawienia rozmiarów w dymkach i nie potrzebuję tyle miejsca zarezerwowanego dla tych plików w tym projekcie.
źródło
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Ale zastanawianie że spośród dał mi nowy problem. Off, aby opublikować kolejne pytanie.Co powiesz na jedną linię instrukcji SQL?
Przeczytaj ten bardzo interesujący post na blogu przed wykonaniem następującego polecenia sql.
źródło
DBCC SHRINKDB (i jego kuzyn SHRINKFILE) są bardzo powolne, ponieważ w tym kodzie dzieje się wiele pojedynczych wątków.
Znacznie szybszy sposób zmniejszenia pliku bazy danych jest następujący:
sp_spaceused
aby określić, jak duża)Ponieważ przebudowy indeksu są masowo równoległe, technika ta często powoduje znacznie szybsze zmniejszanie bazy danych. Oczywiście wymaga to trochę dodatkowej przestrzeni dla nowej grupy plików podczas trwania procesu. Jednak potrzebna jest tylko wystarczająca ilość miejsca w nowej grupie plików, aby pomieścić największą grupę plików w instancji (ponieważ będziesz odzyskiwać miejsce podczas pracy).
Ta technika ma również dodatkową zaletę defragmentacji indeksów w tym procesie.
źródło
Zoptymalizowałem trochę zapytanie, aby zmniejszyć tylko LOG, zgodnie z żądaniem:
źródło
Poniższy kod, pobierz listę niesystemowych baz danych, ustaw bazę danych tylko do odczytu, a następnie zmniejsz plik. Trzymałem ten kod w kilku polach programu SQL Server za pomocą SQL Agent Job, gdzie zawsze jest miejsce. W soboty i niedziele co tydzień zaczyna się uruchamiać i zmniejszać wszystkie bazy danych w ciągu kilku godzin (w zależności od wielkości baz danych).
źródło
Zmniejsz wszystkie pliki dziennika oprócz głównego, modelu, msdb:
źródło
Ten rozszerza powyższą odpowiedź, używając kursora do iteracji kolejno instrukcji SQL. Nie jest tak krótki jak odpowiedź Emrah'a, ale pozwala na dodatkową logikę w pętli while w obrębie kursora.
źródło
Możemy dynamicznie powtarzać
SHRINKDB
iSHRINKFILE
dla wszystkich baz danych:Szczegóły znajdziesz w tym artykule .
źródło