Primenjuje se na
SQL Server 2012 Enterprise

Simptomi

Razmotrite sledeći scenario:

  • Instalirate instancu sistema Microsoft SQL Server 2005, sistema Microsoft SQL Server 2008 ili Microsoft SQL Server 2008 R2.

  • Instanca programa SQL Server se zove INST1 i hostuje bazu podataka koja se zove Test_RO_FG_DB.

  • Baza podataka sadrži sledeće grupe datoteka:

    • Primarni

    • RO_FG

    • RW_FG

  • Grupa datoteka koja se zove RO_FG je označena kao READ_ONLY.

  • Instalirate novu instancu sistema Microsoft SQL Server 2012. Ova instanca SQL Server 2012 se zove INST2.

  • Odvojite bazu podataka Test_RO_FG_DB INST1.

  • Pokušavate da priložite bazu podataka Test_RO_FG_DB inst2.

  • Dobijate poruku o grešci koja podseća na sledeće:

    Nije moguće nadograditi MSG 3415, nivo 16, stanje 2, baza podataka linije 1"Test_RO_FG_DB" zato što je samo za čitanje, ima datoteke samo za čitanje ili korisnik nema dozvole da izmeni neke datoteke. Učinite bazu podataka ili datoteka pisanjem i ponovo pokrenite oporavak.

  • Pokušajte ponovo da priložite bazu podataka Test_RO_FG_DB INST1.

U ovom scenariju ne možete ponovo da priložite bazu podataka u INST1. I dobićete sledeću poruku o grešci u SQL Server evidenciji grešaka:

Napokon Ovaj problem se javlja samo kada pokušate da priložite bazu podataka koja sadrži grupu datoteka koja je označena READ_ONLY. Do ovog problema ne dolazi kada pokušate da premestite READ_ONLY bazu podataka u kojoj su svi podaci označeni READ_ONLY.

Izazvati

Do ovog problema dolazi zato SQL Server 2012 ne otkriva grupu datoteka samo za čitanje pre nego što započne nadogradnju baze podataka. Kada nadogradnja počne, SQL Server 2012 upisuje stavke u evidenciju transakcija. Starije verzije ne mogu da čitaju nove stavke evidencije transakcija.

Status

Microsoft je potvrdio da je ovo problem u Microsoft proizvodima koji su navedeni u odeljku "Odnosi se na".

Rešenje

Kumulativne informacije o ažuriranju

SQL Server 2012

Rešenje ovog problema je prvo objavljeno u kumulativnim ispravkama 2 za SQL Server 2012. Za više informacija o ovom paketu kumulativnih ispravki kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2703275 Paket kumulativnih ispravki 2 za SQL Server 2012Note Zato što su verzije kumulativne, svako novo izdanje popravke sadrži sve hitne ispravke i sve bezbednosne ispravke koje su uključene u prethodno izdanje za popravku sistema SQL Server 2012. Microsoft preporučuje da razmotrite primenu najnovije ispravke za izdanje koje sadrži ovu hitnu ispravku. Za više informacija kliknite na sledeći broj članka da biste videli članak u Microsoft bazi znanja:

2692828 Verzije SQL Server 2012 objavljene nakon izdanja programa SQL Server 2012 Morate da primenite hitnu ispravku za SQL Server 2012 na instalaciju sistema SQL Server 2012.

Zaobilaženje problema

Da biste zaobišli ovaj problem, koristite jedan od sledećih metoda.Metod 1 Vraćanjeu prethodno stanje rezervne kopije baze podataka iz funkcije INST1 u sistemu INST2.Napomena Problem koji je opisan u odeljku "Simptomi" ne pojavljuje se u programu SQL Server 2012 kada vratite rezervnu kopiju iz starije verzije.Metod 2Izvršite nadogradnju na licu mesta starije verzije programa SQL Server na SQL Server 2012.Metod 3Premestite bazu podataka koja sadrži grupu datoteka samo za čitanje u instancu sistema SQL Server 2012. Da biste to uradili, pratite ove korake.Napomena Izvršite korake od 4. do 11. na serveru koji SQL Server 2012. Na primer, izvršite korake od 4. do 11. u funkciji INST2.

  1. U funkciji INST1 odvojite bazu podataka. Na primer, odvojite bazu Test_RO_FG_DB podataka.

  2. Premestite datoteke baze podataka na server koji hostuje INST2 instancu.

  3. Pokušajte da priložite bazu podataka u INST2. Sledeći uzorak koda pokazuje kako to da uradite:

    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

    Napomena Primićete 3425 poruku o grešci koja je pomenuta u odeljku "Simptomi".

  4. Na komandnoj liniji preimenujte datoteke baze podataka. Sledeća uzorak komande pokazuje kako to da uradite:

    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. U SQL Server Management Studio kreirajte bazu podataka koja ima isto ime i fizičku strukturu kao baza podataka koju želite da priložite. Sledeći uzorak koda pokazuje kako to da uradite:

    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. Postavite bazu podataka na opciju "Van mreže". Da biste to uradili, pokrenite sledeću komandu:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Na komandnoj liniji preimenujte datoteke u novoj bazi podataka. Sledeća uzorak komande pokazuje kako to da uradite:

    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. Na komandnoj liniji preimenujte datoteke u bazi podataka koju ste premestili u 2. koraku. Preimenujte datoteke tako da se podudaraju sa bazom podataka koju ste kreirali u 4. koraku. Sledeća uzorak komande pokazuje kako to da uradite:

    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. Postavite bazu podataka na mrežu. Da biste to uradili, pokrenite sledeću komandu:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Proverite da li je baza podataka na mreži i ponovo uspostavite funkcionalnost Service Broker.

  11. Izbrišite datoteke baze podataka koje nisu potrebne. Sledeća uzorak komande pokazuje kako to da uradite:

    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 

Metod 4Ponovo priložite bazu podataka koja sadrži grupu datoteka samo za čitanje sa starijem instancom SQL Server. Da biste to uradili, pratite ove korake.Beleške

  • Baza podataka takođe sadrži nove stavke evidencije transakcija iz neuspele nadogradnje.

  • Izvršite korake od 3. do 10. na serveru koji radi pod starijim verzijama SQL Server. Na primer, izvršite korake od 3. do 10. u funkciji INST1.

  1. Premestite datoteke baze podataka u instancu SQL Server koja hostuje INST1.

  2. Pokušajte da priložite bazu podataka u INST1. Sledeći uzorak koda pokazuje kako to da uradite:

    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

    Napomena Primićete 3624 poruku o grešci koja je pomenuta u odeljku "Simptomi". Primićete i poruku o grešci 1813.

  3. Na komandnoj liniji preimenujte datoteke baze podataka u usluzi INST1. Sledeća uzorak komande pokazuje kako to da uradite:

    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. U SQL Server Management Studio kreirajte bazu podataka koja ima isto ime i fizičku strukturu kao baza podataka koju želite da priložite. Sledeći uzorak koda pokazuje kako to da uradite:

    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. Postavite bazu podataka na opciju "Van mreže". Da biste to uradili, pokrenite sledeću komandu:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Na komandnoj liniji preimenujte datoteke u novoj bazi podataka. Sledeća uzorak komande pokazuje kako to da uradite:

    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. Na komandnoj liniji preimenujte datoteke u bazi podataka koju ste premestili u 2. koraku. Preimenujte datoteke tako da se podudaraju sa bazom podataka koju ste kreirali u 4. koraku. Sledeća uzorak komande pokazuje kako to da uradite:

    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. Podesite bazu podataka na režim HITNE SLUČAJEVE i izvršite popravku. Da biste to uradili, pokrenite sledeću komandu.Napomena Evidencije transakcija baze podataka ponovo se izgnuju tokom ovog koraka. To može dovesti do gubitka podataka. Zato preporučujemo da napravite rezervnu kopiju baze podataka pre nego što izvršite ovaj korak.

    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. Proverite da li je baza podataka na mreži i ponovo uspostavite funkcionalnost Service Broker.

  10. Izbrišite datoteke baze podataka koje nisu potrebne. Sledeća uzorak komande pokazuje kako to da uradite:

    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 

Više informacija

Postoji nekoliko koraka do kojih dolazi kada je baza podataka priložena instanci SQL Server. Ovi koraci uključuju oporavak baze podataka i nadogradnju datoteka iz starijih verzija SQL Server. U problemu koji je opisan u odeljku "Simptomi", SQL Server 2012 započinje proces nadogradnje pre nego što se otkriju datoteke samo za čitanje u bazi podataka. Koraci za nadogradnju uključuju započinjanje transakcije za brisanje bita "čisto isključivanje" na stranici za pokretanje baze podataka. Starije verzije SQL Server ne mogu da pročitaju zapis početne transakcije. Stoga baza podataka nije upotrebljiva u starijim verzijama programa SQL Server, SQL Server generiše grešku 3624.Nadogradnje na licu mesta kada je baza podataka označena kao samo za čitanje Kada izvršite nadogradnju instance programa SQL Server koja sadrži bazu podataka samo za čitanje sa imenom Test_RO_DB za SQL Server 2012, možete da dobijete poruke o grešci koje podsećaju na sledeće u SQL Server evidenciji grešaka:

Na kraju procesa nadogradnje, Test_RO_DB će biti u RECOVERY_PENDING. Morate da koristite komandu ALTER DATABASE da biste bazu podataka podesili READ_WRITE. Zatim koristite komandu ALTER DATABASE da biste bazu podataka postavili na READ_ONLY. To omogućava SQL Server nadogradi bazu podataka na ispravnu verziju.Nadogradnje na licu mesta kada baza podataka za čitanje/pisanje sadrži grupe datoteka koje su označene samo za čitanje Kada izvršite nadogradnju na SQL Server 2012 na licu mesta, možete da primate poruke koje podsećaju na sledeće u SQL Server evidenciji grešaka. Do ovog problema dolazi kada starija instanca programa SQL Server hostuje bazu podataka za čitanje/pisanje i sadrži grupe datoteka koje su označene READ_ONLY. Međutim, proces nadogradnje se završava na očekivani način i baza podataka počinje na mreži.Napomena U sledećoj poruci o grešci baza podataka se zove Test_RO_FG:

Da li vam je potrebna dodatna pomoć?

Želite još opcija?

Istražite pogodnosti pretplate, pregledajte kurseve za obuku, saznajte kako da obezbedite uređaj i još mnogo toga.