2010-01-07

Clustered Primary Key'i Nonclusted Yapma

Merhaba değerli okuyucu,

Geçenlerde clustered primary key contraint'ini nonclustured yapıya dönüştürme ihtiyacım oldu. İhtiyacımın temel sebebi de yanlış oluşturulan clustred bir primary key index'ini nonclustered yapıp farklı bir indexi clustered index'e çevirmek istememdi.

Bu işlemleri online bir sistemde gerçekleştirdiğimden daha titiz olmam gerekiyordu. Bu yüzden aşağıdaki adımları izledim:
  1. Primary key'ler unique olduğundan key yapısını bozmamak için temporary unique bir index oluşturdum,
  2. Tablo üstündeki Primary Key'i drop ettim
  3. Tabloya Primary Key constraint'ini ekledim
  4. İlk oluşturduğum temporary unique index e artık ihtiyacım kalmadığı için drop ettim.
Yukardaki ifadeler için gerekli olan sql kodları aşağıdaki gibidir:

--temp unique indexi online oluşturma
create unique nonclustered index tmpindex on tablo
(id) with (online=on) on primary
go

--online olarak primary key i drop etme
alter table tablo drop constraint pk_tablo with (online=on)
go

--nonclustered primary key i online olarak oluşturma
alter table tablo add constraint pk_tablo
primary key nonclustered (id) with (online=on) on primary
go

--temp index i drop etme
drop index tablo.tmpindex
go

2 yorum:

Musa Çiçek dedi ki...

Merhaba Mehmet Bey,

Güzel bir konuya değindiğiniz için öncelikle teşekkür etmek istiyorum

Fakat tablo üzerindeki İndexes/Keys penceresinde Primary Key indeximizi "Set As Clustered" özelliğini No yaparak da bu işlemi gerçekleştirebiliyoruz.Tabi buna engel bir durum yoksa.Primary Key'i drop etmek sonradan tekrar oluşturmak biraz riskli olur diye düşünüyorum.

Mehmet GÜZEL dedi ki...

Primary key olan bir clustered index i design modunda bahsettiğiniz şekilde yapamazsınız. Bahsettiğiniz ayarlar disable modda gelir; değişiklik yapmanıza izin verilmez.

.::YASAL UYARI::.

©2004-2016 Mehmet GÜZEL, http://www.mehmetguzel.net/ & http://www.mehmetguzel.com/

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.