MSSQL Server Kolun Tipini Değiştirmek

MSSQL Server

Bu makalede Sql Server ortamlarında oluşturulan veritabanlarının kolun türünün değiştirilmesi ile ilgili bir talep geldiğinde ne gibi senaryolar oluşturacağız. Gerçek sistemde bu işlemden önce backup alınması gerekmektedir.

Kullanıcılardan  gelen herhangi bir  kolunda bulunan tür değerinin artırılması. Örneğin varchar(1000) olan kolun türünün varchar(100) olarak değiştirilmesi veya Varchar(200) olan kolun türünün varchar(50) olarak değiştirilmesinde herhangi bir sakınca gibi görünmese de tabloya arka tarafta lock oluşturmaktadır. 

60 olan kolun uzunluğunun 100 olarak değiştiriyorum.  Bu değişikliği yaptıktan sonra tasarım ekranından çıkıyorum.  Bu yapımızda herhangi bir bozulmaya sebebiyet vermeyecektir. Ama lock oluşturmaktadır.

Not: Kolun tür değişiminde değişim yapılacak koluna bağlı bir index varsa değişime izin vermez. Öncelikle index yapısına bağlı kolonun çıkarılması veya index yapısının silinmesi gerekmektedir. Ekstradan bir not olarak index içerisinde olan bir kolon silinirse hata mesajı alınmaktadır. Hata aynıdır.

Eğer değişim sırasında aşağıdaki ekran görüntüsündeki hata ile karşılaşırsak ilgili makaleyi okuyabilirsiniz.

Veritabanı altında bulunan tablomuzda  herhangi bir kolun tipi değişimi istendiğinde aşağıdaki yollar izlenmektedir. Tür değişim işlemlerinde verinizin bozulma riskiyle karşı karşıya gelebilirsiniz. Güvenilir ve tavsiye edilen yöntemi yapalım.

SSMS arayüzünde veritabanı altında tip değişimi yapacağımız tablomuza gelinir sağ tıklanıp Design denilir.

Gelen ekranda nvarchar olan kolun tipimizi varchar(max) yapıyoruz.

Kolun tipimizi değiştirdik. Yeni belirlemiş olduğumuz kolun tipinde sıkıntı yaşamamak için Sql Server veri tiplerini iyi bilmemiz gerekiyor. İlgili bu işlem tablonun tamamına lock koyulmasına sebep vermektedir.

Arka tarafta sql server bir temp tablo oluşturup verileri içerisine atmaktadır. Aktarım işlemlerinde tablo with tablock hintleri koyulduğunu scriptlerde görebiliriz. INT dan BIGINT kolon tipine bir tablonun ilgili kolunu çevrilmesi tabloya erişimi bırakın veritabanına erişim kesilmektedir.

Tip değişikliği yaptıktan sonra Design ekranında herhangi bir alana sağ tıklayıp Generate Change Script… bölümüne tıklanır. Bu bölümden sonra karşımıza  Saving changes is not permitted hatası çıkarsa ilgili makaleyi okuyabilirsiniz.

Gelen ekranda arka planda çalışacak script’i kopyalayıp No deyip işlemleri sonlandırıyorum.

Yukarıdaki script’i kopyaladıktan sonra  yeni bir query açıp script’i çalıştırıyoruz. İlgili kod bloğumuzda ilk başta gerçek tablomuzla aynı yapıda bir tablo oluşturuyor. Daha sonra gerçek tabloyu silmeden önce gerçek tablonun içindeki verileri yeni oluşturduğu tabloya aktarıyor. Son adımda ise yeni tablo ismini gerçek tablo ismiyle gerçekleştiriyor.

Dikkat edersek sadece bir kolun tipini değiştirdik sql server arka plan yeni bir tablo oluşturarak verilerimizi atmamızı sağladı.

Not: Tek sefer de tablomuzun boyutu kadar veri çekip tekrar yazdığı için ilgili veritabanının log dosyasında bu tablonun 2 katı kadar yer olması gerekmektedir.

Aşağıdaki komut yardımıyla da ilgili kolunda değişiklik yapabiliriz. Bu yapı veri kaybetmemize sebebiyet vereceği için tercih edilmez.

USE [AdventureWorks2012]
ALTER TABLE [Person].[Address]
ALTER COLUMN [AddressLine1] [nvarchar](max) NULL

Not: İlgili kolun değişikliğinde kolun üzerinde herhangi bir indexs yapısı varsa çalışmayacaktır.

Not: Büyük tablolarda büyük tabloların kolonlarında tür değişimi yapılacaksa mevcutta bulunan tabloya veya veritabanına gelen kullanıcı bağlantıları kesilir. aynı create script ile bir tablo oluşturulur. Tablo isimleri rename yapılmaktadır. Set identitiy insert komutu ile son değerinin atılıp diğer tablodaki değerlerin yeni değere insert edilmesi gerekmektedir.

Not: Eğer non clustered index olan bir kolonda değişiklik yapmak istersek sql server ilgili index’i silir.

Not: Primary key olan kolonda değişikliğe izin vermez. İlgili index’in başlangıçta silinmesi gerekmektedir.

Bu makalede Sql Server veritabanında bir tablo üzerinde herhangi bir kolun türü değişimini ele almış olduk.

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

Onlar – ” Söz Verdiklerinde Sözünde Dururlar.” Bakara / 177

Author: Yunus YÜCEL

Bir yanıt yazın

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