SQL Server üzerinde bir veritabanı oluşturduğumuzda veritabanının sahip olduğu data ve log dosyalarının başlangıç büyüklük değerlerini de belirleriz. Aynı zamanda veritabanının ileride büyüme ihtiyacı duyduğunda nasıl hangi oranda büyüyeceği de data ve log dosyası bazında belirtilir. Eğer veritabanı için maksimum bir büyüklük verilir ve bunu aşmaması işaretlenirse maksimum değerden daha fazla yere ihtiyaç duyması durumunda sistem hata verecektir. Bu yüzden veritabanlarının büyüklük ayarlarının sistemin amacına uygun düzenlenmesi gerekir. SQL Server özellikle büyük veritabanlarında index düzenlemeler, geniş çaplı güncellemeler, toplu kaydetme veya silme gibi yoğun disk işlemlerinde o veritabanını büyütme ihtiyacı duyar. Bu büyüme kalıcı veya geçici olabilir. Özellikle kalıcı durumlarda sistemin kullandığı geniş disk alanını serbest bırakmak veya veritabanı dosyalarında zamanla kullanılmayan data page’leri yok etmek için daraltma (shrinking) işlemi gerçekleştirilir. Bu işlem programcı tarafından yapıldığı gibi SQL Server’in kendisi tarafından da otomatik olarak yapılabilir. Fakat SQL Server’in (yarım saatte bir) bunu otomatik yapması çok kullanıcılı canlı sistemlerde sorun teşkil edebilmektedir. Çünkü bu prosesin devreye girmesi o anda aktif bazı kullanıcıları lock edebilmektedir. Bazen sistem üzerinde yoğun bir kilitlemenin yaşamasına neden olabilmektedir. Bu yüzden büyük veri tabanlarında “Auto Shrink” seçeneğinin kapalı olması tavsiye edilir. Bu özellik varsayılan olarak kapalı durumdadır. Aşağıdaki ifadeyle mevcut veritabanının bu özelliği sorgulanmıştır.
SELECT DATABASEPROPERTYEX(' Bu ifadenin 1 değerini döndürmesi "Auto Shrink" seçeneğinin aktif olduğu anlamına gelir. Bu bilgiye Enterprise Manager / Management Studio üzerinden veya <b>sp_dboption</b> yordamı aracılığıyla erişilebilir. "Auto Shrink" özelliği bu araçlar kullanılarak pasif yapılabildiği gibi aşağıdaki ifadeyle de kapatılabilir. [sql]ALTER DATABASE Bu durumda shrinking işlemini veritabanı yöneticisinin kendisinin yapması gerekir. Bunun için de aşağıdaki yöntemler kullanılabilir; <u><b>DBCC SHRINKDATABASE veya DBCC SHRINKFILE komutları</b></u><br /> <br /> Veritabanını tüm dosyalarıyla birlikte küçültmek için <b>DBCC SHRINKDATABASE</b> komutu, sadece bir dosyayı küçültmek için <b>DBCC SHRINKFILE</b> komutu kullanılabilir. Aşağıdaki satır ALISVERIS isimli veritabanındaki tüm data ve log dosyalarının boyutunu küçültülmüştür. [sql]DBCC SHRINKDATABASE (ALISVERIS)
Bu durumda bu dosyalarda kullanılmayan boş alanlar dosyalardan çıkarılır ve işletim sistemine teslim edilir. Ayrıca bu komuta küçültme oranı da parametre olarak girilebilir. Aşağıdaki satır ALISVERIS veritabanı için shrink sonrası boş alanın toplam alanının %10’u olacak kadar küçültür.
DBCC SHRINKDATABASE (ALISVERIS, 10)
Bu komut üçünce parametre olarak < ı>NOTRUNCATE veya < ı>TRUNCATEONLY seçeneklerini de alır.
Veritabanı düzeyinde değil de sadece bir dosya bazında küçültme yapılmak istenirse DBCC SHRINKFILE komut kullanılır. Mevcut veritabanının data ve log dosyaları hakkında bilgi almak için sp_helpfile yordamı kullanılır. Herhangi bir dosya hakkında bilgi almak için bu yordama o dosyanın mantıksal adı parametre olarak geçilir. Bu yöntem genellikle log dosyalarını küçültmek, başlangıç büyüklüklerine geri döndürmek için kullanılır. Sunucu üzerindeki log dosyalarının boyutlarını öğrenmek için DBCC SQLPERF ( LOGSPACE ) komutu da kullanılabilir. Aşağıdaki satır ALISVERIS veritabanına ait data dosyasını 20MB küçültür.
DBCC SHRINKFILE (ALISVERIS_DATA,20)
Bu komutlar programcı tarafından manual çalıştırıldığı gibi otomatik olarak belli bir scheduleye bağlanabilir. Bunu otomatik çalıştıracak job Enterprise Manager / Management Studio aracında database’i sağ tıklayarak “All Tasks » Shrink Database [SQL2000]” / “Tasks » Shrink[SQL2005]”menüsünden yaratılabilir veya programcı tarafından elle oluşturulabilir.
Maintenance Task/plan Hazırlamak
Enterprise Manager / Management Studio araçlarında Management bölümü altındaki “Database Maintenance Plans” bölümü kullanılarak bir veya daha fazla veritabanı için işlem emirleri oluşturulabilir. Bu penceredeki Optimizations sekmesinde ilgili küçültme ayarları düzenlenir.
Hocam yazı için teşekkürler shrink işleminin herhangi bir zararı olur mu veri tabanına