Root > Documents > Programlama > Sistem Tabloları ile Çalışmak
Cyber-Warrior.Org \ Doküman \ Programlama > Sistem Tabloları ile Çalışmak
Madde
  Yazar : S!LV3R
  Date : 20.07.2011 15:47:40
 
# Sistem Tabloları ile Çalışmak
 

Sistem tablolari, sistem ve nesneler hakkindaki veritabanina ait bilgileri içeren metadata bilgisini tutarlar. Metadata bilgilerini depolayan sistem tablolarina ait yiginlari ise veritabani katalogu saklar. Sistem katalogu ise yalnizca Master DB’de bulunur ve görevi tüm sistem ve diger veritabanlarina ait tüm metadata bilgilerini depolayan sistem tablolarini tutmaktir. Sistem tablolarinda degisiklik yapmak için stored procedure, function ve information schema views’lerden yararlanilir.

Öncelikle hangi sistem tablosu nerede yer aliyor, görevleri nelerdir kisaca deginip ardindan en çok kullanilan birkaç sistem tablosuna ait sorgulari inceleyecegiz.


sysdatabases: Master veritabininda yer alir ve SQL Server üzerindeki her bir veritabani için bir satir içerir.

syslogins: Master veritabininda yer alir ve SQL Server’a baglanmak için gereken login hesablarini içerir.

sysmessages: Master veritabininda yer alir ve SQL Server’in verebilecegi hata mesajlarini içerir.

sysalerts: MSDB veritabininda yer alir ve satir satir uyari mesajlarini içerir.

syscategories: MSDB veritabininda yer alir ve SQL Server Management Studio tarafindan isleri, uyarilari ve operatörleri kaydetmek amaciyla kullanilan kategorileri içerir.

sysdownloadlist: MSDB veritabininda yer alir ve tüm hedef sunucular için download talimatlarinin sirasini içerir.

sysjobactivity: MSDB veritabininda yer alir ve anlik SQL Server Agent’a ait isleyisi kontrol eder ve durumu hakkindaki bilgileri içerir.

sysjobhistory: MSDB veritabininda yer alir ve SQL Server Agent tarafindan planlanmis islerin uygulamasi hakkindaki bilgileri içerir.

sysjobs: MSDB veritabininda yer alir ve SQL Server Agent tarafindan planlanmis islerle ilgili bilgileri depolar.

sysjobschedules: MSDB veritabininda yer alir ve SQL Server Agent tarafindan gerçeklestirilecek islerin plan bilgilerini içerir.

sysjobservers: MSDB veritabininda yer alir ve belirli bir is için bir ya da daha fazla hedef sunucu arasindaki tüm baglarin bilgilerini içerir.

sysjobsteps: MSDB veritabininda yer alir ve SQL Server Agent tarafindan tamamlanmak üzere olan bir isin her asamasiyla ilgili bilgileri içerir.

sysjobstepslogs: MSDB veritabininda yer alir ve günlük is bilgilerini içerir.

sysmail_allitems: MSDB veritabininda yer alir ve database mail tarafindan islenmis mesajlari içerir.

sysmailevent_log: MSDB veritabininda yer alir ve database mail sistemi tarafindan geri çevrilen her Windows ya da SQL Sunucusu mesajlarini içerir.

sysmail_faileditems: MSDB veritabininda yer alir ve basarisiz durumdaki her data mail mesajini içerir.

sysmail_mailattachments: MSDB veritabininda yer alir ve data mail’a ilistirilen ekleri içerir.

sysmail_sentitems: MSDB veritabininda yer alir ve database mail tarafindan gönderilen her bir mesaji içerir.

sysmail_unsentitems: MSDB veritabininda yer alir ve "Gönderilemedi" veya "tekrar deneniyor" durumundaki data mail mesajlarini içerir.

sysnotifications: MSDB veritabininda yer alir ve bildirimleri içerir.

sysoperators: MSDB veritabininda yer alir ve her bir SQL Server Agent operatörünü saklar.

sysproxies: MSDB veritabininda yer alir ve SQL Server Agent yetkili hesaplariyla ilgili bilgileri içerir.

sysproxylogin: MSDB veritabininda yer alir ve her SQL Server Agent yetkili hesabiyla iliskilendirilmis SQL Server oturumunu kaydeder.

sysproxysubsystem: MSDB veritabininda yer alir ve her yetkili hesabiyla kullanilan SQL Server alt sistemini kaydeder.

sysschedules: MSDB veritabininda yer alir ve SQL Server Agent zamanlanmis görevlerle ilgili bilgileri içerir.

syssessions: MSDB veritabininda yer alir ve her SQL Server Agent oturumu için SQL Server Agent’in baslagiç tarihini içerir.

syssubsystems: MSDB veritabininda yer alir ve mevcut SQL Server Agent üzerindeki alt sistemlerle ilgili bilgileri içerir.

systargetservergroupmembers: MSDB veritabininda yer alir ve anlik çok sunuculu grupta listelenmis grup üyelerini kaydeder.

systargetservergroups: MSDB veritabininda yer alir ve anlik çok sunuculu ortamda listelenmis hedef sunucu gruplarini kaydeder.

systargetservers: MSDB veritabininda yer alir ve anlik çok sunuculu domain de listelenmis hedef sunuculari kaydeder.

systaskids: MSDB veritabininda yer alir ve SQL Server’in önceki sürümlerinde olusturulmus görevlerle, güncel
Microsoft SQL Server Management Studio’daki isler arasindaki eslestirmeleri içerir.

sysaltfiles: Tüm veritabanlarinda yer alir ve özel durumlarda, veritabanindaki dosyalara karsilik gelen satirlar içerir.

syscacheobjects: Tüm veritabanlarinda yer alir ve ön bellekle ilgili bilgiler içerir.

syscharsets: Tüm veritabanlarinda yer alir ve SQL Server 2005’den itibaren veritabani motoru tarafindan kullanilmak üzere karakter katarlarini tutar.

syscolumns: Tüm veritabanlarinda yer alir ve veritabani tablolarindaki her sütunu satira çevirir.

syscomments: Tüm veritabanlarinda yer alir ve veritabaninda tutulan her tablo, varsayilan deger, kural, varsayilan kisitlama, kontrol kisitlamasi için girdi içerir.

sysconfigures: Tüm veritabanlarinda yer alir ve kullanici tarafindan yapilmis konfigurasyon bilgilerini içerir.

sysconstraints: Tüm veritabanlarinda yer alir ve veritabanindaki objeler ve bu objelerle ilgili kisitlari içerir.

syscurconfigs: Tüm veritabanlarinda yer alir ve geçerli kurulumun her seçenegi için bir girdi içerir.

sysdepends: Tüm veritabanlarinda yer alir ve veritabanindaki objelerle (tablo, islem ve deklansörler) tanimlarinin içerdigi objeler arasindaki bagla ilgili bilgiler içerir.

sysdevices: Tüm veritabanlarinda yer alir ve ilgili veritabanina ait diskteki ve de banttaki yedek dosya ile veritabanindaki dosyalara ait bilgileri içerir.

sysfilegroups: Tüm veritabanlarinda yer alir ve veritabanindaki her dosya grubuna ait bilgi içerir. Bu tabloda ana dosya grubu için en az bir girdi mevcuttur.

sysfiles: Tüm veritabanlarinda yer alir ve veritabanindaki her dosyaya ait bilgi içerir.

sysforeignkeys: Tüm veritabanlarinda yer alir ve veritabanindaki tanim tablosunda bulunan foreign key kisitlamalariyla ilgili bilgileri içerir.

sysfulltextcatalogs: Tüm veritabanlarinda yer alir ve tüm metin kataloglari hakkinda bilgiler içerir.

sysindexes: Tüm veritabanlarinda yer alir ve aktif veritabanindaki her tablo ve dizin için bilgi içerir.

sysindexkeys: Tüm veritabanlarinda yer alir ve veritabani dizinindeki anahtarlar veya kolonlar ile ilgili bilgileri içerir.

syslanguages: Tüm veritabanlarinda yer alir ve SQL Server 2005’ten itaberen server da mevcut olan tüm diller için bilgi içerir.

syslockinfo: Tüm veritabanlarinda yer alir. Beklemedeki, degisim halindeki ve kabul edilmis tüm kilit degisiklikleriyle ilgili bilgileri içerir.

sysmembers: Tüm veritabanlarinda yer alir ve veritabani görevindeki her üyeye ait bilgiyi içerir.

sysobjects: Tüm veritabanlarinda yer alir ve ilgili veritabanindaki her bir objeye ait bilgiyi içerir.

sysoledbusers: Tüm veritabanlarinda yer alir ve özel bagli sunucuda her kullanici ve sifre eslestirmesi için bilgileri içerir.

sysperfinfo: Tüm veritabanlarinda yer alir ve Windows Sistem Monitörü tarafindan görüntülenebilen, SQL Server 2005’den itibaren performans ölçücü veritabani motor bilgilerini içerir.

syspermissions: Tüm veritabanlarinda yer alir. Veritabanindaki kabul ve reddedilmis tüm kullanici, grup ve görev izinleri ile ilgili bilgileri içerir.

sysprocesses: Tüm veritabanlarinda yer alir. Microsoft SQL Server örneginde geçerli tüm islemlerle ilgili bilgileri içerir.

sysprotects: Tüm veritabanlarinda yer alir. GRANT ve DENY komutlari yardimiyla veritabanindaki güvenlik hesaplarina verilen izinlerle ilgili bilgileri içerir.

sysreferences: Tüm veritabanlarinda yer alir. Veritabanindaki iliskili kolonlarla forgein key kisitlama tanimlarinin eslestirmesini içerir.

sysremotelogins: Tüm veritabanlarinda yer alir. Microsoft SQL Server örneginde stoklanmis islemleri çagirmaya izinli tüm uzak kullanicilara ait bilgi içerir.

sysservers: Tüm veritabanlarinda yer alir. Microsoft SQL Server örneginin OLE DB veri kaynagi olarak erisebildigi tüm sunuculara ait bilgi içerir.

systranschemas: Tüm veritabanlarinda yer alir. Karsilikli yayimlanan makale ve reklamlardaki semalarda yapilan degisiklikleri takip etmek için kullanilir.

systypes: Tüm veritabanlarinda yer alir. Veritabaninda, kullanici tarafindan tanimlanmis ve sistemde bulunan her türlü veri için bilgi tutar.

sysusers: Tüm veritabanlarinda yer alir. Her satirda bir NT kullanicisi, NT grup, SQL Server kullanicisi ya da SQL rolü içerir.

Simdi ise bazi islemlerde kolaylik saglayan sorgulari bu tablolari kullanarak yazalim.


# SQL Server’daki kayitli tüm veritabani listesini almak için;

SELECT name FROM SYS.DATABASES

# Veritabanina ait tablolarin listesini almak için;

SELECT name FROM SYS.TABLES

Yukaridaki sonucu almak için farkli sistem tablolarindan yararlanarak asagida oldugu gibi farkli alternatif sorgular yazarakta elde edebiliriz.


SELECT name FROM SYS.OBJECTS WHERE type=’U’

SELECT NAME FROM SYSOBJECTS WHERE xtype=’U’

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’U’

SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=’BASE TABLE’

# Veritabaninda kayitli tüm SP’lerin listesini almak için;

SELECT name FROM SYS.PROCEDURES

Ayni sekilde asagidaki sorgulardan da yararlanabilirsiniz.

SELECT name FROM SYS.OBJECTS WHERE type=’P’

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’P’

SELECT NAME FROM SYSOBJECTS WHERE xtype=’P’

SELECT Routine_name FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE=’PROCEDURE’

# Veritabaninda kayitli Views’lerin listesini almak için;

SELECT name FROM SYS.VIEWS

Alternatifler:

SELECT name FROM SYS.OBJECTS WHERE type=’V’

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’V’

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS

# Ayni sekilde veritabaninda kayitli tüm fonksiyonlarin listesi elde etmek için;

SELECT name FROM SYS.OBJECTS WHERE type=’IF’ -- inline function

SELECT name FROM SYS.OBJECTS WHERE type=’TF’ -- table valued function

SELECT name FROM SYS.OBJECTS WHERE type=’FN’ -- scalar function

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’IF’ -- inline function

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’TF’ -- table valued function

SELECT name FROM SYS.ALL_OBJECTS WHERE type=’FN’ -- scalar function

SELECT Routine_name FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE=’FUNCTION’


# Kayitli tüm triggerlarin listesini almak için;

SELECT * FROM SYS.TRIGGERS

veya

SELECT * FROM SYS.OBJECTS WHERE type=’TR’

# Belli bir tabloya ait triggerlarin listesini görmek için;

SP_HELPTRIGGER Products SP’sini çalistirabilir veya

SELECT * FROM SYS.TRIGGERS WHERE parent_id = object_id(’products’) sorgusu ile de görebilirsiniz.

# Belli bir tabloya ait sütunlari

SP_COLUMNS Products SP’sini çalistirabilir veya asagidaki alternatif sorgulardan yararlanabilirsiniz.

SELECT * FROM SYS.COLUMNS WHERE object_id = object_id(’Products’)

SELECT COLUMN_NAME, Ordinal_position, Data_Type, character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’Products’

# Belli bir tabloya ait sütuna ulasmak için asagidaki alternatif sorgulardan yararlanabilirsiniz.


SELECT O.name FROM SYS.OBJECTS O INNER JOIN SYS.COLUMNS C ON C.Object_ID = O.Object_ID WHERE C.name LIKE ’%ShipName%’

SELECT OBJECT_NAME(object_id) AS [Table Name] FROM SYS.COLUMNS WHERE name LIKE ’%ShipName%’

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE ’%ShipName%’

# Tablodaki toplan satirlarin listesini almak için;

SELECT COUNT(@@ROWCOUNT) FROM Products

SELECT COUNT (ProductID) FROM Products

SELECT OBJECT_NAME(id) AS [Table Name], rowcnt FROM SYSINDEXES
WHERE OBJECTPROPERTY(id,’isUserTable’)=1 AND indid < 2 ORDER BY rowcnt DESC

SELECT rowcnt FROM sysindexes WHERE id = OBJECT_ID(’Products’) AND indid < 2

SELECT OBJECT_NAME(OBJECT_ID) TableName, row_count FROM sys.dm_db_partition_stats
WHERE object_id = object_id(’Products’) AND index_id < 2

# Veritabanindaki constraints’lerin listesini almak için asagidaki sorgulardan yararlanilabilir.

SELECT * FROM SYS.OBJECTS WHERE type=’C’

SELECT * FROM sys.check_constraints


# Tabloda kullanilan indexlerin listesini almak için de;

sp_helpindex Products SP’sinden yararlanabilir veya asagidaki sorguyu çalistirabilirsiniz.

SELECT * FROM sys.indexes WHERE object_id = object_id(’products’)

Makalenin hazirlanmasinda MSDN kod kütüphanesinden yararlanilmistir.


Faydali olmasi temennisiyle, herkese iyi çalismalar...

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©