Oprócz widoków systemowych, za pośrednictwem których, możesz dotrzeć do informacji (metadanych) o środowisku, mamy do dyspozycji szereg innych przydatnych obiektów.
W artykule tym, prezentuję kilka z nich. Podobnie jak widoki systemowe, ich różnorodność daleko wykracza poza zakres tego kursu. Warto mieć świadomość ich istnienia – potraktuj ten rozdział jako wstęp do obiektów, które dają wiedzę na temat środowiska.
Obiekty te, zazwyczaj wykorzystywane są przez administratorów baz danych (DBA DataBase Administrator), ale dla zwykłych użytkowników bywają również pomocne. Wszystkie informacje do których możemy za ich pośrednictwem dotrzeć, dostępne są również poprzez opisane wcześniej widoki systemowe.
Skalarne funkcje systemowe
Systemowe funkcje wbudowane zwracające metadane, stosujemy zazwyczaj w procedurach utrzymaniowych, np. do identyfikacji obiektów, ich parametrów czy wykonywania na nich działań administracyjnych.
Funkcje OBJECT_ID() oraz OBJECT_NAME() pozwalają pójść na skróty w odpytywaniu widoków systemowych.
Zwracają identyfikator obiektu lub jego nazwę. Bywają przydatne, szczególnie jeśli na szybko, chcemy wyciągnąć jakieś dane, a nie znamy identyfikatora danego obiektu i nie chce nam się łączyć dodatkowych widoków.
Dla przykładu – chcemy na szybko wyświetlić informacje o wszystkich indeksach w tabeli dbo.Orders. W skrótowej wersji, moglibyśmy zapisać zapytanie w taki sposób :
USE Northwind
GO
SELECT OBJECT_NAME(object_ID) AS TableName, *
FROM sys.indexes
WHERE OBJECT_NAME(object_ID) = 'Orders'
Co prawda od razu muszę tutaj przestrzec, że nie do końca jest to sposób idealny. Jak to bywa ze skrótami, czasem mogą nas wyprowadzić w pole.
Zauważ, że wyszukałem wszystkie indeksy dla tabeli Orders, bez podania nazwy schematu. W sytuacji, w której mielibyśmy dwie tabele o tych samych nazwach (tyle że w różnych schematach) wynik byłby mylący, bo zwrócone rekordy dotyczyły by wszystkich indeksów w obu tabelach. Warto o tym pamiętać.
Funkcje DB_ID() oraz DB_NAME(), analogicznie jak w przypadku poprzednio prezentowanych funkcji, zwracają translacje nazwy na identyfikator lub odwrotnie. Samo wywołanie, bez podania parametru, zwróci aktualną nazwę / identyfikator bazy danych do której jesteś podłączony.
SELECT DB_ID() as ID_bazy,
DB_NAME() as Nazwa_bazy,
DB_NAME(1) as NazwaBazyId1
Funkcje sprawdzające, aktualne parametry bazy danych DATABASEPROPERTEX() oraz serwera SERVERPROPERTY(). Wywołując je z odpowiednimi argumentami, możemy otrzymać informacje, np. na temat sposobu porównywania wartości tekstowych (COLLATION).
SELECT DATABASEPROPERTYEX ( 'Northwind', 'Collation' ) as DBCollation,
SERVERPROPERTY ('Collation' ) as SrvCollartion
Zmienne @@GLOBALNE
Zmienne globalne to bardzo podobne do funkcji skalarnych obiekty. Ich nazwa zaczyna się od @@ i jest ich raptem kilkadziesiąt. Poniżej przykład informacji o środowisku zwracanych przez tego typu obiekty :
SELECT @@SERVICENAME as InstanceName,
@@VERSION as SQLServerVersion
Oprócz zmiennych typowo informacyjnych o środowisku, mamy kilka wykorzystywanych w logice programistycznej. Poniżej przykład wykorzystania @@TRANCOUNT, aby określić liczbę otwartych transakcji bieżącego połączenia.
SELECT @@TRANCOUNT as LiczbaOtwartychTransakcji
BEGIN TRANSACTION --nowa transakcja
SELECT @@TRANCOUNT as LiczbaOtwartychTransakcji
Procedury systemowe
Na koniec bardzo użyteczne źródło informacji dla każdego DBA dotyczące różnych aspektów baz, serwera czy aktywności użytkowników. Procedury systemowe to nic innego jak kompilacja widoków, mająca na celu w zwięzły i przystępny sposób, prezentować najważniejsze informacje.
Zamiast pisać kwerendy łączące wiele widoków systemowych, możemy skorzystać z istniejących procedur, wywołując je po prostu po nazwie.
Poniżej kilka dwa przykłady wyświetlania informacje o bazie Northwind :
exec sp_helpdb 'Northwind';
exec sp_spaceused;
Jak widać forma – typowo dla administratorów. Każda z powyższych procedur zwraca osobne rekordsety. Procedura sp_spaceused, może być wywołana również dla konkretnego obiektu (tabeli) w bazie danych. Zwróci nam informacje o liczbie rekordów i miejscu alokowanym przez dany obiekt.
exec sp_spaceused 'dbo.Orders'
Jedną z fajniejszych rzeczy, jest możliwość modyfikacji lub podglądu zawartości istniejących, wbudowanych procedur systemowych. W ten sposób możesz odkryć strukturę widoków systemowych. Definicje procedur, funkcji systemowych znajdziesz w bazie master.
Szczegółowe omówienie tych struktur, prezentuję na kursach z programowania i administracji SQL Server na które zapraszam.