Simptomi
Razmotrite sljedeći scenarij:
-
Instalirali ste instancu sustava Microsoft SQL Server 2005, sustava Microsoft SQL Server 2008 ili Microsoft SQL Server 2008 R2.
-
Instanca sustava SQL Server zove se INST1 i hostira bazu podataka koja se naziva Test_RO_FG_DB.
-
Baza podataka sadrži sljedeće grupe datoteka:
-
Primarni
-
RO_FG
-
RW_FG
-
-
Grupa datoteka koja je nazvana RO_FG označava se kao READ_ONLY.
-
Instalirate novu instancu sustava Microsoft SQL Server 2012. Ova instanca sustava SQL Server 2012 zove se INST2.
-
Možete odvojiti bazu podataka Test_RO_FG_DB iz INST1.
-
Pokušate priložiti bazu podataka Test_RO_FG_DB u INST2.
-
Prikazat će vam se poruka o pogrešci slična sljedećoj:
MSG 3415, razina 16, stanje 2, linija 1Database ' Test_RO_FG_DB ' nije moguće nadograditi jer je samo za čitanje, ima datoteke samo za čitanje ili korisnik nema dozvole za izmjenu nekih datoteka. Stvaranje baze podataka ili datoteka i ponovno pokretanje oporavka.
-
Pokušate ponovno priložiti bazu podataka Test_RO_FG_DB u INST1.
U ovom scenariju ne možete ponovno priložiti bazu podataka INST1. U zapisniku pogreške sustava SQL Server prikazat će se sljedeća poruka o pogrešci:
Napomena Taj se problem pojavljuje samo kada pokušate priložiti bazu podataka koja sadrži grupu datoteka koja je označena READ_ONLY. Taj se problem ne pojavljuje kada pokušate premjestiti bazu podataka READ_ONLY u kojoj su svi podaci označeni READ_ONLY.
Uzrok
Taj se problem pojavljuje jer SQL Server 2012 ne prepoznaje grupu datoteka samo za čitanje prije početka nadogradnje baze podataka. Kada nadogradnja započne, SQL Server 2012 zapisuje unose u zapisnik transakcija. Starije verzije ne mogu čitati nove unose zapisnika transakcija.
Status
Microsoft je potvrdio da se radi o problemu u Microsoftovim proizvodima navedenim u odjeljku "odnosi se na".
Rješenje
Kumulativne informacije o ažuriranju
SQL Server 2012
Popravak tog problema prvi je put izdan u kumulativnom ažuriranju 2 za SQL Server 2012. Dodatne informacije o tom zbirnim paketom za ažuriranje potražite u članku iz Microsoftove baze znanja pod sljedećim brojem:
2703275 Kumulativno ažuriranje paketa 2 za SQL Server 2012Napomena Budući da su grade kumulativne, svako novo izdanje ispravaka sadrži sve hitne popravke i sve sigurnosne popravke koji su bili obuhvaćeni prethodnim izdanjima sustava SQL Server 2012 Fix. Microsoft preporučuje da razmotrite primjenu najnovijeg izdanja popravka koja sadrži taj hitni popravak. Za više informacija kliknite sljedeći broj članka da biste prikazali članak u Microsoftovoj bazi znanja:
2692828 Verzije sustava SQL Server 2012 koje su objavljene nakon objavljivanja sustava SQL Server 2012 Hitni popravak sustava SQL Server 2012 morate primijeniti na instalaciju sustava SQL Server 2012.
Zaobilazno rješenje
Da biste zaobišli taj problem, upotrijebite jedan od sljedećih načina.Prva metodaVraćanje sigurnosne kopije baze podataka iz INST1 na INST2.Napomena Problem opisan u odjeljku "simptomi" ne pojavljuje se u sustavu SQL Server 2012 kada vratite sigurnosnu kopiju iz starije verzije.Druga metodaIzvršite nadogradnju na mjestu starije verzije sustava SQL Server na SQL Server 2012.Treći načinPremještanje baze podataka koja sadrži grupu datoteka koja je samo za čitanje u instancu sustava SQL Server 2012. Da biste to učinili, slijedite ove korake.Napomena Poduzmite korake od 4 do 11 na poslužitelju na kojem je instaliran SQL Server 2012. Na primjer, slijedite korake od 4 do 11 na INST2.
-
Na INST1 odvojite bazu podataka. Na primjer, odvojite bazu podataka Test_RO_FG_DB.
-
Premještanje datoteka baze podataka na poslužitelj koji sadrži instancu INST2.
-
Pokušajte priložiti bazu podataka u INST2. Sljedeći ogledni kod prikazuje 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 naredbeni upit preimenujte datoteke baze podataka. Sljedeća ogledna naredba prikazuje 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 programu SQL Server Management Studio stvorite bazu podataka koja sadrži isti naziv i fizičku strukturu kao bazu podataka koju želite priložiti. Sljedeći ogledni kod prikazuje 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
-
Postavljanje baze podataka u izvanmrežni rad. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
U naredbenom upitu preimenujte datoteke u novoj bazi podataka. Sljedeća ogledna naredba prikazuje 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 upitu preimenujte datoteke u bazi podataka koje ste premjestili u drugom koraku. Preimenujte datoteke radi podudaranja s bazom podataka koju ste stvorili u četvrtom koraku. Sljedeća ogledna naredba prikazuje 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 Internet. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Provjerite je li baza podataka mrežna i ponovno uspostavi funkcionalnost posrednika servisa.
-
Izbrišite datoteke baze podataka koje nisu potrebne. Sljedeća ogledna naredba prikazuje 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
Četvrta metodaPonovno prilaganje baze podataka koja sadrži grupu datoteka koja je samo za čitanje u stariju instancu sustava SQL Server. Da biste to učinili, slijedite ove korake.Napomene
-
Baza podataka sadrži i nove stavke zapisnika transakcija iz nadogradnje nije uspjelo.
-
Poduzmite korake od 3 do 10 na poslužitelju na kojem je pokrenuta starija verzija sustava SQL Server. Na primjer, slijedite korake od 3 do 10 na INST1.
-
Premjestite datoteke baze podataka na instancu sustava SQL Server koja je hosting INST1.
-
Pokušajte priložiti bazu podataka u INST1. Sljedeći ogledni kod prikazuje 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 naredbeni upit preimenujte datoteke baze podataka na INST1. Sljedeća ogledna naredba prikazuje 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 programu SQL Server Management Studio stvorite bazu podataka koja sadrži isti naziv i fizičku strukturu kao bazu podataka koju želite priložiti. Sljedeći ogledni kod prikazuje 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
-
Postavljanje baze podataka u izvanmrežni rad. Da biste to učinili, pokrenite sljedeću naredbu:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
U naredbenom upitu preimenujte datoteke u novoj bazi podataka. Sljedeća ogledna naredba prikazuje 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 upitu preimenujte datoteke u bazi podataka koje ste premjestili u drugom koraku. Preimenujte datoteke radi podudaranja s bazom podataka koju ste stvorili u četvrtom koraku. Sljedeća ogledna naredba prikazuje 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 za hitne slučajeve i izvršite popravak. Da biste to učinili, pokrenite sljedeću naredbu.Napomena Zapisi transakcija baze podataka obnavljaju se tijekom ovog koraka. To može dovesti do gubitka podataka. Stoga preporučujemo da prije izvođenja ovog koraka stvorite sigurnosnu 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 mrežna i ponovno uspostavi funkcionalnost posrednika servisa.
-
Izbrišite datoteke baze podataka koje nisu potrebne. Sljedeća ogledna naredba prikazuje 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
Postoji nekoliko koraka koji se javljaju kada je baza podataka priložena instanci sustava SQL Server. U sljedećim se koracima nalaze oporavak baze podataka i nadogradnja datoteka iz starijih verzija sustava SQL Server. Ako je riječ o problemu opisanom u odjeljku "simptomi", SQL Server 2012 započinje postupak nadogradnje prije otkrivanja datoteka koje su samo za čitanje u bazi podataka. Koraci nadogradnje obuhvaćaju pokretanje transakcije da biste očistili dio "čisto isključivanje" na stranici za pokretanje baze podataka. Starije verzije sustava SQL Server ne mogu pročitati zapis početka transakcije. Dakle, baza podataka nije korisna u starijim verzijama sustava SQL Server, a SQL Server stvara pogrešku 3624.Nadogradnje na mjestu kada je baza podataka označena kao samo za čitanjeKada izvršite nadogradnju na mjestu instance sustava SQL Server koja sadrži bazu podataka samo za čitanje koja se naziva Test_RO_DB na SQL Server 2012, možete primiti poruke o pogreškama koje nalikuju sljedećoj u zapisniku pogreške sustava SQL Server:
Na kraju postupka nadogradnje Test_RO_DB baza podataka bit će u RECOVERY_PENDING državi. Da biste bazu podataka postavili na READ_WRITE, morate koristiti naredbu alter Database . Zatim pomoću naredbe alter Database postavite bazu podataka na READ_ONLY. Time se sustavu SQL Server modul omogućuje nadogradnju baze podataka na ispravnu verziju.Nadogradnje na mjestu kada baza podataka za čitanje/zapisivanje sadrži grupe datoteka koje su označene kao samo za čitanjeKada izvršite nadogradnju na servisu SQL Server 2012, možete primiti poruke koje nalikuju sljedećim u zapisniku pogreške sustava SQL Server. Taj se problem pojavljuje kada je prethodno instanca sustava SQL Server domaćin baze podataka za čitanje/zapisivanje i sadrži grupe datoteka koje su označene READ_ONLY. No postupak nadogradnje dovršit će se na očekivani način, a baza podataka će se pokrenuti na mreži.Napomena U sljedećoj poruci o pogrešci naziva se Test_RO_FG: