Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Bazy danych systemu SQL Server — przywracanie systemowych baz danych

W poprzednich artykułach z serii SQL Server System Databases poznaliśmy przeznaczenie wszystkich baz danych SQL Server System, które są dostarczane w ramach instalacji SQL Server i zrozumieliśmy najlepsze praktyki, które należy dla nich wdrożyć. Zrozumieliśmy również bardziej szczegółowo bazy danych Tempdb i MSDB. Ponieważ tworzenie kopii zapasowych i przywracanie bazy danych systemu różni się nieco od baz danych użytkowników, w tym artykule szczegółowo omówimy tworzenie kopii zapasowych baz danych systemu i przywracanie bazy danych systemu z kopii zapasowych.

Kopia zapasowa bazy danych SQL

Termin Kopia zapasowa odnosi się do kopiowania danych w bazie danych jako pliku kopii zapasowej, którego można użyć do dalszego przywracania lub odzyskiwania danych.

Pełna kopia zapasowa bazy danych będzie zawierać kopie danych w plikach danych i plikach dziennika, aby przywrócić jako bazę danych lub wykonać przywracanie do określonego momentu w przypadku jakichkolwiek katastrof lub katastrofalnych awarii. Dlatego regularne pełne kopie zapasowe w systemie, a także w bazach danych użytkowników są kluczowe.

Oprócz pełnej kopii zapasowej SQL Server obsługuje kilka innych opcji tworzenia kopii zapasowych, takich jak kopia różnicowa, kopia zapasowa dziennika transakcyjnego, kopia zapasowa plików itp., ale nie będziemy się na nich skupiać, ponieważ wykracza to poza zakres tego artykułu.

Pełna kopia zapasowa bazy danych powinna być wykonywana okresowo lub po wprowadzeniu określonych zmian w konfiguracji. Mimo że SQL Server może zaakceptować pełną kopię zapasową bazy danych w różnych rozszerzeniach plików, zaleca się zapisanie tej kopii zapasowej jako pliku *.bak w celu łatwiejszej klasyfikacji i konserwacji.

Składnia bazy danych kopii zapasowej ma wiele dostępnych opcji, ale skupimy się tylko na podstawowych poleceniach wymaganych do wykonania pełnej kopii zapasowej dowolnej bazy danych. Pełna składnia znajduje się w artykule MSDN.

SKŁADNIA ZAPASOWEJ BAZY DANYCH (minimalna)

BACKUP DATABASE <Database_name> 
TO DISK = <File_Path>
GO

Zapasowe bazy danych użytkowników

Aby wykonać pełną kopię zapasową AdventureWorks bazy danych, wystarczy zastąpić Nazwę bazy danych i Ścieżka pliku w powyższym poleceniu BACKUP DATABASE i wykonaj je:

BACKUP DATABASE [AdventureWorks] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak'
GO

Kopia zapasowa systemowych baz danych

Korzystając z powyższego polecenia BACKUP DATABASE, możemy wykonać pełną kopię zapasową systemowych baz danych, takich jak master, msdb i model:

BACKUP DATABASE master 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak'
GO
BACKUP DATABASE model 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak'
GO
BACKUP DATABASE msdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak'
GO

Możemy przejść do powyższej ścieżki folderu i tam widzimy pełne kopie zapasowe bazy danych utworzone pomyślnie zarówno dla bazy danych użytkownika, jak i baz danych systemu:

Czy można wykonać kopię zapasową bazy danych tempdb?

Spróbujmy wykonać pełną kopię zapasową bazy danych systemu tempdb przy użyciu tej samej składni BACKUP DATABASE:

BACKUP DATABASE tempdb 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\tempdb_Full.bak'
GO

Jak omówiliśmy w poprzednich artykułach, tempdb to jedyna baza danych, dla której Kopia zapasowa nie można zabrać . Baza danych tempdb zostanie utworzona na nowo przy każdym uruchomieniu usług SQL Server. Dlatego też, jeśli wystąpią jakiekolwiek problemy z tempdb, ponowne uruchomienie usługi SQL Server pomoże je rozwiązać.

Przywróć bazę danych

Przywrócenie bazy danych z pełnej kopii zapasowej (*.bak) przywraca bazę danych z pełnymi danymi lub „cofa” bazę danych do punktu w czasie. Polecenia RESTORE można również użyć do przywrócenia plików, grup plików lub dzienników transakcyjnych, ale nie jest to zakres bieżącego artykułu.

Aby przywrócić pełną kopię zapasową bazy danych , możemy użyć poniższej składni. Uwaga:Podobnie jak polecenie BACKUP, polecenie PRZYWRÓĆ ma wiele opcji, ale odwołamy się tylko do podstawowych. Szczegółowe informacje na temat tych opcji można znaleźć w dedykowanym artykule MSDN.

Składnia PRZYWRACANIA BAZY DANYCH

RESTORE DATABASE <Database_Name> 
FROM  DISK = <File Path>
WITH  REPLACE
GO

Przywróć bazę danych użytkownika

Aby przywrócić AdventureWorks bazy danych z pełnej kopii zapasowej, którą wykonaliśmy wcześniej, możemy użyć polecenia RESTORE DATABASE, zastępując Nazwa bazy danych i Ścieżka pliku jak pokazano poniżej:

RESTORE DATABASE [AdventureWorks] 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks_Full.bak' 
WITH REPLACE
GO

Przywróć bazę danych modelu

Spróbujmy przywrócić bazę danych systemu modelowego za pomocą polecenia RESTORE DATABASE:

RESTORE DATABASE model 
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\model_Full.bak' 
WITH REPLACE
GO

Kopia zapasowa bazy danych modelu może zostać pomyślnie przywrócona przy użyciu domyślnego polecenia RESTORE DATABASE.

Przywróć główną bazę danych

Spróbujmy teraz przywrócić bazę danych System master za pomocą polecenia RESTORE DATABASE:

RESTORE DATABASE master 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\master_Full.bak' 
WITH  REPLACE
GO

Wystąpił błąd informujący, że instancja SQL Server powinna działać w trybie jednego użytkownika, aby przywrócić bazę danych master. Jak wskazuje komunikat o błędzie, musimy uruchomić naszą instancję SQL Server w trybie jednego użytkownika, a następnie spróbować przywrócić główną bazę danych.

Aby uruchomić instancję SQL Server w trybie jednego użytkownika, możemy zastosować jedną z następujących metod:

  • Wiersz polecenia
  • Parametry uruchamiania SQL Server w Menedżerze konfiguracji SQL Server.

Podejście z wierszem polecenia

Aby uruchomić instancję SQL Server w trybie jednego użytkownika za pomocą wiersza polecenia, otwórz wiersz polecenia za pomocą opcji Uruchom jako administrator opcja jak pokazano poniżej:

Po zakończeniu wpisz polecenie:

NET STOP <SQL_Server_Service_Name>

Nazwa_usługi_serwera_SQL można uzyskać za pośrednictwem programu SQL Server Configuration Manager lub services.msc

Menedżer konfiguracji serwera SQL

Usługi.msc

Ponieważ nasza usługa SQL Server jest instancją domyślną, możemy użyć nazwy MSSQLSERVER jak podkreślono powyżej. Po wprowadzeniu poprosi o potwierdzenie zatrzymania wszystkich zależnych usług. Możemy również zatrzymać usługę SQL Server Agent Service, wpisując Y dla Tak .

Gdy usługa SQL Server zostanie zatrzymana, możemy ją uruchomić w trybie pojedynczego użytkownika. Uruchom poniższe polecenie, gdzie /m oznacza uruchamianie usługi SQL Server w trybie pojedynczego użytkownika.

NET START MSSQLSERVER /m

Po jej wykonaniu możemy spróbować przywrócić bazę danych master. Uruchom polecenie PRZYWRÓĆ KOPIĘ ZAPASOWĄ jak poprzednio:

Uruchamiając instancję SQL Server w trybie pojedynczego użytkownika, jesteśmy w stanie pomyślnie przywrócić bazę danych systemu głównego z ostatniej znanej pełnej kopii zapasowej bazy danych bez żadnych problemów. Dlatego dowiedzieliśmy się, że aby przywrócić główną bazę danych, instancja SQL Server powinna być w trybie pojedynczego użytkownika.

Z instancją SQL Server w trybie pojedynczego użytkownika może się połączyć tylko jeden użytkownik, a po zakończeniu naszych działań przywracania musimy zmienić ją z powrotem w tryb wielu użytkowników, zatrzymując instancję SQL Server i uruchamiając instancję SQL Server bez opcji /m, jak pokazano poniżej:

NET STOP MSSQLSERVER
NET START MSSQLSERVER

Po uruchomieniu w trybie normalnym lub trybie wielu użytkowników wszyscy użytkownicy mogą łączyć się z instancją SQL Server i wykonywać swoje czynności. Możemy również sprawdzić, czy główna baza danych została przywrócona do czasu, w którym wykonano pełną kopię zapasową, a wszelkie zmiany konfiguracji wprowadzone później należy wykonać ponownie.

Kilka rzeczy do zapamiętania, gdy instancja SQL Server jest w trybie jednego użytkownika:

  • Gdy instancja SQL Server jest w trybie jednego użytkownika, może się z nią połączyć tylko jedna sesja użytkownika. Dlatego upewnij się, że usługa agenta programu SQL Server i wszystkie inne usługi związane z programem SQL Server są zatrzymane status. W przeciwnym razie te połączenia mogą zostać ustanowione jako pierwsze, a jeśli tak się stanie, nie będziemy mogli połączyć się z SQL Server w celu przywrócenia bazy danych.
  • Podczas łączenia przez SSMS w trybie jednego użytkownika odłącz Eksplorator obiektów i połącz się tylko przez okno zapytań. Jeśli połączenie jest nawiązywane z Eksploratora obiektów, nawiązywane jest pojedyncze połączenie. Dlatego nie możesz połączyć się z okna zapytań. Zapoznaj się z poniższym zrzutem ekranu – pokazuje on, jak podłączyć tylko okno Nowe zapytanie bez łączenia się przez Eksplorator obiektów:

Parametr uruchamiania SQL Server w Configuration Manager

Ci, którzy czują się bardziej komfortowo z GUI zamiast wiersza poleceń, mogą zastosować poniższe podejście.

1). Otwórz Menedżera konfiguracji serwera SQL wpisując MSSQLManager13.msc w wierszu polecenia. Tutaj 13 odnosi się do SQL Server 2016, więc użyj odpowiednich odpowiednich liczb dla innych wersji SQL Server:

  • Serwer SQL 2012SQLServerManager11.msc
  • Serwer SQL 2014SQLServerManager12.msc
  • Serwer SQL 2016SQLServerManager13.msc
  • Serwer SQL 2017SQLServerManager14.msc
  • Serwer SQL 2019SQLServerManager15.msc

2). Rozwiń Usługi serwera SQL :

3). Kliknij prawym przyciskiem myszy usługę SQL Server zidentyfikowaną jako SQL Server (MSSQLSERVER) > Właściwości .

4). Wybierz Parametry uruchamiania karta menu.

5). Kliknij -m w Określ parametr startowy pole, a następnie kliknij Dodaj aby uruchomić usługę SQL Server w trybie pojedynczego użytkownika.

6). Kliknij OK i uruchom ponownie usługę SQL Server, aby uruchomić usługę SQL Server w trybie pojedynczego użytkownika.

Aby zmienić instancję SQL Server z trybu jednego użytkownika na tryb wielu użytkowników lub tryb normalny po przywróceniu głównej bazy danych, po prostu kliknij parametr -m z Istniejący parametr s , Kliknij Usuń i uruchom ponownie usługę SQL Server.

Przywróć bazę danych MSDB

Teraz spróbujmy przywrócić kopię zapasową bazy danych systemu msdb za pomocą domyślnego polecenia RESTORE DATABASE:

RESTORE DATABASE msdb 
FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\msdb_Full.bak' 
WITH  REPLACE
GO

Ta próba powoduje błąd stwierdzający, że nie można uzyskać wyłącznego dostępu, ponieważ baza danych jest w użyciu . Ten komunikat o błędzie wskazuje, że inny proces używa msdb . Dlatego musimy zastosować jedno z poniższych podejść, aby poprawnie przywrócić bazę danych msdb:

  • Uruchom instancję lub usługę SQL Server w trybie jednego użytkownika, tak jak to zrobiliśmy wcześniej, aby uniknąć łączenia się i uzyskiwania dostępu do msdb baza danych.
  • Lub przynieś msdb bazy danych do trybu pojedynczego użytkownika bez żadnego użytkownika łączącego się z nią.

Ponieważ wiemy, jak przełączyć instancję lub usługę SQL Server w tryb jednego użytkownika podczas przywracania bazy danych systemu głównego, wypróbujemy drugą opcję, zmieniając bazę danych msdb na tryb jednego użytkownika, aby przywrócić kopię zapasową bazy danych msdb.

Uruchom poniższe polecenie:

USE [master]
GO
ALTER DATABASE [msdb] SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

Ważne :Wykonanie powyższego polecenia może się nie powieść w następujących przypadkach:

  • Usługa agenta SQL Server jest uruchomiona. Aby naprawić awarię, zatrzymaj usługę agenta SQL Server i spróbuj ponownie.
  • Wszystkie sesje użytkownika są połączone z bazą danych msdb. Możemy znaleźć aktywne połączenia z msdb lub inną bazą danych za pomocą poniższego zapytania:
use master
GO
select spid
from sys.sysprocesses
where dbid = db_id('msdb')

Jeśli ta kwerenda przyniesie jakiekolwiek wyniki, oznacza to, że niektóre sesje użytkowników są połączone z bazą danych msdb. W takim przypadku powinniśmy zabić te sesje poleceniem KILL i zamienić spid uzyskane z wykonania powyższego zapytania:

KILL <spid>

Gdy żadne sesje nie są połączone z msdb bazy danych, będziemy mogli z powodzeniem przenieść bazę danych msdb w tryb jednego użytkownika. Za każdym razem, gdy baza danych jest w trybie pojedynczego użytkownika, będziemy mogli zobaczyć słowo (pojedynczy użytkownik) wyświetlane w pobliżu bazy danych, jak zaznaczono poniżej dla bazy danych msdb:

Spróbujmy przywrócić msdb teraz za pomocą naszego polecenia RESTORE DATABASE:

Z bazą danych msdb w trybie pojedynczego użytkownika byliśmy w stanie przywrócić msdb baza danych pomyślnie z ostatniego znanego dobrego Pełna kopia zapasowa msdb Baza danych. Przywrócenie bazy danych z kopii zapasowej domyślnie przeniesie ją do trybu wielu użytkowników, a jeśli z jakiegokolwiek powodu nadal jest w trybie jednego użytkownika, możemy wykonać poniższe polecenie, aby przywrócić ją do trybu wielu użytkowników:

USE [master]
GO
ALTER DATABASE [msdb] SET MULTI_USER
GO

Odbuduj systemowe bazy danych

Dla każdej idealnej produkcji środowisk, ważne jest, aby mieć pełną kopię zapasową baz danych systemu, aby przywrócić systemowe bazy danych bez utraty danych w przypadku jakichkolwiek przypadkowych błędów użytkowników lub uszkodzeń bazy danych lub odzyskiwania po awarii.

W najgorszych scenariuszach, jeśli nie można uruchomić usług SQL Server, musielibyśmy najpierw spróbować przywrócić systemowe bazy danych z ostatnich znanych pełnych kopii zapasowych, a jeśli nie mamy dostępnych pełnych kopii zapasowych i nie możemy uruchomić usług SQL Server, to jesteśmy pozostała tylko jedna ostateczna opcja, tj. Odbudowa baz danych systemu. Uwaga :Odbudowanie systemowych baz danych wyczyści wszystkie konfiguracje na poziomie serwera przechowywane we wszystkich systemowych bazach danych i możemy utracić wszystkie konfiguracje na poziomie serwera/wystąpienia, takie jak loginy, konfiguracje agentów SQL Server, inne krytyczne szczegóły przechowywane w bazach danych systemu, które widzieliśmy w naszych poprzednich artykułach.

Rzućmy okiem na to, jak odbudować systemowe bazy danych (jak wspomniano powyżej, ten proces należy wykonać jako ostatni środek, aby przywrócić instancję SQL Server w przypadku braku pełnych kopii zapasowych systemowych baz danych).

Aby odbudować systemowe bazy danych, potrzebowalibyśmy nośnika instalacyjnego SQL Server, zamontowanego lub skopiowanego na serwer, na którym jest zainstalowana nasza instancja SQL Server. Gdy to zrobimy, powinniśmy postępować zgodnie z poniższymi krokami:

  1. W wierszu polecenia przejdź do ścieżki, w której znajdują się pliki instalacyjne programu SQL Server (setup.exe):

    C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\SQLServer2016
  2. Wykonaj poniższe polecenie, zastępując wszystkie parametry prawidłowymi wartościami. Wartość ACTION =REBUILDDATABASE oznacza, że ​​wszystkie systemowe bazy danych mają zostać odbudowane po wykonaniu tego polecenia.
Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]

Parametry do zmiany to:

  • InstanceName – nazwa instancji SQL Server, w naszym przypadku jest to RRJ
  • Konta – nazwa konta sysadmin, w naszym przypadku jest to sa
  • Silne hasło – silne hasło dla sa konto administratora systemu.
  • CollationName – Nazwa sortowania bazy danych SQL Server, jeśli musi zostać zmieniona.

Wniosek

Dowiedzieliśmy się, jak tworzyć kopie zapasowe i przywracać bazy danych użytkownika i systemu, i zrozumieliśmy dodatkowe środki wymagane do przywracania baz danych systemu, takich jak bazy danych systemu master i msdb. W przypadku braku pełnych kopii zapasowych baz danych systemu, nauczyliśmy się również, jak odbudować systemowe bazy danych z nośnika instalacyjnego SQL Server i zrozumieliśmy utratę danych związanych z konfiguracją podczas odbudowy systemowych baz danych. Podsumowując, pośrednio zrozumieliśmy znaczenie planowania pełnych kopii zapasowych baz danych systemu oprócz baz danych użytkowników.

Dziękujemy za poświęcony czas i wkrótce spotkamy się ponownie z kolejnym interesującym artykułem.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Statystyka obiektów bazy danych SQL Server

  2. Instalacja i konfiguracja programu SQL Server Log Shipping i odzyskiwanie po awarii -4

  3. Przekaż tabelę jako parametr do UDF serwera sql

  4. Warunkowa klauzula WHERE w SQL Server

  5. Jak wstawić wyniki procedury składowanej do tabeli tymczasowej w SQL Server