Partition Switch Yapılamıyor
Eğer partition yapılmış tablonuzdaki tüm index’ler parittion’a göre align edilmemişse aşağıdaki gibi hata alırsınız.
Msg 7733, Level 16, State 4, Line 44
‘ALTER TABLE SWITCH’ statement failed. The table ‘AdventureWorks2014_new.Sales.SalesOrderDetail’ is partitioned while index ‘AK_SalesOrderDetail_rowguid’ is not partitioned.
Partition Switch ile ilgli detayları “Sliding Window-Switch Partition-Split Range-Merge Range” isimli makalede bulabilirsiniz.
Partition’a dahil edilmemiş index’leri partition’a dahil etmek için(align işlemi) aşağıdaki gibi partition yapılmış tabloda hatada belirtilen index’e sağ tıklayarak properties diyoruz.
Storage kısmından Partition scheme’yı tıklıyoruz ve alt satırda aşağıdaki gibi karşımıza çıkan seçenekleri seçerek Script’e tıklayarak yaptığımız değişikliklerin script’ini alıp cancel diyoruz.
Karşımıza aşağıdaki gibi bir script çıkarıyor.
USE [AdventureWorks2014_new] GO CREATE UNIQUE NONCLUSTERED INDEX [AK_SalesOrderDetail_rowguid] ON [Sales].[SalesOrderDetail] ( [rowguid] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = ON, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartFunc]([CarrierTrackingNumber]) GO
Script’te gördüğünüz gibi index’i yeniden ilgili partition şema üzerinde oluşturuyor. Sadece ONLINE=OFF kısmında ON yaparak script’in sisteminizde kesinti olmadan çalışmasını sağlayabilirsiniz. Script’in index’i yeniden oluşturma işlemi bittiğinde script’i tekrar çalıştırdığınız Switch işlemi başarılı bir şekilde tamamlanacaktır. Tabi tablodaki diğer index’lerin de aynı şekilde partition şema’ya göre align edilmiş olması gerekiyor.
Primary Key’i aynı şekilde yapamazsınız. Bunun için Primary Key’in DROP CREATE Script’ini alıp aşağıdaki gibi create ederken key’lerin sonuna partition yapılmış kolon’u ekleyip daha sonra da script’in en sonuna ON partition schema ismi parantez içinde partition kolonu şeklinde eklemeniz gerekiyor.
ALTER TABLE [Sales].[SalesOrderDetail] ADD CONSTRAINT [PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID] PRIMARY KEY NONCLUSTERED ( [SalesOrderID] ASC, [SalesOrderDetailID] ASC, CarrierTrackingNumber )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartSchema]([CarrierTrackingNumber])
Partition oluşturmak ile ilgili detayları “Partition Oluşturmak” isimli makalede bulabilirsiniz.
Partition yapılmış tabloları ve detaylarını görmek için aşağıdaki makalelerden de faydalanabilirsiniz.
“Veritabanında Partition Yapılmış Tabloları Bulmak“,
“Partition Yapılmış Tablodaki Partition Detaylarını Görmek“