Index reorganize işlemi sırasında Page Level Locking is disabled hatasının çözümü

Bugün Sql Server’da Index Maintenance joblarında karşılaştığım  bir hatanın çözümünü paylaşacağım sizinle.

Alınan Hata Mesajı:

“The index “INDEX_NAME” (partition 1) on table “TABLE_NAME” cannot be reorganized because page level locking is disabled”

Açıklama:
Bu hatayla, periyodik olarak yaptığımız Index Reorganize işlemi sırasında söz konusu Index’in defragmantasyonu sırasında karşılaştım.
Bu hataya sebep olan 2 durum vardır;

  1. Index’in Page Level Locking(ALLOW_PAGE_LOCKS) seçeneği “OFF” durumda ise,
  2. Eğer Index “disabled” durumda ise    

1. durumda belirtilen seçenek “ON” edilmediği  ve Index “Disabled” durumda olduğu sürece yaptığımız her Index bakım çalışmasında aynı hatayı alacağız.

Indexlerin Default ayarlarında, Page Level Locking (ALLOW_PAGE_LOCKS) değeri “ON” olarak gelmektedir. Fakat bazı durumlarda, third-party araçlar kullanılarak oluşturulan veya arayüz kullanılarak oluşturulan Indexlerde bu ayar “OFF” olarak gelebilir. (Indexler’de locking için buraya bakabilirsiniz.)

Aşağıdaki sorgu kullanılarak ALLOW_PAGE_LOCKS değeri OFF olan Indexleri edebiliriz.

SELECT OBJECT_NAME(i.object_id) as TableName,
       name as IndexName,
       allow_page_locks
  FROM sys.indexes as i
 WHERE ALLOW_PAGE_LOCKS = 0

Çözüm:

Eğer hata mesajında karşılaştığımız index disabled durumdaysa aşağıdaki query ile index’i tekrar enabled duruma getirebiliriz.

ALTER INDEX INDEX_NAME ON TABLE_NAME REBUILD

Eğer index enabled durumda fakat ALLOW_PAGE_LOCKS değeri 0 ise aşağıdaki query ile sonuca ulaşabiliriz.

ALTER INDEX INDEX_NAME ON TABLE_NAME SET (ALLOW_PAGE_LOCKS = ON)

Ayrıca bu işlemi arayüz kullanarak ta yapabilirsiniz.
Hata aldığımız Index üzerine sağ tıklayıp Index>Properties ekranından kırmızı ile belirtilen kısmı “TRUE” olarak seçtiğinizde Page Level Locking(ALLOW_PAGE_LOCKS) değeri “ON” olarak set edilecektir. (Index Properties ile ilgili şuraya bakabilirsiniz.)

IndexProperties

Umarım faydalı olur.

Leave a Reply