FILESTREAM özelliği etkin olan bir SQL Server veritabanını backup ve restore işlemi, standart SQL Server veritabanlarına benzer şekilde yapılır. Ancak FILESTREAM içeriği, ayrı bir fiziksel dosya sistemiyle bağlantılı olduğundan bazı ek adımlar gerektirebilir.
FILESTREAM içeriği normal bir veritabanı yedeğiyle birlikte alınır, yani ekstra bir işlem gerektirmez. Ancak yedeğin eksiksiz olması için FULL BACKUP almanız gerekir. Backup almadan önce file stream tablomuza bakalım.

Aşağıdaki komut, hem veritabanı hem de FILESTREAM verilerini içeren tam bir yedek oluşturur:
BACKUP DATABASE [FileStreamDB] TO DISK = N'C:\BACKUP\FileStreamBackup.bak' WITH NOFORMAT, NOINIT,
NAME = N'FileStreamDB-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,STATS = 10
GO
FileStreamDB: Yedek almak istediğiniz veritabanının adı.
C:\Backup\FileStreamDB.bak: Yedeğin kaydedileceği yol.
WITH FORMAT, INIT: Yeni bir yedekleme dosyası oluşturur ve eskisini siler.
2. FILESTREAM Veritabanının Geri Yüklenmesi (Restore)
Yedeği geri yüklerken, FILESTREAM verilerinin doğru dosya dizinine yüklenmesi gerekir. Backup almadan önce filestream disk yolu farklı bir disk altındayken restore edeceğimiz sunucu üzerinde önceki filestream disk yolu üzerinde oluşur. Eğer restore sırasında backup alınırken filestream uzantısı yoksa FileStream dosya uzantısı default disk yolunda oluşur. Aşağıdaki resim Restore sonrasındaki görüntüsüdür.

Yukarıdaki işlemi sadece bilgi olması açısından söyledim. Eğer backup almadan önceki disk yollarımız duruyorsa restore işlemi başarılı bir şekilde gerçekleştirilir.
USE [master]
RESTORE DATABASE [FileStreamDB] FROM DISK = N'C:\BACKUP\FileStreamBackup.bak' WITH FILE = 1, NOUNLOAD, STATS = 5
GO
Backup öncekisi disk yollarını bulursa gerçek uzantılarında oluşmaktadır.

Restore işlemi yaparken filestream disk yolu farklı bir yol seçilebilir.

Diğer ayrıntı With Replace ifade mevcut olan backup dosyasının üzerinde değiştirmiş olacağız.

USE [master]
RESTORE DATABASE [FileStreamDB] FROM DISK = N'C:\aa\fileStreamDB.bak' WITH FILE = 1,
MOVE N'FileStreamDB_FS' TO N'C:\FileStreamFS\fileStreamDB', NOUNLOAD, REPLACE, STATS = 5
GO
Yukarıda bulunan önceki örnekte filestream E diski altındaydı.
3. FILESTREAM Özelliğinin Aktif Olduğunu Kontrol Etme
Restore işleminden önce, hedef sunucuda FILESTREAM özelliğinin açık olduğundan emin olun. Aksi halde geri yükleme sırasında hata alabilirsiniz.
EXEC sp_configure 'filestream access level', 2;
RECONFIGURE;
0: FILESTREAM devre dışı.
1: TSQL üzerinden erişim var.
2: TSQL ve Windows API üzerinden erişim var.
Bu ayarı değiştirdikten sonra SQL Server hizmetini yeniden başlatmanız gerekebilir.
Verilerin başarılı bir şekilde yedeklenip geri yüklendiğini doğrulamak için aşağıdaki sorguları kullanabilirsiniz:
SELECT * FROM [FileStreamDB].[dbo].[FileTable]

FILESTREAM verileri fiziksel olarak SQL Server tarafından yönetildiği için dosya sisteminde bir dizin içinde saklanır. Geri yükleme sonrası dosyaların doğru dizinde olduğundan emin olun.
EXEC sp_configure 'filestream access level';
Bunu kontrol ettikten sonra, geri yükleme işlemi tamamlanmış olacaktır. Son olarak restore edilen veritabanındaki verileri dışarıya aktardığımızda herhangi bir sorun oluşmadığını görmüş oluyoruz. Bir önceki file stream makalesinde detaylı bir şekilde verilerin nasıl dışa aktarıldığını görebilirsiniz.

Eğer detach attach yöntemi ile veritabanı farklı klasör altına taşınmak isteniyorsa Attach yapmak istediğimizde sadece mdf ve ldf dosyalarımız gelir. Filestream dosya yapısı desteklenmez bunun manuel olarak eklenmesi gerekmektedir. Aşağıdaki resimde dikkate edersek filestream veri dosyası yok aşağıdaki script çalıştırıldığındada hata mesajı vermektedir.
USE [master]
GO
CREATE DATABASE [FileStreamDB] ON
( FILENAME = N'C:\FileStreamData2\FileStreamDB.mdf' ),
( FILENAME = N'C:\FileStreamData2\FileStreamDB.ldf' )
FOR ATTACH
GO
Not: Aşağıdaki hata mesajıyla karşılaşırsak restore yapılacak klasörün security bölümünden sql server servisinin yetkilendirilmesi gerekmektedir.
Unable to open the physical file “C:\FileStreamData2\FileStreamDB.mdf”. Operating system error 2: “2(The system cannot find the file specified.)”.
Msg 1802, Level 16, State 7, Line 3
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Filestream dosyamızı taşıdığımız yeni disk ve klasör altında Attach işlemine dahil ediyoruz. Başarılı bir şekilde attach işlemi gerçekleşir. FileStreamFS Filestream verilerimizin olduğu klasör ismi
USE [master]
GO
CREATE DATABASE [FileStreamDB] ON
( FILENAME = N'C:\FileStreamData2\FileStreamDB.mdf' ),
( FILENAME = N'C:\FileStreamData2\FileStreamDB.ldf' ),
( FILENAME = N'C:\FileStreamData\FileStreamFS')
FOR ATTACH
GO
Bu makalede file stream veritabanının backup klasörünü alıp başka bir ortama restore etmiş olduk.
Başka bir makalede görüşmek dileğiyle.
“Sen Kadir gecesinin ne olduğunu bilir misin? Kadir gecesi, bin aydan daha hayırlıdır.”
Kadir-2-3