Udostępnij za pośrednictwem


Ponowne kompilowanie systemowych baz danych

Dotyczy:programu SQL Server

Bazy danych systemowych należy odbudować, aby rozwiązać problemy z uszkodzeniem w bazach danych systemowych: master, model, msdb, lub resource, lub aby zmodyfikować domyślne sortowanie na poziomie serwera. Ten artykuł zawiera instrukcje krok po kroku dotyczące odbudowy systemowych baz danych w programie SQL Server.

Ten artykuł nie ma związku z odbudowywaniem indeksów.

Ograniczenia

Gdy bazy danych systemu master, model, msdbi tempdb są ponownie tworzone, bazy danych są porzucane i ponownie tworzone w ich oryginalnej lokalizacji. Jeśli w instrukcji rebuild określono nowe sortowanie, systemowe bazy danych są tworzone przy użyciu tego ustawienia sortowania. Wszelkie modyfikacje użytkowników w tych bazach danych zostaną utracone. Możesz na przykład mieć obiekty zdefiniowane przez użytkownika w bazie danych master, zaplanowane zadania w msdblub zmiany domyślnych ustawień bazy danych w bazie danych model.

Warunki wstępne

Przed odbudową systemowych baz danych wykonaj następujące zadania, aby upewnić się, że można przywrócić systemowe bazy danych do ich bieżących ustawień.

  1. Rejestruj wszystkie wartości konfiguracji dla całego serwera.

    SELECT * FROM sys.configurations;
    
  2. Zarejestruj wszystkie poprawki zastosowane do wystąpienia programu SQL Server i bieżącego sortowania. Należy ponownie zastosować te poprawki po ponownym skompilowaniu systemowych baz danych.

    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
    
  3. Zarejestruj bieżącą lokalizację wszystkich plików danych i dzienników dla systemowych baz danych. Ponowne kompilowanie systemowych baz danych instaluje wszystkie systemowe bazy danych w ich oryginalnej lokalizacji. Jeśli przeniesiono systemowe dane bazy danych lub pliki dziennika do innej lokalizacji, musisz ponownie przenieść pliki.

    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
    
  4. Znajdź bieżącą kopię zapasową baz danych master, modeli msdb.

  5. Jeśli wystąpienie programu SQL Server jest skonfigurowane jako dystrybutor replikacji, znajdź bieżącą kopię zapasową bazy danych distribution.

  6. Upewnij się, że masz odpowiednie uprawnienia do ponownego kompilowania systemowych baz danych. Aby wykonać tę operację, musisz być członkiem stałej roli serwera sysadmin. Aby uzyskać więcej informacji, zobacz Server-Level Roles.

  7. Sprawdź, czy na serwerze lokalnym istnieją kopie master, model, msdb danych i plików szablonów dziennika. Domyślną lokalizacją plików szablonów jest C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates (gdzie <xx> to zainstalowana wersja). Te pliki są używane podczas ponownego kompilowania i muszą być obecne, aby Instalacja zakończyła się pomyślnie. Jeśli ich brakuje, uruchom funkcję Napraw instalatora lub ręcznie skopiuj pliki z nośnika instalacyjnego. Aby zlokalizować pliki na nośniku instalacyjnym, przejdź do odpowiedniego katalogu platformy (x86 lub x64), a następnie przejdź do setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates.

Ponowne kompilowanie systemowych baz danych

Poniższa procedura ponownie kompiluje bazy danych systemu master, model, msdbi tempdb. Nie można określić systemowych baz danych do ponownego skompilowania. W przypadku wystąpień klastrowanych należy wykonać tę procedurę w aktywnym węźle, a zasób programu SQL Server w odpowiedniej grupie aplikacji klastra musi zostać przełączony w tryb offline przed wykonaniem procedury.

Ta procedura nie kompiluje bazy danych resource. Zobacz sekcję Ponowne kompilowanie bazy danych systemu zasobów w dalszej części tego artykułu.

Ponowne kompilowanie systemowych baz danych dla wystąpienia programu SQL Server

  1. Wstaw nośnik instalacyjny programu SQL Server na dysku lub z wiersza polecenia zmień katalogi na lokalizację pliku setup.exe na serwerze lokalnym. W przypadku programu SQL Server 2022 (16.x) domyślna lokalizacja na serwerze to C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  2. W oknie wiersza polecenia wprowadź następujące polecenie. Nawiasy kwadratowe są używane do wskazywania parametrów opcjonalnych. Nie wprowadzaj nawiasów. W przypadku korzystania z systemu operacyjnego Windows z włączoną kontrolą konta użytkownika (UAC), uruchomienie Instalatora wymaga podniesionych uprawnień. Wiersz polecenia musi być uruchamiany jako Administrator.

    setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
    
    Nazwa parametru Opis
    /QUIET lub /Q Określa, że Instalator powinien działać bez żadnego interfejsu użytkownika.
    /ACTION=REBUILDDATABASE Określa, że Instalator powinien ponownie utworzyć systemowe bazy danych.
    /INSTANCENAME=InstanceName Nazwa wystąpienia programu SQL Server. W przypadku wystąpienia domyślnego wprowadź MSSQLSERVER.
    /SQLSYSADMINACCOUNTS=konta Określa grupy systemu Windows lub indywidualne konta, które należy dodać do stałej roli administratora serwera sysadmin. Podczas określania więcej niż jednego konta należy oddzielić konta pustym miejscem. Na przykład wprowadź BUILTIN\Administrators MyDomain\MyUser. Podczas określania konta, które zawiera puste miejsce w nazwie konta, należy ująć konto w znaki podwójnego cudzysłowu. Na przykład wprowadź NT AUTHORITY\SYSTEM.
    [ /SAPWD=StrongPassword ] Określa hasło dla konta programu SQL Server sa. Ten parametr jest wymagany, jeśli wystąpienie korzysta z trybu uwierzytelniania mieszanego (SQL Server i uwierzytelniania systemu Windows).

    Uwaga dotycząca zabezpieczeń: konto sa jest dobrze znanym kontem programu SQL Server i jest często celem złośliwych użytkowników. Ważne jest, aby używać silnego hasła do logowania sa.

    Nie określaj tego parametru dla trybu uwierzytelniania systemu Windows.
    [ /SQLCOLLATION=CollationName ] Określa nowe sortowanie na poziomie serwera. Ten parametr jest opcjonalny. Gdy porządek sortowania nie zostanie określony, używany jest bieżący porządek sortowania serwera.

    Ważne: Zmiana sortowania na poziomie serwera nie zmienia sortowania istniejących baz danych użytkowników. Wszystkie nowo utworzone bazy danych użytkowników będą domyślnie używać nowego sortowania.

    Aby uzyskać więcej informacji, zobacz Set or Change the Server Collation.
    [ /SQLTEMPDBFILECOUNT=NumberOfFiles ] Określa liczbę tempdb plików danych. Tę wartość można zwiększyć do 8 lub liczbę rdzeni, w zależności od tego, która wartość jest wyższa.

    Wartość domyślna: 8 lub liczba rdzeni, w zależności od tego, która wartość jest niższa.
    [ /SQLTEMPDBFILESIZE=FileSizeInMB ] Określa początkowy rozmiar każdego pliku danych tempdb w MB. Konfiguracja umożliwia rozmiar do 1024 MB.

    Wartość domyślna: 8
    [ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] Określa przyrost wielkości każdego pliku danych tempdb w MB. Wartość 0 wskazuje, że automatyczny wzrost jest wyłączony i nie jest dozwolone żadne dodatkowe miejsce. Konfiguracja umożliwia rozmiar do 1024 MB.

    Wartość domyślna: 64
    [ /SQLTEMPDBLOGFILESIZE=FileSizeInMB ] Określa początkowy rozmiar pliku dziennika tempdb w MB. Konfiguracja umożliwia rozmiar do 1024 MB.

    Wartość domyślna: 8.

    Dozwolony zakres: Min = 8, max = 1024.
    [ /SQLTEMPDBLOGFILEGROWTH=FileSizeInMB ] Określa przyrost pliku dziennika tempdb w MB. Wartość 0 wskazuje, że automatyczny wzrost jest wyłączony i nie jest dozwolone żadne dodatkowe miejsce. Konfiguracja umożliwia rozmiar do 1024 MB.

    Wartość domyślna: 64

    Dozwolony zakres: Min = 8, max = 1024.
    [ /SQLTEMPDBDIR=Katalogi ] Określa katalogi dla tempdb plików danych. Podczas określania więcej niż jednego katalogu należy oddzielić katalogi pustym miejscem. Jeśli określono wiele katalogów, pliki danych tempdb zostaną rozłożone na katalogi w sposób okrężny.

    Wartość domyślna: Katalog danych systemowych
    [ /SQLTEMPDBLOGDIR=Directory ] Określa katalog dla pliku dziennika tempdb.

    Wartość domyślna: Katalog danych systemowych
  3. Po zakończeniu ponownego kompilowania systemowych baz danych instalator wraca do wiersza polecenia bez komunikatów. Sprawdź plik dziennika Summary.txt, aby sprawdzić, czy proces zakończył się pomyślnie. Ten plik znajduje się w lokalizacji C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs.

  4. Scenariusz RebuildDatabase usuwa systemowe bazy danych i instaluje je ponownie w stanie czystego. Ponieważ ustawienie liczby plików tempdb nie jest utrwalane, wartość liczby plików tempdb nie jest znana podczas instalacji. W związku z tym scenariusz ebuildDatabase nie zna liczby plików tempdb do odczytu. Wartość liczby plików tempdb można podać ponownie za pomocą parametru SQLTEMPDBFILECOUNT. Jeśli parametr nie zostanie podany, baza danych RebuildDatabase doda domyślną liczbę plików tempdb, czyli tyle plików tempdb, ile wynosi liczba procesorów CPU lub 8, w zależności od tego, która z nich jest niższa.

Zadania po ponownej kompilacji

Po odbudowaniu bazy danych może być konieczne wykonanie następujących dodatkowych zadań:

  • Przywróć najnowsze pełne kopie zapasowe baz danych master, modeli msdb. Aby uzyskać więcej informacji, zobacz Tworzenie kopii zapasowych i przywracanie systemowych baz danych (SQL Server).

    Ważny

    Jeśli sortowanie serwera zostało zmienione, nie przywracaj systemowych baz danych. Spowoduje to zastąpienie nowego sortowania poprzednim ustawieniem sortowania.

    Jeśli kopia zapasowa jest niedostępna lub jeśli przywrócona kopia zapasowa nie jest bieżąca, utwórz ponownie brakujące wpisy. Na przykład utwórz ponownie wszystkie brakujące wpisy dla baz danych użytkowników, urządzeń kopii zapasowych, identyfikatorów logowania programu SQL Server, punktów końcowych itd. Najlepszym sposobem ponownego utworzenia wpisów jest uruchomienie oryginalnych skryptów, które je utworzyły.

    Ważny

    Zalecamy zabezpieczenie skryptów, aby zapobiec ich zmianie przez osoby nieautoryzowane.

  • Jeśli wystąpienie programu SQL Server jest skonfigurowane jako dystrybutor replikacji, należy przywrócić bazę danych distribution. Aby uzyskać więcej informacji, zobacz Tworzenie kopii zapasowych i przywracanie replikowanych baz danych.

  • Przenieś systemowe bazy danych do zarejestrowanych wcześniej lokalizacji. Aby uzyskać więcej informacji, zobacz Przenoszenie systemowych baz danych.

  • Sprawdź, czy wartości konfiguracji dla całego serwera są zgodne z wartościami zarejestrowanymi wcześniej.

Ponowne kompilowanie bazy danych zasobów

Poniższa procedura ponownie kompiluje bazę danych systemu resource. Podczas odbudowy bazy danych resource wszystkie aktualizacje naprawcze zostaną utracone i dlatego należy je ponownie zastosować.

Ponowne kompilowanie bazy danych systemu zasobów

  1. Uruchom program instalacyjny programu SQL Server (setup.exe) z nośnika dystrybucji.

  2. W obszarze nawigacji po lewej stronie wybierz pozycję Konserwacja, a następnie wybierz pozycję Napraw.

  3. Aby mieć pewność, że na systemie są zainstalowane wymagane komponenty i że komputer spełnia reguły weryfikacji instalatora, należy uruchomić procesy wsparcia instalacji oraz procedury związane z plikami. Wybierz pozycję OK lub Zainstaluj, aby kontynuować.

  4. Na stronie Wybierz wystąpienie wybierz wystąpienie do naprawienia, a następnie wybierz Dalej.

  5. Reguły naprawy zostaną uruchomione, aby zweryfikować działanie. Aby kontynuować, wybierz pozycję Dalej.

  6. Na stronie Gotowe do naprawy wybierz pozycję Napraw. Strona Complete (Ukończone) wskazuje, że operacja została zakończona.

Tworzenie nowej bazy danych msdb

Jeśli baza danych msdb jest uszkodzona lub podejrzewana i nie masz kopii zapasowej bazy danych msdb, możesz utworzyć nową msdb przy użyciu skryptu instmsdb.

Ostrzeżenie

Ponowne skompilowanie bazy danych msdb przy użyciu skryptu instmsdb.sql spowoduje wyeliminowanie wszystkich informacji przechowywanych w msdb, takich jak zadania, alerty, operatory, plany konserwacji, historia kopii zapasowych, ustawienia zarządzania oparte na zasadach, poczta bazy danych, magazyn danych wydajności itd.

  1. Zatrzymaj wszystkie usługi łączące się z aparatem bazy danych, w tym z programem SQL Server Agent, usługami SSRS, SSIS i wszystkimi aplikacjami używającymi programu SQL Server jako magazynu danych.

  2. Uruchom program SQL Server z poziomu wiersza polecenia przy użyciu polecenia :

    NET START MSSQLSERVER /T3608
    

    Aby uzyskać więcej informacji, zobacz Uruchom, Zatrzymaj, Wstrzymaj, Wznów, Zrestartuj Silnik Bazy Danych, Agenta SQL Server lub Usługę Przeglądarki SQL Server. Aby uzyskać informacje na temat Flagi Śledzenia 3608, zobacz TF3608.

  3. W innym oknie wiersza polecenia odłącz bazę danych msdb, wykonując następujące polecenie, zastępując <servername> wystąpieniem programu SQL Server:

    SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
    
  4. Za pomocą Eksploratora Windows zmień nazwę plików bazy danych msdb. Domyślnie znajdują się one w podfolderze DATA dla wystąpienia programu SQL Server.

  5. Używając SQL Server Configuration Manager, zatrzymaj i uruchom ponownie usługę Aparatu Bazy Danych w normalny sposób, bez dodatkowych flag śledzenia.

  6. W oknie wiersza polecenia połącz się z programem SQL Server i wykonaj polecenie:

    SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
    

    Zastąp <servername> wystąpieniem silnika bazy danych. Użyj ścieżki systemu plików wystąpienia programu SQL Server. Ponadto zastąp MSSQLXX.INSTANCE_NAME katalogiem odpowiadającym twojej wersji i wystąpieniu.

  7. Za pomocą Notatnika systemu Windows otwórz plik instmsdb.out i sprawdź dane wyjściowe pod kątem błędów.

  8. Ponownie zastosuj wszystkie aktualizacje skumulowane (CU) zainstalowane w wystąpieniu, co spowoduje uaktualnienie bazy danych msdb do bieżącego poziomu CU.

  9. Utwórz ponownie zawartość użytkownika przechowywaną w bazie danych msdb, na przykład zadania, alerty i inne elementy.

  10. Tworzenie kopii zapasowej bazy danych msdb.

Ponowne kompilowanie bazy danych tempdb

Jeśli baza danych tempdb jest uszkodzona lub podejrzewana, a uruchomienie aparatu bazy danych nie powiedzie się, można ponownie skompilować tempdb bez konieczności ponownego kompilowania wszystkich systemowych baz danych.

  1. Zmień nazwę bieżących plików tempdb.mdf i templog.ldf, jeśli istnieją.

  2. Uruchom program SQL Server z poziomu wiersza polecenia, używając aplikacji sqlservr.

    sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
    

    W przypadku domyślnej nazwy wystąpienia użyj MSSQLSERVER, dla nazwanego wystąpienia użyj MSSQL$<instance_name>. Flaga śledzenia 4022 wyłącza wykonywanie procedur składowanych uruchamianych na starcie. -mSQLCMD zezwala tylko sqlcmd.exe na łączenie się z serwerem. Aby uzyskać więcej informacji, zobacz Inne opcje uruchamiania.

    Notatka

    Upewnij się, że okno wiersza polecenia pozostaje otwarte po uruchomieniu programu SQL Server. Zamknięcie okna wiersza polecenia spowoduje zakończenie procesu.

  3. Nawiąż połączenie z serwerem przy użyciu sqlcmd, a następnie użyj następującej procedury składowanej, aby zresetować stan bazy danych tempdb.

    exec master..sp_resetstatus tempdb
    
  4. Zamknij serwer, naciskając Ctrl+C w oknie wiersza polecenia.

  5. Uruchom ponownie usługę SQL Server. Spowoduje to utworzenie nowego zestawu plików bazy danych tempdb i odzyskanie bazy danych tempdb.

Rozwiązywanie problemów z błędami ponownej kompilacji

Składnia i inne błędy czasu wykonywania są wyświetlane w oknie wiersza polecenia. Sprawdź instrukcję Setup pod kątem następujących błędów składniowych:

  • Brak znaku ukośnika (/) przed każdą nazwą parametru.

  • Brak znaku równości (=) między nazwą parametru a wartością parametru.

  • Obecność pustych spacji między nazwą parametru a znakiem równości.

  • Obecność przecinków (,) lub innych znaków, które nie są określone w składni.

Po zakończeniu operacji ponownej kompilacji sprawdź dzienniki programu SQL Server pod kątem błędów. Domyślna lokalizacja dziennika to C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs. Aby zlokalizować plik dziennika zawierający wyniki procesu ponownego kompilowania, zmień katalogi na folder Logs z wiersza polecenia, a następnie uruchom polecenie findstr /s RebuildDatabase summary*.*. To wyszukiwanie wskaże wszystkie pliki dziennika zawierające wyniki odbudowy systemowych baz danych. Otwórz pliki dziennika i sprawdź je pod kątem odpowiednich komunikatów o błędach.