FileStream Veri İçeren Veritabanının Detach ve Attach Edilmesi
File Stream veri içeren bir veritabanını detach attach yöntemi ile başka bir diske taşımak isteyebilirsiniz. File Stream veri içeren veritabanını detach attach yöntemi ile taşımak normal detach attach yönteminden biraz farklıdır. “Veritabanı file(dosya)’larının disklerini değiştirmek” isimli makalemde detach attach yöntemi ile veritabanının disklerini değiştirme işlemini daha önce anlattım. Bu makalede de file stream veri içeren veritabanları için bu işlemi yapacağız.
Bu makaleyi okumadan önce “File Stream Nedir” isimli makalemi okumanızı tavsiye ederim.
Bazı durumlarda veritabanı dosyalarının olduğu disklerde yer kalmayabilir. Bu nedenle veritabanı dosyalarından bazılarını ya da hepsini başka disklere aktarmanız gerekebilir. Bu işlemin birkaç yolu vardır. Biz bu makalede en çok kullanılan 2 yolundan bahsedeceğiz.
Detach işlemini yapmadan önce veritabanı dosyalarının hangi path’lerde olduğunu kaydetmek için aşağıdaki script’in sonucunu bir yere kaydetmeniz gerekir.
use FileStreamDB GO select * from sys.database_files
Aşağıdaki resimde görüldüğü üzere veritabanı üzerinde sağ tıklayarak task sekmesinden detach’i seçerek öncelikle veritabanının sql server ile bağlantısını kesmemiz gerekir.
Detach sekmesine tıkladığımızda veritabanı üzerinde connection varsa bu connection’ların detach işlemi öncesinde sonlandırılması için aşağıdaki gibi Drop Connections’ı seçmemiz gerekir.
Detach işlemi yine gerçekleşmediyse yukarıdaki resimde Script yazan yeri tıklayarak SQL Server’ın oluşturduğu script’in üst kısmına aşağıdaki script’i ekleyerek çalıştırmalısınız.
ALTER DATABASE [AdventureWorks2012] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Detach işlemini yapmadan önce uygulamaya herhangi bir istek gelmediğinden emin olmanız gerekir.
Bundan emin olmanın en iyi yöntemi uygulamacı ile görüşüp uygulamayı durdurmasını istemek ve sonrasında
Login’i disable etmektir.
SQL Server Management Studio üzerinden Security->Logins tabından uygulamayı kullanan login üzerinde sağ tıklayarak properties diyoruz ve daha sonra açılan sekmeden aşağıda görüldüğü gibi Status sekmesinden Disabled’ı seçiyoruz ve ok’e basıyoruz.
Detach işlemi tamamlandıktan sonra veritabanı dosyalarından taşımak istediklerinizi istediğiniz diskte windows üzerinden taşıma işlemini copy paste yöntemiyle gerçekleştirmeniz gerekiyor.
Taşıma işlemi bittikten sonra normal yollarla attach etmek istersek aşağıdaki gibi bir hata alırız. Çünkü SSMS üzerinde Attach yapmak istediğimizde filestream veriyi getirmiyor.
Msg 5120, Level 16, State 105, Line 3
Unable to open the physical file “C:\MSSQL\FileStreamVeri”. Operating system error 2: “2(Sistem belirtilen dosyayı bulamıyor.)”.
Msg 5105, Level 16, State 14, Line 3
A file activation error occurred. The physical file name ‘C:\MSSQL\FileStreamVeri’ may be incorrect. Diagnose and correct additional errors, and retry the operation.
Msg 1813, Level 16, State 2, Line 3
Could not open new database ‘FileStreamDB’. CREATE DATABASE is aborted.
Bu yüzden aşağıdaki script yardımıyla bu işlemi gerçekleştirmemiz gerekir. Biz örneğimizde filestream verisini C:\MSSQL klasöründen C:\MSSQL\FileStreamYeni klasörüne taşıyıp yeni yerinde attach yapmış olduk.
USE [master] GO CREATE DATABASE [FileStreamDB] ON ( FILENAME = N'C:\MSSQL\FileStreamDB.mdf' ), ( FILENAME = N'C:\MSSQL\FileStreamDB_log.ldf' ), ( FILENAME = N'C:\MSSQL\FileStreamYeni\FileStreamVeri') FOR ATTACH GO