Sdílet prostřednictvím


Obnovení databáze SQL Serveru k určitému bodu v čase (model úplného obnovení)

platí pro:SQL Server

Toto téma popisuje, jak obnovit databázi k určitému bodu v čase v SQL Serveru pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL. Toto téma je relevantní pouze pro databáze SQL Serveru, které používají úplné nebo hromadně protokolované modely obnovení.

Důležitý

Pokud záloha protokolu obsahuje hromadně protokolované změny, obnovení k určitému bodu v čase není v rámci této zálohy možné. Databáze musí být obnovena do konce zálohy transakčního protokolu.

Než začnete

Doporučení

  • Pomocí pohotovostního režimu vyhledejte neznámý bod v čase.

  • Specifikujte bod v čase na začátku sekvence obnovení

Bezpečnost

Dovolení

Pokud obnovená databáze neexistuje, musí mít uživatel oprávnění CREATE DATABASE, aby mohl provést obnovení. Pokud databáze existuje, oprávnění RESTORE jsou standardně přiřazena členům pevných rolí serveru sysadmin a dbcreator a vlastníkovi (dbo) databáze (pro možnost FROM DATABASE_SNAPSHOT databáze vždy existuje).

Oprávnění RESTORE jsou udělena rolím, ve kterých jsou informace o členství vždy snadno dostupné pro server. Vzhledem k tomu, že pevné členství v rolích databáze je možné zkontrolovat pouze v případě, že je databáze přístupná a nepoškozená, což není vždy případ spuštění funkce RESTORE, nemají členové db_owner pevné databázové role oprávnění RESTORE.

Použití aplikace SQL Server Management Studio

Obnovení databáze k určitému bodu v čase

  1. V Průzkumníku objektů se připojte k příslušné instanci databázového stroje SQL Serveru a rozbalte strom serveru.

  2. Rozbalte databáze. V závislosti na databázi vyberte uživatelskou databázi nebo rozbalte systémové databázea pak vyberte systémovou databázi.

  3. Klepněte pravým tlačítkem myši na databázi, přejděte na příkaz Úkoly, přejděte na příkaz Obnovita klepněte na tlačítko Databáze.

  4. Na stránce Obecné použijte oddíl Zdroj a určete zdroj a umístění sad záloh, které chcete obnovit. Vyberte jednu z následujících možností:

    • Databáze

      V rozevíracím seznamu vyberte databázi, která se má obnovit. Seznam obsahuje pouze databáze zálohované podle historie zálohování msdb.

    Poznámka

    Pokud je záloha převzata z jiného serveru, cílový server nebude mít informace o historii zálohování pro zadanou databázi. V tomto případě vyberte Zařízení a ručně zadejte soubor nebo zařízení, které chcete obnovit.

    • zařízení

      Kliknutím na tlačítko Procházet (...) otevřete dialogové okno Vybrat zálohovací zařízení. V poli Typ záložního média vyberte jeden z uvedených typů zařízení. Chcete-li vybrat jedno nebo více zařízení pro média zálohování, klepněte na tlačítko Přidat.

      Po přidání zařízení, která chcete přidat do seznamu médií Backup, kliknutím na tlačítko OK se vraťte na stránku Obecné.

      V seznamu Zdroj: Zařízení: Databáze vyberte název databáze, kterou chcete obnovit.

      Poznámka Tento seznam je k dispozici pouze v případě, že je vybráno zařízení. Budou k dispozici pouze databáze, které mají zálohy na vybraném zařízení.

  5. V části Cílová se pole Databáze automaticky vyplňuje názvem databáze určené k obnovení. Pokud chcete změnit název databáze, zadejte nový název do pole Databáze.

  6. Kliknutím na časovou osu otevřete dialogové okno časové osy zálohování.

  7. V části Obnovit do klikněte na Konkrétní datum a čas.

  8. Pomocí polí Datum a Čas nebo posuvníkem určete konkrétní datum a čas, kdy se má obnovení zastavit. Vyberte OK.

    Poznámka

    Pomocí pole Interval časové osy můžete změnit dobu zobrazenou na časové ose.

  9. Jakmile zadáte konkrétní bod v čase, nástroj Database Recovery Advisor zajistí, že ve sloupci Obnovení mřížky Sady záloh k obnovení jsou vybrány pouze zálohy potřebné k obnovení do tohoto bodu v čase. Tyto vybrané zálohy tvoří doporučený plán obnovení pro obnovení k určitému bodu v čase. Pro operaci obnovení k určitému bodu v čase byste měli použít pouze vybrané zálohy.

    Informace o sloupcích v sadě zálohování pro obnovení mřížky naleznete v tématu Obnovit databázi (obecná stránka). Informace o nástroji Database Recovery Advisor naleznete v tématu Přehled zálohování a obnovy (SQL Server).

  10. Na stránce Možnosti na panelu Možnosti obnovení můžete vybrat některou z následujících možností, pokud je to vhodné pro vaši situaci:

    • Přepsat existující databázi (S PŘÍKAZEM WITH REPLACE)

    • zachovat nastavení replikace (WITH KEEP_REPLICATION)

    • Omezit přístup k obnovené databázi (WITH RESTRICTED_USER)

    Další informace o těchto možnostech naleznete v tématu Obnovit databázi (stránka Možnosti).

  11. Vyberte možnost pro pole stavu obnovení. Toto pole určuje stav databáze po operaci obnovení.

    • RESTORE WITH RECOVERY je výchozí chování, které ponechá databázi připravenou k použití vrácením nepotvrzených transakcí zpět. Další transakční protokoly nelze obnovit. Tuto možnost vyberte, pokud teď obnovujete všechny potřebné zálohy.

    • RESTORE WITH NORECOVERY, která ponechá databázi mimo provoz a nevrátí zpět nepotvrzené transakce. Je možné obnovit další transakční protokoly. Databázi nelze použít, dokud ji neobnovíte.

    • RESTORE WITH STANDBY, která zanechá databázi v režimu jen pro čtení. Vrátí zpět nepotvrzené transakce, ale uloží vrácené akce v pohotovostním souboru, aby bylo možné zvrátit dopady obnovy.

    Popisy možností najdete v části Obnovit databázi (Stránka Možnosti).

  12. Před obnovením bude vybrána záloha protokolu tail-log, pokud je to nezbytné pro bod v čase, který jste vybrali. Toto nastavení nemusíte upravovat, ale můžete zvolit zálohování konce protokolu, i když není povinné.

  13. Operace obnovení můžou selhat, pokud existují aktivní připojení k databázi. Zkontrolujte Možnost Zavřít existující připojení a ujistěte se, že jsou všechna aktivní připojení mezi aplikací Management Studio a databází uzavřená. Toto políčko nastaví databázi do režimu jednoho uživatele před provedením operací obnovení a po dokončení nastaví databázi na režim více uživatelů.

  14. Vyberte Výzva před obnovením jednotlivých záloh, pokud si přejete být vyzváni mezi každou operací obnovení. To obvykle není nutné, pokud databáze není velká a chcete monitorovat stav operace obnovení.

Použití Transact-SQL

Než začnete

Zadaný čas se vždy obnoví ze zálohy protokolu. V každém příkazu RESTORE LOG sekvence obnovení je nutné zadat cílový čas nebo transakci ve stejné klauzuli STOPAT. Jako předpoklad pro obnovení k určitému bodu v čase musíte nejprve obnovit úplnou zálohu databáze, jejíž koncový bod je dřívější než cílová doba obnovení. Plná záloha databáze může být starší než nejnovější plná záloha, pokud následně obnovíte všechny po sobě jdoucí zálohy transakčního protokolu až do té, která obsahuje váš cílový bod v čase.

Chcete-li zjistit, která záloha databáze se má obnovit, můžete volitelně zadat klauzuli WITH STOPAT v příkazu RESTORE DATABASE a vyvolat chybu, pokud je záloha dat příliš nedávná pro zadaný cílový čas. Úplná záloha dat se vždy obnoví, i když zahrnuje požadovaný okamžik.

základní Transact-SQL syntaxe

OBNOVENÍ PROTOKOLU název_databáze Z <zálohovací_zařízení> S STOPAT =časem, OBNOVENÍ...

Bod obnovení je nejnovější potvrzení transakce, ke kterému došlo v čase nebo před časem zadaným hodnotou datetime, jak to určuje čas.

Chcete-li obnovit pouze změny provedené před konkrétním bodem v čase, zadejte =čas STOPAT pro každou zálohu, kterou obnovíte. Tím zajistíte, že nepřejdete přes cílový čas.

Obnovení databáze k určitému bodu v čase

Poznámka

Příklad tohoto postupu najdete v části Příklad (Transact-SQL), dále v této části.

  1. Připojte se k instanci serveru, na které chcete databázi obnovit.

  2. Spusťte příkaz RESTORE DATABASE pomocí možnosti NORECOVERY.

    Poznámka

    Pokud částečná sekvence obnovení vyloučí jakoukoli skupinu souborů FILESTREAM, obnovení k určitému bodu v čase není podporováno. Můžete vynutit pokračování procesu obnovení. Avšak skupiny souborů FILESTREAM, které nejsou vynechány z příkazu RESTORE, nelze nikdy obnovit. Pokud chcete vynutit obnovení k určitému bodu v čase, zadejte možnost CONTINUE_AFTER_ERROR společně s možností STOPAT, STOPATMARK nebo STOPBEFOREMARK, kterou musíte také zadat v dalších příkazech RESTORE LOG. Pokud zadáte CONTINUE_AFTER_ERROR, částečná sekvence obnovení proběhne úspěšně a skupina souborů FILESTREAM přestane být obnovitelná.

  3. Pokud existuje, obnovte poslední rozdílovou zálohu databáze bez obnovení databáze (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).

  4. Použijte každou zálohu transakčního protokolu ve stejném pořadí, v jakém byly vytvořeny, a určete časový okamžik, kdy chcete zastavit obnovu protokolu (RESTORE DATABASE database_name FROM <backup_device> WITH STOPAT =čas, OBNOVENÍ).

    Poznámka

    Možnosti OBNOVENÍ a STOPAT. Pokud záloha transakčního protokolu neobsahuje požadovaný čas (například pokud zadaný čas přesahuje konec času pokrytého transakčním protokolem), vygeneruje se upozornění a databáze zůstane neobnovována.

Příklad (Transact-SQL)

Následující příklad obnoví databázi do stavu 12:00 AM v April 15, 2020 a zobrazí operaci obnovení, která zahrnuje více záloh protokolů. Na zálohovacím zařízení AdventureWorksBackupsje úplná záloha databáze, která se má obnovit, třetí zálohovací sadou na zařízení (FILE = 3), první záložní sada protokolů je čtvrtou zálohovací sadou (FILE = 4) a druhá záložní sada protokolů je pátou zálohovací sadou (FILE = 5).

Důležitý

Databáze AdventureWorks2022 používá jednoduchý model obnovení. Pokud chcete povolit zálohování protokolů, před úplným zálohováním databáze byla databáze nastavena tak, aby používala úplný režim obnovení pomocí ALTER DATABASE AdventureWorks SET RECOVERY FULL.

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  
  

Související úkoly

Viz také

backupset (Transact-SQL)
OBNOVIT (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL)