Hatókör
SQL Server 2012 Enterprise

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.

  1. Az INST1-ben válassza le az adatbázist. Válassza le például a Test_RO_FG_DB adatbázist.

  2. Helyezze át az adatbázisfájlokat az INST2-példányt üzemeltető kiszolgálóra.

  3. 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.

  4. 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 
  5. 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
  6. Állítsa az adatbázist offline állapotra. Ehhez futtassa a következő parancsot:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. 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 
  8. 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 
  9. Állítsa az adatbázist ONLINE értékre. Ehhez futtassa a következő parancsot:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Ellenőrizze, hogy az adatbázis online állapotban van-e, és hogy újra el tudja-e helyezni a Service Broker funkcióit.

  11. 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.

  1. Helyezze át az adatbázisfájlokat az INST1-et üzemeltető SQL Server példányára.

  2. 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.

  3. 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 
  4. 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
  5. Állítsa az adatbázist offline állapotra. Ehhez futtassa a következő parancsot:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. 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 
  7. 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 
  8. Á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 
  9. Ellenőrizze, hogy az adatbázis online állapotban van-e, és hogy újra el tudja-e helyezni a Service Broker funkcióit.

  10. 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:

További segítségre van szüksége?

További lehetőségeket szeretne?

Fedezze fel az előfizetés előnyeit, böngésszen az oktatóanyagok között, ismerje meg, hogyan teheti biztonságossá eszközét, és így tovább.