Pełny plan konserwacji programu SQL Server 2008
Optymalizacja baz danych
Ta sekcja poświęcona jest optymalizacji baz danych. W tym przykładzie zamierzamy skonfigurować kod, aby wykonać następujące czynności (zobacz przybliżony schemat połączenia serwerów);
- Kopia zapasowa bazy danych z aktywnego serwera do udostępnionego folderu kopii zapasowej
- Baza danych ponownego indeksowania
- Zabij wszystkie połączenia i przywróć bazę danych na serwerze raportującym.
- Powiązane serwery wkrótce pojawią się w osobnym artykule
- Przesyłanie dziennika będzie wkrótce w osobnym artykule
Robiąc to między serwerami, musisz zezwolić kontu uruchomionemu przez SQL Server na dostęp do systemu plików serwerów docelowych.
Cały kod SQL jest uruchamiany z bazy danych narzędzi, a schemat jest ustawiony na „maint”
Istnieje wiele innych artykułów, które napisaliśmy poniżej, które mogą Cię zainteresować.
Kompletny plan konserwacji
Teraz możemy zarządzać wszystkimi tymi oddzielnymi segmentami kodu za pomocą innej procedury, która wywoła je we właściwej kolejności, zostanie to umieszczone na serwerze rzeczywistym. Kod działa w następujący sposób;
- Wypracuj czas
- Jeśli jest wieczór, ponownie zindeksuj bazę danych
- Uruchom kopię zapasową bazy danych (dodaj tam, gdzie potrzebujesz)
- Jeśli jest wieczór, wykonaj kopię zapasową innych baz danych (dodaj tam, gdzie potrzebujesz)
- Zabij połączenia i przywróć bazę danych (dodaj tam, gdzie potrzebujesz)
Ten kod został wypróbowany i przetestowany i działał przez kilka miesięcy bez żadnych problemów.
Należy pamiętać, że zmniejszanie plików dziennika i plików baz danych powinno być ograniczone do minimum, uruchamiając kopię zapasową, opróżniasz dziennik (mimo że zachowa używane miejsce). Jeśli jest to konieczne, powinno być uruchamiane poza normalnymi godzinami pracy.
SQL Code
Use [utilities]GOCREATE PROC [maint].MaintenancePlan AS BEGINDECLARE @BackupType VARCHAR(1)='E'IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGINSET @BackupType='D'END--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!--Re-index LiveIF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'--Create BackupBACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!--Backup Other Files at NightIF @BackupType='E' BEGIN EXEC [maint].DatabaseReIndex 'dbname' --Backup Others BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak' WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10END--Restore Backups on other serverEXEC [server].[utilities].[maint].KillConnections 'dbname';EXEC [server].[utilities].[maint].RestoreDatabase_{dbname};--Restore Backups on other server for db_2 etcIF @BackupType='E' BEGIN EXEC [server].[utilities].[maint].KillConnections 'dbname2'; EXEC [server].[utilities].[maint].RestoreDatabase_{dbname2};ENDENDGO
Zapasowa baza danych
Aby uzyskać kod do tworzenia kopii zapasowych bazy danych, najłatwiej jest napisać skrypt z programu SSMS.
Postępuj zgodnie z procesem, którego normalnie używasz, a następnie wybierz opcję „Script Action to New Query Window”.
Skopiuj ten kod do planu konserwacji.
Baza danych ponownego indeksowania
Następnie możemy dodać kod w celu ponownego zindeksowania naszej bazy danych. To znowu jest udostępniona procedura składowana, w której wystarczy podać systemowi nazwę.
Aby uniknąć powielania kodu, możesz o tym przeczytać, klikając poniższy link.
Zabij połączenia
Wykonując przywracanie bazy danych, możesz mieć tylko jedno połączenie z nią (proces wykonujący przywracanie), dlatego możemy stworzyć procedurę składowaną, aby zamknąć wszystkie połączenia poza bieżącym procesem. Ponownie stworzyliśmy w tym celu osobny artykuł.
Przywróć bazę danych
Ten kod można również utworzyć za pomocą skryptów z programu SQL Server Management Studio. Jeśli dodasz ten kod do procedury składowanej, możesz łatwo wywołać go z innych procesów, a nawet z innych serwerów. Przenieśliśmy to do osobnego artykułu, aby omówić więcej opcji.