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:
Vrácení databáze k snímku databáze pomocí:Transact-SQL
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:
Ověřte, že databáze nebyla poškozena.
Poznámka
Pokud je databáze poškozená, budete ji muset obnovit ze záloh. Další informace najdete v tématu Dokončení obnovení databáze (jednoduchý model obnovení) nebo dokončení obnovení databáze (úplný model obnovení).
Identifikujte nedávný snímek, který byl vytvořen před chybou. Další informace naleznete v tématu Zobrazení snímku databáze (SQL Server).
Odstraňte všechny další snímky, které v databázi aktuálně existují. Pro více informací viz Odstranit snímek databáze (Transact-SQL).
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.
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).
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).
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í.
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í).
Spusťte databázi.
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:
Informace o databázi Sales a snímku sales_snapshot0600 najdete v tématu "Vytvoření databáze se skupinami souborů" a "Vytvoření snímku databáze" v CREATE DATABASE (SQL Server Transact-SQL).
Snímek sales_snapshot1200 najdete v tématu "Vytvoření snímku v databázi Sales" v Vytvoření snímku databáze (Transact-SQL).
--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)