Odzyskaj bazę danych zasobów SQL Server
admin - 10 lutego, 2022przez: Daniel Farina | aktualizacja: 2019-10-25 | Komentarze (2) | powiązane: więcej > konfiguracje SQL Server

bezpłatne webinarium MSSQLTips: Konfigurowanie serwera SQL dla najlepszej wydajności
Weź udział w tym webinarium, aby dowiedzieć się o najlepszych praktykach i krokach, które należy podjąć, aby upewnić się, że konfiguracja serwera SQL jest skonfigurowana, aby zmaksymalizować wydajność.
Problem
poprawka została zastosowana automatycznie do mojej instancji SQL Server Przez Windows Update.Mogło to pozostać niezauważone, jak to często bywa w przypadku aktualizacji systemu Windows. Kiedy próbowałem uzyskać dostęp do mojej instancji SQL Server, odkryłem, że baza danych mssqlsystemresource nie była tam, gdzie powinna być, a SQL Server nie chciał się uruchomić. W tej końcówce powiem Ci, jak to rozwiązałem.
rozwiązanie
pewnego dnia próbowałem połączyć się z moim środowiskiem testowym SQL Server withSQLServer Management Studio i otrzymałem komunikat o błędzie „server not found”.
w normalnej reakcji otworzyłem SQL Server Configuration Manager, aby sprawdzić status SQL Serverservice; i jak można się domyślić, usługa nie była uruchomiona. W tym momencie byłem trochę zmartwiony, ponieważ usługi dla SQL Server są ustawione na automatyczne uruchamianie.
poprzedziłem pierwszym krokiem odzyskiwania, który polegał na próbie uruchomienia instancji i zobaczenia, co się stanie. Kiedy próbowałem uruchomić instancję SQL Server, otrzymałem następujący komunikat o błędzie, że żądanie nie powiodło się i że muszę sprawdzić dziennik zdarzeń lub inny dziennik błędów, aby uzyskać szczegółowe informacje. Możesz zobaczyć wiadomość na obrazkuponiżej.

w tym momencie zdałem sobie sprawę, że nie jest to łatwa sprawa do rozwiązania, więc postępowałem zgodnie z instrukcjami themessage i otworzyłem aplikację przeglądarki zdarzeń, aby wyświetlić Dziennik event w poszukiwaniu odpowiedzi.
najpierw spojrzałem na dziennik aplikacji i szukałem zdarzenia z sourceequal do MSSQLSERVER, który jest instancją SQL Server, który rozwiązywałem.Zauważyłem, że wystąpił błąd związany z serwerem SQL, który powiedział „OpenFailed: nie można otworzyć filemssqlsystemresource.mdf OS error: 2” (system nie mógł znaleźć określonego pliku)asis pokazany na poniższym zrzut ekranu. Dla tych z Was, którzy nie wiedzą, poniższy plik jest częścią tzw. bazy danych zasobów i jest wymagany do uruchomienia SQL Server.

baza danych mssqlsystemresource SQL Server
baza danych mssqlsystemresource jest fizyczną bazą danych, która zawiera wszystkie definicje obiektów systemowych zawartych w SQL Server. Ta baza danych jest tylko do odczytu i nie jest dostępna nawet dla członków serwera SYSADMIN roleunless instancja jest dostępna poprzez dedykowane połączenie administratora po uruchomieniu w trybie pojedynczego użytkownika (z opcją-m startup).
ze względu na fakt, że baza danych zasobów zawiera cały kod obiektów systemowych(nie zawiera żadnych danych użytkownika ani metadanych), aktualizacja wersji jest wykonywana po prostu przez zastąpienie plików bazy danych zasobów w folderze instancji ’ Binn.
odzyskiwanie bazy danych mssqlsystemresource SQL Server
po odkryciu, że brakuje plików dla bazy danych mssqlsystemresource, muszę wiedzieć, dlaczego tak się stało i jak rozwiązać problem. Pierwszą rzeczą, którą instynktownie zrobiłem, było wyszukiwanie w Internecie o znikających bazach danych mssqlsystemresource i znalazłem następujący artykuł Microsoft: poprawka: brak bazy danych zasobów po zainstalowaniu aktualizacji lub service packsdla instancji SQL Server 2012 jeden po drugim, a następnie uruchom ponownie serwer.
mając świadomość, że artykuł Microsoft stwierdził, że dotknięte wersje to SQL Server 2012 i 2014, w międzyczasie mój system to SQL Server 2017, ale pomyślałem, że pójdę tą ścieżką, aby zobaczyć.
ku mojemu zdziwieniu zobaczyłem, że kolejne dwie aktualizacje miały działać jedna po drugiej:
- Aktualizacja zabezpieczeń dla SQL Server 2017 RTM (KB4505224)
- Aktualizacja zabezpieczeń dla SQL Server 2016 SP1 (KB4505219)

teraz, gdy znałem przyczynę, musiałem dowiedzieć się, jak przywrócić bazę mssqlsystemresourcedatabase, ponieważ jest to mój komputer domowy, nie miałem kopii zapasowej. Trzeba było pobrać paczkę i zainstalować ją ręcznie, ale może dlatego, że brakowało mssqlsystemresourcedatabase, nie zadziałało; coś w rodzaju sytuacji z kurczakiem i jajkiem.
nie miałem zamiaru ponownie instalować SQL Server, więc zdecydowałem się na podejście moreheterodox. Otworzyłem folder tymczasowy, którego patch używa do dekompresji plików. Możesz zanotować ten folder po uruchomieniu programu instalacyjnego, wykonując zrzut ekranu, tak jak zrobiłem to później.

po zlokalizowaniu katalogu tymczasowego wyszukałem ścieżkę x64\setup\ i po przejrzeniu plików domyśliłem się, że sql_engine_core_inst.mspmay posiada kopię bazy danych mssqlsystemresource. Ten plik jest skompresowany, więc aby go otworzyć, potrzebujesz narzędzia do dekompresji. Użyłem 7-Zip, który jest darmowy i można go pobrać z https://www.7-zip.org/.
na następnym zrzut ekranu widać, że są dwa pliki, Eng_re_resourcedb_ldf_64 i ENG_RE_ResourceDb_mdf_64. Są to pliki themssqlsystemresource database dla 64-bitowej edycji SQL Server w języku angielskimjęzyk. Jeśli potrzebujesz innegojęzyka, musisz zmienić język na stronie pobierania poprawki. Pamiętaj, że silnik instalacyjny zawiera wszystkie języki, ale Pakiety wdrożeniowe są w określonym języku.

wyodrębniłem dwa pliki, a następnie zmieniłem ich nazwę w następujący sposób i skopiowałem je do folderu wymienionego powyżej w komunikacie o błędzie, w którym powinny istnieć te pliki.
- ENG_RE_ResourceDb_ldf_64 przemianowany na mssqlsystemresource.ldf
- ENG_RE_ResourceDb_mdf_64 przemianowany na mssqlsystemresource.mdf
po tym, jak te pliki zostały przemianowane i skopiowane do właściwego folderu, mogłem uruchomić usługi SQL Server i wszystko działało ponownie.
kolejne kroki
- w przypadku napotkania takiej lub podobnej sytuacji konieczności przywrócenia bazy zasobów bez konieczności tworzenia kopii zapasowej, aby móc wyodrębnić pliki mssqlsystemresourcedatabase z pakietu instalacyjnego, musisz znać dokładną wersję używanego serwera SQL. Jeśli nie wiesz, jak go znaleźć, możesz przeczytać tę wskazówkę, którąwyznaje różne metody, aby dowiedzieć się:jak powiedzieć, jakiej wersji serwera SQL używasz.
- dobrą praktyką jest wykonywanie kopii zapasowych bazy danych zasobów; jeśli chcesz wiedzieć, jak to zrobić, sugeruję, abyś zapoznał się z tą wskazówką:SQL Server backup and restore of the Resource database.
- w tej poradzie wspomniałem, że potrzebujesz „dedykowanych połączeń administratora”, aby móc uzyskać dostęp do bazy danych zasobów. Możesz przeczytać więcej o połączeniach DedicatedAdmin w kategorii Wskazówki dotyczące połączenia administratora serwera SQL Server i wziąć podpowiedź tekstową jako punkt wyjścia: dedykowane połączenie Administratora w SQL Server.
- dodatkowo wspomniałem, że jeśli chcesz uzyskać dostęp do bazy danych zasobów, musisz również uruchomić SQL Server w trybie pojedynczego użytkownika. W tej podpowiedzi dowiesz się, jak używać parametrów startowych, które pozwolą Ci uruchomić instancję w trybie pojedynczego użytkownika: Ustawianie parametrów startowych serwera SQL.
- jeśli twój problem zawiera scenariusz przywrócenia głównej bazy danych bez zachowania kopii zapasowej, możesz spojrzeć na tę podpowiedź: Przywracanie głównej bazy danych SQL Server nawet bez kopii zapasowej.
Ostatnia aktualizacja: 2019-10-25


o autorze

Zobacz wszystkie moje porady
- więcej porad DBA SQL Server…
Ostatnie wpisy
- O nas-Gandolfo Helin & Fountain Literary Management
- 5 rzeczy, które warto wiedzieć o Shalane Flanagan
- Rolling Stone
- toksyczność skórna
- Siergiej Tcherepnin-Artadia
- Jak radzić sobie ze stresem i presją społeczną
- która rasa konia jest najmądrzejsza?
- kwas krzemowy (si(OH)4) ma znaczący wpływ na sygnał absorpcji atomowej glinu mierzony za pomocą spektrometrii absorpcji atomowej w piecu Grafitowym (gfaas)
- wyjaśniając nasz Smart część 8-Self Smart
- Sadie T. M. Alexander (1898-1989)
Dodaj komentarz