SQL Server Veritabanı Üzerindeki Dosyaları Farklı Bir Klasöre Taşıma
0

Bu makalemde sizlere veritabanımız üzerindeki dosyanın/dosyaların farklı bir klasöre taşınma işleminden bahsedeceğim. Bu işleme performans artışını sağlamak amacıyla dosyaları birkaç diske birden dağıtarak, log ve data dosyalarının yerini ayırmada, eski olan veritabanının dosyalarının taşınması ihtiyacında, depolama yetersizliği riski taşıyan disklerde, kapasite planlaması iyi yapılamadığı ya da diski tamamen boşaltmamız gerektiği durumlarda ihtiyaç duyarız.

Bu işlem kesinti durumunu ne yazık ki beraberinde getireceğinden Prod ortamlarda çok tercih edilen bir yöntem değildir. Ancak bazı durumlarda bu işleme ihtiyaç duyabiliriz. Bu işlemi de yoğunluğun daha az olduğu saat dilimlerinde yapılmasını öneririm.

Örneğin DEMO veritabanımız için FG_21_01 dosyasını farklı bir klasöre taşımamız gerekiyor. Aşağıdaki scriptle dosyalarımızın pathini görüntüleyebiliriz:

SELECT file_id ,type_desc ,name, physical_name

FROM sys.database_files

Resim-1

Bu dosyalarımızı klasörümüzde de görüntüleyebiliriz:

Resim-2

Bu taşımayı 2 yöntemle göstermek istiyorum:

1.DETACH- ATTACH

DEMO veritabanımızı ilk olarak Detach ediyoruz:


Resim-3

Açılan pencerede Drop Connections kutucuğunu işaretleyip OK diyerek veritabanımızı Detach etme işlemini tamamlıyoruz. Bu kutucuğu işaretleyerek veritabanı üzerinde bulunan tüm bağlantılara son vermiş bulunuyoruz.


Resim-4

Ya da bu işlemi SSMS üzerinden değil de script ile de yapabiliriz:

USE [master]

GO

ALTER DATABASE [DEMO] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

GO

USE [master]

GO

EXEC master.dbo.sp_detach_db @dbname = N’DEMO’

GO

Detach işlemi bu şekilde de gerçekleştirilebilir:


Resim-5

Sıra Resim-2’deki gibi klasörümüze gidip FG_21_01.ndf dosyamızı istediğimiz konumu kopyalayarak taşıyabiliriz.

FG_21_01.ndf dosyamızı F:\DEMO2 dizinine kopyaladık. Kopyalama sonrası bu dosyayı E:\DATA\DEMO dizininden silebiliriz. Küçük bir veritabanında denediğim için kopyalama çok kısa sürdü ancak büyük boyutlu dosyalarda bu süre uzayacaktır.

Resim-6

Dosyamız şu an istediğimiz klasörde. Şimdi Attach yapacağız:

USE [master]

GO

CREATE DATABASE DEMO ON

(FILENAME = N’E:\DATA\DEMO\DEMO.mdf’),

(FILENAME = N’E:\LOG\DEMO\DEMO_log.ldf’),

(FILENAME = N’F:\DEMO2\FG_21_01.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_02.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_03.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_04.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_05.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_06.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_07.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_08.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_09.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_10.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_11.ndf’),

(FILENAME = N’E:\DATA\DEMO\FG_21_12.ndf’)

FOR ATTACH

GO

Resim-7

Attach başarılı bir şekilde tamamlanmıştır. DEMO veritabanımız üzerinde sağ tıklayıp Properties kısmına tıkladıktan sonra Files pageinde, FG_21_01 fileının pathinin değiştirmeyi başardığımızı gözlemliyoruz.

Resim-8

Alttaki script ile de bu sonucu tekrar gözlemleyebiliriz:

Resim-9

2.OFFLINE-ONLINE

Bir diğer yöntemimize gelecek olursak,

  • İlk olarak farklı klasöre taşımak istediğimiz dosyamızın Pathini Modify ediyoruz:

USE master;

ALTER DATABASE [DatabaseName]

MODIFY FILE (name=’LogicalName’,filename=’NewLocationPath\FileName);

Yukarıdaki scripti DEMO veritabanımıza uyarlayacak olursak:

USE master;

ALTER DATABASE [DEMO]

MODIFY FILE (name=’FG_21_01′,filename=’F:\DEMO2\FG_21_01.ndf’);

Bu Pathin aktif olarak etkili olması için veritabanının tekrar başlatılışında güncel lokasyon aktif olur.

  • Bir sonraki işlemimizde veritabanımızı Offline moda çekebiliriz.

ALTER DATABASE [DatabaseName] SET OFFLINE
WITH ROLLBACK IMMEDIATE;

DEMO veritabanımız için:

ALTER DATABASE [DEMO] SET OFFLINE
WITH ROLLBACK IMMEDIATE;

WITH ROLLBACK IMMEDIATE ile aktif olan sorguların sonlandırılmasını sağlar. Çalışan sorgular rollback olarak sonlanır.

  • Bu aşama sonrası tıpkı Resim-6’daki gibi FG_21_01 dosyamızı yeni konumuna kopyalamamız gerekir.
  • Kopyalama sonrası veritabanımızı çevrimiçi duruma getirmek için de,

ALTER DATABASE [DatabaseName] SET ONLINE;

DEMO veritabanımız için:

ALTER DATABASE [DEMO] SET ONLINE;

Böylece ikinci yöntemimizle de işlemi tamamlayabiliriz.

Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

https://www.mshowto.org

TAGs:SQL Server , SQL Server Online Mode, SQL Server Offline Mode, SQL Server File Move, File Move, With Rollback İmmediate, Modify File, SQL Server New Location File, New Location File, Database Files Script, Database Files, Physical Name, Logical Name, File Name, Detach, Attach, SQL Server Detach, SQL Server Attach

 

Bu İçeriğe Tepkin Ne Oldu?
  • 33
    harika_
    Harika!!
  • 1
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 1
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 1
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Trakya Üniversitesi - Bilgisayar Mühendisliği mezunuyum. Öğrenim hayatım boyunca C, C++, C#, VB.NET ve ASP.NET MVC dilleri ile SQL Server veri tabanı altyapılı çeşitli otomasyon projelerinde yer aldım. İş hayatıma ERP Software Support Specialist pozisyonuyla başlayıp kısa bir süre sonra kariyerime BELBİM Elektronik Para ve Ödeme Hizmetleri A.Ş.'de Ms SQL Database Administrator pozisyonu ile yön vermiş bulunmaktayım. SQL Server ile birlikte Data Warehouse, Oracle ve PostgreSQL alanlarına ilgiliyim ve kendimi bu alanlarda geliştirmeye devam ediyorum.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir