Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Symptomy

Rozpatrzmy następujący scenariusz:

  • Zainstalowano wystąpienie programu Microsoft SQL Server 2005, Microsoft SQL Server 2008 lub Microsoft SQL Server 2008 R2.

  • Wystąpienie programu SQL Server nosi nazwę INST1 i zawiera bazę danych o nazwie Test_RO_FG_DB.

  • Baza danych zawiera następujące grupy plików:

    • Początkowe

    • RO_FG

    • RW_FG

  • Grupa plików o nazwie RO_FG jest oznaczona jako READ_ONLY.

  • Zainstalowano nowe wystąpienie programu Microsoft SQL Server 2012. To wystąpienie programu SQL Server 2012 ma nazwę INST2.

  • Odłączenie bazy danych Test_RO_FG_DB z INST1.

  • Użytkownik próbuje dołączyć bazę danych Test_RO_FG_DB do INST2.

  • Zostanie wyświetlony komunikat o błędzie podobny do następującego:

    Msg 3415, poziom 16, stan 2, 1Databasea wiersza "Test_RO_FG_DB" nie można uaktualnić, ponieważ jest on tylko do odczytu, ma pliki tylko do odczytu lub użytkownik nie ma uprawnień do modyfikowania części plików. Nadawanie bazie danych lub plikom możliwości zapisywania i ponownego uruchamiania odzyskiwania.

  • Próbujesz ponownie dołączyć bazę danych Test_RO_FG_DB do INST1.

W tym scenariuszu nie można ponownie dołączyć bazy danych do INST1. Ponadto w dzienniku błędów programu SQL Server jest wyświetlany następujący komunikat o błędzie:

Uwaga Ten problem występuje tylko wtedy, gdy próbujesz dołączyć bazę danych zawierającą grupę plików oznaczoną READ_ONLY. Ten problem nie występuje podczas próby przeniesienia READ_ONLY bazy danych, w której są oznaczone wszystkie dane READ_ONLY.

Przyczyna

Ten problem występuje, ponieważ program SQL Server 2012 nie wykrywa grupy plików tylko do odczytu przed rozpoczęciem uaktualniania bazy danych. Po uruchomieniu uaktualnienia program SQL Server 2012 zapisuje wpisy w dzienniku transakcji. Wcześniejsze wersje nie mogą czytać nowych wpisów dziennika transakcji.

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".

Rozwiązanie

Informacje o aktualizacji zbiorczej

Program SQL Server 2012

Poprawka dotycząca tego problemu została wydana po raz pierwszy w aktualizacji zbiorczej 2 dla programu SQL Server 2012. Aby uzyskać więcej informacji na temat tego zbiorczego pakietu aktualizacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2703275 Pakiet aktualizacji zbiorczej 2 dla programu SQL Server 2012Uwaga Ponieważ kompilacja jest zbiorcza, każdy nowy pakiet poprawek zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały dołączone do poprzedniej wersji poprawki SQL Server 2012. Firma Microsoft zaleca zastosowanie najnowszego wydania poprawki zawierającego tę poprawkę. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

2692828 Kompilacje programu SQL Server 2012 wydane po wydaniu programu SQL Server 2012 Musisz zastosować poprawkę SQL Server 2012 do instalacji programu SQL Server 2012.

Obejście

Aby obejść ten problem, Skorzystaj z jednej z poniższych metod.Metoda 1Przywracanie kopii zapasowej bazy danych z INST1 na INST2.Uwaga Problem opisany w sekcji "Symptomy" nie występuje w programie SQL Server 2012 w przypadku przywracania kopii zapasowej ze starszej wersji.Metoda 2Wykonaj uaktualnienie w miejscu wcześniejszej wersji programu SQL Server do programu SQL Server 2012.Metoda 3Przenieś bazę danych zawierającą grupę plików tylko do odczytu do wystąpienia programu SQL Server 2012. W tym celu wykonaj następujące czynności.Uwaga Wykonaj kroki od 4 do 11 na serwerze, na którym jest uruchomiony program SQL Server 2012. Na przykład wykonaj kroki od 4 do 11 w witrynie INST2.

  1. W witrynie INST1 Odłącz bazę danych. Na przykład odłączanie bazy danych Test_RO_FG_DB.

  2. Przenieś pliki bazy danych na serwer obsługujący wystąpienie INST2.

  3. Spróbuj dołączyć bazę danych do INST2. Poniższy przykładowy kod ilustruje, jak to zrobić:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO

    Uwaga Zostanie wyświetlony komunikat o błędzie 3425 wymieniony w sekcji "Symptomy".

  4. W wierszu polecenia Zmień nazwy plików bazy danych. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  5. W programie SQL Server Management Studio Utwórz bazę danych o takiej samej nazwie i strukturze fizycznej, co baza danych, którą chcesz dołączyć. Poniższy przykładowy kod ilustruje, jak to zrobić:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  6. Ustaw bazę danych w trybie offline. Aby to zrobić, uruchom następujące polecenie:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. W wierszu polecenia Zmień nazwy plików w nowej bazie danych. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  8. W wierszu polecenia Zmień nazwy plików w bazie danych przeniesionych w kroku 2. Zmień nazwy plików, aby pasowały do bazy danych utworzonej w kroku 4. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  9. Ustaw bazę danych w trybie ONLINE. Aby to zrobić, uruchom następujące polecenie:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Upewnij się, że baza danych jest w trybie online, a następnie ponownie Ustanów funkcję brokera usług.

  11. Usuń niepotrzebne pliki bazy danych. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

Metoda 4Ponownie Dołącz bazę danych zawierającą grupę plików tylko do odczytu do wcześniejszego wystąpienia programu SQL Server. W tym celu wykonaj następujące czynności.Uwagi

  • Baza danych zawiera również nowe wpisy dziennika transakcji z nieudanego uaktualnienia.

  • Wykonaj kroki od 3 do 10 na serwerze, na którym jest uruchomiona wcześniejsza wersja programu SQL Server. Na przykład wykonaj kroki od 3 do 10 w witrynie INST1.

  1. Przenieś pliki bazy danych do wystąpienia programu SQL Server obsługującego INST1.

  2. Spróbuj dołączyć bazę danych do INST1. Poniższy przykładowy kod ilustruje, jak to zrobić:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO

    Uwaga Zostanie wyświetlony komunikat o błędzie 3624 wymieniony w sekcji "Symptomy". Zostanie również wyświetlony komunikat o błędzie 1813.

  3. W wierszu polecenia Zmień nazwy plików bazy danych w witrynie INST1. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  4. W programie SQL Server Management Studio Utwórz bazę danych o takiej samej nazwie i strukturze fizycznej, co baza danych, którą chcesz dołączyć. Poniższy przykładowy kod ilustruje, jak to zrobić:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  5. Ustaw bazę danych w trybie offline. Aby to zrobić, uruchom następujące polecenie:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. W wierszu polecenia Zmień nazwy plików w nowej bazie danych. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  7. W wierszu polecenia Zmień nazwy plików w bazie danych przeniesionych w kroku 2. Zmień nazwy plików, aby pasowały do bazy danych utworzonej w kroku 4. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  8. Ustaw bazę danych w tryb AWARYJNy i wykonaj naprawę. W tym celu uruchom następujące polecenie.Uwaga W tym kroku dzienniki transakcji bazy danych zostaną odbudowane. Może to spowodować utratę danych. Dlatego zaleca się wykonanie kopii zapasowej bazy danych przed wykonaniem tego kroku.

    ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO 
  9. Upewnij się, że baza danych jest w trybie online, a następnie ponownie Ustanów funkcję brokera usług.

  10. Usuń niepotrzebne pliki bazy danych. Poniższe przykładowe polecenie przedstawia, jak to zrobić:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

Więcej informacji

Istnieje kilka kroków, które występują, gdy baza danych jest dołączona do wystąpienia programu SQL Server. Te kroki obejmują odzyskiwanie bazy danych i uaktualnianie plików ze starszych wersji programu SQL Server. W przypadku problemu opisanego w sekcji "Symptomy" program SQL Server 2012 rozpoczyna proces uaktualniania, zanim zostaną wykryte pliki tylko do odczytu w bazie danych. Kroki uaktualniania obejmują rozpoczęcie transakcji w celu wyczyszczenia bitu "czysta zamykanie" na stronie rozruchu bazy danych. Wcześniejsze wersje programu SQL Server nie mogą odczytać rekordu BEGIN TRANSACTION. Z tego powodu baza danych nie będzie używana we wcześniejszych wersjach programu SQL Server, a program SQL Server generuje błąd 3624.Uaktualnienia w miejscu, gdy baza danych jest oznaczona jako tylko do odczytuW przypadku przeprowadzania uaktualnienia w miejscu wystąpienia programu SQL Server zawierającego bazę danych tylko do odczytu o nazwie Test_RO_DB programu SQL Server 2012 mogą być wyświetlane komunikaty o błędach podobne do następujących w dzienniku błędów programu SQL Server:

Na koniec procesu uaktualniania baza danych Test_RO_DB będzie w stanie RECOVERY_PENDING. Aby skonfigurować bazę danych jako READ_WRITE, należy użyć polecenia ALTER DATABASE . Następnie użyj polecenia ALTER DATABASE , aby skonfigurować bazę danych do READ_ONLY. Dzięki temu aparat SQL Server będzie mógł uaktualnić bazę danych do odpowiedniej wersji.Uaktualnienia w miejscu, gdy baza danych do odczytu/zapisu zawiera grupy plików oznaczone jako tylko do odczytuPodczas przeprowadzania uaktualnienia w miejscu do programu SQL Server 2012 może zostać wyświetlony komunikat o błędzie podobny do następującego w dzienniku błędów programu SQL Server. Ten problem występuje, gdy wcześniejsze wystąpienie programu SQL Server hostuje bazę danych do odczytu/zapisu i zawiera grupy plików oznaczone READ_ONLY. Jednak proces uaktualniania kończy się niezgodnie z oczekiwaniami, a baza danych zostanie uruchomiona w trybie online.Uwaga W następującym komunikacie o błędzie Nazwa bazy danych to Test_RO_FG:

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×