Simptomi
Razmislite o sljedećem scenariju:
-
Instalirate instancu programa Microsoft SQL Server 2005, Microsoft SQL Server 2008 ili Microsoft SQL Server 2008 R2.
-
Instanca SQL Server inst1 i hostira bazu podataka s nazivom Test_RO_FG_DB.
-
Baza podataka sadrži sljedeće grupe datoteka:
-
Primarni
-
RO_FG
-
RW_FG
-
-
Grupa datoteka s nazivom RO_FG označena je kao READ_ONLY.
-
Instalirate novu instancu programa Microsoft SQL Server 2012. Ova instanca SQL Server 2012 zove SE INST2.
-
Odvojite bazu podataka Test_RO_FG_DB inst1.
-
Pokušajte priložiti bazu podataka Test_RO_FG_DB INST2.
-
Prikazuje se poruka o pogrešci slična sljedećoj:
Msg 3415, razina 16, stanje 2, baza podataka retka 1"Test_RO_FG_DB" ne može se nadograditi jer je samo za čitanje, ima datoteke samo za čitanje ili korisnik nema dozvole za izmjenu nekih datoteka. Stvorite bazu podataka ili datoteke za pisanje i ponovno pokrenite oporavak.
-
Pokušajte ponovno dodati bazu podataka Test_RO_FG_DB INST1.
U tom scenariju bazu podataka ne možete ponovno dodati inst1. Uz to, u zapisniku o pogrešci SQL Server sljedeću poruku o pogrešci:
Napomena Taj se problem pojavljuje samo kada pokušate priložiti bazu podataka koja sadrži grupu datoteka označenu READ_ONLY. Taj se problem ne pojavljuje kada pokušate premjestiti bazu READ_ONLY u kojoj su svi podaci označeni READ_ONLY.
Uzrok
Taj se problem pojavljuje jer SQL Server 2012 ne otkrije grupu datoteka samo za čitanje prije nego što pokrene nadogradnju baze podataka. Nakon pokretanja nadogradnje SQL Server 2012 zapisuje unose u zapisnik transakcija. Starije verzije ne mogu pročitati nove unose zapisnika transakcija.
Status
Microsoft je potvrdio da je to problem u Microsoftovim proizvodima koji su navedeni u odjeljku "Odnosi se na".
Rješenje
Informacije o kumulativnom ažuriranju
SQL Server 2012.
Popravak za taj problem prvi je put izdan u kumulativnom ažuriranju 2 za SQL Server 2012. Dodatne informacije o ovom paketu kumulativnog ažuriranja potražite u članku iz Microsoftove baze znanja pod sljedećim brojem:
2703275 Kumulativno ažuriranje paketa 2 za SQL Server 2012Note Budući da su međuverzije kumulativne, svako novo izdanje popravka sadrži sve hitne popravke i sve sigurnosne popravke obuhvaćene prethodnim izdanjem popravka sustava SQL Server 2012. Microsoft preporučuje da razmislite o primjeni najnovijeg izdanja za popravak koje sadrži taj hitni popravak. Za više informacija kliknite sljedeći broj članka da biste prikazali članak u Microsoftovoj bazi znanja:
2692828 Verzije SQL Server 2012 objavljene nakon izdavanja sustava SQL Server 2012 Morate primijeniti hitni popravak sustava SQL Server 2012 na instalaciju sustava SQL Server 2012.
Zaobilazno rješenje
Da biste zaobišli taj problem, koristite jedan od sljedećih načina.Metoda 1 Vraćanjesigurnosne kopije baze podataka iz inst1 na inst2.Napomena Problem opisan u odjeljku "Simptomi" ne pojavljuje se u SQL Server 2012 prilikom vraćanja sigurnosne kopije iz starije verzije.Metoda 2Izvršite nadogradnju na mjestu starije verzije sustava SQL Server na SQL Server 2012.Treći način Premještanjebaze podataka koja sadrži grupu datoteka samo za čitanje u instancu SQL Server 2012. Da biste to učinili, slijedite ove korake.Napomena Izvršite korake od 4 do 11 na poslužitelju koji je pokrenut SQL Server 2012. Na primjer, provedite korake od 4 do 11 na inst2.
-
Na inst1 odvojite bazu podataka. Odvojite, primjerice, Test_RO_FG_DB bazu podataka.
-
Premjestite datoteke baze podataka na poslužitelj koji hostira instancu INST2.
-
Pokušajte priložiti bazu podataka INST2. Sljedeći ogledni kod pokazuje kako to učiniti:
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 Primit ćete poruku o pogrešci 3425 koja se spominje u odjeljku "Simptomi".
-
U naredbenom retku preimenujte datoteke baze podataka. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
U SQL Server Management Studio stvorite bazu podataka s istim nazivom i fizičkom strukturom kao baza podataka koju želite priložiti. Sljedeći ogledni kod pokazuje kako to učiniti:
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
-
Postavite bazu podataka na izvanmrežni način rada. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
U naredbenom retku preimenujte datoteke u novoj bazi podataka. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
U naredbenom retku preimenujte datoteke u bazi podataka koje ste premjestili u drugom koraku. Preimenujte datoteke tako da odgovaraju bazi podataka koju ste stvorili u četvrtom koraku. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
Postavite bazu podataka na ONLINE. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Provjerite je li baza podataka na mreži i ponovno uspostavite funkciju servisnog brokera.
-
Izbrišite datoteke baze podataka koje nisu potrebne. Sljedeća ogledna naredba pokazuje kako to učiniti:
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 4Ponovno prilaženje baze podataka koja sadrži grupu datoteka samo za čitanje na stariju instancu SQL Server. Da biste to učinili, slijedite ove korake.Bilješke
-
Baza podataka sadrži i nove unose zapisnika transakcija iz neuspjele nadogradnje.
-
Izvršite korake od 3 do 10 na poslužitelju sa starijim verzijama SQL Server. Na primjer, provedite korake od 3 do 10 na servisu INST1.
-
Premjestite datoteke baze podataka na instancu SQL Server koja hostira INST1.
-
Pokušajte priložiti bazu podataka INST1. Sljedeći ogledni kod pokazuje kako to učiniti:
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 Primit ćete poruku o pogrešci 3624 koja se spominje u odjeljku "Simptomi". Primit ćete i poruku o pogrešci 1813.
-
U naredbenom retku preimenujte datoteke baze podataka na servisu INST1. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
U SQL Server Management Studio stvorite bazu podataka s istim nazivom i fizičkom strukturom kao baza podataka koju želite priložiti. Sljedeći ogledni kod pokazuje kako to učiniti:
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
-
Postavite bazu podataka na izvanmrežni način rada. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
U naredbenom retku preimenujte datoteke u novoj bazi podataka. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
U naredbenom retku preimenujte datoteke u bazi podataka koje ste premjestili u drugom koraku. Preimenujte datoteke tako da odgovaraju bazi podataka koju ste stvorili u četvrtom koraku. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
-
Postavite bazu podataka u način rada EMERGENCY i izvršite popravak. Da biste to učinili, pokrenite sljedeću naredbu.Napomena Zapisnici transakcija baze podataka ponovno su ugrađeni tijekom ovog koraka. To može dovesti do gubitka podataka. Stoga preporučujemo da prije izvođenja ovog koraka sigurnosno kopirate bazu podataka.
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
-
Provjerite je li baza podataka na mreži i ponovno uspostavite funkciju servisnog brokera.
-
Izbrišite datoteke baze podataka koje nisu potrebne. Sljedeća ogledna naredba pokazuje kako to učiniti:
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
Dodatne informacije
Nekoliko je koraka koji se pojavljuju kada je baza podataka pridružena instanci SQL Server. Ti koraci obuhvaćaju oporavak baze podataka i nadogradnju datoteka sa starijih verzija sustava SQL Server. U problemu opisanom u odjeljku "Simptomi" SQL Server 2012 pokreće postupak nadogradnje prije nego što se otkrije datoteka samo za čitanje u bazi podataka. Koraci nadogradnje obuhvaćaju pokretanje transakcije radi čišćenja "čistog isključivanja" na stranici za pokretanje baze podataka. Starije verzije programa SQL Server ne mogu pročitati zapis za početak transakcije. Stoga baza podataka nije upotrebljiva u starijim verzijama programa SQL Server, a SQL Server generira pogrešku 3624.Nadogradnjena mjestu kada je baza podataka označena kao samo za čitanje Kada izvršite nadogradnju na mjestu instance programa SQL Server koja sadrži bazu podataka samo za čitanje pod nazivom Test_RO_DB u SQL Server 2012, u zapisniku pogrešaka sustava SQL Server mogu se prikazati poruke o pogreškama koje su slične sljedećima:
Na kraju postupka nadogradnje baza podataka Test_RO_DB bit će u RECOVERY_PENDING stanju. Da biste bazu podataka postavili na READ_WRITE. Zatim pomoću naredbe ALTER DATABASE postavite bazu podataka na READ_ONLY. To omogućuje SQL Server modul nadograditi bazu podataka na ispravnu verziju.Nadogradnje na mjestu kada baza podataka za čitanje/pisanje sadrži grupe datoteka koje su označene kao samo za čitanje Kada izvršite nadogradnju na SQL Server 2012, u zapisniku pogrešaka sustava SQL Server možda ćete primiti poruke slične sljedećoj. Taj se problem pojavljuje kada earlier instance SQL Server hosts a read/write database and contains file groups that are marked READ_ONLY. No postupak nadogradnje završit će prema očekivanjima, a baza podataka će se pokrenuti na mreži.Napomena U sljedećoj poruci o pogrešci baza podataka ima naziv Test_RO_FG: