Bundan önce SQL Server mimarisini anlattığımız yazılardan table ve index datasının içeriğinin nasıl depolandığını biliyoruz. Peki Stored Procedure, View, Function, Trigger benzeri nesneler nerede store ediliyor. Bunlar tabiki MDF içerisinde aynı mantıkta Page’ler içerisinde saklanmaktadır. Bu nesneler System Base Tables olarak tanımlanan sistem tablolarında tutulmaktadır. Bu tablolar mevcut veri tabanlarına ait metadata bilgisini saklar. Bu tablolar kullanıcı erişimi için değil SQL Server Database Engine tarafından kullanılır. Bu tablolar ancak Dedicated Administrator Connection (DAC) bağlantısıyla erişilebilir. DAC üzerinden erişim sağlamak için ya aşağıdaki gibi script ile aktifleşitirilebilir veya Management Studio üzerinde Object Explorer içerisinde sunucuya sağ tıklayıp Facets bölümünden düzenleme yapılır.
EXEC sp_configure 'remote admin connections', 1 GO RECONFIGURE
master veri tabanı daha çok sunucu seviyesinde bilgileri içerir. Aynı zamanda her veri tabanından olmayan nesneler içerir. System Base Table’lar ise her veri tabanın altında olup doğrudan o veri tabanına özel bilgilere erişmemizi sağlayan metadata sorgulayıcılarıdır. Aşağıdaki tabloda bu tabloların listesi verilmiştir.
sys.sysschobjs | sys.sysxsrvs | sys.sysasymkeys | sys.sysdercv |
sys.sysbinobjs | sys.sysrmtlgns | sys.ftinds | sys.sysendpts |
sys.sysclsobjs | sys.syslnklgns | sys.sysxprops | sys.syswebmethods |
sys.sysnsobjs | sys.sysxlgns | sys.sysallocunits | sys.sysqnames |
sys.syscolpars | sys.sysdbfiles | sys.sysrowsets | sys.sysxmlcomponent |
sys.systypedsubobjs | sys.sysusermsg | sys.sysrowsetrefs | sys.sysxmlfacet |
sys.sysidxstats | sys.sysprivs | sys.syslogshippers | sys.sysxmlplacement |
sys.sysiscols | sys.sysowners | sys.sysremsvcbinds | sys.syssingleobjrefs |
sys.sysscalartypes | sys.sysobjkeycrypts | sys.sysconvgroup | sys.sysmultiobjrefs |
sys.sysdbreg | sys.syscerts | sys.sysxmitqueue | |
sys.sysobjvalues | sys.sysobjvalues | sys.sysdesend |
Örneğin veri tabanındaki tüm prosedürlerin içeriğini sorgulayalım.
SELECT v .%% physloc %% as address, CONVERT (VARCHAR(6), CONVERT (INT, Substring (v.%%physloc%%, 6, 1) + Substring (v.%%physloc%%, 5, 1))) + ':' + CONVERT (VARCHAR(20), CONVERT (INT, Substring (v.%%physloc%%, 4, 1) + Substring (v.%%physloc%%, 3, 1) + Substring (v.%%physloc%%, 2, 1) + Substring (v.%%physloc%%, 1, 1))) AS 'rootPage', o.name objectName, Cast(v.imageval AS VARCHAR(max)) code FROM sys.objects o INNER JOIN sys.sysobjvalues v ON o.object_id = v.objid WHERE o.type = 'P'
Bu script içerik daha önce detayını verdiğimiz data page’lerde bir kayıt olarak yazılmıştır. Örneğin şekilde gösterilen uspGetBillOfMaterials prosedürünün bulunduğu 23401 nolu Page’in içeriğine DBCC PAGE(AdventureWorks2014, 1, 23401, 3) komutuyla baktığımızda bu prosedürün tanımını görmüş oluruz.
Procedure, function gibi nesnelerin kodunu görmek için eski sürümlerden gelen sp_helptext prosedürü de kullanılabilir.
Başka bir yöntem de SQL Server’in metadata bilgilerini sunan INFORMATION_SCHEMA isimli view kullanmaktır.
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'uspGetBillOfMaterials';
SQL Server mimarisi konulu bu seride aşağıdaki konuları detaylandırmaya çalışıyorum.
SQL Server’in mimarisi nasıldır?
SQL Server veri tabanı mimarisi, disk yönetim mimarisi?
SQL Server, verileri nasıl saklar, kayıt eder?
8060 byte’dan büyük verileri nasıl kayıt edilir?
BLOC, CLOB verileri nasıl sayfalarda depolanır?
Sql Server storage architecture, storage engine, storage internals
Page, Extent, Allocation Unit, IAM Page, PFS, GAM, SGAM Pages, Row Offset Nedir?
SQL Server’da table, index, clustered, non clustered index nasıl çalışır?
SQL Server bellek yönetimi, memory management
SQL Server işlemci yönetimi, CPU management
SQL Server disk space, disk usage
Sql Server IO performance
System Base Tables