SQL Server Sistem Veri Tabanları
Master
Master veri tabanı sistem düzeyinde bilgileri tutar. Bu bilgilerden bazıları: kullanıcı hesapları, bağlı sunucular, konfigürasyon ayarları, sistemde oluşturulmuş veri tabanları…
Master veri tabanının dosya özellikleri aşağıdaki gibidir;
Dosya | Mantıksal Adı | Fiziksel Adı | Otomatik Genişleme Özelliği |
Primary Data | master | master.mdf | %10 genişleme ile disk boyutuna kadar |
Log | Masterlog | Masterlog.ldf | %10 genişleme ile 2TB’a kadar |
Master veri tabanı kısıtları
Aşağıdaki işlemlerin master veri tabanı üzerinde yapılması sistem tarafından engellenmiştir.
- Dosya veya dosya grubu ekleme,
- Collection ayarı değiştirme,
- Veri tabanı sahibi (Db Owner) değiştirme. (Master veri tabanı üzerinde veri tabanı sahibi sa kullanıcısıdır.)
- Full-text katalog veya full-text index oluşturma,
- Sistem tabloları üzerinde trigger oluşturma
- Veri tabanını silme (drop database),
- Guest kullanıcısını veri tabanından silme,
- Veri değişikliği izlemeyi etkinleştirme (change data capture),
- Primary file, filegroup veya log dosyasını silme,
- Veri tabanını veya primary filegroup’u yeniden adlandırma,
- Veri tabanını OFFLINE duruma getirme,
- Veri tabanını veya primary filegroup’u READ_ONLY moda alma
master veri tabanı özelliği gereği sadece full yedek alınabilir.
Öneriler
- master veri tabanının sürekli bir yedeği bulundurulmalıdır.
- Aşağıdaki işlemlerden herhangi biri yapıldığında master veri tabanı yedeklenmelidir.
- Herhangi bir veri tabanı oluşturulduğunda, silindiğinde veya değiştirildiğinde
- Veri tabanı veya sunucu ayarları değiştirildiğinde
- Kullanıcı hesabı oluşturulduğunda, silindiğinde veya güncellendiğinde
- Kullanıcı tanımlı nesneler master içerisinde tanımlanmamalı
- TRUSTWORTHY özelliği açık konuma getirilmemeli
Master Veri Tabanı Kullanılamadığında Yapılacaklar
- SQL Server servisi çalışır durumda ise tam yedekten geri dönülür
- SQL Server servisi çalışmıyor ise diğer sistem veri tabanları ile beraber yeniden oluşturulmalıdır.
Model
Model veri tabanı diğer veri tabalarının oluşturulmasında şablon olarak kullanılmaktadır. Kullanıcı yeni bir veri tabanı oluşturduğunda sistemin yaptığı işlem aslında model veri tabanının kopyasını çıkarmaktır. Bir diğer sistem veri tabanı olan tempdb SQL Server her başlatıldığından sıfırdan oluşturulduğundan model veri tabanının sistemde olması zorunludur.
model veri tabanının dosya özellikleri aşağıdaki gibidir;
Dosya | Mantıksal Adı | Fiziksel Adı | Otomatik Genişleme Özelliği |
Primary Data | model | model.mdf | 64MB genişleme ile disk boyutuna kadar |
Log | modellog | modellog.ldf | 64MB genişleme ile 2TB’a kadar |
Model Veri Tabanı Kısıtları
Aşağıdaki işlemlerin model veri tabanı üzerinde yapılması sistem tarafından engellenmiştir,
- Dosya veya dosya grubu ekleme,
- Collation ayarı değiştirme,
- Veri tabanı sahibini (db owner) değiştirme. (Model veri tabanı db owner, sa kullanıcısıdır.)
- Veri tabanını silme,
- Guest hesabını silme,
- Veri değişikliği izlemeyi etkinleştirme,
- Primary file, filegroup veya log dosyasını silme,
- Veri tabanını veya primary filegroup’u yeniden adlandırma,
- Veri tabanını OFFLINE duruma getirme,
- Veri tabanını veya primary filegroup’u READ_ONLY moda alma
Msdb
Msdb veri tabanı SQL Server Agent servisi tarafından yönetilen otomatik alarmlar, işlemler, mail gönderme talepleri gibi sistem bilgilerini tutan veri tabanıdır.
Örneğin otomatik alınan bir yedekleme işlemi üzerinden msdb veri tabanının işlevini inceleyelim. Bu işlem sonucunda elde edilen bilgiler yedeğin ne zaman alındığı, nereye alındığı, yedeği alan uygulama gibi bilgilerdir ve bu bilgiler msdb veri tabanı içerisinde tutulur. SQL Server Management Studio üzerinde her hangi bir yedekten dönme işlemi yapılmak istendiğinde SSMS, msdb üzerinden aldığı bilgiler ile dönülebilecek yedekleri tespit eder.
Dosya | Mantıksal Adı | Fiziksel Adı | Otomatik Genişleme Özelliği |
Primary Data | Msdb | msdb.mdf | %10 genişleme ile disk boyutuna kadar |
Log | msdblog | msdblog.ldf | %10 genişleme ile 2TB’a kadar |
Msdb Veri Tabanı Kısıtları
Aşağıdaki işlemlerin msdb üzerinde yapılması sistem tarafından engellenmiştir.
- Collation ayarı değiştirme,
- Veri tabanını silme,
- Guest hesabını silme,
- Veri değişikliği izlemeyi etkinleştirme,
- Primary file, filegroup veya log dosyasını silme,
- Veri tabanını veya primary filegroup’u yeniden adlandırma,
- Veri tabanını OFFLINE duruma getirme,
- Veri tabanını veya primary filegroup’u READ_ONLY moda alma
Resource
Resource veri tabanı sistem nesnelerini içeren salt okunur bir veri tabanıdır. Sistem nesneleri fiziksel olarak resource veri tabanı altında bulunuyor olsa da mantıksal olarak bütün veri tabanlarının sys şeması altında kullanılabilirler. Resouce veri tabanının önemli özelliklerinden biri de kullanıcı bazlı herhangi bir veri barındırmıyor olmasıdır.
Resource veri tabanı 2016 sürümü ile kullanılmaya başlanmıştır. Sistem nesnelerinin bu veri tabanı üzerine alınmasından sonra özellikle upgrade işlemi daha hızlı ve kolay yapılabilmektedir. Bunun sebebi önceki versiyonlarda upgrade işlemi sırasında sistem nesneleri tamamen silinip baştan oluşturuluyor iken resource veri tabanı ile artık upgrade işleminde zaten hazır bulunan sistem nesneleri yeni versiyon veri tabanlarına kopyalanarak işlem kolaylaştırılmıştır.
Resource veri tabanı dosyaları <disk>:\Program Files\Microsoft SQL Server\<SQL Server instance> \MSSQL\Binn yolunda bulunmaktadır.
Bu fiziksel dosyaların konumunun değiştirilmemesi gerekmektedir.
Resource Veri Tabanının Yedeklenmesi
Resource veri tabanı SQL Server tarafından yedeklenememektedir. Resource veri tabanının yedeklenmesinin zorunlu olduğu durumlar da her hangi bir dosya gibi farklı bir konuma kopyalanarak yedeklenebilir ancak SQL Server bu yedeği de yükleyemeyecektir. Dolayısı ile yedekten dönme işlemi için de kopyalanan bu dosyanın tekrar orijinal konumuna kopyalanması ile yedekten dönülebilir. Ancak bu şekilde yedekten dönme işlemi sırasında hatalı bir dosyayı kullanmak sistemde sıkıntılara sebep olabilmektedir.
Resource Veri Tabanı Erişimi
Resource veri tabanı sistem nesnelerini barındırdığından uzman kullanıcılar dışında müdahale edilmemesi gereken bir veri tabanıdır. Müdahale edilmesi durumunda da aşağıdaki değerlerin göz önünde bulundurulması gerekmektedir.
Resource veri tabanının versiyon bilgisi için:
SELECT SERVERPROPERTY('ResourceVersion');
Resource veri tabanının son güncelleme zamanı:
SELECT SERVERPROPERTY('ResourceLastUpdateDateTime');
Sistem nesnelerini incelemek için:
SELECT OBJECT_DEFINITION(OBJECT_ID('sys.objects'));
Tempdb
Tempdb sistem genelinde bütün kullanıcılara açık bir veri tabanıdır. SQL Server her yeniden başlatıldığında yeniden oluşturulur.
- Geçici tablo, stored procedure, index gibi kullanıcı nesneleri tempdb üzerinde çalışır.
- Sorguların çalıştırılması sırasında oluşturulan aşağıdaki nesneler de tempdb üzerinde çalışır.
- Kursor, sıralama, büyük nesnelerin (LOB) işlenmesi için gereken geçici tablolar
- Hash fonksiyonlarının çalışması sırasında oluşan geçici tablolar
- Indeks oluşturma ve rebuild işlelerinde oluşan geçici tablolar
- GROUP BY, ORDER BY, UNION işlemleri için gereken geçici tablolar
Bağlantının sonlandırılmasından sonra oluşan otomatik tablolar ve diğer nesneler otomatik olarak silinir (DROP). Tempdb’nin bu özelliğinden dolayı yedekleme ve yedekten geri dönmeyi desteklemez.
Tempdb Kısıtları
Aşağıdaki işlemlerin tempdb üzerinde yapılması sistem tarafından engellenmiştir.
- Dosya grupları ekleme,
- Veri tabanı yedekleme ve yedekten dönme,
- Koleksiyon ayarını değiştirme,
- Veri tabanı sahibini (db owner) değiştirme,
- Veri tabanı snapshot alma,
- Veri tabanını silme,
- Guest kullanıcısını silme,
- Değişen verilerin izlenmesini aktifleştirme,
- Primary dosya, primary dosya grubu veya log dosyasını silme,
- Veri tabanı veya primary dosya grubunu yeniden adlandırma,
- Veri tabanını OFFLINE duruma alma,
- Veri tabanını READ_ONLY konumuna alma
Tempdb’nin Performansa Etkisi
Tempdb veri tabanının konumu ve boyutu sistem performansına etki eder. Örneğin boyutu sistem gereksinimden düşün tutulmuş bir tempdb sistemin çalışması sırasında sürekli otomatik büyüme ihtiyacı duyacağından performansa olumsuz şekilde etkisi görülecektir.
Özellikle sorgu içerisinde yapılan ara işlemlerin tempdb üzerinde yapılmasından dolayı tempdb’nin hızlı bir disk üzerinde çalıştırılması sorguları hızlandıracaktır.
Eline sağlık.
Teşekkür ederim hocam.