Dalam artikel saya sebelumnya, saya menjelaskan cara membuat dan mengkonfigurasi fitur FILESTREAM dalam contoh SQL server. Selain itu, saya mendemonstrasikan cara membuat tabel yang memiliki kolom FILESTREAM dan hot untuk menyisipkan dan menghapus data darinya.
Pada artikel ini, saya akan menjelaskan cara mencadangkan dan memulihkan basis data yang mendukung FILESTREAM. Selain itu, saya akan mendemonstrasikan cara mengembalikan filegroup FILESTREAM tanpa membuat database offline.
Seperti yang saya jelaskan di artikel saya sebelumnya, ketika kita mengaktifkan FILESTREAM pada contoh SQL Server, kita perlu membuat wadah FILESTREAM yang memiliki filegroup FILESTREAM. Saat kami membuat cadangan basis data yang mendukung FILESTREAM, cadangan grup file FILESTREAM akan dimasukkan ke dalam set cadangan. Saat kami memulihkan database, SQL Server akan memulihkan database dan wadah FILESTREAM serta file di dalamnya.
Saat kami mencadangkan database yang mendukung FILESTREAM, ini akan:
- Cadangkan semua file data yang tersedia dari database.
- Cadangkan filegroup FILESTREAM dan file di dalamnya.
- T-Log Cadangan.
SQL Server memberikan fleksibilitas untuk mengambil cadangan wadah FILESTREAM saja. Jika file dalam wadah FILESTREAM rusak, kami tidak perlu memulihkan seluruh basis data. Kami hanya dapat memulihkan grup file FILESTREAM.
Dalam demo ini, saya akan:
- Jelaskan cara mengambil cadangan penuh dari database FS dan hanya mencadangkan wadah FILESTREAM.
- Jelaskan cara memulihkan database yang mendukung FILESTREAM.
- Cara memulihkan wadah FILESTREAM online dan offline. Catatan:Edisi SQL Server Enterprise dan edisi pengembang mendukung pemulihan ONLINE.
Penyiapan Demo:
Dalam demo ini, saya akan menggunakan:
- Basis Data :SQL Server 2017
- Perangkat Lunak :studio manajemen SQL Server.
Mencadangkan Basis Data Berkemampuan FILESTREAM
Untuk mendemonstrasikan proses pencadangan, saya telah membuat database yang mendukung FILESTREAM bernama FileStream_Demo . Ini memiliki tabel FILESTREAM bernama Document_Content .
Pencadangan basis data lengkap
Mencadangkan database yang mendukung FILESTREAM adalah proses yang mudah. Untuk membuat cadangan lengkapnya, jalankan skrip T-SQL berikut.
BACKUP DATABASE [FileStream_Demo] TO DISK = N'E:\Backups\FileStream_Demo.bak' WITH NOFORMAT, NOINIT, NAME = N'FileStream_Demo-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
Berikut ini adalah log cadangan yang dihasilkan oleh eksekusi perintah pencadangan di atas:
/*Begin Backup DataFile*/ Processed 568 pages for database 'FileStream_Demo', file 'FileStream_Demo' on file 1. /*Begin backup of FILESTREAM container*/ 10 percent processed. 20 percent processed. 30 percent processed. 40 percent processed. 50 percent processed. 60 percent processed. 70 percent processed. 80 percent processed. 90 percent processed. Processed 111106 pages for database 'FileStream_Demo', file 'Dummy-Documents' on file 1. /*Begin backup of FILESTREAM container*/ Processed 4 pages for database 'FileStream_Demo', file 'FileStream_Demo_log' on file 1. 100 percent processed. BACKUP DATABASE successfully processed 111677 pages in 18.410 seconds (47.391 MB/sec).
Seperti yang saya sebutkan di awal artikel, pertama, server SQL mengambil cadangan dari file data Primer kemudian file data sekunder dan terakhir, log Transaksi. Seperti yang Anda lihat di log pencadangan, Pertama, server SQL mencadangkan file data Primer kemudian FILESTREAM filegroup dan data yang terkait dengannya dan terakhir log transaksi.
Cadangan wadah FILESTREAM
Seperti yang saya sebutkan di awal artikel, kami juga dapat membuat cadangan wadah FILESTREAM. Untuk membuat cadangan wadah FILESTREAM, jalankan skrip T-SQL berikut.
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, STATS = 10 GO
Pulihkan Basis Data yang Diaktifkan FILESTREAM
Saat kami memulihkan database FILESTREAM, SQL memulihkan wadah FileStream bersama dengan semua file dalam wadah FILESTREAM.
Untuk memulihkan database, lakukan tugas berikut:
- Di SSMS, klik kanan database dan pilih Pulihkan Database .
- Di kotak dialog Pulihkan, pilih Perangkat dan klik Jelajahi . Kotak dialog lain akan terbuka, Di kotak dialog, klik Tambah .
- Di Temukan File Cadangan kotak dialog, navigasikan melalui struktur direktori, klik cadangan yang tepat dan klik OK .
- Setelah informasi cadangan dimuat di Pencadangan diatur untuk dipulihkan tampilan kisi, klik OK untuk mulai memulihkan proses.
Atau, Anda dapat memulihkan database dengan menjalankan perintah berikut:
USE [master] RESTORE DATABASE [FileStream_Demo] FROM DISK = N'E:\Backups\FileStream_Demo.bak' WITH FILE = 1, NOUNLOAD, STATS = 5 GO
FILESTREAM-Skenario pemulihan database yang diaktifkan
Filegroup FILESTREAM mengembalikan proses seperti proses restore filegroups.
Untuk membuat skenario pemulihan, buat database yang mendukung FILESTREAM bernama FileStream-Demo . Basis data memiliki tabel FILESTREAM bernama Document_Content . Masukkan beberapa data dan file acak di Document_Content tabel.
Jalankan kueri berikut untuk mengisi detail file yang dimasukkan ke dalam tabel.
SELECT RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content order by filesize desc
Outputnya adalah sebagai berikut:
Berikut ini adalah tangkapan layar dari wadah FILESTREAM:
Pertama, buat cadangan lengkap dari database. Untuk ini, jalankan perintah berikut.
BACKUP DATABASE [FileStream_Demo] TO DISK = N'E:\Backups\Full_FileStream_Demo_20180810.bak' WITH NOFORMAT, NOINIT,NAME = N'FileStream_Demo-Full Database Backup'
Kedua, buat cadangan FILEGROUP dari filegroup FILESTREAM bernama Dummy-Document dengan menjalankan perintah berikut:
BACKUP DATABASE [FileStream_Demo] FILEGROUP = N'Dummy-Documents' TO DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NOFORMAT, NOINIT, NAME = N'FileStream_Demo-Full FILEGROUP Backup'
Untuk menghasilkan korupsi FILESTREAM, hapus beberapa file dari wadah FILESTREAM. Setelah file tersebut dihapus, coba ambil data dari “Document_Content” dengan menjalankan perintah berikut:
Use FileStream_Demo Go select * from Document_Content
Anda akan mendapatkan kesalahan berikut:
Msg 233, Level 20, State 0, Line 122 A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)
Lihat tangkapan layar berikut:
Sekarang, kita perlu memulihkan wadah FILESTREAM untuk memperbaiki kesalahan ini. Kami membuat cadangan lengkap dan cadangan Dokumen-Dummy grup file.
Kami dapat memulihkan seluruh wadah FILESTREAM dengan memulihkan grup file FILESTREAM. Saya akan menunjukkan:
- Pemulihan offline filegroup FILESTREAM.
- Pemulihan online filegroup FILESTREAM.
Pemulihan offline FILESTREAM container Filegroup
Karena saya telah menghapus file dari wadah FILESTREAM, kami tidak perlu memulihkan seluruh basis data. Oleh karena itu, alih-alih memulihkan seluruh basis data, kami akan memulihkan satu-satunya grup file. Untuk melakukannya, pertama, buat cadangan Tail-Log untuk menangkap perubahan data yang tidak dicadangkan. Pencadangan Tail-log harus dilakukan menggunakan opsi NORECOVERY untuk membawa database dalam keadaan pemulihan, dan itu memberikan kemampuan untuk menerapkan cadangan pada database. Untuk melakukannya, jalankan kueri berikut:
backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log_1.trn' With NORECOVERY
Setelah cadangan Tail-log dibuat, database akan berada dalam mode pemulihan. Sekarang, kita dapat menerapkan cadangan FILEGROUP pada database dengan opsi NORECOVERY. Untuk ini, jalankan perintah berikut:
use master go RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY,REPLACE;
Sekarang terapkan cadangan Tail-log dengan opsi PEMULIHAN. Untuk ini, jalankan perintah berikut:
RESTORE LOG [FileStream_Demo] FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log_1.trn'
Setelah cadangan dipulihkan, basis data akan online, dan semua file akan dipulihkan dalam wadah FILESTREAM. Untuk memverifikasinya, jalankan perintah berikut:
SELECT RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content order by filesize desc
Output dari query di atas adalah sebagai berikut:
Pemulihan online FILESTREAM filegroup
Menggunakan SQL server enterprise edition, kami dapat memulihkan cadangan saat database online. Misalnya, jika file F1 dari filegroup sekunder FG-1 rusak, maka kita dapat memulihkan file F1 saat database tetap online. Urutan pemulihan pemulihan offline, dan pemulihan online sama.
Seperti disebutkan di atas, untuk melakukan pemulihan online filegroup FILESTREAM, buat Dokumen-Dummy file data offline. Untuk ini, jalankan perintah berikut.
use master go Alter database [FileStream_Demo] MODIFY FILE (NAME='Dummy-Documents',OFFLINE)
Untuk memverifikasi status file, jalankan kueri berikut:
Use [FileStream_Demo] Go select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files
Outputnya adalah sebagai berikut:
Kami telah mencadangkan Dummy-document grup file. Oleh karena itu, setelah file data offline, pulihkan cadangan FILEGROUP pada database dengan opsi NORECOVERY. Untuk ini, jalankan perintah berikut:
use master go RESTORE DATABASE [FileStream_Demo] FILE='Dummy-Documents' FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo.bak' WITH NORECOVERY, REPLACE;
Sekarang, ambil cadangan Log database untuk memastikan titik di mana file data offline ditangkap. Untuk ini, jalankan perintah berikut:
backup log [FileStream_Demo] to disk ='E:\Backups\FileStream_Filegroup_Demo_Log1.trn'
Jalankan perintah berikut untuk memulihkan cadangan T-Log terakhir.
use master go RESTORE LOG [FileStream_Demo] FROM DISK = N'E:\Backups\FileStream_Filegroup_Demo_Log1.trn'
Setelah cadangan Log pulih, semua file dalam wadah FILESTREAM akan dipulihkan, dan filegroup akan online. Untuk memverifikasi itu, jalankan kueri berikut:
Use [FileStream_Demo] Go select File_id, type_desc,name, physical_name,state_desc,size from FileStream_Demo.sys.database_files
Outputnya adalah sebagai berikut:
Setelah cadangan dipulihkan, database akan online dan semua file akan dipulihkan dalam wadah FILESTREAM. Untuk memverifikasinya, jalankan perintah berikut:
SELECT RootDirectory, FileName, FileAttribute, FileCreateDate, FileSize, FileStreamCol.PathName() AS FilePath FROM Document_Content order by filesize desc
Outputnya adalah sebagai berikut:
Ringkasan
Dalam artikel ini, saya menjelaskan:
- Cara mengambil cadangan dan memulihkan database yang mendukung FILESTREAM dan grup file FILESTREAM.
- Cara memulihkan filegroup FILESTREAM online dan offline.