KB2710782 – když databázi z dřívější verze SQL serveru připojíte k instanci serveru SQL Server 2012, stane se nepoužitelná

Příznaky

Zvažte následující scénář:

  • Nainstalujete instanci Microsoft SQL serveru 2005, Microsoft SQL Server 2008 nebo Microsoft SQL Server 2008 R2.

  • Instance SQL serveru má název INST1 a hostuje databázi s názvem Test_RO_FG_DB.

  • Databáze obsahuje následující skupiny souborů:

    • Především

    • RO_FG

    • RW_FG

  • Ve skupině souborů s názvem RO_FG je označeno jako READ_ONLY.

  • Nainstalujete novou instanci serveru Microsoft SQL Server 2012. Tato instance SQL serveru 2012 má název INST2.

  • Test_RO_FG_DB databáze odpojíte od INST1.

  • Pokoušíte se připojit databázi Test_RO_FG_DB k INST2.

  • Zobrazí se chybová zpráva podobná této:

    Msg 3415, úroveň 16, stav 2, řádek 1Database ' Test_RO_FG_DB ' nemůže být upgradován, protože je jen pro čtení, má soubory jen pro čtení, nebo uživatel nemá oprávnění ke změně některých souborů. Zpřístupněte databázi nebo soubory a spusťte obnovení znova.

  • Pokusíte se znovu připojit databázi Test_RO_FG_DB k INST1.

V tomto scénáři nemůžete databázi znovu připojit k INST1. A v protokolu chyb systému SQL Server se zobrazí následující chybová zpráva:

Poznámka Tento problém nastane jenom v případě, že se pokusíte připojit databázi obsahující soubor, který je označený READ_ONLY. K tomuto problému nedochází, když se pokusíte přesunout READ_ONLY databázi, ve které jsou všechna data označená READ_ONLY.

Příčina

K tomuto problému dochází, protože SQL Server 2012 nezjistil, že je ve skupině souborů jen pro čtení, než začne upgradovat databázi. Po spuštění upgradu SQL Server 2012 zapisuje položky do transakčního protokolu. Dřívější verze nečtou položky nového protokolu transakcí.

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.

Řešení

Informace o kumulativní aktualizaci

SQL Server 2012

Oprava pro tento problém byla poprvé vydána v kumulativní aktualizaci 2 pro SQL Server 2012. Další informace o tomto kumulativním balíčku aktualizací najdete v následujícím článku znalostní báze Microsoft Knowledge Base:

2703275 Kumulativní aktualizace 2 pro SQL Server 2012Poznámka Vzhledem k tomu, že buildy jsou kumulativní, každá nová oprava obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozího SQL serveru 2012 Oprava. Společnost Microsoft doporučuje zvážit použití nejnovější opravy, která obsahuje tuto opravu hotfix. Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:

2692828 Buildy SQL Server 2012, které byly vydány po vydání SQL Server 2012 Na instalaci SQL serveru 2012 musíte použít opravu hotfix systému SQL Server 2012.

Alternativní řešení

Tento problém vyřešíte pomocí jedné z následujících metod.Metoda 1Obnovte zálohu databáze z INST1 na INST2.Poznámka Problém popsaný v části Příznaky se v SQL serveru 2012 nevyskytuje, když obnovujete zálohu ze starší verze.Metoda 2Proveďte místní upgrade starší verze SQL serveru na SQL Server 2012.Metoda 3Přesuňte databázi, která obsahuje instanci souboru jen pro čtení, do instance serveru SQL Server 2012. Použijte tento postup.Poznámka Kroky 4 až 11 provádějte na serveru, na kterém běží SQL Server 2012. Proveďte třeba kroky 4 až 11 na INST2.

  1. Na INST1 Odpojte databázi. Odpojte například Test_RO_FG_DB databáze.

  2. Přesuňte soubory databáze na server, který je hostitelem instance INST2.

  3. Zkuste připojit databázi k INST2. Následující ukázkový kód ukazuje, jak to udělat:

    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í se chybová zpráva 3425, která je uvedená v části Příznaky.

  4. Na příkazovém řádku přejmenujte soubory databáze. Postup najdete takto:

    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. V nástroji SQL Server Management Studio vytvořte databázi se stejným názvem a fyzickou strukturou, jakou má databáze, kterou chcete připojit. Následující ukázkový kód ukazuje, jak to udělat:

    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. Nastavte databázi na offline. Postupujte takto:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Na příkazovém řádku přejmenujte soubory v nové databázi. Postup najdete takto:

    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. Na příkazovém řádku přejmenujte soubory, které jste přesunuli v kroku 2. Přejmenujte soubory tak, aby odpovídaly databázi, kterou jste vytvořili v kroku 4. Postup najdete takto:

    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. Nastavte si databázi na ONLINE. Postupujte takto:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Ověřte, jestli je databáze online, a obnovte její funkčnost.

  11. Odstraňte soubory databáze, které nepotřebujete. Postup najdete takto:

    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 4Znovu připojit databázi, která obsahuje instanci souboru jen pro čtení, do dřívější instance systému SQL Server. Použijte tento postup.Poznámky:

  • Databáze také obsahuje nové položky transakčního protokolu z neúspěšného upgradu.

  • Kroky 3 až 10 provádějte na serveru, na kterém běží starší verze systému SQL Server. Proveďte třeba kroky 3 až 10 na INST1.

  1. Přesuňte soubory databáze do instance SQL serveru, který hostuje INST1.

  2. Zkuste připojit databázi k INST1. Následující ukázkový kód ukazuje, jak to udělat:

    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í se chybová zpráva 3624, která je uvedená v části Příznaky. Zobrazí se vám taky chybová zpráva 1813.

  3. Na příkazovém řádku přejmenujte soubory databáze na INST1. Postup najdete takto:

    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. V nástroji SQL Server Management Studio vytvořte databázi se stejným názvem a fyzickou strukturou, jakou má databáze, kterou chcete připojit. Následující ukázkový kód ukazuje, jak to udělat:

    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. Nastavte databázi na offline. Postupujte takto:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Na příkazovém řádku přejmenujte soubory v nové databázi. Postup najdete takto:

    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. Na příkazovém řádku přejmenujte soubory, které jste přesunuli v kroku 2. Přejmenujte soubory tak, aby odpovídaly databázi, kterou jste vytvořili v kroku 4. Postup najdete takto:

    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. Nastavte databázi do NOUZOVého režimu a proveďte opravu. Postupujte takto: spusťte následující příkaz.Poznámka V průběhu tohoto kroku jsou znovu vytvořeny protokoly transakcí databáze. To by mohlo způsobit ztrátu dat. Proto doporučujeme před provedením tohoto kroku databázi zálohovat.

    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. Ověřte, jestli je databáze online, a obnovte její funkčnost.

  10. Odstraňte soubory databáze, které nepotřebujete. Postup najdete takto:

    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 

Další informace

Existuje několik kroků, ke kterým dochází, když je databáze připojena k instanci serveru SQL Server. Tento postup zahrnuje obnovení databáze a upgrade souborů ze starších verzí systému SQL Server. Při problému popsaném v části Příznaky zahájí SQL Server 2012 proces upgradu před zjištěním souborů jen pro čtení v databázi. Mezi kroky upgradu patří spuštění transakce, která vymaže bit "čistý stav vypnut" na spouštěcí stránce databáze. Dřívější verze SQL serveru nemůžou přečíst záznam zahájení transakce. Proto databáze není v dřívějších verzích SQL serveru použitelná a SQL Server generuje chybu 3624.Místní upgrade, když je databáze označená jen pro čteníKdyž provedete místní upgrade instance systému SQL Server, která obsahuje databázi jen pro čtení s názvem Test_RO_DB to SQL Server 2012, můžou se v protokolu chyb SQL serveru zobrazovat chybové zprávy, které se podobají následujícím:

Po dokončení upgradu bude databáze Test_RO_DB ve stavu RECOVERY_PENDING. K nastavení databáze na READ_WRITE musíte použít příkaz ALTER DATABASE . Potom pomocí příkazu ALTER DATABASE nastavte databázi na READ_ONLY. To umožňuje modulu SQL Server upgradovat databázi na správnou verzi.Místní upgrady, pokud databáze pro čtení a zápis obsahují skupiny souborů označené jako jen pro čteníKdyž provádíte místní upgrade na SQL Server 2012, můžou se do protokolu chyb SQL serveru dostat zprávy, které jsou podobné následujícímu. K tomuto problému dochází, když dřívější instance SQL serveru hostuje databázi pro čtení a zápis a obsahuje skupiny souborů označené jako READ_ONLY. Proces upgradu ale skončí podle očekávání a databáze se spustí online.Poznámka V následující chybové zprávě je databáze pojmenovaná Test_RO_FG:

Potřebujete další pomoc?

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojit se k programu Microsoft Insider

Byly tyto informace užitečné?

Děkujeme za váš názor!

Děkujeme vám za váš názor! Pravděpodobně bude užitečné, když vás spojíme s některým z našich agentů podpory Office.

×