Príznaky
Zvážte nasledujúci scenár:
-
Nainštalujete inštanciu microsoft SQL Server 2005, Microsoft SQL Server 2008 alebo Microsoft SQL Server 2008 R2.
-
Inštancia SQL Server má názov INST1 a hosťuje databázu s názvom Test_RO_FG_DB.
-
Databáza obsahuje nasledujúce skupiny súborov:
-
Primárne
-
RO_FG
-
RW_FG
-
-
Skupina súborov s názvom RO_FG je označená ako READ_ONLY.
-
Nainštalujete novú inštanciu microsoft SQL Server 2012. Táto inštancia SQL Server 2012 má názov INST2.
-
Databázu Test_RO_FG_DB odpojíte od inst1.
-
Pokúšate sa pripojiť databázu Test_RO_FG_DB k inst2.
-
Zobrazí sa chybové hlásenie podobné nasledujúcemu:
Msg 3415, level 16, State 2, Line 1Database 'Test_RO_FG_DB' nemožno inovovať, pretože je iba na čítanie, má súbory iba na čítanie alebo používateľ nemá povolenia na úpravu niektorých súborov. Nastavte databázu alebo súbory ako zapisovateľné a znova spustite obnovenie.
-
Pokúšate sa znova pripojiť databázu Test_RO_FG_DB k inst1.
V tomto scenári nie je možné znova pripojiť databázu k inst1. V denníku chýb SQL Server sa zobrazí nasledujúce chybové hlásenie:
Poznámka: Tento problém sa vyskytuje len pri pokuse o pripojenie databázy, ktorá obsahuje skupinu súborov, ktorá je označená READ_ONLY. Tento problém sa nevyskytuje pri pokuse o premiestnenie databázy READ_ONLY, v ktorej sú všetky údaje označené READ_ONLY.
Príčina
Tento problém sa vyskytuje, pretože SQL Server 2012 nerozpozná skupinu súborov iba na čítanie pred začatím inovácie databázy. Po spustení inovácie SQL Server 2012 zapíše položky do denníka transakcií. Staršie verzie nemôžu čítať nové položky denníka transakcií.
Stav
Spoločnosť Microsoft potvrdzuje, že ide o problém v produktoch spoločnosti Microsoft, ktoré sú uvedené v tomto článku v časti Informácie v tomto článku sa týkajú nasledujúcich produktov.
Riešenie
Informácie o kumulatívnej aktualizácii
SQL Server 2012
Oprava tohto problému bola prvýkrát vydaná v kumulatívnej aktualizácii 2 pre SQL Server 2012. Ďalšie informácie o tomto balíku kumulatívnej aktualizácie zobrazíte kliknutím na číslo nasledujúceho článku v databáze Microsoft Knowledge Base:
2703275 Kumulatívny balík aktualizácie 2 pre SQL Server 2012Note Keďže zostavy sú kumulatívne, každé nové vydanie opravy obsahuje všetky rýchle opravy a všetky opravy zabezpečenia, ktoré boli súčasťou predchádzajúceho vydania opravy SQL Server 2012. Spoločnosť Microsoft odporúča, aby ste zvážili použitie najnovšieho vydania opravy, ktoré obsahuje túto rýchlu opravu. Ďalšie informácie nájdete v článku databázy Microsoft Knowledge Base, ktorý sa zobrazí po kliknutí na príslušné číslo článku:
2692828 Zostavy SQL Server 2012, ktoré boli vydané po vydaní SQL Server 2012, musíte na inštaláciu SQL Server 2012 použiť rýchlu opravu SQL Server 2012.
Alternatívne riešenie
Ak chcete tento problém obísť, použite jeden z nasledujúcich postupov.Metóda 1Obnoviť zálohu databázy z INST1 na INST2.Poznámka: Problém popísaný v časti Príznaky sa nevyskytuje v SQL Server 2012 pri obnovení zálohy zo staršej verzie.Metóda 2Vykonanie priamej inovácie staršej verzie SQL Server na SQL Server 2012.Metóda 3Premiestni databázu obsahujúcu skupinu súborov určenú iba na čítanie do inštancie SQL Server 2012. Postupujte podľa nasledujúcich krokov.Poznámka: Vykonajte kroky 4 až 11 na serveri, ktorý je spustený SQL Server 2012. Vykonajte napríklad kroky 4 až 11 v inst2.
-
V inst1 odpojte databázu. Odpojte napríklad databázu Test_RO_FG_DB.
-
Premiestnite databázové súbory na server, ktorý hosťuje inštanciu INST2.
-
Pokúste sa pripojiť databázu k inst2. Postup je uvedený v nasledujúcom vzorovom kóde:
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
Poznámka: Zobrazí sa chybové hlásenie 3425, ktoré je uvedené v časti Príznaky.
-
V príkazovom riadku premenujte databázové súbory. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
V aplikácii SQL Server Management Studio vytvorte databázu s rovnakým názvom a fyzickou štruktúrou ako databáza, ktorú chcete pripojiť. Postup je uvedený v nasledujúcom vzorovom kóde:
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
-
Nastavte databázu do režimu offline. Ak to chcete urobiť, spustite nasledujúci príkaz:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
V príkazovom riadku premenujte súbory v novej databáze. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
V príkazovom riadku premenujte súbory v databáze, ktoré ste premiestnili v kroku 2. Premenujte súbory tak, aby zodpovedali databáze, ktorú ste vytvorili v kroku 4. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
Nastavte databázu na možnosť ONLINE. Ak to chcete urobiť, spustite nasledujúci príkaz:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Overte, či je databáza online, a obnovte funkčnosť sprostredkovateľa služby.
-
Odstráňte nepotrepné databázové súbory. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
Metóda 4Znova pripojte databázu, ktorá obsahuje skupinu súborov určenú iba na čítanie, k predchádzajúcej inštancii SQL Server. Postupujte podľa nasledujúcich krokov.Poznámky
-
Databáza obsahuje aj nové položky denníka transakcií z neúspešnej inovácie.
-
Vykonajte kroky 3 až 10 na serveri so staršou verziou SQL Server. Vykonajte napríklad kroky 3 až 10 v inst1.
-
Premiestnite databázové súbory do inštancie SQL Server, ktorá hosťuje INST1.
-
Pokúste sa pripojiť databázu k inst1. Postup je uvedený v nasledujúcom vzorovom kóde:
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
Poznámka: Zobrazí sa chybové hlásenie 3624, ktoré je uvedené v časti Príznaky. Zobrazí sa aj chybové hlásenie 1813.
-
V príkazovom riadku premenujte databázové súbory na INST1. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
V aplikácii SQL Server Management Studio vytvorte databázu s rovnakým názvom a fyzickou štruktúrou ako databáza, ktorú chcete pripojiť. Postup je uvedený v nasledujúcom vzorovom kóde:
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
-
Nastavte databázu do režimu offline. Ak to chcete urobiť, spustite nasledujúci príkaz:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
V príkazovom riadku premenujte súbory v novej databáze. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
V príkazovom riadku premenujte súbory v databáze, ktoré ste premiestnili v kroku 2. Premenujte súbory tak, aby zodpovedali databáze, ktorú ste vytvorili v kroku 4. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
-
Nastavte databázu do núdzového režimu a vykonajte opravu. Ak to chcete urobiť, spustite nasledujúci príkaz.Poznámka: Denníky transakcií databázy sú znovu vytvorené počas tohto kroku. Môže to mať za následok stratu údajov. Preto odporúčame zálohovať databázu pred vykonaním tohto 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
-
Overte, či je databáza online, a obnovte funkčnosť sprostredkovateľa služby.
-
Odstráňte nepotrepné databázové súbory. Postup je uvedený v nasledujúcom vzorovom príkaze:
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
Ďalšie informácie
Existuje niekoľko krokov, ktoré sa vyskytujú, keď je databáza pripojená k inštancii SQL Server. Tieto kroky zahŕňajú obnovenie databázy a inováciu súborov zo starších verzií SQL Server. V probléme, ktorý je popísaný v časti Príznaky, SQL Server 2012 spustí proces inovácie pred zistením súborov v databáze iba na čítanie. Kroky inovácie zahŕňajú spustenie transakcie na vymazanie bitu "cleanly shut down" na stránke spustenia databázy. Staršie verzie SQL Server nemôžu čítať záznam o začiatočnej transakcii. Preto databáza nie je použiteľná v starších verziách SQL Server a SQL Server vygeneruje chybu 3624.Inovácie na mieste, keď je databáza označená ibana čítanie Pri vykonaní priamej inovácie inštancie SQL Server, ktorá obsahuje databázu určenú iba na čítanie s názvom Test_RO_DB na SQL Server 2012, sa môžu zobraziť chybové hlásenia, ktoré v denníku chýb SQL Server pripomínajú nasledovné:
Na konci procesu inovácie bude databáza Test_RO_DB v stave RECOVERY_PENDING. Ak chcete nastaviť databázu na READ_WRITE, musíte použiť príkaz ALTER DATABASE. Potom pomocou príkazu ALTER DATABASE nastavte databázu na READ_ONLY. To umožňuje nástroju SQL Server inovovať databázu na správnu verziu.Inovácie na mieste, keď databáza na čítanie a zapisovanie obsahuje skupiny súborov, ktoré sú označené ibana čítanie Pri vykonaní priamej inovácie na SQL Server 2012 sa môžu v denníku chýb SQL Server zobraziť hlásenia podobné nasledujúcim hláseniam. Tento problém sa vyskytuje, keď predchádzajúca inštancia SQL Server hosťuje databázu na čítanie a zapisovanie a obsahuje skupiny súborov, ktoré sú označené READ_ONLY. Proces inovácie sa však dokončí podľa očakávaní a databáza sa spustí online.Poznámka: V nasledujúcom chybovom hlásení sa databáza nazýva Test_RO_FG: