Sdílet prostřednictvím


Vrácení databáze na snímek databáze

platí pro:SQL Server

Pokud se data v online databázi poškodí, může být v některých případech návrat databáze k snímku databáze, který předchází poškození, vhodným alternativou k obnovení databáze ze zálohy. Vrácení databáze může být například užitečné pro obrácení nedávné závažné chyby uživatele, například vyřazené tabulky. Všechny změny provedené po vytvoření snímku se však ztratí.

Než začnete

Omezení a restrikce

Vrácení zpět není podporováno za následujících podmínek:

  • Databáze má několik snímků. Pro vrácení zpět musí existovat pouze jeden snímek databáze, ke které se chystáte vrátit.

  • V databázi existují všechny skupiny souborů jen pro čtení nebo komprimované skupiny souborů.

  • Všechny soubory jsou teď offline, ale byly online při vytváření snímku.

Před vrácením databáze zvažte následující omezení:

  • Vrácení změn není zamýšleno pro obnovu médií. Snímek databáze je neúplná kopie databázových souborů, takže pokud je databáze nebo snímek databáze poškozeny, bude pravděpodobně nemožné vrátit se ze snímku. Navíc, i když je to možné, vrácení v případě poškození je nepravděpodobné, že by problém opravil. Proto je nezbytné pravidelně zálohovat a testovat plán obnovení pro ochranu databáze. Další informace naleznete v tématu Zálohování a obnovení databází SYSTÉMU SQL Server.

    Poznámka

    Pokud potřebujete mít možnost obnovit zdrojovou databázi k určitému bodu v čase, ve kterém jste vytvořili snímek databáze, použijte úplný model obnovení a implementujte zásady zálohování, které vám to umožní.

  • Původní zdrojová databáze je přepsána vrácenou databází, takže všechny aktualizace databáze od vytvoření snímku se ztratí.

  • Operace vrácení také přepíše starý soubor protokolu a znovu sestaví protokol. V důsledku toho nelze posunout obnovenou databázi dopředu do bodu, kde došlo k chybě uživatele. Proto doporučujeme protokol před vrácením databáze zálohovat.

    Poznámka

    I když původní protokol nelze obnovit a vrátit databázi zpět, informace v původním souboru protokolu mohou být užitečné pro rekonstrukci ztracených dat.

  • Obnovení přeruší řetězec zálohování protokolů. Než tedy budete moct provádět logické zálohy obnovené databáze, musíte nejprve provést úplnou zálohu databáze nebo zálohu souborů. Doporučujeme úplné zálohování databáze.

  • Během operace vrácení zpět není snímek i zdrojová databáze k dispozici. Zdrojová databáze i snímek jsou označeny jako "Probíhá obnovení". Pokud během operace vrácení dojde k chybě, při opětovném spuštění databáze se operace vrácení pokusí dokončit vrácení zpět.

  • Metadata vrácené databáze jsou stejná jako metadata v době snímku.

  • Vrácením se zahodí všechny katalogy s úplným textem.

Požadavky

Ujistěte se, že zdrojová databáze a snímek databáze splňují následující požadavky:

Bezpečnost

Dovolení

Každý uživatel, který má u zdrojové databáze oprávnění RESTORE DATABASE, ho může vrátit do stavu při vytvoření snímku databáze.

Jak obnovit databázi ze snímku databáze (pomocí Transact-SQL)

Vrátit databázi ke snímku databáze

Poznámka

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

  1. Určete snímek databáze, ke kterému chcete databázi vrátit. Snímky v databázi můžete zobrazit v aplikaci SQL Server Management Studio (viz Zobrazení snímku databáze (SQL Server)). Zdrojovou databázi pohledu můžete identifikovat také pomocí sloupce source_database_id v katalogovém zobrazení sys.databases (Transact-SQL).

  2. Odstraňte všechny ostatní snímky databáze.

    Pro informace o odstranění snímků databáze se podívejte na Odstranění snímku databáze (Transact-SQL). Pokud databáze používá úplný model obnovení, před návratem byste měli protokol zálohovat. Další informace naleznete v tématu Zálohování transakčního protokolu (SQL Server) nebo Zálohování transakčního protokolu při poškození databáze (SQL Server).

  3. Proveďte operaci vrácení zpět.

    Operace vrácení zpět vyžaduje oprávnění RESTORE DATABASE ke zdrojové databázi. K vrácení databáze použijte následující příkaz Transact-SQL:

    OBNOVENÍ DATABÁZE název_databáze Z SNÍMKU_DATABÁZE =database_snapshot_name

    Kde database_name je zdrojová databáze a database_snapshot_name je název snímku, ke kterému chcete databázi vrátit. Všimněte si, že v tomto příkazu musíte místo zálohovacího zařízení zadat název snímku.

    Další informace naleznete v části RESTORE (Transact-SQL).

    Poznámka

    Během operace vrácení zpět není snímek i zdrojová databáze k dispozici. Zdrojová databáze i snímek jsou označeny jako "Probíhá obnovení". Pokud během operace vrácení dojde k chybě, pokusí se po opětovném spuštění databáze dokončit obnovení.

  4. Pokud se vlastník databáze od vytvoření snímku databáze změnil, možná budete chtít aktualizovat vlastníka databáze vrácené databáze.

    Poznámka

    Vrácená databáze uchovává oprávnění a konfiguraci snímku databáze (například vlastník databáze a model obnovení).

  5. Spusťte databázi.

  6. Volitelně můžete zálohovat vrácenou databázi, zejména pokud používá úplný (nebo hromadně protokolovaný) model obnovení. Pokud chcete zálohovat databázi, přečtěte si téma Vytvoření úplné zálohy databáze (SQL Server).

Příklady (Transact-SQL)

Tato část obsahuje následující příklady vrácení databáze na snímek databáze:

A. Vrácení snímku v databázi AdventureWorks

Tento příklad předpokládá, že v databázi AdventureWorks2022 aktuálně existuje pouze jeden snímek. Příklad, který vytvoří snímek, do kterého se databáze vrátí, najdete v tématu Vytvoření snímku databáze (Transact-SQL).

USE master;  
-- Reverting AdventureWorks to AdventureWorks_dbss1800  
RESTORE DATABASE AdventureWorks from   
DATABASE_SNAPSHOT = 'AdventureWorks_dbss1800';  
GO  

B. Vrácení snímku v databázi Sales

Tento příklad předpokládá, že v databázi Sales existují dva snímky: sales_snapshot0600 a sales_snapshot1200. Příklad odstraní starší snímky a vrátí databázi k novějšímu snímku.

Kód pro vytvoření ukázkové databáze a snímků, na kterých tento příklad závisí, najdete tady:

--Test to see if sales_snapshot0600 exists and if it   
-- does, delete it.  
IF EXISTS (SELECT database_id FROM sys.databases  
    WHERE NAME='sales_snapshot0600')  
    DROP DATABASE SalesSnapshot0600;  
GO  
-- Reverting Sales to sales_snapshot1200  
USE master;  
RESTORE DATABASE Sales FROM DATABASE_SNAPSHOT = 'sales_snapshot1200';  
GO  

Související úkoly

Viz také

Snímky databáze (SQL Server)
OBNOVIT (Transact-SQL)
sys.databases (Transact-SQL)
Zrcadlení databáze a Snímky databáze (SQL Server)