sql >> Databasteknik >  >> RDS >> Database

Säkerhetskopiera och återställa FILESTREAM-aktiverad databas

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:

  1. Databas :SQL Server 2017
  2. 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:

  1. I SSMS högerklickar du på databasen och väljer Återställ databas .
  2. Välj Enhet i dialogrutan Återställ och klicka på Bläddra . En annan dialogruta öppnas. Klicka på  Lägg till i dialogrutan .
  3. I Hitta säkerhetskopia dialogrutan, navigera genom katalogstrukturen, klicka på en korrekt säkerhetskopia och klicka på OK .
  4. 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 =5GO

FILESTREAM-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 desc

Utgå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_Content

Du 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:

  1. Offlineåterställning av FILESTREAM-filgruppen.
  2. 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 NORECOVERY

Nä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 desc

Utdata 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_files

Utgå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_files

Utgå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 desc

Utgången är som följer:

Sammanfattning

I den här artikeln förklarade jag:

  1. Hur man tar backup och återställer den FILESTREAM-aktiverade databasen och FILESTREAM-filgruppen.
  2. Hur man återställer FILESTREAM-filgruppen online och offline.

  1. Inga resultat returnerade av frågefelet i PostgreSQL

  2. Uppdatera värden för flera tabellkolumner med en enda fråga

  3. ASCIISTR() Funktion i Oracle

  4. Tio sätt att ditt dataprojekt kommer att misslyckas på