DETACH – ATTACH ile DB File ‘larını Taşıma !!!

Merhaba Arkadaşlar ,

Bu gün sizlere Detach ve Attach işlemlerini kullanarak DB File ‘larımızı farklı lokasyonlara nasıl transfer ( taşırız) ederiz onu anlatacağım.

-SSMS Kullanarak DETACH – ATTACH İşlemleri

Detach, SQL Server üzerinde kullanmadığımız veritabanlarını kaynak tüketimini azaltmak adına
silmeden, mdf ve ldf dosyalarını korumak kaydıyla Sql Server üzerinden kopartmak için
kullandığımız yöntemdir. Bunun gibi bir çok amaç için bu yöntemi kullanabiliriz. Peki bu yöntemi
nasıl ve ne şekilde kullanabiliriz ?

Detach işlemine başlamadan önce Database ‘imizin File ‘ları hangi diskte ve folder da
tutulduğuna bakalım ilk önce;
Database ‘imizin üzerine gelip sağ tıklayıp Proparties sekmesine tıklıyoruz.

 

www.sqlturkiye.com
www.sqlturkiye.com

 

Daha sonra karşımıza gelen  ekranda Files sekmesinden Path kısmında Database File
‘larımzın lokasyonlarını görebiliriz.

www.sqlturkiye.com
www.sqlturkiye.com

 

Bu işlemlerden sonra ;
ilk önce Detach edeceğimiz Database ‘in üzerine gelip sağ tıklayıp çıkan pencerede Task
sekmesine gelip oradan Detach sekmesine  tıklıyoruz.

www.sqlturkiye.com
www.sqlturkiye.com

Detach sekmesine tıkladıktan sonra karşımıza aşağıda ki gibi ekran gelmektedir.

www.sqlturkiye.com
www.sqlturkiye.com

Bu ekranda DB üzerinde yer alan Connection ları kopartıp işlemlerimizi gerçekleştirebiliyoruz. O
yüzden ben Detach yapmadan önce Drop Connection kutucuğunu işaretleyip OK butonuna
basıyorum.

Gördüğünüz üzere bu işlem sonucunda Database ‘imiz Databases sekmesinin altında yer almıyor. Yani Detach
işlemimizi sağlıklı bir şekilde gerçekleştirmiş olduk.
Şimdi ise Data File ‘larımızı bulunduğu noktadan başka bir noktaya taşıyabiliriz.

www.sqlturkiye.com
www.sqlturkiye.com

Taşıma işlemimi ben C:\MSSQLTransfer adlı folder ‘ın içerisine  gerçekleştirdim. Bu adımdan sonra File ‘larını taşıdığım DB ‘mi
sisteme Attach etmem gerekmektedir.

Attach işlemi için SSMS üzerinde Databases sekmesi üzerine gelip sağ tıklayarak açılan pencerede
Attach… sekmesine tıklıyoruz.

 

www.sqlturkiye.com
www.sqlturkiye.com

Bu işlemden sonra karşımıza aşağıda ki ekran gelmektedir. Bu ekranda Add butonuna tıklıyoruz.

7

 

 

Add butonuna tıkladıktan sonra aşağıda ki ekran karşımıza çıkmaktadır.Locate Database Files olarak adlandırılan bu ekranda Database ‘imizi taşıdığımız yeni lokasyondan File ‘ını seçip OK  butonuna basıyoruz.

www.sqlturkiye.com
www.sqlturkiye.com

Bu işlemlerden sonra karşımıza gelen ekran ile karşılaşmaktayız….

www.sqlturkiye.com
www.sqlturkiye.com

Bu ekranda dikkat edecek olursak Current File Path olarak artık yeni lokasyonumuz olarak gözükmektedir. Daha sonra OK butonuna basıyoruz ve Attach işlemimizi sonlandırıyoruz.
Aşağıda ki ekranda  gördüğünüz üzere Database ‘imiz sağlıklı bir şekilde Attach edilmiştir.

www.sqlturkiye.com
www.sqlturkiye.com

 

Şimdi SSMS konsolunu kullanarak gerçekleştirdiğimiz tüm bu işlemleri T-SQL Scriptleri ile nasıl yapıyoruz onu görelim.

T-SQL ile DETACH – ATTACH OPERASYONU

Detach işlemi çin :

USE [master]; 
GO 
ALTER DATABASE [DetachAttachSQLTURKIYE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
GO 
USE [master]; 
GO 
EXEC master.dbo.sp_detach_db @dbname = N'DetachAttachSQLTURKIYE'; 
GO

Yukarıda ki script ile sağlıklı bir şekilde Detach işlemini gerçekleştirebiliyoruz. Scriptimizi
inceleyecek olursak .

ALTER DATABASE [DetachAttachSQLTURKIYE] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

İlk önce Database ‘imiz SINGLE USER Moda çekilmiş.

SINGLE USER MOD : Aynı anda tek bir kullanıcının erişebileceği anlamına gelir. Bu herhangi bir
kullanıcı olabilir. İlk önce kim giriş yaparsa oturumu o almış olur. Bu kullanıcı bağlantısı bitmeden
başka kullanıcı o veritabanına erişemez. Bu seçeneği genellikle sistem yöneticisi kendi oturumunda
kritik bir işlem yapacağında tercih eder.
Biz bu şekilde veritabanının erişim modunu değiştirmeye çalışırken o veritabanında çalışan
kullanıcılar olabilir. Komutumuzun kullanıcıların bekleyip beklemeyeceklerini belirtmek için
yukarıdaki ifadelerin arkasına WITH ROLLBACK IMMEDIATE veya WITH NO_WAIT deyimleri
kullanılır.

WITH NO_WAIT seçeneğinde eğer komutumuz bloke edilirse yani veritabanı üzerinde açık
transaction veya aktif kullanıcı varsa işlem başarısız olup aşağıdaki hatayı verecektir.
Msg 5070, Level 16, State 2, Line 1
Database state cannot be changed while other users are using the database
‘DetachAttachSQLTURKIYE’
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.

WITH ROLLBACK IMMEDIATE seçeneğinde kullanıcıların işlerini bitirmeleri beklenmez. Sorguları
rollback edilip oturumları sonlandırılır.

Biz scriptimiz de WITH ROLLBACK IMMEDIATE seçeneğini kullanarak Database ‘imizi Single User
Mod ‘a çekip tüm transactionları rollback yaptık. Daha sonra ise sp_detach_db adlı sistem detach
prosedürünü kullanarak database ‘imizi detach yaptık.

Detach ettiğimiz Database ‘imizi bulunduğu diskten başka bir diske kopyalayıp Database ‘imizi Attach
etmemiz gerekmektedir. Taşıma işlemini .mdf File ‘ını ‘K:\MSSQL2012\DATA’, .ldf File ‘ını
‘K:\MSSQL2012\LOG’ belirttiğim Diskteki Folder ‘ın içerisine gerçekleştirdikten sonra Attach
işlemimiz için aşağıda ki scriptleri kullanıyorum.

Script I :

USE [master]; 
GO 
CREATE DATABASE [DetachAttachSQLTURKIYE] ON 
( FILENAME = N'K:\MSSQL2012\DATA\DetachAttachSQLTURKIYE.mdf' ), 
( FILENAME = N'K:\MSSQL2012\LOG\DetachAttachSQLTURKIYE_log.ldf' ) FOR ATTACH; 
GO

 

Script II :

EXEC sp_attach_db @dbname = N'DetachAttachSQLTURKIYE',
    @filename1 = N'K:\MSSQL2012\DATA\DetachAttachSQLTURKIYE.mdf',
    @filename2 = N'K:\MSSQL2012\LOG\DetachAttachSQLTURKIYE_log.ldf';

 

Yukarıda verdiğim Script-I ve Script-II ‘yi inceleyecek olursak I.Script imizde Database oluşturma
komutu ile başlayıp CREATE DATABASE File ‘larımızı göstererek FOR ATTACH diyerek Database ‘imizi
ATTACH edebiliyoruz.

II.Scriptte ise sp_attach_db Attach sistem prosedürünü kullanarak Attach işlemimizi
gerçekleştirebiliyoruz.

Konuyu özetleyecek olursak Detach ve Attach yöntemini kullanarak Database ‘lerimizin
lokasyonlarını değiştirebiliriz.

 

Bu makalemizin daha geniş kapsamlısını ve normal DB file ‘larını taşıma operasyonlarını hazırladığımız E-Book ‘umuzda bulabilirsiniz .

E-Book ‘a erişmek için : http://167.99.216.77/wp-content/uploads/2013/11/SQL-SERVER-DATABASE-FILE-TRANSFER.pdf

Yukarıda ki linke tıklayınız …

İyi Çalışmalar.

Leave a Reply

Your email address will not be published. Required fields are marked *