Jelenségek
Vegye figyelembe a következő forgatókönyvet:
-
Telepíti a Microsoft SQL Server 2005, a Microsoft SQL Server 2008 vagy a Microsoft SQL Server 2008 R2 egy példányát.
-
A SQL Server példányának neve INST1, és egy Test_RO_FG_DB nevű adatbázist üzemeltet.
-
Az adatbázis a következő fájlcsoportokat tartalmazza:
-
Elsődleges
-
RO_FG
-
RW_FG
-
-
A RO_FG nevű fájlcsoport READ_ONLY van megjelölve.
-
Telepítse a Microsoft SQL Server 2012 új példányát. A SQL Server 2012 ezen példányának neve INST2.
-
Leválasztja a Test_RO_FG_DB adatbázist az INST1-ről.
-
Próbálja meg csatolni a Test_RO_FG_DB adatbázist az INST2-höz.
-
A következőhöz hasonló hibaüzenet jelenik meg:
Msg 3415, Level 16, State 2, Line 1Database "Test_RO_FG_DB" nem frissíthető, mert írásvédett, írásvédett fájlokkal rendelkezik, vagy a felhasználó nem rendelkezik engedélyekkel egyes fájlok módosításához. Tegye írhatóvá az adatbázist vagy a fájlokat, majd futtassa újra a helyreállítást.
-
Próbálja meg újra a Test_RO_FG_DB adatbázist az INST1-hez társítani.
Ebben a forgatókönyvben nem lehet újra az adatbázist az INST1-hez társítani. A következő hibaüzenet jelenik meg a SQL Server hibanaplóban:
Megjegyzés Ez a probléma csak akkor fordul elő, ha olyan adatbázist próbál csatolni, amely READ_ONLY megjelölt fájlcsoportot tartalmaz. Ez a probléma nem fordul elő, ha olyan READ_ONLY adatbázist próbál áthelyezni, amelyben az összes adat READ_ONLY van megjelölve.
A probléma oka
Ez a probléma azért fordul elő, mert SQL Server 2012 nem észleli a csak olvasható fájlcsoportot az adatbázis frissítésének megkezdése előtt. A frissítés megkezdése után SQL Server 2012 bejegyzéseket ír a tranzakciónaplóba. A korábbi verziók nem tudják beolvasni az új tranzakciónapló-bejegyzéseket.
Állapot
A Microsoft megerősítette, hogy ez a probléma „A következőkre vonatkozik:” részben felsorolt Microsoft-termékekre vonatkozik.
Megoldás
Kumulatív frissítési információk
SQL Server 2012
A hiba javítását először a 2012-es SQL Server 2. kumulatív frissítésében adták ki. A kumulatív frissítési csomagról a microsoftos tudásbázis következő cikkszámára kattintva olvashat bővebben:
2703275 2. kumulatív frissítési csomag a SQL Server 2012-hözMegjegyzés Mivel a buildek összegzőek, minden új javításkiadás tartalmazza az összes gyorsjavítást és az előző SQL Server 2012-es javítás kiadásában szereplő összes biztonsági javítást. A Microsoft azt javasolja, hogy fontolja meg a gyorsjavítást tartalmazó legújabb javítás kiadásának alkalmazását. További információ a Microsoft Tudásbázis következő számú cikkében olvasható (a cikk megnyitásához kattintson a sorszámra):
2692828 A 2012 SQL Server megjelenése után kiadott SQL Server 2012-ben kiadott buildek: A 2012-SQL Server telepítésekor SQL Server 2012 gyorsjavítást kell alkalmaznia.
Kerülő megoldás
A probléma megkerüléséhez használja az alábbi módszerek egyikét.1. módszer Az adatbázis biztonsági másolatának visszaállítása az INST1-ből az INST2-n.Megjegyzés A "Tünetek" szakaszban leírt probléma nem fordul elő SQL Server 2012-ben, amikor egy korábbi verzióból állít vissza biztonsági másolatot.2. módszer A SQL Server korábbi verziójának helyben történő frissítése SQL Server 2012-re.3. módszer: Írásvédett fájlcsoportot tartalmazó adatbázis áthelyezése a SQL Server 2012 egy példányába. Ehhez hajtsa végre a következő lépéseket:Megjegyzés Hajtsa végre a 4–11. lépést a 2012 SQL Server futó kiszolgálón. Hajtsa végre például a 4–11. lépést az INST2-n.
-
Az INST1-ben válassza le az adatbázist. Válassza le például a Test_RO_FG_DB adatbázist.
-
Helyezze át az adatbázisfájlokat az INST2-példányt üzemeltető kiszolgálóra.
-
Próbálja meg csatolni az adatbázist az INST2-höz. Az alábbi mintakód bemutatja, hogyan teheti ezt meg:
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
Megjegyzés A "Tünetek" szakaszban említett 3425-ös hibaüzenet jelenik meg.
-
A parancssorban nevezze át az adatbázisfájlokat. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
A SQL Server Management Studio hozzon létre egy adatbázist, amelynek neve és fizikai szerkezete megegyezik a csatolni kívánt adatbázis nevével és fizikai szerkezetével. Az alábbi mintakód bemutatja, hogyan teheti ezt meg:
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
-
Állítsa az adatbázist offline állapotra. Ehhez futtassa a következő parancsot:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
A parancssorban nevezze át az új adatbázisban lévő fájlokat. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
A parancssorban nevezze át a 2. lépésben áthelyezett adatbázis fájljait. Nevezze át a fájlokat a 4. lépésben létrehozott adatbázisnak megfelelően. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
Állítsa az adatbázist ONLINE értékre. Ehhez futtassa a következő parancsot:
ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO
-
Ellenőrizze, hogy az adatbázis online állapotban van-e, és hogy újra el tudja-e helyezni a Service Broker funkcióit.
-
Törölje a szükségtelen adatbázisfájlokat. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
4. módszer: Egy írásvédett fájlcsoportot tartalmazó adatbázis újraaktiválása a SQL Server korábbi példányához. Ehhez hajtsa végre a következő lépéseket:Megjegyzések
-
Az adatbázis a sikertelen frissítés új tranzakciónapló-bejegyzéseit is tartalmazza.
-
Hajtsa végre a 3–10. lépést a SQL Server egy korábbi verzióját futtató kiszolgálón. Hajtsa végre például a 3–10. lépést az INST1-en.
-
Helyezze át az adatbázisfájlokat az INST1-et üzemeltető SQL Server példányára.
-
Próbálja meg csatolni az adatbázist az INST1-hez. Az alábbi mintakód bemutatja, hogyan teheti ezt meg:
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
Megjegyzés A "Tünetek" szakaszban említett 3624-es hibaüzenet jelenik meg. 1813-at jelző hibaüzenetet is kap.
-
A parancssorban nevezze át az adatbázisfájlokat az INST1-ben. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
A SQL Server Management Studio hozzon létre egy adatbázist, amelynek neve és fizikai szerkezete megegyezik a csatolni kívánt adatbázis nevével és fizikai szerkezetével. Az alábbi mintakód bemutatja, hogyan teheti ezt meg:
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
-
Állítsa az adatbázist offline állapotra. Ehhez futtassa a következő parancsot:
ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO
-
A parancssorban nevezze át az új adatbázisban lévő fájlokat. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
A parancssorban nevezze át a 2. lépésben áthelyezett adatbázis fájljait. Nevezze át a fájlokat a 4. lépésben létrehozott adatbázisnak megfelelően. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
-
Állítsa az adatbázist VÉSZHELYZET módra, és végezze el a javítást. Ehhez futtassa az alábbi parancsot.Megjegyzés Az adatbázis tranzakciónaplói ebben a lépésben újraépülnek. Ez adatvesztést okozhat. Ezért javasoljuk, hogy a lépés végrehajtása előtt biztonsági másolatot készítsen az adatbázisról.
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
-
Ellenőrizze, hogy az adatbázis online állapotban van-e, és hogy újra el tudja-e helyezni a Service Broker funkcióit.
-
Törölje a szükségtelen adatbázisfájlokat. Az alábbi példaparancs bemutatja, hogyan teheti ezt meg:
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
További információ
Az adatbázis SQL Server egy példányához való csatolásakor több lépés is elvégzendő. Ezek a lépések magukban foglalják az adatbázis helyreállítását és a fájlok frissítését a SQL Server korábbi verzióiból. A "Tünetek" szakaszban ismertetett probléma esetén a SQL Server 2012 elkezdi a frissítési folyamatot, mielőtt a rendszer észleli az adatbázisban lévő írásvédett fájlokat. A frissítési lépések közé tartozik egy tranzakció elindítása, amely törli a "tiszta leállítás" bitet az adatbázis rendszerindítási oldalán. A SQL Server korábbi verziói nem tudják beolvasni a kezdő tranzakciórekordot. Ezért az adatbázis nem használható a SQL Server korábbi verzióiban, és SQL Server 3624-et eredményez.Helyben történő frissítés, ha egy adatbázis írásvédettkéntvan megjelölve: Ha a SQL Server egy olyan példányának helyben történő frissítése történik, amely egy Test_RO_DB nevű, 2012-SQL Server való írásvédett adatbázist tartalmaz, a következőhöz hasonló hibaüzenetek jelenhetnek meg a SQL Server hibanaplóban:
A frissítési folyamat végén a Test_RO_DB adatbázis RECOVERY_PENDING állapotban lesz. Az ADATBÁZIS READ_WRITE beállításához az ALTER DATABASE parancsot kell használnia. Ezután az ALTER DATABASE paranccsal állítsa az adatbázist READ_ONLY. Ez lehetővé teszi, hogy a SQL Server motor a megfelelő verzióra frissítse az adatbázist.Helyben történő frissítés, ha egy írási/olvasási adatbázis írásvédettkéntmegjelölt fájlcsoportokat tartalmaz A 2012-SQL Server helyben történő frissítéskor az alábbihoz hasonló üzeneteket kaphat a SQL Server hibanaplóban. Ez a probléma akkor fordul elő, ha a SQL Server korábbi példánya olvasási/írási adatbázist üzemeltet, és READ_ONLY megjelölt fájlcsoportokat tartalmaz. A frissítési folyamat azonban a várt módon fejeződik be, és az adatbázis online állapotba kerül.Megjegyzés A következő hibaüzenetben az adatbázis neve Test_RO_FG: