Dokončení obnovení databáze (úplný model obnovení)
platí pro:SQL Server
V úplném obnovení databáze je cílem obnovit celou databázi. Celá databáze je po dobu trvání obnovení offline. Než bude možné převést jakoukoli část databáze do režimu online, obnoví se všechna data do konzistentního bodu, ve kterém jsou všechny části databáze v daném okamžiku a neexistují žádné nepotvrzené transakce.
V rámci úplného modelu obnovení je nutné po obnovení zálohy nebo záloh dat obnovit všechny následné zálohy transakčních protokolů a pak obnovit databázi. Databázi můžete obnovit do konkrétního bodu obnovení v rámci jedné z těchto záloh protokolů. Bod obnovení může být konkrétní datum a čas, označená transakce nebo pořadové číslo protokolu (LSN).
Při obnovování databáze, zejména v rámci úplného modelu obnovení nebo modelu hromadného obnovení, byste měli použít jednu sekvenci obnovení. Posloupnost obnovení se skládá z jedné nebo více operací obnovení, které přesouvají data skrze jednu nebo více fází obnovení.
Nedůvěryhodné zdroje
Doporučujeme, abyste nepřipojíte nebo obnovíte databáze z neznámých nebo nedůvěryhodných zdrojů. Tyto databáze můžou obsahovat škodlivý kód, který může spouštět nezamýšlené Transact-SQL kód nebo způsobit chyby úpravou schématu nebo fyzické struktury databáze. Před použitím databáze z neznámého nebo nedůvěryhodného zdroje spusťte DBCC CHECKDB na databázi na neprodukčním serveru. Prozkoumejte také uživatelem napsaný kód v databázi, například uložené procedury nebo jiný uživatelem definovaný kód.
Zálohy ze starších verzí
Informace o podpoře záloh ze starších verzí SQL Serveru naleznete v části Podpora kompatibility RESTORE (Transact-SQL).
Obnovení databáze do bodu selhání
Obnovení databáze do bodu selhání obvykle zahrnuje následující základní kroky:
Zálohujte aktivní transakční protokol (označovaný jako konec protokolu). Tím se vytvoří záloha koncového protokolu. Pokud aktivní transakční protokol není k dispozici, všechny transakce v této části protokolu budou ztraceny.
Důležitý
V rámci modelu obnovení s hromadným protokolováním vyžaduje zálohování jakéhokoli protokolu, který obsahuje hromadně protokolované operace, přístup ke všem datovým souborům v databázi. Pokud nelze získat přístup k datovým souborům, nelze transakční protokol zálohovat. V takovém případě musíte ručně znovu provést všechny změny provedené od poslední zálohy protokolu.
Další informace naleznete v tématu Tail-Log zálohování (SQL Server).
Obnovte nejnovější úplnou zálohu databáze bez obnovení databáze (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY).
Pokud existují rozdílové zálohy, obnovte tu nejnovější bez obnovy databáze (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY).
Obnovení nejnovější rozdílové zálohy snižuje počet záloh protokolů, které je potřeba obnovit.
Počínaje první zálohou transakčního protokolu, která byla vytvořena po právě obnovené záloze, obnovte protokoly v posloupnosti pomocí NORECOVERY.
Obnovte databázi (RESTORE DATABASE database_name WITH RECOVERY). Případně můžete tento krok zkombinovat s obnovením poslední zálohy protokolu.
Následující obrázek znázorňuje tuto sekvenci obnovení. Po selhání (1) se vytvoří záloha protokolu tail (2). V dalším kroku se databáze obnoví do bodu selhání. To zahrnuje obnovení zálohy databáze, následného rozdílového zálohování a každého zálohování protokolů pořízeného po rozdílovém zálohování, včetně zálohy koncového protokolu.
Poznámka
Když obnovíte zálohu databáze do jiné instance serveru, přečtěte si téma Kopírování databází se zálohováním a obnovením.
Základní syntaxe Transact-SQL RESTORE
Základní syntaxe RESTORETransact-SQL pro sekvenci obnovení na předchozím obrázku je následující:
RESTORE DATABASE database FROM úplné zálohování databáze POMOCÍ NORECOVERY;
OBNOVIT DATABÁZI ZÁLOHOU Z PLNÉ_DIFERENCIÁLNÍ_ZÁLOHY S NORECOVERY;
OBNOVIT protokol databáze Z log_backup S NORECOVERY;
Tento krok obnovení protokolu opakujte pro každou další zálohu logu.
RESTORE DATABASE database S OBNOVENÍM;
Příklad: Obnovení k bodu selhání (Transact-SQL)
Následující Transact-SQL příklad ukazuje základní možnosti v sekvenci obnovení, která obnoví databázi do bodu selhání. Příklad vytvoří zálohu koncového logu databáze. V dalším kroku příklad obnoví úplnou zálohu databáze a zálohování protokolů a pak obnoví zálohu protokolu tail-log. Příklad obnoví databázi v samostatném posledním kroku.
Poznámka
V tomto příkladu se používá záloha databáze a záloha logu vytvořená v části "Použití záloh databáze v rámci Modelu Úplného Obnovení" v Úplné Zálohy Databáze (SQL Server). Před zálohováním databáze byla AdventureWorks2022
ukázková databáze nastavena tak, aby používala úplný model obnovení.
USE master;
--Create tail-log backup.
BACKUP LOG AdventureWorks2022
TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH NORECOVERY;
GO
--Restore the full database backup (from backup set 1).
RESTORE DATABASE AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=1,
NORECOVERY;
--Restore the regular log backup (from backup set 2).
RESTORE LOG AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=2,
NORECOVERY;
--Restore the tail-log backup (from backup set 3).
RESTORE LOG AdventureWorks2022
FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'
WITH FILE=3,
NORECOVERY;
GO
--recover the database:
RESTORE DATABASE AdventureWorks2022 WITH RECOVERY;
GO
Obnovení databáze do bodu v rámci zálohy protokolu
V rámci modelu úplného obnovení je obvykle možné úplné obnovení databáze obnovit k určitému bodu času, označené transakci nebo LSN v rámci zálohy protokolu. Pokud však v modelu obnovy s hromadným protokolováním záloha protokolu obsahuje hromadně protokolované změny, obnovení k určitému bodu v čase není možné.
Ukázkové scénáře obnovení k určitému bodu v čase
Následující příklad předpokládá kritický databázový systém, pro který se vytváří úplné zálohování databáze každý den o půlnoci, rozdílové zálohování databáze se vytvoří v hodině, pondělí až sobotu a zálohy transakčních protokolů se vytvoří každých 10 minut v průběhu dne. Pokud chcete obnovit databázi do stavu, ve kterém byla ve středu v 5:19 ráno, postupujte následujícím způsobem:
Obnovte úplnou zálohu databáze, která byla vytvořena úterý o půlnoci.
Obnovte rozdílovou zálohu databáze, která byla vytvořena ve středu v 5:00 ráno.
Použijte zálohu transakčního protokolu, která byla vytvořena ve středu v 5:10.
Použijte zálohu transakčního protokolu, která byla vytvořena ve středu 5:20, a určete, že proces obnovení se vztahuje pouze na transakce, ke kterým došlo před 5:19.
Případně pokud je potřeba databázi obnovit do stavu ve 3:04 ve čtvrtek, ale rozdílová záloha databáze vytvořená v 3:00 ráno není k dispozici, postupujte takto:
Obnovte zálohu databáze, která byla vytvořena ve středu o půlnoci.
Obnovte rozdílovou zálohu databáze, která byla vytvořena ve čtvrtek v 2:00.
Použijte všechny zálohy transakčního protokolu vytvořené ve čtvrtek od 2:10 do před 3:00 ráno.
Použijte zálohu transakčního protokolu vytvořenou ve čtvrtek ve 3:10 a zastavte proces obnovení v 3:04.
Poznámka
Příklad obnovení k určitému bodu v čase najdete v tématu Obnovení databáze SQL Serveru k určitému bodu v čase (úplný model obnovení).
Související úkoly
Obnovení úplné zálohy databáze
Obnovení rozdílové zálohy databáze
Obnovení zálohy transakčního protokolu
obnovení zálohy pomocí SMO (SQL Server Management Objects)
Obnovení databáze do určitého bodu v rámci protokolové zálohy
obnovení databáze SQL Serveru k určitému bodu v čase (úplný model obnovení)
obnovení souvisejících databází, které obsahují označené transakce
Viz také
RESTORE (Transact-SQL)
BACKUP (Transact-SQL)
použít zálohy transakčních protokolů (SQL Server)
sp_addumpdevice (Transact-SQL)
úplné zálohy databáze (SQL Server)
rozdílové zálohování (SQL Server)
přehled zálohování (SQL Server)
Přehled obnovení a obnovování (SQL Server)