Az oracle architektúra összetevői Oracle példány (instancia): háttérfolyamatok és memóriaszerkezetek együttese Oracle adatbázis: operációs rendszerbeli állományok halmaza (adatfájlok, kontrol fájlok, napló fájlok ... stb.) 1 példány csak 1 adatbázist tud kezelni! Real Application Clusters (RAC): Több példány kezel egy adatbázist Kapcsolódás a példányhoz: user folyamat - szerver folyamat -> session (munkamenet) Az oracle szerver lehetséges működési konfigurációi * kliens - alkalmazás szerver - szerver (köztes gép web szerver funkciókkal) * kliens - szerver (kliens gép, hálózat szerver gép) * gazda alapú (közvetlen bejelentkezés a szerver gépre) Az adatbázis állományai: Data files: az adatok ebben vannak Redo log files: módosítások naplózása van benne, helyreállításhoz kellenek Control files: mindenféle azonosítási, ellenőrzési információk vannak benne Paraméter file: a példány jellemzői vannak benne leírva Password file: speciális hitelesítéshez szükséges (példány indítás) Archive log: archivált napló állományok Egy lekérdezés feldolgozásának lépései: Elemzés (parse): (több végrehajtás esetén is elég egyszer) A user process elküldi az utasítást a szerver processnek A szerver process keresi az utasítást a shared poolban Szintaktikai ellenőrzés Adatszótár segítségével a táblák, oszlopok ellenőrzése Az elemzés idejére elemzési zárak az objektumokra, hogy ne változzanak Jogosultságok ellenőrzése Végrehajtási terv készítése Elemzési fa és végrehajtási terv betöltése a shared poolba Végrehajtás (execute): Adatblokkok beolvasása a pufferbe Műveletek elvégzése, esetleges rendezés átmeneti szegmensek segítségével Módosítás esetén zárak elhelyezése, naplózás, undo blokkok és adatblokkok írása Eredmény visszaküldése (fetch): A szerver folyamat a sorokat a megfelelő sorrendben visszaküldi a felhasználónak. A továbbítható sorok számától függően több átviteli fázisra is szükség lehet. (SET PAGESIZE, SET PAUSE ... stb.) Memóriaterületek: A területek mérete dinamikusan is változtatható -> ALTER SYSTEM SET param = érték SGA (System Global Area): példány indulásakor foglalódik le, közös terület, vagyis több folyamat is használja, részei: Osztott tartomány (shared pool) Könyvtárgyorsító (library cache), ezen belül sql és plsql terület Adatszótár gyorsító (dictionary cache vagy row cache) Adatblokk puffer (buffer cache) Naplópuffer (Redo log buffer) További opcionális területek: java pool, large pool (mentés, helyreállításhoz) A méreteket meghatározó legfontosabb inicializációs paraméterek: SGA_MAX_SIZE, DB_CACHE_SIZE, DB_KEEP_CACHE_SIZE, DB_RECYCLE_CACHE_SIZE, LOG_BUFFER, SHARED_POOL_SIZE, LARGE_POOL_SIZE, JAVA_POOL_SIZE PGA (Process Global Area): szerver folyamat indulásakor foglalódik le, nem közös terület vagyis csak egyetlen folyamat használja, részei: Rendezési terület (sort area) Session információk (dedikált szerver folyamat esetén van itt, shared szerver esetén a shared poolba, vagy ha van akkor a large poolba kerül) Aktuális kurzorok állapota (cursor state) Veremterület (stack space) Folyamatok Felhasználói (user process) -> pl. sqlplus Szerver folyamat (lehet dedikált vagy osztott): session létrehozásakor indul, ez hajtja végre a felhasználó utasításait és visszaküldi az eredményt Háttérfolyamat: a példány elindulásától kezdve fut, vannak kötelező és opcionális folyamatok (kötelezőek: DBWn, LGWR, PMON, SMON, CKPT) DBWn Több ilyen folyamat is futhat ha a hatékonyság úgy kívánja -> db_writer_processes paraméter Kiírja a módosított blokkokat (dirty buffers) a pufferből az adatállományokba. Több esemény is kiválthatja az írást, a legfontosabbak a következők: Checkpoint esetén; ha a piszkos blokkok száma elér egy határt; a szerver folyamat bizonyos számú blokkot már átvizsgált, de még nem talált szabad blokkot; adott idő elteltével; táblatér kikapcsolásakor; tábla törlésekor vagy csonkolásakor (truncate) LGWR A napló pufferből a napló állományokba írja a bejegyzéseket a következő esetekben: Commit esetén; 3 másodpercenként; ha a napló puffer egyharmadáig megtelt; mielőtt a DBWn lemezre ír. Napló állományból legalább két csoport van, a csoportokon belüli fájlok egymás tükrözései, a fájlok ciklikusan felülíródnak. Egy COMMIT végrehajtásának lépései: A szerver folyamat egy egyedi SCN-nel rendelkező véglegesítési rekordot ír a napló pufferbe Az LGWR a puffer teljes tartalmát lemezre írja A rendszer értesíti a felhasználót, hogy a COMMIT befejeződött Zárak, erőforrások felszabadítása A DBWn mindezektől függetlenül írja ki a piszkos blokkokat, ami történhet előtte v. utána ROLLBACK esetén nem kell írni, mivel a véglegesítési rekord hiánya miatt úgyis visszagörgetés történik egy esetleges hiba esetén. SMON Példányhiba esetén a legközelebbi újraindításkor automatikusan végrehajt egy helyreállítást: Előregörgetés: a naplóbejegyzések alapján, így minden véglegesített tranzakció helyreáll Adatbázis megnyitása a felhasználók számára A nem véglegesített tranzakciók visszagörgetése PMON Visszagörgeti a felhasználó félbeszakadt tranzakcióját Felszabadítja a zárakat és egyéb erőforrásokat CKPT Ellenőrzési pont művelet (checkpoint) esetén kiírja a checkpoint számát az adatfájlok fejlécébe, valamint a checkpoint számát, naplósorszámot, SCN-t, és archive napló nevét a kontroll állományba. Adatblokkokat nem ír lemezre. Maga a checkpoint művelet azt jelenti, hogy a DBWn az összes módosított blokkot a lemezre írja. Erre azért van szükség, hogy a gyakran módosuló blokkok is lemezre kerüljenek, és hogy a napló állományban is kitörölhetők (felülírhatók) legyenek a régi bejegyzések. További opcionális háttérfolyamatok RECO: helyreállító folyamat, elosztott adatbázis esetén QMNn: sorkezelés folyamata ARCn: archiváló folyamat LCKn: RAC környezetben, példány lefoglalások kezelése LMON: RAC környezetben, globális lefoglalások LMDn: RAC környezetben, távoli lefoglalások LMS: RAC környezetben, globális gyorsító szolgáltatás CJQ0: pillanatfelvétel frissítő folyamat Dnnn: diszpécser Snnn: osztott szerver folyamat Pnnn: párhuzamos lekérdezések szolga folyamata