Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

Simptome

Luați în considerare următorul scenariu:

  • Instalați o instanță a Microsoft SQL Server 2005, Microsoft SQL Server 2008 sau Microsoft SQL Server 2008 R2.

  • Instanța SQL Server este denumită INST1 și găzduiește o bază de date numită Test_RO_FG_DB.

  • Baza de date conține următoarele grupuri de fișiere:

    • Primară

    • RO_FG

    • RW_FG

  • Filegroup numit RO_FG este marcat ca READ_ONLY.

  • Instalați o instanță nouă Microsoft SQL Server 2012. Această instanță a SQL Server 2012 este denumită INST2.

  • Detașați baza de date Test_RO_FG_DB din INST1.

  • Încercați să atașați baza de date Test_RO_FG_DB la INST2.

  • Primiți un mesaj de eroare care seamănă cu următorul:

    MSG 3415, nivel 16, stat 2, 1Database linie ' Test_RO_FG_DB ' nu poate fi actualizat, deoarece este doar în citire, are fișiere doar în citire sau utilizatorul nu are permisiuni de a modifica unele fișiere. Faceți ca baza de date sau fișierele să fie inscriptibile și reluare recuperare.

  • Încercați să reatașați baza de date Test_RO_FG_DB la INST1.

În acest scenariu, nu este posibil să reatașați baza de date la INST1. Și veți primi următorul mesaj de eroare în Jurnalul de erori SQL Server:

Notă Această problemă apare doar atunci când încercați să atașați o bază de date care conține un filegroup marcat READ_ONLY. Această problemă nu se produce atunci când încercați să mutați o bază de date READ_ONLY în care sunt marcate toate datele READ_ONLY.

Cauză

Această problemă apare deoarece SQL Server 2012 nu detectează filegroup doar în citire înainte să înceapă să facă upgrade la baza de date. După ce a început upgrade-ul, SQL Server 2012 scrie intrări în Jurnalul de tranzacții. Versiunile anterioare nu pot citi noile intrări din jurnalul de tranzacții.

Stare

Microsoft a confirmat că aceasta este o problemă în produsele Microsoft enumerate în secțiunea „Se aplică la”.

Rezolvare

Informații despre actualizarea cumulativă

SQL Server 2012

Remedierea pentru această problemă a fost lansată pentru prima dată în actualizarea cumulativă 2 pentru SQL Server 2012. Pentru mai multe informații despre acest pachet de actualizare cumulativă, faceți clic pe următorul număr de articol pentru a vedea articolul în baza de cunoștințe Microsoft:

2703275 Pachetul de actualizare cumulativă 2 pentru SQL Server 2012Notă Deoarece compilările sunt cumulative, fiecare nouă versiune de remediere conține toate remedierile rapide și toate remedierile de securitate care au fost incluse cu versiunea anterioară SQL Server 2012 fix release. Microsoft recomandă să luați în considerare aplicarea celei mai recente versiuni de remediere care conține această remediere rapidă. Pentru mai multe informații, faceți clic pe următorul număr de articol pentru a-l vedea în Baza de cunoștințe Microsoft:

2692828 SQL Server 2012 construiește care au fost lansate după ce s-a lansat SQL Server 2012 Trebuie să aplicați o remediere rapidă SQL Server 2012 la o instalare de SQL Server 2012.

Soluție de evitare

Pentru a rezolva această problemă, utilizați una dintre metodele următoare.Metoda 1Restaurați o copie de rezervă a bazei de date din INST1 pe INST2.Notă Problema descrisă în secțiunea "simptome" nu se produce în SQL Server 2012 atunci când restaurați o copie de rezervă de la o versiune anterioară.Metoda 2Efectuați un upgrade local al versiunii anterioare de SQL Server la SQL Server 2012.Metoda 3Mutați o bază de date care conține o filegroup doar în citire la o instanță de SQL Server 2012. Pentru aceasta, urmați pașii de mai jos.Notă Efectuați pașii de la 4 la 11 pe serverul care rulează SQL Server 2012. De exemplu, efectuați pașii de la 4 la 11 pe INST2.

  1. Pe INST1, detașați baza de date. De exemplu, detașați baza de date Test_RO_FG_DB.

  2. Mutați fișierele bazei de date pe serverul care găzduiește instanța INST2.

  3. Încercați să atașați baza de date la INST2. Următorul exemplu de cod arată cum să procedați astfel:

    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

    Notă Veți primi mesajul de eroare 3425 menționat în secțiunea "simptome".

  4. În linia de comandă, redenumiți fișierele bazei de date. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. În SQL Server Management Studio, creați o bază de date care are același nume și structură fizică ca baza de date pe care doriți să o atașați. Următorul exemplu de cod arată cum să procedați astfel:

    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. Setați baza de date la offline. Pentru a face acest lucru, derulează următoarea comandă:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. În linia de comandă, redenumiți fișierele din noua bază de date. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. În linia de comandă, redenumiți fișierele din baza de date pe care le-ați mutat la pasul 2. Redenumiți fișierele pentru a se potrivi cu baza de date pe care ați creat-o la pasul 4. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. Setați baza de date la ONLINE. Pentru a face acest lucru, derulează următoarea comandă:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Verificați dacă baza de date este online și restabiliți funcționalitatea de broker de servicii.

  11. Ștergeți fișierele bazei de date care nu sunt necesare. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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 4Reatașați o bază de date care conține o filegroup doar în citire la instanța anterioară a SQL Server. Pentru aceasta, urmați pașii de mai jos.Note

  • Baza de date conține, de asemenea, noile intrări de jurnal de tranzacții din upgrade-ul eșuat.

  • Efectuați pașii de la 3 la 10 pe serverul care rulează o versiune mai veche de SQL Server. De exemplu, efectuați pașii de la 3 la 10 pe INST1.

  1. Mutați fișierele bazei de date în instanța SQL Server care găzduiește INST1.

  2. Încercați să atașați baza de date la INST1. Următorul exemplu de cod arată cum să procedați astfel:

    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

    Notă Veți primi mesajul de eroare 3624 menționat în secțiunea "simptome". De asemenea, veți primi un mesaj de eroare 1813.

  3. În linia de comandă, redenumiți fișierele bazei de date pe INST1. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. În SQL Server Management Studio, creați o bază de date care are același nume și structură fizică ca baza de date pe care doriți să o atașați. Următorul exemplu de cod arată cum să procedați astfel:

    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. Setați baza de date la offline. Pentru a face acest lucru, derulează următoarea comandă:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. În linia de comandă, redenumiți fișierele din noua bază de date. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. În linia de comandă, redenumiți fișierele din baza de date pe care le-ați mutat la pasul 2. Redenumiți fișierele pentru a se potrivi cu baza de date pe care ați creat-o la pasul 4. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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. Setați baza de date la modul de urgență și efectuați o reparare. Pentru a face acest lucru, derulează următoarea comandă.Notă Jurnalele de tranzacții ale bazei de date sunt recompilate în acest pas. Acest lucru poate duce la pierderi de date. Prin urmare, vă recomandăm să faceți backup bazei de date înainte de a efectua acest pas.

    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. Verificați dacă baza de date este online și restabiliți funcționalitatea de broker de servicii.

  10. Ștergeți fișierele bazei de date care nu sunt necesare. Următoarea comandă eșantion vă arată cum să procedați astfel:

    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 

Mai multe informații

Există câțiva pași care apar atunci când o bază de date este atașată la o instanță de SQL Server. Acești pași includ recuperarea bazei de date și upgrade-ul fișierelor din versiuni anterioare de SQL Server. În problema descrisă în secțiunea "simptome", SQL Server 2012 începe procesul de upgrade înainte ca fișierele doar în citire din baza de date să fie detectate. Pașii de upgrade includ pornirea unei tranzacții pentru a goli bitul "închidere curată" din pagina de pornire a bazei de date. Versiunile anterioare de SQL Server nu pot citi înregistrarea începe tranzacție. Prin urmare, baza de date nu este utilizabilă în versiunile anterioare de SQL Server și SQL Server generează eroarea 3624.Upgrade-uri în locație atunci când o bază de date este marcată ca doar în citireAtunci când efectuați un upgrade local al unei instanțe a SQL Server care conține o bază de date doar în citire, care este denumită Test_RO_DB la SQL Server 2012, este posibil să primiți mesaje de eroare care seamănă cu următoarele în Jurnalul de erori SQL Server:

La finalul procesului de upgrade, baza de date Test_RO_DB va fi în starea RECOVERY_PENDING. Trebuie să utilizați comanda Alter Database pentru a seta baza de date la READ_WRITE. Apoi utilizați comanda Alter Database pentru a seta baza de date la READ_ONLY. Acest lucru permite motorului SQL Server să actualizeze baza de date la versiunea corectă.Upgrade-uri în locație atunci când o bază de date citire/scriere conține grupuri de fișiere care sunt marcate ca doar în citireAtunci când efectuați un upgrade local la SQL Server 2012, este posibil să primiți mesaje care seamănă cu următoarele în Jurnalul de erori SQL Server. Această problemă apare atunci când instanța anterioară a SQL Server găzduiește o bază de date citire/scriere și conține grupuri de fișiere care sunt marcate READ_ONLY. Cu toate acestea, procesul de upgrade se termină așa cum vă așteptați, iar baza de date pornește online.Notă În următorul mesaj de eroare, baza de date este denumită Test_RO_FG:

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×