Jestem trochę nowym DBA i zarządzam instancją SQL Server 2012, która ma spory zakres aktywności. Pracuję w trybie pełnego odzyskiwania, ponieważ potrzebujemy odzyskiwania w określonym czasie.
Obecnie robię pełną kopię zapasową baz danych i dzienników codziennie o 5 rano. Niektóre pliki dzienników szybko się zwiększyły do 300 GB, a nawet po wykonaniu kopii zapasowej nie zmniejszają rozmiaru. Mogę zmusić je do zmniejszenia rozmiaru, uruchamiając coś podobnego do:
BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log2.trn';
DBCC ShrinkFile([db1_log], 0);
BACKUP LOG db1 TO DISK = '\\server\share\db1_log3.trn';
DBCC ShrinkFile([db1_log], 0);
Kiedy sprawdzam LSN plików kopii zapasowej, widzę coś takiego:
RESTORE headeronly FROM DISK = N'\\server\share\db1_log1.trn'
FirstLSN: 15781000014686200001
SecondLSN: 15802000000665000001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log2.trn'
FirstLSN: 15802000000665000001
SecondLSN: 15805000000004100001
RESTORE headeronly FROM DISK = N'\\server\share\db1_log3.trn'
FirstLSN: 15805000000004100001
SecondLSN: 15808000000004200001
Nie sądzę, że zrywam łańcuch dziennika, zmniejszając pliki dziennika. Czytając o tym, sądzę, że szkodzę mojej wydajności, ponieważ te skurczone pliki dziennika muszą się odrodzić.
Pytania:
- Dlaczego plik dziennika nie kurczy się po moich kopiach zapasowych? Czy to dlatego, że istnieją niezaangażowane transakcje?
- Na początku myślałem, że powinienem zmniejszać pliki dziennika po każdej kopii zapasowej o 5:00 rano. Po przeczytaniu, jak to źle wpływa na wydajność, teraz uważam, że muszę regularnie wykonywać kopie zapasowe dziennika co kilka godzin w ciągu dnia. Czy to jest poprawne?
- Moja normalna pełna kopia zapasowa bazy danych / dzienników odbywa się codziennie o 5:00 rano, a czasem zajmuje 3 godziny. Jeśli zaplanuję tworzenie kopii zapasowych dziennika co godzinę, co się stanie, gdy kopia zapasowa dziennika zderzy się z kopią zapasową o 5:00 rano?