V mých předchozích článcích jsem vysvětlil, jak vytvořit a nakonfigurovat funkci FILESTREAM v instanci serveru SQL. Navíc jsem předvedl, jak vytvořit tabulku, která má sloupec FILESTREAM a umožňuje vkládat a mazat data z ní.
V tomto článku vysvětlím, jak zálohovat a obnovit databázi s podporou FILESTREAM. Navíc předvedu, jak obnovit skupinu souborů FILESTREAM bez přepnutí databáze do režimu offline.
Jak jsem vysvětlil v předchozích článcích, když povolíme FILESTREAM na instanci SQL Server, musíme vytvořit kontejner FILESTREAM, který má skupinu souborů FILESTREAM. Když zálohujeme databázi podporující FILESTREAM, záloha skupiny souborů FILESTREAM bude zahrnuta do zálohovací sady. Když obnovíme databázi, SQL Server obnoví databázi a kontejner FILESTREAM a soubory v něm.
Když zálohujeme databázi podporující FILESTREAM, bude:
- Zálohujte všechny dostupné datové soubory databáze.
- Zálohujte skupinu souborů FILESTREAM a soubory v ní.
- Záložní T-Log.
SQL Server poskytuje flexibilitu zálohování pouze kontejneru FILESTREAM. Pokud dojde k poškození souborů v kontejneru FILESTREAM, nemusíme obnovit celou databázi. Můžeme obnovit pouze skupinu souborů FILESTREAM.
V této ukázce budu:
- Vysvětlete, jak provést úplnou zálohu databáze FS a zálohovat pouze kontejner FILESTREAM.
- Vysvětlete, jak obnovit databázi s podporou FILESTREAM.
- Jak obnovit kontejner FILESTREAM online a offline. Poznámka:SQL Server Enterprise Edition a Developer Edition podporují ONLINE obnovu.
Nastavení ukázky:
V této ukázce použiji:
- Databáze :SQL Server 2017
- Software :SQL Server Management Studio.
Zálohování databáze s podporou FILESTREAM
Abych demonstroval proces zálohování, vytvořil jsem databázi podporující FILESTREAM s názvem FileStream_Demo . Obsahuje tabulku FILESTREAM s názvem Document_Content .
Úplná záloha databáze
Zálohování databáze s podporou FILESTREAM je jednoduchý proces. Chcete-li vytvořit jeho úplnou zálohu, spusťte následující skript T-SQL.
ZÁLOHOVÁNÍ DATABÁZE [FileStream_Demo] NA DISK =N'E:\Backups\FileStream_Demo.bak' S NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Plná záloha databáze', SKIP, NOREWIND, NOUNLOAD, STATS
Následuje protokol zálohy vygenerovaný provedením výše uvedeného příkazu pro zálohování:
/*Zahájit zálohování datového souboru*/Zpracováno 568 stránek pro databázi 'FileStream_Demo', soubor 'FileStream_Demo' v souboru 1./*Zahájit zálohování kontejneru FILESTREAM*/ 10 procent zpracováno. 20 procent zpracováno. 30 procent zpracováno. 40 procent zpracováno. 50 procent zpracováno. 60 procent zpracováno. 70 procent zpracováno. 80 procent zpracováno. 90 procent zpracováno. Zpracováno 111106 stránek pro databázi 'FileStream_Demo', soubor 'Dummy-Documents ' v souboru 1./*Zahájit zálohování kontejneru FILESTREAM*/ Zpracovány 4 stránky pro databázi 'FileStream_Demo', soubor 'FileStream_Demo_log' v souboru 1,100 procent zpracováno. BACKUP DATABASE úspěšně zpracovala 111677 stránek za 18,410 sekund (47,391 MB/s).
Jak jsem zmínil na začátku článku, nejprve SQL server zálohuje primární datový soubor, poté sekundární datové soubory a nakonec protokoly transakcí. Jak můžete vidět v protokolu zálohování, za prvé, záloha SQL serveru Primární datový soubor, potom skupina souborů FILESTREAM a data s ní spojená a nakonec protokoly transakcí.
Záloha kontejneru FILESTREAM
Jak jsem již zmínil na začátku článku, můžeme také vygenerovat zálohu kontejneru FILESTREAM. Chcete-li vytvořit zálohu kontejneru FILESTREAM, spusťte následující skript T-SQL.
ZÁLOHOVÁNÍ DATABÁZE [FileStream_Demo] FILEGROUP =N'Dummy-Documents' NA DISK =N'E:\Backups\FS_Container.bak' S NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full Database Backup',SKIP, NOREWIND NOUNLOAD, STATS =10GO
Obnovení databáze s podporou FILESTREAM
Když obnovíme databázi FILESTREAM, SQL obnoví kontejner FileStream spolu se všemi soubory v kontejneru FILESTREAM.
Chcete-li obnovit databázi, proveďte následující úkoly:
- V SSMS klikněte pravým tlačítkem na databázi a vyberte možnost Obnovit databázi .
- V dialogovém okně Obnovit vyberte Zařízení a klikněte na Procházet . Otevře se další dialogové okno. V dialogovém okně klikněte na Přidat .
- V Vyhledat záložní soubor v dialogovém okně procházejte adresářovou strukturou, klikněte na správnou zálohu a klikněte na OK .
- Jakmile se informace o záloze načtou do Záloha nastaví k obnovení zobrazení mřížky, klikněte na OK začněte proces obnovovat.
Alternativně můžete databázi obnovit provedením následujícího příkazu:
POUŽÍVEJTE [master]OBNOVIT DATABÁZI [FileStream_Demo] Z DISKU =N'E:\Backups\FileStream_Demo.bak' SE SOUBOREM =1, NOUNLOAD, STATS =5GO
Scénář obnovy databáze s povoleným FILESTREAM
FILESTREAM filegroup obnovuje proces jako proces obnovy filegroups.
Chcete-li vygenerovat scénář obnovení, vytvořte databázi s podporou FILESTREAM s názvem FileStream-Demo . Databáze obsahuje tabulku FILESTREAM s názvem Document_Content . Vložte některá náhodná data a soubory do Document_Content tabulka.
Provedením následujícího dotazu vyplňte podrobnosti o souborech vložených do tabulky.
VYBERTE RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content pořadí podle velikosti souboru desc
Výstup je následující:
Následuje snímek obrazovky kontejneru FILESTREAM:
Nejprve vygenerujte úplnou zálohu databáze. Za tímto účelem spusťte následující příkaz.
ZÁLOHOVÁNÍ DATABÁZE [FileStream_Demo] NA DISK =N'E:\Backups\Full_FileStream_Demo_20180810.bak' POMOCÍ NOFORMAT, NOINIT,NAME =N'FileStream_Demo-Full Database Backup'
Za druhé, vygenerujte zálohu FILEGROUP skupiny souborů FILESTREAM s názvem Dummy-Document provedením následujícího příkazu:
ZÁLOHOVÁNÍ DATABÁZE [FileStream_Demo] FILEGROUP =N'Dummy-Documents' NA DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' S NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full' Backup'
Chcete-li vygenerovat poškození FILESTREAM, odstraňte některé soubory z kontejneru FILESTREAM. Jakmile budou tyto soubory smazány, pokuste se načíst data z „Document_Content“ provedením následujícího příkazu:
Použijte FileStream_DemoGoselect * z Document_Content
Zobrazí se následující chyba:
Zpráva 233, úroveň 20, stav 0, řádek 122 Při přijímání výsledků ze serveru došlo k chybě na úrovni přenosu. (poskytovatel:Shared Memory Provider, chyba:0 – Na druhém konci kanálu není žádný proces.)
Viz následující snímek obrazovky:
Nyní musíme obnovit kontejner FILESTREAM, abychom tuto chybu opravili. Vygenerovali jsme úplnou zálohu a zálohu fiktivního dokumentu skupina souborů.
Celý kontejner FILESTREAM můžeme obnovit obnovením skupiny souborů FILESTREAM. Ukážu:
- Obnovení skupiny souborů FILESTREAM offline.
- Online obnovení skupiny souborů FILESTREAM.
Obnovení offline skupiny souborů kontejneru FILESTREAM
Protože jsem smazal soubory z kontejneru FILESTREAM, nemusíme obnovovat celou databázi. Místo obnovy celé databáze tedy obnovíme jedinou skupinu souborů. Chcete-li to provést, nejprve vygenerujte zálohu Tail-Log pro zachycení změn dat, která nebyla zálohována. Záloha protokolu Tail musí být provedena pomocí možnosti NORECOVERY, aby se databáze dostala do stavu obnovy, což dává možnost použít zálohy na databázi. Chcete-li to provést, proveďte následující dotaz:
zálohujte protokol [FileStream_Demo] na disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' S NORECOVERY
Po vygenerování zálohy Tail-log bude databáze v režimu obnovy. Nyní můžeme použít zálohu FILEGROUP na databázi s možností NORECOVERY. Za tímto účelem spusťte následující příkaz:
použijte mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' Z DISKU =N'E:\Backups\FileStream_Filegroup_Demo.bak' S NORECOVERY,REPLACE;
Nyní použijte zálohu Tail-log s možností RECOVERY. Za tímto účelem spusťte následující příkaz:
OBNOVIT PROTOKOL [FileStream_Demo] Z DISKU =N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'
Jakmile se záloha obnoví, databáze bude online a všechny soubory budou obnoveny v kontejneru FILESTREAM. Chcete-li to ověřit, spusťte následující příkaz:
VYBERTE RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content pořadí podle velikosti souboru desc
Výstup výše uvedeného dotazu je následující:
Online obnovení skupiny souborů FILESTREAM
Pomocí SQL Server Enterprise Edition můžeme obnovit zálohu, když je databáze online. Pokud je například poškozen soubor F1 sekundární skupiny souborů FG-1, můžeme obnovit soubor F1, zatímco databáze zůstane online. Sekvence obnovení offline obnovení a obnovení online jsou stejné.
Jak bylo uvedeno výše, chcete-li provést online obnovu skupiny souborů FILESTREAM, vytvořte Dummy-Document datový soubor offline. Za tímto účelem spusťte následující příkaz.
použít databázi mastergoAlter [FileStream_Demo] UPRAVIT SOUBOR (NAME='Dummy-Documents',OFFLINE)
Chcete-li ověřit stav souboru, proveďte následující dotaz:
Použijte [FileStream_Demo]Goselect File_id, type_desc,name, Physical_name,state_desc,size z FileStream_Demo.sys.database_files
Výstup je následující:
Dummy-document jsme již zazálohovali skupina souborů. Jakmile je tedy datový soubor offline, obnovte zálohu FILEGROUP v databázi pomocí možnosti NORECOVERY. Za tímto účelem spusťte následující příkaz:
použijte mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' Z DISKU =N'E:\Backups\FileStream_Filegroup_Demo.bak' S NORECOVERY, REPLACE;
Nyní proveďte zálohu protokolu databáze, abyste se ujistili, že je zachycen bod, ve kterém datový soubor přešel do režimu offline. Za tímto účelem spusťte následující příkaz:
zálohování protokolu [FileStream_Demo] na disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'
Provedením následujícího příkazu obnovte poslední zálohu T-Logu.
použijte mastergoRESTORE LOG [FileStream_Demo] Z DISKU =N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'
Po obnovení zálohy protokolu budou obnoveny všechny soubory v kontejneru FILESTREAM a skupina souborů bude online. Chcete-li to ověřit, proveďte následující dotaz:
Použijte [FileStream_Demo]Goselect File_id, type_desc,name, Physical_name,state_desc,size z FileStream_Demo.sys.database_files
Výstup je následující:
Po obnovení zálohy bude databáze online a všechny soubory budou obnoveny v kontejneru FILESTREAM. Chcete-li to ověřit, spusťte následující příkaz:
VYBERTE RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content pořadí podle velikosti souboru desc
Výstup je následující:
Shrnutí
V tomto článku jsem vysvětlil:
- Jak provést zálohu a obnovit databázi a skupinu souborů FILESTREAM podporující FILESTREAM.
- Jak obnovit skupinu souborů FILESTREAM online a offline.