MSSQL Serverda Tabloyu Farklı Bir Filegroup’a Taşıma

Bu makalede mevcutta bulunan bir tabloyu yeni bir filegroup’a geçirmek için aşağıdaki yöntemler izlenir. Tablomuz küçük ve lob data içermiyorsa ilgili tablo altındaki filegroup’u değiştirebiliriz. Aşağıdaki resimde bir tablonun filegroup’unu görmekteyiz.

İlgili tablomuzdaki indexsler silinip yeni filegroup altında tekrar oluşturulur. Bu yapıda cluster indexsimizi sadece ilgili filegroup altında alınca tablomuz ilgili filegroup altında büyümüş oluyor. Drop existing ifadesinin kullanılması aynı isimde index oluşturmamızı sağlayacaktır. Mevcut tablomuzun %20-30 kadar diskte boş yerin olması gerekmektedir.

USE [FILEGROUP] 
go 
CREATE CLUSTERED INDEX PK_TABLE  ON [dbo].[TABLEE] (id)   WITH (drop_existing = ON) on FG2024
Go

Çünkü Clustered index tablonun kendisidir.

Diğer indexs’leride ilgili filegroup altına almaya gerek yoktur.

Text/Image Filegroup kısmı PRIMARY olarak karşımıza çıkmaktadır. Buda transactionlar için büyük bir sıkıntıdır.

USE FILEGROUP
GO
SELECT o.[name] AS TableName, i.[name] AS IndexName, fg.[name] AS FileGroupName
FROM sys.indexes i
INNER JOIN sys.filegroups fg ON i.data_space_id = fg.data_space_id
INNER JOIN sys.all_objects o ON i.[object_id] = o.[object_id]
WHERE i.data_space_id = fg.data_space_id AND o.type = 'U'

İlgili tablomuzun içerisinde lob data veriler varsa boyutumuzda büyükse veya lob data olma ihtimali olan tablolarda da aşağıdaki yöntem uygulanır. Tablo normal bir şekilde ilgili filegroup’a atanırsa ve ilerleyen aşamalarda tablomuza lob data veriler gelirse gelen lob data veriler seçmiş olduğumuz filegroup’da değil primary filegroup’da kalacaktır. Bu yöntemin tüm tablolarda oluşturulması daha mantıklıdır. Çünkü sürekli lob data ihtimal dahilindedir.

Tablomuzun boyutu büyük ve lob data varsa aşağıdaki yöntem uygulanır. Dikkat edilmesi gereken geçici olarak oluşturulan tablo için log diskinde yeterli bir alan olması gerekmektedir.

İlgili tablo üzerine sağ tıklanıp Design kısmına tıklanır.

Gelen ekranda satır veya kolun üzerinde herhangi bir bölüme sağ tıklanıp properties ekranına gelinir.

Sağ tarafta açılan ekranda Regular Data Space Specification sekmesini açıyor ve Filegroup or Partition Scheme Name kısmından yeni file group’umuzu seçiyoruz. Daha sonra Text/Image Filegroup üzerinde de aynı işlemi yapıyoruz.

FG2024 olarak filegroup’umuzu değiştiriyoruz.

Bu işlemleri yaptıktan sonra Design ekranında boş bir yere sağ tıklayıp Generate Change Script’ini alıyoruz.

Gelen ekranda kodumuzu kopyalayıp yeni bir query’e yapıştırıyorum.

No deyip bu ekrandan çıkıyorum. Tablomuzda lob data veri veya olmaya ihtimali varsa bu yöntem yapılmaktadır.

Resimde görüldüğü gibi geçici bir tablo oluşturuyor. Oluşturmuş olduğu bu tabloya gerçek tablodaki verileri atıyor. Daha sonra oluşturmuş olduğu temp tablonun ismini değiştiriyor. Gerçek sistemde partition yapılarında sıfırdan partition işlemindede buna benzer bir yapı karşımıza çıkmaktadır.

Bir transaction içinde başka bir transaction açılmaması için ilgili transaction başlamadan önce önceki transaction Commit ediliyor.

Tablomuz büyük ve  tek insert işlemi olduğu için recovery model’i simple’a çeksek bile log büyümeye devam edecektir. Bunun için verileri insert edeceğimiz bölümün düzenlenip belli aralıklarla veri atan bir kod bloğu düzenlenebilir.. Eğer veritabanımız herhangi bir high availability yapısında ise recovery mode’u değiştirmemize izin vermez.

Başka bir makalede görüşmek dileğiyle..

Onlar, siz birbirinizi namaza çağırdığınızda onu alay ve oyun (konusu) edinirler. Bu, gerçekten onların akıl erdirmeyen bir topluluk olmalarındandır. Maide Suresi, 58. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

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