I mina tidigare artiklar förklarade jag hur man skapar och konfigurerar FILESTREAM-funktionen i SQL-serverinstanser. Dessutom demonstrerade jag hur man skapar en tabell som har en FILESTREAM-kolumn och hot för att infoga och ta bort data från den.
I den här artikeln kommer jag att förklara hur man säkerhetskopierar och återställer den FILESTREAM-aktiverade databasen. Dessutom kommer jag att visa hur man återställer FILESTREAM-filgruppen utan att göra databasen offline.
Som jag förklarade i mina tidigare artiklar, när vi aktiverar FILESTREAM på SQL Server-instans, måste vi skapa en FILESTREAM-behållare som har FILESTREAM-filgruppen. När vi säkerhetskopierar den FILESTREAM-aktiverade databasen, kommer säkerhetskopiering av FILESTREAM-filgruppen att inkluderas i säkerhetskopieringsuppsättningen. När vi återställer databasen kommer SQL Server att återställa databasen och FILESTREAM-behållaren och filerna i den.
När vi säkerhetskopierar en FILESTREAM-aktiverad databas kommer den:
- Säkerhetskopiera alla tillgängliga datafiler i databasen.
- Säkerhetskopiera FILESTREAM-filgruppen och filerna i den.
- T-logg för säkerhetskopiering.
SQL Server ger flexibiliteten att ta backup av endast FILESTREAM-behållaren. Om filer i FILESTREAM-behållaren blir korrupta behöver vi inte återställa hela databasen. Vi kan bara återställa filgruppen FILESTREAM.
I den här demon kommer jag att:
- Förklara hur man tar en fullständig säkerhetskopia av FS-databasen och säkerhetskopierar endast FILESTREAM-behållaren.
- Förklara hur man återställer den FILESTREAM-aktiverade databasen.
- Hur man återställer FILESTREAM-behållaren online och offline. Obs:SQL Server Enterprise-utgåvan och utvecklarutgåvan stöder ONLINE-återställning.
Demoinställningar:
I den här demon kommer jag att använda:
- Databas :SQL Server 2017
- Programvara :SQL Server management studio.
Säkerhetskopiera FILESTREAM-aktiverad databas
För att demonstrera säkerhetskopieringsprocessen har jag skapat en FILESTREAM-aktiverad databas med namnet FileStream_Demo . Den har en FILESTREAM-tabell som heter Document_Content .
Fullständig säkerhetskopiering av databas
Att säkerhetskopiera en FILESTREAM-aktiverad databas är en enkel process. För att skapa en fullständig säkerhetskopia av det, kör följande T-SQL-skript.
BACKUP DATABAS [FileStream_Demo] TO DISK =N'E:\Backups\FileStream_Demo.bak' WITH NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS =10GO>Följande är backuploggen som genereras genom exekvering av ovanstående backupkommando:
/*Begin Backup DataFile*/Bearbetade 568 sidor för databasen 'FileStream_Demo', filen 'FileStream_Demo' på fil 1./*Börja säkerhetskopiera FILESTREAM-behållaren*/ 10 procent bearbetade.20 procent bearbetade.30 procent bearbetade.40 procent bearbetade.50 procent bearbetade.60 procent bearbetade.70 procent bearbetade.80 procent bearbetade.90 procent bearbetade.Bearbetade 111106 sidor för databasen 'FileStream_Demo', filen 'Dummy-Documents' ' på fil 1./*Börja säkerhetskopiera FILESTREAM-behållaren*/ Bearbetade 4 sidor för databasen 'FileStream_Demo', filen 'FileStream_Demo_log' på filen 1,100 procent bearbetad. BACKUP DATABAS bearbetade framgångsrikt 111677 sidor på 18,410 sekunder (47,391 MB/sek).Som jag nämnde i början av artikeln tar SQL-servern först backup av den primära datafilen, sedan sekundära datafiler och slutligen transaktionsloggar. Som du kan se i backuploggen, För det första, SQL-server backup Primär datafil sedan FILESTREAM filgrupp och data associerade med den och slutligen transaktionsloggar.
Säkerhetskopiering av FILESTREAM-behållare
Som jag nämnde i början av artikeln kan vi också skapa en säkerhetskopia av FILESTREAM-behållaren. För att skapa en säkerhetskopia av FILESTREAM-behållaren, kör följande T-SQL-skript.
BACKUP DATABAS [FileStream_Demo] FILEGROUP =N'Dummy-Documents' TO DISK =N'E:\Backups\FS_Container.bak' WITH NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full Database Backup',SKIP, NOREWIND NOUNLOAD, STATISTIK =10GOÅterställ FILESTREAM-aktiverad databas
När vi återställer FILESTREAM-databasen, återställer SQL FileStream-behållaren tillsammans med alla filer i FILESTREAM-behållaren.
För att återställa databasen, utför följande uppgifter:
- I SSMS högerklickar du på databasen och väljer Återställ databas .
- Välj Enhet i dialogrutan Återställ och klicka på Bläddra . En annan dialogruta öppnas. Klicka på Lägg till i dialogrutan .
- I Hitta säkerhetskopia dialogrutan, navigera genom katalogstrukturen, klicka på en korrekt säkerhetskopia och klicka på OK .
- När säkerhetskopieringsinformationen har laddats i Säkerhetskopieringsuppsättningar för återställning rutnätsvy, klicka på OK för att börja återställa processen.
Alternativt kan du återställa en databas genom att utföra följande kommando:
ANVÄND [master]ÅTERSTÄLL DATABAS [FileStream_Demo] FRÅN DISK =N'E:\Backups\FileStream_Demo.bak' MED FIL =1, NOUNLOAD, STATISTIK =5GOFILESTREAM-aktiverat databasåterställningsscenario
Filgruppen FILESTREAM återställer processen som processen för att återställa filgrupper.
För att generera återställningsscenariot, skapa en FILESTREAM-aktiverad databas med namnet FileStream-Demo . Databasen har en FILESTREAM-tabell med namnet Document_Content . Infoga några slumpmässiga data och filer i Document_Content bord.
Kör följande fråga för att fylla i information om filer som infogats i tabellen.
VÄLJ RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content ordning efter filstorlek descUtgången är som följer:
Följande är en skärmdump av FILESTREAM-behållaren:
Skapa först en fullständig säkerhetskopia av databasen. För detta, kör följande kommando.
BACKUP DATABAS [FileStream_Demo] TO DISK =N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME =N'FileStream_Demo-Full Database Backup'För det andra, generera en FILEGROUP-säkerhetskopia av FILESTREAM-filgruppen med namnet Dummy-Document genom att utföra följande kommando:
BACKUP DATABAS [FileStream_Demo] FILEGROUP =N'Dummy-Documents' TO DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full FILEGROUP Backup'För att generera FILESTREAM-korruptionen, ta bort några filer från FILESTREAM-behållaren. När dessa filer har raderats, försök att hämta data från "Document_Content" genom att utföra följande kommando:
Använd FileStream_DemoGoselect * från Document_ContentDu kommer att få följande felmeddelande:
Msg 233, Level 20, State 0, Line 122A transport-nivåfel har inträffat vid mottagning av resultat från servern. (leverantör:Shared Memory Provider, fel:0 - Ingen process finns i andra änden av röret.)Se följande skärmdump:
Nu måste vi återställa FILESTREAM-behållaren för att fixa det här felet. Vi skapade en fullständig säkerhetskopia och säkerhetskopia av Dummy-dokumentet filgrupp.
Vi kan återställa hela FILESTREAM-behållaren genom att återställa FILESTREAM-filgruppen. Jag ska visa:
- Offlineåterställning av FILESTREAM-filgruppen.
- Online-återställning av FILESTREAM-filgruppen.
Offlineåterställning av FILESTREAM-behållarefilgrupp
Eftersom jag hade raderat filer från FILESTREAM-behållaren behöver vi inte återställa hela databasen. Därför kommer vi att återställa den enda filgruppen istället för att återställa hela databasen. För att göra det, generera först en Tail-Log-säkerhetskopia för att fånga dataändringarna som inte säkerhetskopierades. Tail-log-backupen måste tas med alternativet NORECOVERY för att få databasen i återställningstillstånd, och det ger en möjlighet att använda säkerhetskopior på databasen. För att göra det, kör följande fråga:
säkerhetskopieringslogg [FileStream_Demo] till disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' med NORECOVERYNär säkerhetskopian av bakloggar har genererats kommer databasen att vara i återställningsläge. Nu kan vi använda FILEGROUP-säkerhetskopian på en databas med alternativet NORECOVERY. För detta, kör följande kommando:
använd mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NORRECOVERY,REPLACE;Applicera nu Tail-log backup med alternativet ÅTERSTÄLLNING. För detta, kör följande kommando:
ÅTERSTÄLL LOGG [FileStream_Demo] FRÅN DISK =N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'När säkerhetskopian återställs kommer databasen att vara online och alla filer kommer att återställas i FILESTREAM-behållaren. För att verifiera det, kör följande kommando:
VÄLJ RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content ordning efter filstorlek descUtdata från ovanstående fråga är som följer:
Onlineåterställning av FILESTREAM-filgruppen
Med hjälp av SQL Server Enterprise Edition kan vi återställa säkerhetskopian när databasen är online. Till exempel, om en fil F1 i sekundär filgrupp FG-1 är skadad, kan vi återställa fil F1 medan databasen förblir online. Återställningssekvensen för offlineåterställning och onlineåterställning är samma.
Som nämnts ovan, för att utföra en onlineåterställning av FILESTREAM-filgruppen, gör du Dummy-Document datafil offline. För detta, kör följande kommando.
använd mastergoAlter-databasen [FileStream_Demo] MODIFIERA FIL (NAME='Dummy-Documents',OFFLINE)För att verifiera filens status, kör följande fråga:
Använd [FileStream_Demo]Goselect File_id, type_desc,name, physical_name, state_desc,size from FileStream_Demo.sys.database_filesUtgången är som följer:
Vi har redan säkerhetskopierat Dummy-dokumentet filgrupp. När datafilen är offline, återställ därför FILEGROUP-säkerhetskopian på en databas med alternativet NORECOVERY. För detta, kör följande kommando:
använd mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NORRECOVERY, REPLACE;Ta nu en loggbackup av databasen för att se till att punkten där datafilen gick offline är fångad. För detta, kör följande kommando:
säkerhetskopieringslogg [FileStream_Demo] till disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'Utför följande kommando för att återställa den senaste T-Log-säkerhetskopian.
använd mastergoRESTORE LOG [FileStream_Demo] FRÅN DISK =N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'När loggsäkerhetskopian återställs kommer alla filer i FILESTREAM-behållaren att återställas och filgruppen kommer att vara online. För att verifiera det, kör följande fråga:
Använd [FileStream_Demo]Goselect File_id, type_desc,name, physical_name, state_desc,size from FileStream_Demo.sys.database_filesUtgången är som följer:
När säkerhetskopian har återställts kommer databasen att vara online och alla filer kommer att återställas i FILESTREAM-behållaren. För att verifiera det, kör följande kommando:
VÄLJ RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content ordning efter filstorlek descUtgången är som följer:
Sammanfattning
I den här artikeln förklarade jag:
- Hur man tar backup och återställer den FILESTREAM-aktiverade databasen och FILESTREAM-filgruppen.
- Hur man återställer FILESTREAM-filgruppen online och offline.