Jak obciąć dziennik transakcji w bazie danych SQL Server 2008?

9

Jak obciąć dziennik transakcji w bazie danych SQL Server 2008?

Jakie są najlepsze sposoby?

Próbowałem tego z bloga w następujący sposób:

1) Od bazy danych ustawień do prostego odzyskiwania, zmniejszania pliku i ponownego ustawiania pełnego odzyskiwania, w rzeczywistości tracisz cenne dane dziennika i nie będziesz w stanie przywrócić punktu w czasie. Ponadto nie będzie można korzystać z kolejnych plików dziennika.

2) Zmniejszenie pliku bazy danych lub bazy danych powoduje fragmentację.

Jest wiele rzeczy, które możesz zrobić. Najpierw zacznij robić właściwą kopię zapasową dziennika za pomocą następującego polecenia zamiast ich obcinania i częstej utraty.

BACKUP LOG [TestDb] TO  DISK = N'C:\Backup\TestDb.bak'
GO

Usuń kod SHRINKING pliku. Jeśli wykonujesz odpowiednie kopie zapasowe dziennika, plik dziennika zwykle (ponownie zwykle są wykluczone przypadki szczególne) nie powiększa się.

Neo
źródło
2
OK, a co się stało, kiedy tego spróbowałeś?

Odpowiedzi:

4

Najbezpieczniejszym i prawidłowym sposobem obcinania pliku dziennika, jeśli baza danych jest w trybie pełnego odzyskiwania, jest wykonanie kopii zapasowej dziennika transakcji (bez TRUNCATE_ONLY. Będzie to przestarzałe w przyszłych wersjach i nie jest zalecane).

Wygląda na to, że chcesz później zmniejszyć plik dziennika. W takim przypadku uruchom DBCC SHRINKFILE(yourTLogName)polecenie. Istnieje opcjonalny drugi parametr dla żądanego rozmiaru, aby go zmniejszyć.

Thomas Stringer
źródło
8

Możesz wykonać kopię zapasową dziennika na urządzeniu zerowym:

backup log [databasename] to disk = 'nul';

Lub możesz zmienić model odzyskiwania na prosty, a następnie ponownie na pełny / zbiorczy.

Max Vernon
źródło
Zrobiłem + jeden w tej sprawie, ponieważ jest to narzędzie w zestawie narzędzi dbas, a twoja odpowiedź nie zasługuje na negatywne głosy. Zgadzam się z opinią, że najlepszym sposobem jest tworzenie kopii zapasowych dzienników transakcji, ale hej, wszystkie dobre narzędzia mogą być używane we właściwy lub zły sposób.
Martin Sjöberg,
6

Jeśli nie zależy Ci na danych dziennika i chcesz się ich pozbyć:

Zmień model odzyskiwania z pełnego na prosty, a następnie z powrotem na pełny. Zmniejsz plik za pomocą DBCC SHRINKFILE z argumentem TRUNCATEONLY

Poniższe polecenie zmieni model odzyskiwania z pełnego na prosty

ALTER DATABASE <databse_name> SET RECOVERY SIMPLE

Następujące polecenie zmieni model odzyskiwania na pełny

ALTER DATABASE <databse_name> SET RECOVERY FULL

Aby znaleźć nazwę pliku dziennika, możesz użyć następującego zapytania

SELECT name 
FROM sys.master_files
WHERE database_id = DB_ID('<databse_name>')

Zmniejsz plik

DBCC SHRINKFILE (N'<logical_file_name_of_the_log>' , 0, TRUNCATEONLY)

Zobacz Co to jest polecenie obcięcia pliku dziennika programu SQL Server? po więcej informacji na ten temat

Alex
źródło