T-SQL Kodları ile SQL Server Şema Yapısını İnceleme
Proje geliştirme aşamalarında olmasa da SQL Server yönetim işlemlerinde gerek server gerek veri tabanı ve tablolar düzeyinde sistemde yer alan nesnelerin listesi ve özelliklerini sorgulama ihtiyacı doğabilmektedir.
SQL Server da çalışması sırasında üzerinde barındırdığı nesneleri ve bu nesnelere ait özellikle üzerinde ilgili tablolarda bulundurmaktadır. Bu tablolar üzerinde uygun T-SQL komutları çalıştırılarak bu bilgilere ulaşılabilir.
Veri Tabanı Listesini Alma
master veri tabanı üzerinde aşağıdaki kod çalıştırılarak sistemde yer alan veri tabanı bilgileri elde edilebilir. select * ile sorgu çalıştırılarak daha fazla bilgi elde edilebilir.
select name, database_id, create_date, compatibility_level, collation_name from sys.databases
Veri Tabanı İçerisinde Yer Alan Tablo Listesini Alma
Tablo listesi alınacak veri tabanı üzerinde aşağıdaki iki sorgudan biri çalıştırılarak tablo listesi alınabilir.
select * from sys.tables
select * from INFORMATION_SCHEMA.TABLES
Ekran görüntüsünde yer alan sonuç kümelerinde üstte sys.tables tablosudan, altta da INFRMATION_SCHEMA.TABLES görünümünden alınan sonuçlar görünmektedir.
Tablo İçerisinde Yer Alan Kolon Listesini Alma
Tablo içerisinde yer alan kolonlar aşağıdaki iki şekilde de alınabilir.
- sys.all_columns tablosu üzerinden almak için sys.tables sorgusunda bulunan ilgili tabloya ait object_id değerine göre filtreleme yapılması gerekmektedir. Filtreleme yapılmazsa bütün veri tabanını içerinde yer alan bütün kolonları döndürür.
- INFORMATION_SCHEMA.COLUMNS görüntüsü üzerinden alabilmek için TABLE_NAME ve TABLE_SCHEMA değerlerine göre sonucun filtrelenmesi gerekmektedir. Filtreleme yapılmazsa bütün veri tabanını içerinde yer alan bütün kolonları döndürür.
Aşağıdaki sorgularda tablo sonuç ekranında da görünen tblSiparisDetay tablosu için sorgulama yapılmaktadır.
select * from sys.all_columns where object_id = 133575514
select * from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tblSiparisDetay' AND TABLE_SCHEMA = 'DBO'
Tablo Üzerinde Yer Alan Anahtar Alan ve Yabancıl Anahtarları Listeleme
Anahtar alanları tablo üzerinde veri bütünlüğünü sağlamada en önemli unsurlar olarak karşımıza çıkmaktalar. Aşağıdaki sistem tabloları ve görüntülerinden anahtar alanlar elde edilebilir.
- sys.key_constraints : Tablo üzerinde yer alan anahtar alanları listeler. Filtreleme olarak ilgili tablonun object_id değerini bu tablonun parent_object_id alanına filtre şartı olarak verilir.
- sys.foreign_keys: Tablo üzerinde tanımlı yabancıl anahtarları listeler. Filtreleme olarak ilgili tablonun object_id değerini bu tablonun parent_object_id alanına filtre şartı olarak verilir.
- INFORMATION_SCHEMA.TABLE_CONSTRAINTS: Tablo üzerinde yer alan anahtar alanları ve yabancıl anahtarları beraber listeler. Filtreleme işlemi için ilgili tablo ve şema isimlerini TABLE_SCHEMA ve TABLE_NAME alanlarına filtre şartı olarak verilir.
select * from sys.key_constraints where parent_object_id = 133575514
select * from sys.foreign_keys where parent_object_id = 133575514
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where TABLE_SCHEMA = 'dbo' and TABLE_NAME = 'tblSiparisDetay'
Tablo İçerisinde Kolonlar Üzerinde Yer Alan Zorlayıcı Şartların Listelenmesi
Zorlayıcı şartlar kolon seviyesinde veri bütünlüğünü sağlayan yapılardır. Aşağıdaki kod yardımı ile tablo içerisinde yer alan zorlayıcı şartlar listelenebilir.
select t.name tablo, ac.name kolon, dc.*
from sys.all_columns ac
inner join
sys.tables t
on ac.object_id = t.object_id
inner join
sys.schemas s on t.schema_id = s.schema_id
inner join
sys.default_constraints dc on ac.default_object_id = dc.object_id
where t.object_id = 85575343
Tablo Üzerinde Yer Alan Triggerların Listelenmesi
Trigger yapıları tablo içerinde oluşan hareketlere bağlı olarak otomatik tetiklenen ve yapılan harekete bağlı olarak ilgili işlemleri otomatik yapan yapılardır. Aşağıdaki kod yardımı ile tablo üzerinde tanımlı triggerlar listelenebilir. sp_helptext stored procedürüne de ilgili trigegr adı verilerek kodları elde edilebilir.
select * from sys.triggers t
join sys.trigger_events te on t.object_id = te.object_id
where t.parent_id = 85575343
exec sp_helptext 'bakmadanSiparisSilinmez'
Tablo Üzerine Tanımı Indexlerin Listelenmesi
Indexler tablo üzerinde veri bütünlüğü ve performans sağlayan yapılardandır. Aşağıdaki kod yardımı ile tablo üzerinde tanımlanan indexler listelenebilir. Filtreleme şartı olarak ilgili tablonun object_id değeri verilir.
select * from sys.indexes i
join sys.index_columns ic on i.index_id = ic.index_id and i.object_id = ic.object_id
join sys.all_columns ac on ic.column_id = ac.column_id and ic.object_id = ac.object_id
where i.object_id = 85575343
Temel nesne sorgularını bu şekilde gözden geçirdikten sonra yapısı tablo ile aynı olan VIEW sorguları da tablo sorguları ile aynı şekilde yapılabilmektedir. Fark olarak view listesi almak için sys.views tablosunda sorgular çalıştırılır.
Veri tabanı yönetiminde her ne kadar küçük ayrıntı olarak görünse de yönetici ihtiyaç duyduğu bilgileri bu şekilde alabildiği sürece sistemine max düzeyde hâkim olabilmektedir.
Eline sağlık Sait.
Teşekkür ederim hocam,
Çok teşekkürler. Uğraştığımız bir konu vardı çok faydalı oldu.
Rica ederim. Faydasını görmüş olmanıza çok sevindim.