sql >> Database teknologi >  >> RDS >> Database

Sikkerhedskopier og gendan FILESTREAM-aktiveret database

I mine tidligere artikler forklarede jeg, hvordan man opretter og konfigurerer FILESTREAM-funktionen i SQL-serverforekomst. Desuden demonstrerede jeg, hvordan man opretter en tabel, der har en FILESTREAM-kolonne og hot til at indsætte og slette data fra den.

I denne artikel vil jeg forklare, hvordan du sikkerhedskopierer og gendanner den FILESTREAM-aktiverede database. Desuden vil jeg demonstrere, hvordan man gendanner FILESTREAM-filgruppen uden at gøre databasen offline.

Som jeg forklarede i mine tidligere artikler, når vi aktiverer FILESTREAM på SQL Server-instans, skal vi oprette en FILESTREAM-beholder, der har FILESTREAM-filgruppen. Når vi sikkerhedskopierer den FILESTREAM-aktiverede database, vil backup af FILESTREAM-filgruppen blive inkluderet i backupsættet. Når vi gendanner databasen, vil SQL Server gendanne databasen og FILESTREAM-beholderen og filerne i den.

Når vi sikkerhedskopierer en FILESTREAM-aktiveret database, vil den:

  • Sikkerhedskopier alle tilgængelige datafiler i databasen.
  • Sikkerhedskopier FILESTREAM-filgruppen og filer i den.
  • Backup T-log.

SQL Server giver fleksibiliteten til kun at tage backup af FILESTREAM-beholderen. Hvis filer i FILESTREAM-beholderen bliver korrupte, behøver vi ikke at gendanne hele databasen. Vi kan kun gendanne FILESTREAM-filgruppen.

I denne demo vil jeg:

  • Forklar, hvordan du tager en fuld sikkerhedskopi af FS-databasen og sikkerhedskopierer kun FILESTREAM-beholderen.
  • Forklar, hvordan du gendanner den FILESTREAM-aktiverede database.
  • Sådan gendanner du FILESTREAM-beholderen online og offline. Bemærk:SQL Server Enterprise-udgaven og udviklerudgaven understøtter ONLINE-gendannelse.

Demoopsætning:

I denne demo vil jeg bruge:

  1. Database :SQL Server 2017
  2. Software :SQL Server Management Studio.

Sikkerhedskopiering af FILESTREAM-aktiveret database

For at demonstrere sikkerhedskopieringsprocessen har jeg oprettet en FILESTREAM-aktiveret database ved navn FileStream_Demo . Den har en FILESTREAM-tabel med navnet Document_Content .

Fuld database backup

Sikkerhedskopiering af en FILESTREAM-aktiveret database er en ligetil proces. For at generere en fuld sikkerhedskopi af det, skal du udføre følgende T-SQL-script.

BACKUP DATABASE [FileStream_Demo] TIL DISK =N'E:\Backups\FileStream_Demo.bak' WITH NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS =10GO> 

Følgende er backup-loggen genereret ved udførelse af ovenstående backup-kommando:

/*Begynd Backup DataFile*/Behandlede 568 sider for databasen 'FileStream_Demo', filen 'FileStream_Demo' på fil 1./*Begynd backup af FILESTREAM container*/ 10 procent behandlet.20 procent behandlet.30 procent behandlet.40 procent behandlet.50 procent behandlet.60 procent behandlet.70 procent behandlet.80 procent behandlet.90 procent behandlet.Behandlet 111106 sider for databasen 'FileStream_Demo', filen 'Dummy-Documents' ' på fil 1./*Begynd sikkerhedskopiering af FILESTREAM-beholder*/ Behandlede 4 sider for databasen 'FileStream_Demo', filen 'FileStream_Demo_log' på filen 1,100 procent behandlet. BACKUP DATABASE behandlede 111677 sider med succes på 18,410 sekunder (47,391 MB/sek.).

Som jeg nævnte i begyndelsen af ​​artiklen, tager SQL-serveren først backup af den primære datafil, derefter sekundære datafiler og til sidst, transaktionslogfiler. Som du kan se i backuploggen, For det første SQL-server backup primær datafil, derefter FILESTREAM filgruppe og data tilknyttet den og til sidst transaktionslogfiler.

Sikkerhedskopiering af FILESTREAM-beholder

Som jeg nævnte i begyndelsen af ​​artiklen, kan vi også generere en sikkerhedskopi af FILESTREAM-beholderen. For at oprette en sikkerhedskopi af FILESTREAM-beholderen skal du udføre følgende T-SQL-script.

BACKUP DATABASE [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

Gendan FILESTREAM-aktiveret database

Når vi gendanner FILESTREAM-databasen, gendanner SQL FileStream-beholderen sammen med alle filer i FILESTREAM-beholderen.

For at gendanne databasen skal du udføre følgende opgaver:

  1. I SSMS skal du højreklikke på databasen og vælge Gendan database .
  2. Vælg Enhed i dialogboksen Gendan og klik på Gennemse . En anden dialogboks åbnes. Klik på  Tilføj i dialogboksen .
  3. I Find sikkerhedskopifil dialogboksen, naviger gennem mappestrukturen, klik på en korrekt sikkerhedskopi og klik på OK .
  4. Når sikkerhedskopieringsoplysningerne er indlæst i Sikkerhedskopieringssæt til gendannelse gittervisning skal du klikke på OK for at begynde at gendanne processen.

Alternativt kan du gendanne en database ved at udføre følgende kommando:

BRUG [master]GENDAN DATABASE [FileStream_Demo] FRA DISK =N'E:\Backups\FileStream_Demo.bak' MED FIL =1, NOUNLOAD, STATISTIK =5GO

FILESTREAM-aktiveret databasegendannelsesscenarie

FILESTREAM-filgruppen gendanner processen ligesom processen med gendannelse af filgrupper.

For at generere gendannelsesscenariet skal du oprette en FILESTREAM-aktiveret database ved navn FileStream-Demo . Databasen har en FILESTREAM-tabel med navnet Document_Content . Indsæt nogle tilfældige data og filer i Document_Content tabel.

Udfør følgende forespørgsel for at udfylde detaljer om filer, der er indsat i tabellen.

VÆLG RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content rækkefølge efter filstørrelse desc

Udgangen er som følger:

Det følgende er et skærmbillede af FILESTREAM-beholderen:

For det første, generer en fuld backup af databasen. Til dette skal du udføre følgende kommando.

BACKUP DATABASE [FileStream_Demo] TIL DISK =N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME =N'FileStream_Demo-Full Database Backup'

For det andet, generer en FILEGROUP-sikkerhedskopi af FILESTREAM-filgruppen ved navn Dummy-Document ved at udføre følgende kommando:

BACKUP DATABASE [FileStream_Demo] FILEGROUP =N'Dummy-Documents' TO DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NOFORMAT, NOINIT, NAME =N'FileStream_Demo-Full Backup'

For at generere FILESTREAM-korruptionen skal du slette nogle filer fra FILESTREAM-beholderen. Når disse filer er blevet slettet, kan du prøve at hente data fra "Document_Content" ved at udføre følgende kommando:

Brug FileStream_DemoGoselect * fra Document_Content

Du får følgende fejlmeddelelse:

Besked 233, niveau 20, tilstand 0, linje 122. Der er opstået en transportniveaufejl ved modtagelse af resultater fra serveren. (udbyder:Shared Memory Provider, fejl:0 - Ingen proces er i den anden ende af røret.)

Se følgende skærmbillede:

Nu skal vi gendanne FILESTREAM-beholderen for at rette denne fejl. Vi genererede en fuld backup og backup af Dummy-dokumentet filgruppe.

Vi kan gendanne hele FILESTREAM-beholderen ved at gendanne FILESTREAM-filgruppen. Jeg vil vise:

  1. Offlinegendannelse af FILESTREAM-filgruppe.
  2. Onlinegendannelse af FILESTREAM-filgruppen.

Offlinegendannelse af FILESTREAM containerfilgruppe

Da jeg havde slettet filer fra FILESTREAM container, behøver vi ikke at gendanne hele databasen. Derfor vil vi i stedet for at gendanne hele databasen gendanne den eneste filgruppe. For at gøre det skal du først generere en Tail-Log-sikkerhedskopi for at fange de dataændringer, der ikke blev sikkerhedskopieret. Tail-log backup skal tages ved at bruge NORECOVERY muligheden for at bringe databasen i gendannelsestilstand, og det giver mulighed for at anvende backups på databasen. For at gøre det skal du udføre følgende forespørgsel:

backup log [FileStream_Demo] til disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' Med NORECOVERY

Når først Tail-log backup er genereret, vil databasen være i gendannelsestilstand. Nu kan vi anvende FILEGROUP-sikkerhedskopien på en database med NORECOVERY-indstillingen. Til dette skal du udføre følgende kommando:

brug mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NORECOVERY,REPLACE;

Anvend nu Tail-log backup med muligheden RECOVERY. Til dette skal du udføre følgende kommando:

GENDAN LOG [FileStream_Demo] FRA DISK =N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'

Når sikkerhedskopien gendannes, vil databasen være online, og alle filer vil blive gendannet i FILESTREAM-beholderen. For at bekræfte det skal du udføre følgende kommando:

VÆLG RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content rækkefølge efter filstørrelse desc

Outputtet af ovenstående forespørgsel er som følger:

Onlinegendannelse af FILESTREAM-filgruppe

Ved hjælp af SQL server enterprise edition kan vi gendanne sikkerhedskopien, når databasen er online. For eksempel, hvis en fil F1 i den sekundære filgruppe FG-1 er beskadiget, kan vi gendanne fil F1, mens databasen forbliver online. Gendannelsessekvensen for offlinegendannelse og onlinegendannelse er den samme.

Som nævnt ovenfor skal du lave Dummy-Document for at udføre en onlinegendannelse af FILESTREAM-filgruppen datafil offline. Til dette skal du udføre følgende kommando.

brug mastergoAlter-databasen [FileStream_Demo] ÆNDRING AF FIL (NAME='Dummy-Documents',OFFLINE)

For at bekræfte filens status skal du udføre følgende forespørgsel:

Brug [FileStream_Demo]Goselect File_id, type_desc,name, physical_name,state_desc,size fra FileStream_Demo.sys.database_files

Udgangen er som følger:

Vi har allerede sikkerhedskopieret Dummy-dokumentet filgruppe. Når datafilen er offline, skal du derfor gendanne FILEGROUP-sikkerhedskopien på en database med NORECOVERY-indstillingen. Til dette skal du udføre følgende kommando:

brug mastergoRESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK =N'E:\Backups\FileStream_Filegroup_Demo.bak' MED NORRECOVERY, REPLACE;

Tag nu en log-backup af databasen for at sikre, at det punkt, hvor datafilen gik offline, er fanget. Til dette skal du udføre følgende kommando:

backup log [FileStream_Demo] til disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Udfør følgende kommando for at gendanne den sidste T-Log-sikkerhedskopi.

brug mastergoRESTORE LOG [FileStream_Demo] FRA DISK =N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'

Når log backup gendannes, vil alle filerne i FILESTREAM containeren blive gendannet, og filgruppen vil være online. For at bekræfte det skal du udføre følgende forespørgsel:

Brug [FileStream_Demo]Goselect File_id, type_desc,name, physical_name,state_desc,size fra FileStream_Demo.sys.database_files

Udgangen er som følger:

Når sikkerhedskopien er gendannet, vil databasen være online, og alle filer vil blive gendannet i FILESTREAM-beholderen. For at bekræfte det skal du udføre følgende kommando:

VÆLG RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content rækkefølge efter filstørrelse desc

Udgangen er som følger:

Oversigt

I denne artikel forklarede jeg:

  1. Sådan tager du backup og gendanner den FILESTREAM-aktiverede database og FILESTREAM-filgruppen.
  2. Sådan gendanner du FILESTREAM-filgruppen online og offline.

  1. SQLite Listview onclick filtrerer db for at åbne resulterer i ny aktivitet

  2. ExecuteNonQuery:Forbindelsesegenskaben er ikke blevet initialiseret.

  3. 2 måder at slette duplikerede rækker i Oracle

  4. Hvordan får man BLOB fra fil i PL/SQL?