2014. október 4., szombat

DB2 oktatás



DB2 oktatás



Adatbázis létrehozásakor feltett kérdések
-ilyen fajta adataink vannak
-mennyi adatunk van
-mennyi adatunk lesz
-milyen gyorsan fog nőni az adatmennyiség
-milyen gyakran használjuk az adatokat
-milyen gyakran változnak az adatok
-mennyi alkalmazás használja egyidejüleg
-hogyan tároljuk az adatokat

db2 szolgáltatásai
-optimizer
-logolás
-biztonság(security: ki férhet hozzá)
-folyamatos működés
-integritás(bármikor elérhessük)
-visszaálllitás
-lock manager( IRLM started task)
-concurency(többen elérhetik ugyanazt az adatot)

Catalog: itt van tárolva minden hogy mit csinálunk a táblánkkal,statisztikai infókat tartalmaz


LOG: miden ami a dB2 ben történik, tárolunk, mit módosítottunk, miről - mire, mindig szinkron módon kezeljük


Commit pont: felszabadítjuk a lockokat, sikerült a tranzakció
Rollback pont:  tranzakció kezdete, kezdőpont


Hierarchikus adatbázis
IMS-akkor jó ha tudjuk hogy hol találjuk az adatot


Reláció: Egyedek közötti kapcsolat
tábla: egyedek tulajdonságai

SQL: 1989-ben szabványosították


Tábla létrehozásánál mindenképp kell tudni a tábla nevét
Oszlop -milyen gyakran neve és típusát is meg kell adni

------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Feladatkörök


SYSADMIN
- telepítés (új verzió, patch)
- minden jogot tud adni
- rendszer teljesitményért felelős
- létrehozás(adatbázisok stb stb...)


DBADMIN:  adatbázison belül nagyfönök (ezek leszünk mi)
- jogot tud adni adatbázsion belül
- létrehozás tábla,index stb...
- karbantartás, load, copy, recovery data
- rebind


Programozó
-tesztkörnyezet kialakitása
-SQL-eket prototipizálja (hogy egy lekérdezést a lehető leggyorsabb legyen)
-programok létrehozása, tárolt eljárások létrehozása
-binding packages


END USER
 -használja az adatokat


OPERATOR
-fent van-e a db2
-komponensek ellenőrzése


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


!!!!!
UNIQUE KEY egyedileg azonositja az adott sort(lehet több oszlop is)
    -lehet benne olyan oszlop ami NULL értéket vehet fel
    -bármennyi lehet egy táblában


Primary KEY: speciális UNIQUE KEY, aminek viszont egy oszlopa se vehet fel NULL értéket
                        -egy lehet egy táblában csak
                        -több oszlopból is állhat
Foreign KEY: egy másik tábla UNIQUE KEY-ére mutat

Kötelező egy SELECT -be:  a SELECT és a FROM!!!!


OUTER JOIN -ezzel megkaphatjuk azokat a sorokat is összekapcsolt tábláknál, ahol nem volt konkrét kapcsolat a 2 tábla között,
pl egy dolgozonak nem volt departmentje, akkor attól még ki lesz listázva ő is


CASE : feltételeket tudunk megadni


INSERT INTO


UPDATE  táblanév SET oszlopnév = valami WHERE feltétel


DELETE FROM táblanév WHERE feltétel


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Kommunikáció a DB2-vel


UDB
    -command line processor(CLP) (dos command prompt szerű)
    -command center (grafikus)
DB2 OS/390
    -SPUFI
    -QMF


stb...
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Teszt környezet lényege: legyen egy olyan tábla halmon, ami az eredeti adat halmot reprezentativan jelképezi, hasonít az eredetire


SQLCA: üzenetközvetitő, pl megmondja hogy egy SQL utasítás eredményének van-e még sora, SQLSTATE,SQLCODES-t tartamazza


BIND:(forráskódot leforditjuk és gépi kod lesz belőle: a precompiler kiszedi a programkodból az SQL részt egy DBRM fájlba, betesz egy hívást a forráskodba
helyette, majd compiler, megcsinálja  gépi kódot, a DB2 oldalán pedig bekerül ez a DBRM fájl, és szépen leforditja magának ebben a sorrendbe:
          -syntax check(catalogba megnézi van e olyan objektum amire az SQLbe hivatkozunk-e)
          -security check
          -optimalzálja az SQL-t
Amikor a leforditott program fut és odaér az SQL részhez, akkor meghivja a DB2-t és a DB2 által előzőleg leforditott package-et lefuttatja

REBIND: néha érdmes frissiteni az infókat, de elötte mindig futtatni kell a RUNSTAT-ot, az optimizer miatt, DBADMIN csinálja, a teljesítmény miatt, megcsinálja mégegyszer a teljes BIND-ot,de nem nem modositja a package sql kodját, csak optimalizál, megnézi hogy nincs -e uj index pl a táblához, amivel gyorsabban el lehet érni, stb...


Stored  Procedure (tárolt eljárások) hátrány: folyamatosan megy a ping-pong a hálózaton keresztül a cliens és a server között


Statikus VS Dinamikus SQL


Statikus SQL : ami be van drótozva a programba, lehet hozzá egy package-et létrehozni, GYORS


Dinamikus SQL: pl SPUFI elött elkezdek SQL-eket írni, futás időbe kell megnézni a DB2-nek, hogy szintaktiallag helyes-e, security, optimalizálás, stb...


------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Applikáció Generátorok


-lényegtelen
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

UDB


-minden egyes database tartalmazza a catalogot, data-át, buffer poolt, külön - külön


zOS
- a db2 tartalmazza a catalogot, az adatbázisokat,  directorykat, buffer poolokat, mindent egybe

Teljesítménymérés


-Performance Monitor
    -trace facility (nagyon költséges)
    -statistics
    -locking activity(tábla szintű, page szintű, sorszintű)


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


NON CLUSTERED INDEX : fizikailag vannak sorrendbe az adatok


CLUSTERED INDEXED: az index pageken ABC sorba vannak az emberek, fizikailag nincsenek sorrendbe


CREATE INDEX indnév ....

------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Views(nézetek) : Egy olyan leirás ami leirja, hogy milyen sorokkal, oszlopokkal szeretnénk dolgozni, úgy viselkedik, mint egy tábla, de az adat nincs tárolva.


CREATE VIEW név AS SELECT ...... FROM WHERE .....


------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE: logikai definició, lerja milyen adataink legyenek, milyen kapcsolat legyen közöttük stb...
TABLESPACE : fizikai definició,fájl, viszont egy tablespace-en több TABLE lehet , létrehozásakor lehet megadni, hogy milyen LOCK-olás legyen rá érvényes
DROP: eldobja az objektumokat,definiciókat, minden ami hozzá volt deffiniálva azok szintén mennek a lecsóba
LOCKING :IRLM lock manager tartja nyilván, hogy mi van fogva
-tabla szintű
-page szintű
-sor színtű : ( nagyon nagy erőforrásigényes!!)


PAGE: az a legkisebb adatmennyiség amit az I/O mozgatni tud, pl.: 4Kb
------------------------------------------------------------------------------------------------------------------------------------------------------------------------


ADMIN ESZKÖZÖK (UTILITIES)
ONLINE UTILITY: csak akkor lehet futtatni amikro a DB2 is fut
OFFLINE UTILITY: akkor is lehet használni job-ból amikor a db2 nem fut


-karbantartás(pl: reorg)
-beállitások , mozgatások (Load: betöltünk adatokat tablespace-be, UNLOAD:)
-recovery


ADATVISSZAÁLLÍTÁS(RECOVERY)
FULL IMAGE COPY: csinál egy teljes mentést a TABLESPACE-ekről
INCREMANTAL COPY: a FULL IMAGE COPY óta eltelt változásokat menti csak
MEREGECOPY: fogja az FULL IMAGE copy és az utolsó FULL után keletkezett összes INCREMANTAL COPY-t összemásolja és csinál belüle egy FULL IMAGE copyt
QUIESCE: csendes pont, amikor a TABLESPACE "konzisztens" állapotban van, ide lehet vissza állni ha valami gáz van

REORG -al elvégezhető
    -reorg
    -mentés
    -sort
    -load/unload


RUNSTAT: beleteszi a CATALOG-ba a statisztikai infókat

------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Jogosultságszerzés
IMPLICIT módon: saját táblánkhoz mindenhez van jogunk
EXPLICIT: amikor GRANT-al kapunk jogot valamihez
INDIRECT módon: amikor pl egy SYSADMIN által létrehozott package-et van jogunk futtatni


TRIGGER: bizonyos események bekövetkezésekor lefut valami



SQL - DB2SQL Workshop


DDL: data definition language ( create, drop, alter)
DML: data Manipulation language(SELECT , insert, update, delete)
DCL: data control language( grant, revoke)


TABLE: nevének kell lenni


OSZLOP: nevének kell lenni és egyedinek kell lennie a táblában

UNION ALL -nál nem dobja ki az ismétlődéseket, nem rendezi 2 SELECT eredményét
UNION -kidobálja az ismétlődéseket 2 SELECT eredményét

SELECT * FROM table FETCH FIRST 5 ROW ONLY   -csak az első 5 db eredményt adja ki
SELECT * FROM table WHERE oszlopnev IN('xx','ddd','d')   -csak azok kerülnek be amik beleesnek az IN résznél felsorolt elemekbe
SELECT * FROM table WHERE oszlopnev BETWEEN  érték1 AND érték2 BETWEEN-nél a két szélsőérték is a halmaz része
SELECT * FROM table WHERE oszlopnev IS NULL  -azokat a sorokat amiknek NULL az értéke
SELECT * FROM table WHERE oszlopnev LIKE 'G%'  -azokat a sorokat amiknek az olszlopnev oszlop eleme G vel kezdődik
SELECT * FROM table WHERE oszlopnev NOT LIKE 'G%'  -azokat a sorokat amiknek az olszlopnev oszlop eleme nem G vel kezdődik


1,SELECT empno,lastname,birthdate,salary FROM employee WHERE salary>30000  order by salary desc
2,SELECT lastname,firstnme,workdept FROM employee order by workdept,lastname
3,SELECT DISTINCT edlevel FROM employee
4,SELECT DISTINCT empno,projno FROM emp_act WHERE empno<'000100'
5,SELECT lastname,salary,bonus FROM employee WHERE sex='M'
6,SELECT lastname,salary,comm,hiredate FROM employee WHERE salary>20000 and  hiredate>'1979-01-01' order by hiredate
7,SELECT lastname,salary,bonus,comm FROM employee WHERE (salary>22000 and  bonus=400) or (bonus=500 and comm<1900) order by lastname
8,SELECT lastname,salary,bonus,comm FROM employee WHERE salary>22000 and  bonus=400 or bonus=500 and comm<1900 order by lastname
8,SELECT lastname,salary,bonus,comm FROM employee WHERE salary > 20000 and bonus in (400,500) and comm < 1500 order by lastname
9,SELECT * FROM emp_act WHERE projno LIKE 'AD%' and actno IN(10,80,180) order by projno,actno,emstdate,emendate
10, SELECT workdept,empno,lastname,firstnme FROM employee WHERE job='MANAGER' order by empno
11, SELECT empno,lastname,salary,bonus FROM employee WHERE bonus between 800 and 1000 order by bonus,empno
12, SELECT empno,lastname,workdept FROM employee WHERE workdept >= 'A00' and workdept <= 'C01' order by lastname desc,empno
13, SELECT * FROM project WHERE projname like '%SUPPORT%' order by projno
14, SELECT * FROM department WHERE deptno like '_1_' order by deptno
15, SELECT lastname,firstnme,midinit,salary,job FROM employee WHERE job<>'MANAGER' and job<>'PRES' order by salary FETCH FIRST 5 ROWS ONLY


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1, SELECT lastname,firstnme,deptname FROM employee,department WHERE deptno=workdept order by firstnme,lastname,deptname
2, SELECT lastname,firstnme,job,deptno FROM employee,department WHERE deptno=workdept and  job<>'MANAGER' and deptno >= 'A02' and deptno<='D22' order by firstnme,lastname,job,deptname


2.1, SELECT lastname,firstnme,deptname,job FROM department,employee WHERE deptno=workdept AND job<>'MANAGER' and deptno between 'A02' and 'D22'  order by firstnme,lastname
3, SELECT deptname,lastname,firstnme,job FROM employee,department WHERE mgrno=empno AND JOB='MANAGER' order by deptname
4, SELECT deptname,lastname,firstnme,job FROM employee,department WHERE workdept=deptno AND JOB='MANAGER' order by deptname
5, SELECT DISTINCT project.projno,actno,projname FROM projact,project WHERE projact.projno=project.projno AND project.projno like 'AD%' ORDER BY project.projno,actno
6, SELECT DISTINCT EMPLOYEE.empno,lastname,projno FROM EMPLOYEE,emp_act WHERE EMPLOYEE.empno=emp_act.empno AND PROJNO='AD3113' ORDER BY EMPLOYEE.empno,projno
7, SELECT   projno,EMPLOYEE.empno,actno,lastname,emstdate FROM EMPLOYEE,emp_act WHERE EMPLOYEE.empno=emp_act.empno AND emstdate>'2002-10-01' ORDER BY
projno,EMPLOYEE.empno,actno
7.1, SELECT  emp_act.emstdate,emp_act.projno,employee.empno,emp_act.actno,employee.firstnme
      FROM emp_act,employee
      WHERE employee.empno=emp_act.empno and emp_act.emstdate>'2002-10-01'
  ORDER BY emp_act.projno,employee.empno,emp_act.actno
8,
9,
10,


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


1,
SELECT lastname,salary,(salary*1.05)  AS INC_Y_SALARY,DECIMAL(((salary/12)*1.05),10,2) AS INC_M_SALARY
FROM employee
WHERE (SALARY*1.05)<=40000
2,
SELECT lastname,edlevel,salary,salary+1200 AS NEWSALARY,bonus,DECIMAL((bonus/2),9,2) AS NEWBONUS
FROM employee
WHERE edlevel=18 or edlevel=20
ORDER BY EDLEVEL DESC,salary
3,
SELECT lastname,edlevel,salary,salary-1000 AS DECR_SALARY,salary*0.8 AS S08,salary*1.2 AS S12,workdept
FROM employee
WHERE workdept='D11' AND SALARY BETWEEN 40000 AND 50000
ORDER BY SALARY
4,
SELECT lastname,edlevel,salary,salary*0.9 AS DESCSALARY,SALARY+bonus+comm AS INCOME,workdept
FROM employee
WHERE workdept='D11' AND SALARY+bonus+comm>salary*0.9
ORDER BY SALARY
5,
SELECT deptno,deptname,value(mgrno,'UNKNOW') AS mgrno
FROM department
WHERE mgrno IS NULL
6,
SELECT projno,value(majproj,'UNKNOW') AS MAJOR_PROJECT FROM project WHERE projno LIKE('MA%')
7,
SELECT empno,lastname,(YEAR(HIREDATE)-YEAR(BIRTHDATE)) AS age
FROM employee
WHERE (YEAR(HIREDATE)-YEAR(BIRTHDATE))>25
ORDER BY age,empno
8,
SELECT projno,YEAR(prstdate) AS YEAR,MONTH(prstdate) AS Month,prendate
FROM project
WHERE prendate='1982-12-01'
ORDER BY projno
9,




-----------------------


1,
SELECT workdept,SUM(salary) AS SUM_SALARY
FROM employee
GROUP BY workdept
2,
SELECT workdept,COUNT(empno) AS EMP_COUNT
FROM employee
GROUP BY workdept
3,
SELECT workdept,COUNT(empno) AS EMP_COUNT
FROM employee
GROUP BY workdept
HAVING COUNT(empno)>3
4,
SELECT workdept,COUNT(JOB) AS DESIGNERS
FROM employee
WHERE JOB='DESIGNER'
GROUP BY workdept


5,
SELECT workdept,sex,avg(salary) AS AvgSal,AVG(bonus) AS AvgBon,AVG(comm) AS AvgComm
FROM employee
GROUP BY sex,workdept
ORDER BY workdept


6,
SELECT workdept,DECIMAL(AVG(bonus),9,2) AS AvgBon,DECIMAL(AVG(comm),9,2) AS AvgComm
FROM employee
GROUP BY sex,workdept
HAVING AVG(bonus)>500 AND AVG(comm)<5000
ORDER BY workdept

----------------------------------------------------


1,
2,
SELECT workdept,empno,lastname,salary
FROM
"USER".EMPLOYEE
WHERE workdept='A00'
UNION ALL
SELECT '','','',SUM(salary)
FROM
"USER".EMPLOYEE
WHERE workdept='A00'
3,
4,


-----------------------------------------------

1,
SELECT workdept,empno,lastname,salary
FROM EMPLOYEE
WHERE SALARY >= (
SELECT AVG(salary)+5000
FROM
"USER".EMPLOYEE)

2,
SELECT empno,lastname
FROM EMPLOYEE
WHERE empno NOT IN (
SELECT empno
FROM
emp_act)
ORDER BY empno


3,
SELECT projno,DAY(prendate-prstdate) AS DAYS
FROM project
WHERE (prendate-prstdate)=(
SELECT MIN(prendate-prstdate)
FROM project)


4,



______________________________________________________________________________________________________________________________________________________________________________________________


INSER INTO


Sima insert
INSERT INTO tablanév(oszlopnevek,....) VALUSE(értékek,......)

Egy SELECT eredményével feltölteni egy táblát
INSERT INTO tablanév
    SELECT * FROM másik tábla WHERE valami='ndfg'  


UPDATE



UPDATE tablanév SET oszlopnev=ertek WHERE feltéte


DELETE



DELETE FROM táblanév WHERE feltétel QUERYNO hánydbsort


DROP



vigyázni kell, ha olyat DROP-olunk ami kapcsolódik hozzá, azt is törli!!!!!

ALTER



ALTER TABLE talenév
ALTER

Nincsenek megjegyzések:

Megjegyzés küldése