Microsoft SQL Server – sistemske tabele

 

Microsoft SQL Server većinu informacija o konfiguraciji, korisnicima, objektima i generalno meta podacima čuva u sistemskim tabelama. Ako jednostavno i brzo treba dobiti ovakve informacije jedan od načina je zadavanje upita odgovarajućim sistemskim tabelama.

 

Microsoft SQL Server razlikuje dve grupe sistemskih tabela:

  • sistemske tabele sistemskog kataloga – tabele koje sadrže informacije o objektima i konfiguraciji SQL Servera i ne odnose se ni na jednu specifičnu bazu podataka.
    U ranim verzijama SQL Servera su se te tabele nalazile u master i msdb sistemskim bazama podataka. Sada su uglavnom zamenjene View objektima i pseudo tabelama koje apstrahuju podatke i omogućavaju kompatibilnost na dole. Delom se zahvataju i podaci iz skrivene read-only Resource sistemske baze podataka
  • sistemske tabele database kataloga – kao što ime sugeriše, ove tabele sadrže metapodatke koje se odnose na konkretnu bazu podataka. Svaka baza podataka ima ove sistemske tabele, uključujući master i ostale sistemske baze podataka

 

Tipično se sistemske tabele i view objekti koji ih apstrahuju nalaze u sys šemi u okviru master baze i dbo šemi msdb baze. U novijim verzijama ovi view objekti su implementirani kao pseudo tabele koje se kreiraju po zahtevu – slično in memory view objektima.

 

 

View i apstrakcija podataka iz sistemskih tabela

 

Za demonstraciju gore navedenog ćemo uzeti sistemsku tabelu sistemskog kataloga sys.syslogins

Ova tabela sadrži sve logine Microsoft SQL Servera i ovo vidimo ako zadamo jednostavan upit:

 

USE master

GO

SELECT *

FROM sys.syslogins

 

Brzim uvidom u rezulatat upita jasno je da imamo informacije o imenu logina (SQL login ili Windows login), datum kreiranja, hash šifre (samo kod SQL logina), default bazu podataka i ostale informacije.

 

Ako dublje uđemo u strukturu ove sistemske tabele, videćemo da je to zapravo View:

 

USE master

GO

sp_helptext ‘sys.syslogins’

 

Sistemska stored procedura sp_helptext vraća skript koji je kreirao zadati objekat, u ovom slučaju sys.syslogins. Iz rezultata upita jasno je da je sys.syslogins view:

CREATE VIEW sys.syslogins

AS

SELECT

sid = p.sid,

FROM klauzula pokazuje da se view referiše na tabele sys.server_principals i master.sys.sysprivs

Kada dalje probamo sa sledećim:

sp_helptext ‘sys.server_principals’

 

Vidimo da je i ovo view, a ne fizička tabela. View se referiše na više tabela master.sys.sysxlgns, sys.syspalnames i tako dalje…

 

Ako nastavimo dalje u dubinu dobićemo poruku 208 Invalid object name. Sada ulazimo u zabranjenu zonu sistemskih tabela koje ne može da vidi ni sistem admin Microsoft SQL servera.

 

Još par primera sys tabela sistemskog kataloga SQL Servera, (probajte svaku sa SELECT * FROM …, biće odmah jasno šta sadrže):

master.sys.configurations

master.sys.databases

master.sys.sysmessages

 

 

Sistemske tabele database kataloga sadrže metapodatke specifične za svaku bazu podataka. One su smeštene u mdf fizičkom fajlu te baze i njihova struktura, a ponegde i podaci se direktno kloniraju iz model sistemske baze Microsoft SQL servera.

 

Par primera:

USE TSQL — ili bilo koja druga baza uključujući i sistemske

GO

SELECT *

FROM sys.sysfiles

Lista fizičkih fajlova od kojih se sastoji baza, njihova imena, fizičke lokacije i svojstva

 

SELECT *

FROM sys.sysobjects

Lista svih objekata u datoj bazi podataka – table, view, stored procedure,…

Kolona xtype označava tip objekta: S – sistemska tabela, U – korisnička tabela, V – view, P – stored procedura, i tako dalje.

 

SELECT *

FROM sys.sysusers

Svi database korisnici.

 

SELECT *

FROM sys.types

Svi tipovi podataka koje možemo koristiti prilikom kreiranja tabela i/ili pisanja sql skripti.

Na prvi pogled je neobična odluka da raspoloživi tipovi podataka postoje na nivou baze podataka, a ne na nivou Microsoft SQL Servera u tabeli sistemskog kataloga. Međutim setite se da je moguće kreirati korisničke definisane tipove podataka (User Defined Data Types) koji su upravo na nivou baze i onda ova odluka ima smisla.

 

 

 

Autor: M.Sc. Miloš Milosavljević