Ugrás a fő tartalomra

SQL server alapok

Az adatbázis adatainak módosítására a SQL Server Management Studio (SSMS) szolgál,
míg az SQL Server Profiler az adatbázis monitorozására szolgál (események elkapása)
– Az SQL Server Analysis Services (SSAS) a különböző távoli források ból származó adatok mélyebbre ható elemzését teszi lehetővé (OLAP)
– Az SQL Server Integration Services (SSIS) a több, akár különböző fajtájú adatforrásból (nem feltétlen adatbázisból) származó adatot egységesít
SQL szerver alatt egy szerverpéldányt (instance) értünk, ami a szerver futtatásához szükséges folyamatok, szálak összessége illetve egy vagy több adatbázist (database), amelyben tárolódnak a felhasználói és rendszeradatok.
Az SQL Serveren a felhasználói adatbázisok száma tetszőleges míg minden szerverhez négy darab rendszeradatbázis tartozik.
master: ezen adatbázisban levő táblák tárolják a szerver szintű információkat.
model: az új adatbázisok létrehozásakor használatos „sablon adatbázis”, tartalmazza a felhasználói adatbázisokban levő rendszertáblák alapértelmezett beállításait is.
msdb: a beépülő SQL Server Agent által használt adatbázis jobok és riasztások ütemezésére.
tempdb: a szerveren az összes ideiglenes adat ebben az adatbázisban levő táblákban tárolódik. A tempdb mindig üres a szerver kikapcsolt állapotában. Amikor elindul az SQL
Server felépül ez az adatbázis, majd folyamatos an nő a kapcsolat ideje alatt (lekérdezések részeredményei stb.).
Az SQL Server sémái az adatbázison belül elhelyezkedő névterek, amelyek objektumok csoportjait tárolják (pl. táblákat, nézeteket).
Minden objektum az adatbázisban sémákba van rendezve. A sémák hozzá lehetnek rendelve egy felhasználóhoz vagy adatbázis szerephez, korlátozva ezzel az általuk elérhető objektumokat az adatbázison belül.
A saját sémában levő objektumokra nem kell előtaggal együtt hivatkozni.
SQL Serverren szinonimákat is létre lehet hozni, ekkor a saját sémájukban a külső sémákban levő objektumokra készül hivatkozási név.
A szinonimák tehát alternatív névként funkcionálnak elfedik a külső séma jellegezetességeit és rugalmasságot köcsönöz a rendszernek.
A szerver metaadatok tárolása, elérése:
Gyári tárolt eljárások és függvények:
előre megírt tárolt eljárások, amelyek a rendszer metaadatait módosítják vagy szolgáltatják vissza, de a részleteket elrejtik a felhasználók elől.
A tárolt eljárások alapvetően az azt indító felhasználó nevében futnak és ennek megfelelően biztonsági akadályokba ütközhetnek.
. Információs séma (Information schema views):
a rendszertáblákból összeszerkesztett nézetek, amelyek megfelelnek az ISO információs séma szabványnak. Ezen nézetek leírása minden adatbázisban megtalálható az INFORMATION_SCHEMAnevű sémában. Ez metaadatokat szolgáltat az aktuális adatbázisról.
Rendszerkatalógus (system catalog): a rendszertáblákból összeszerkesztett nézetek. Az összes adatbázissal kapcsolatos metaadatot lefedik.
Adatbázis objektumok és jellemzők:
Tábla: Az adatok tárolásának helye. Az egyed-előfordulásokat sorok reprezentálják, az egyedek tulajdonságait az oszlopok.
Adattípus: Az egyes oszlopok lehetséges adatértékeit határozza meg.
Constraint: Az oszlopok lehetséges értékeire szabályokat adhatunk meg, ezek a szabályok a constraint-ek.
Default: Ha egy oszlopban nem adunk meg értéket, az automatikusan a default értékét veszi fel.
Index: Az adatok gyorsabb elérését lehetővé tevő tárolási szerkezet.
View: Fizikailag különböző helyeken lévő adatokat logikailag egy táblába, view-ba rendezhetjük.
Stored procedure: SQL utasítások egy halmaza, egy rutin, ami meghívásakor egyszerre hajtódik végre.
Trigger: Bizonyon események bekövetkeztekor automatikusan végrehajtódó tárolt eljárás.
–új tipus létrehozása
EXEC sp_addtype kl_tipus, datetime, ‘NULL’
GO
SQLszerver oszlop függvények:
SUM() A numerikus elemek összege.
AVG() A numerikus elemek átlaga
COUNT() Az elemek száma
MIN() Az elemek közül a legkisebb
MAX() Az elemek közül a legnagyobb
A mintaillesztés kulcsszava a LIKE, dátum, idő vagy sztring típusú adatok keresésére használhatjuk. A mintába a következő joker karaktereket tehetjük be:
% Bármely (akár nulla hosszú) sztring helyettesítésére.
_ Bármely karakter helyére.
[ ] Bármilyen karakter a zárójelek között megadott tartományon (például [a-f]) vagy halmazon (például [abcdef]) belül.
[^] Bármely karakter, ami nincs a megadott tartományban. (Például [^a – k].)
pl.: LIKE ‘K[^e]%’ Minden olyan szó, ami K betűvel kezdődik és a második betűje nem e.
bcp adatexportra és -importra használható. Paraméterekkel megadható formátumba írhatjuk ki (vagy éppen olvashatjuk be) az adattáblák tartalmát.
Az osql-t SQL utasítások parancssori végrehajtására használhatjuk. Az SQL Serverrel ODBC-n keresztül kommunikál.
A tranzakciókezelés az adatbáziskezelőkben elsősorban az ACID elveket (atomicitás, konzisztencia, integritás, tartósság) hivatott megvalósítani.

SqlServer checkpoint:
– Az adatbázis cache-ben lévő módosult lapok kiírása a lemezre, ez aszinkron és nem aktualizálja a szabad lapok listáját
– Indítása: explicit, shutdown, időkorlát vagy napló betelt

SqlServer ütemezési módok:
– Cooperative scheduling (a user task időnként rákérdez a kernelre, hogy mehet-e, nem preemptive)
– SQL Worker: feladatot ellátó taszk, thread (Idle time limiet, Memory limit)
– SPID: user session ID

SqlServer paraméterek megtekintés lehetőségei:
– Server Management Studio
– EXEC sp_configure
– SELECT serverproperty(nev)
– SELECT * FROM sys.configurations

SqlServer paraméterek:
– Auto Create Statistic (CBO – Cost Base Optimation, költségszámító függvények vannak
hozzá, melynek értéke a paraméterről függ. A statisztikák ezen paramétereket
gyűjtik össze. Ha nem engedjük, akkor a CBO sem működik)
– Auto Update Statistic
– Auto Close (ha nincs aktív kapcsolat, leállítja a szervert, az erőforrást átengedi másnak.
Csak akkor használjuk, ha kiszámítható a terhelés)
– Auto Shrink (a nem használt területeket visszaadja az operációs rendszernek)
– Cursor Threshold
– ANSI mód (SQL szabványra illesztés)

SqlServer adatbázis állapotai:
– ONLINE/OFFLINE: a tartalom elérhető-e
– DEFUNCT: használhatatlan, üzemképtelen
– RECOVERING: az adatállomány visszamásolása (újra konzisztens állapotba hozza)
– RESTORING: a fájlt másolással hozzák helyre

Fogalmi szinten nem adatbázist indítunk el, hanem adatbázis kezelő instance-t.
Adatbázis hozzáférés jellege:
– SINGLE USER (DBA=root, rendszergazda léphet be)
– RESTRICTED USER (csak az engedélyezettek léphetnek be és használhatják)
– MULTIUSER (több felhasználó, mindenki)

Izolációs szintek
Az izoláció azt jelenti, hogy egy tranzakció végrehajtása során a nem érvényesített adatokat egy másik futó tranzakció nem láthat, ekkor a módosított mezőket tartalmazó sorokat az SQL szerver zárolja.
Az egyes tranzakció izolációs szintek:
Read Uncommitted: A tranzakciók olyan adategységet is olvashatnak, amelyen nem megosztható zár van. Ez potenciális inkonzisztenciákhoz vezethet (mindhárom a
nomália), de a tranzakciók konkurrenciája ezen a szinten a legnagyobb.
Read Committed: A nem megosztható zár csak az író tranzakció kommitjával szabadul fel és blokkolja az adategység olvasását, így az csak már kommittált tranzakciótól származó adaton engedélyezett. Emiatt piszkos olvasás nem történhet.
Az SQL Server alapértelmezetten ebben a módban működik.
Repeatable read: Amikor egy tranzakció olvas egy adategységet az olvasott rekordokra megosztható zár kerül. A zár miatt amíg az olvasó tranzakció nem kommittál ezen rekordokat módosítani vagy törölni már nem lehet. Emiatt ezen az izolációs szinten már nincs nem megismételhető olvasás és rekordok sem tűnhetnek el a két olvasás között, azonban továbbra is beszúrhatók mivel a zárak sorszintűek.
Serializable: A tranzakciók egymástól teljesen függetlenül hajtódnak végre, mintha egymás után futnának le.
Párhuzamosan csak akkor futhatnak ha fenntartható a soros végrehajtás illúziója nincsenek hatással egymásra.
Ezen a szinten már fantom rekordok se fordulhatnak elő. Erős zárhasználat és emiatt tranzakcióvárakoztatás illetve holtpontok jellemzik. A holtpont elkerülhető ha a tranzakciók együttműködnek és azonos sorrendben foglalnak le erőforrásokat, de ez jelentős overheadet jelenthet mivel a kliensek együttműködése többnyire nem tételezhető fel és az adatbáziskezelőnek kell a holtpont elkerülésről gondoskodnia. Mivel nagy mértékben blokkolja a konkurrenciát ezért sok esetben nem praktikus ezen izolációs szint használata.
Snapshot: Ez az izolációs szint többverziós konkurrenciakezelést használ. Az egyes tranzakciók futásuk során az adategység azon verzióját fogják olvasni illetve írni, amelyik akkor létezett, amikor először hozzáfértek az adategységhez ennek következtében nincsen sorszintű zárakra szükség. Egyik a nomália sem fordul elő.

Az izolációs szint beállítása :
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION
SELECT * FROM tabla1
SELECT * FROM tabla2

COMMIT TRANSACTION
Adatbázisszintű objektumkatalógus (object catalog):
. sys.check_constraints: az adatbázisban érvényes értékjellegű kényszerek.
. sys.columns: azadatbázisban található oszlopok (a rendszertáblák oszlopai nincsenek listázva).
. sys.events: azon események, amelyek értesítést vagy triggert indítanak el.
. sys.foreign_keys: az adatbázisban levő oszlopok, amelyeken külső kulcs kényszer van definiálva.
. sys.foreign_key_columns: az adatbázisban levő azon oszlopok, amelyek külső kulcsok.
. sys.identity_columns: az adatbázisban lévő egyediség kényszerrel ellátott oszlopok.
. sys.indexes: az adatbázisban levő indexstruktúrák.
. sys.index_columns: az adatbázisban levő indexelt oszlopok listája.
. sys.key_constraints: az adatbázisban érvényes elsődlegeskulcs kényszerek.
. sys.objects: az adatbázisban levő összes objektum (táblák, indexek, kényszerek stb.)
. sys.partitions: az adatbázishoz tartozó táblailletve indexpartíciók.
. sys.procedures: az adatbázishoz tartozó tárolt eljárások.
. sys.schemas: az adatbázisban létrehozott sémák.
. sys.synonyms: az adatbázisban tárolt szinonimák.
. sys.tables: az adatbázisban tárolt táblák (a rendszertáblák nincsenek listázva)
. sys.triggers: a tábla illetve adatbázis szintű triggerek.
. sys.types: a szerveren érvényes típusok
. sys.views: az adatbázisban tárolt nézetek
Adatbázisok és adatfájlok katalógus (database and files catalog):
. sys.databases: a szerveren található adatbázisok.
. sys.database_files: az adatbázishoz tartozó fájlok
. sys.filegroups: az adatbázishoz tartozó fájlcsoportok
. sys.master_files: a szerveren található összes adatbázishoz tartozó fájlok

Biztonság és engedélyezés:
. sys.database_permissions: az összes adatbázisszintű engedély.
. sys.database_principals: az adatbázisszintű hozzáférők (user, role).
. sys.server_permissions: az összes szerverszintű engedély.
. sys.server_principals: a szerverszintű hozzáférők (login, role).
. sys.sql_logins: a szerveren érvényes loginok
Dinamikus menedzsment :
. sys.dm_db_index_usage_stats: szerverszintű indexhasználat.
. sys.dm_exec_cached_plans: a szerver által cacheelt végrehajtási tervek.
. sys.dm_exec_query_stats: a cacheelt végrehajtási tervek
Egyéb:
. sys.messages: a szerver lehetséges hibaüzenetei.
. sys.server_events: azon szerverszintű események, amelyek értesítést vagy triggert aktiválnak.
. sys.server_event_sessions: a külön sessionben futó eseménykezelő eljárások.
. sys.servers: a helyi szerver illetve azon távoli szerverek tulajdonságai, amivel a helyi szerver összeköttetésben van

Statisztikai.
. sys.dm_exec_connections: a szerver által létesített kapcsolatok.
. sys.dm_exec_requests: a szerveren végrehajtás alatt levő kérések.
. sys.dm_exec_sessions: a szerveren futó sessionok.
. sys.dm_tran_active_transactions: a szerveren futó tranzakciók.
. sys.dm_tran_current_transaction: információk a nézetet lekérdező tranzakcióról (1 soros).
. sys.dm_tran_database_transactions: az aktuális adatbázisban futó tranzakciók.
. sys.dm_tran_locks: a szerver zárkezelőjéhez beérkezett zárkérések és a már lefoglalt zárak

WITH : Ideiglenes változók létrehozására. SQL parancs hatáskörében jön létre.
WITH tabla_alias_nev (mezők) AS (SELECT…) -- deffinició
SELECT … FROM tnev… -- használat
Aliast rendel a táblához, ez felhasználható az utána lévő SELECT-ekben.
IDENTITY
Mező típus. Származtatott kulcs. Auto increment key. (magától növekvő sorszámozott típus)
Ha explicite szerepel, akkor azt használja, ha nincs megadva, akkor ő fogja generálni.


—- TSQL blokk (TSQL nyelv):
BEGIN…. END
Lokális változók deklarálása: DECLARE @vnev tipus;
A típus lehet egész(int, bigint…), tört(numeric, decimal, float), dátum(datetime,
smalldatetime), szöveg (char, varchar, text), bináris (binary, image, varbinary)
BEGIN
DECLARE @x int;
SET @x = 3;
SELECT @x;
END;
— Tárolt eljárás előnyei:
– kisebb hálózati forgalom
– gyorsabb SQL végrehajtás
– centralizált kezelés
– hatékonyabb karbantartás
– védhető adatbázis objektum
– klienst tehermentesíti
– egymást hívhatják
– ütemezhetők
– lehet függvény is

— Eljárás felépítése:
Nincs visszatérési értéke, de lehet kimeneti paramétere
CREATE PROCEDURE tarolte_nev(@e1 [=ert1] tip1 …)
WITH ENCRYPTION | EXECUTE AS user
AS
BEGIN TRY
…
END;
Futtatása: EXEC nev p1, p2;
— Függvény felépítése:
CREATE FUNCTION fuggv_nev(@p1 tip1…) RETURNS tipus
WITH ENCRYPTION | EXECUTE AS user
AS BEGIN
…
RETURN ertek;
END;
Futtatása: SELECT * FROM nev(p1, p2)
— Vezérlési elemek:
– Értékadás: SET @v = kif;
– Ciklus: WHILE feltétel BEGIN … END
– Kilépés: BREAK
– Átlépés: CONTINUE
– Elágazás: IF feltétel BEGIN … END ELSE BEGIN … END
– Többszörös elágazás CASE … WHEN … ELSE … END
– Eljáráshívás: EXECUTE enev p1 p2…

— Kurzorok
Deklaráció: DECLARE knev CURSOR FOR SELECT…
Nyitás: OPEn knev
Lekérdezés: FETCH poz knev INTO @v1…
Ciklus: WHILE @@FETXH_STATUS = 0
Lezárás: CLOSE knev
Felszabadítás: DEALLOCATE knev
Információ lekérdezés: @@CURSOR_ROWS

— hasznos rendszer lekérdezések
Szerepkörök lekérdezése: exec sys.sp_helrpole;
Tagok lekérdezése: exec sys.sp_helprolemembers
Adatfile státuszok: exec sys.sp_helpfile
Filecsoport információk: exec sys.sp_helpfilegroup
Server szerepkörök lekérdezése: esec sys.sp_helpsvrole
Tagok lekérdezése: esex ses.sp_helpsrvrolemembers
Index információk: exec sys.sp_helpindex ’tabla’


Megjegyzések