125 minutový seminář ONLINE Oracle DBA: Architektura databáze Oracle 12c

40 minutový seminář ONLINE Oracle DBA: STARTUP 

Nejčastěji skloňovanými slovy jsou instance a databáze. V literatuře, a to i v odborné, se tyto pojmy volně zaměňují, což vede ke zmatení čtenáře. Je proto důležité pochopit rozdíl mezi instancí a databází. V běžné řeči se slovem databáze označuje vše, co uchovává nějaká data, informace, a to v jakékoli podobě. V podstatě s tím lze souhlasit, ale je potřeba si uvědomit, že databáze z pohledu Oracle je něco trochu odlišného.

Máte pochyby, zda externí DBA je pro Vás to pravé?

PRVNÍ MĚSÍC VZDÁLENÉ ADMINISTRACE ZDARMA. Čtěte více. Ověřte si, že daná spolupráce funguje.

Začněme tedy od začátku.

Než budete moci s Oracle db pracovat je potřeba nainstalovat soft ware Oracle, který si můžete stáhnout z OTN (Oracle technology network) z WWW stránek otn.oracle.com. Zde si zvolíte jakou verzi soft waru Oracle chcete a v závislosti na operačním systému vyberete tu pravou. Stáhnete zabalený soubor, který na svém databázovém serveru nainstalujete. Databázový server je server, který je primárně určen k běhu jedné nebo více databází. Dle jeho zaměření je tedy potřeba věnovat dostatek času výběru všech komponent, hlavně velikosti RAM paměti a disku, jelikož tyto veličiny mají zásadní vliv na výkonnost serveru. Po instalaci soft waru Oracle se vám na serveru vytvoří základní struktura, která je na všech serverech stejná, s tím rozdílem, že vy si volíte jen hlavní (základní) tzv. base adresář. Jeho proměnná je defi novaná jako ORACLE_BASE. ORACLE_BASE je domovský adresář pro soft ware Oracle. Ostatní podadresáře jsou pojmenovány a uloženy dle standardů OFA (oracle flexibile architecture). OFA nepopisuje jen podadresáře, ale pojednává se v ní i o jmenných konvencích pro soubory, přípojné body, přípony souborů nebo pojmenování tabulkových prostorů. OFA byla napsaná hlavně pro systémy založené na systému UNIX, ale některá doporučení lze aplikovat i na systémy Windows. Velmi často jste dotazováni na ORACLE_HOME, například při různých instalacích, což je vlastně odvozená proměnná od ORACLE_BASE. Hodnota proměnné ORACLE_HOME je shodná s hodnotou, která je zapsaná v souboru oratab. Pro databázi Oracle 11g je její předdefinovaná hodnota /u01/app/oracle/product/11.1.0/db_1 kde ORACLE_BASE je /u01/app/oracle/.
Mezi verzi databáze 10g a 11g došlo k zásadní změně a byl představen nový adresář ADR_HOME, pod kterým se uchovávají veškeré logovací a trasovací soubory ke všem databázím a komponentám běžící na serveru a související s produkty Oracle. Jeho hodnota je ORACLE_HOME/diag/. Architektura OFA je podrobně popsaná v dokumentaci, a proto není potřeba sejí více věnovat.
Po instalaci soft waru Oracle si nainstalujete databázi příslušné verze. Databázi instalujete do příslušného adresáře ORACLE_HOME, kde se dokopírují potřebné soubory, a hlavně vytvořítei datové soubory dané databáze. Dle OFA se umístí do adresáře /u01/oradata. Jestli databázi vytvoříte pomocí asistenta dbca, pak se databáze automaticky spustí, ale předpokládejte, že je databáze zastavená. Určitě víte, že databáze se otvírá ve více krocích. Jednotlivé kroky si teď popíšeme a na postupném otevření databáze si také vysvětlíme vše důležité k pochopení principu fungování databáze Oracle.

Inicializační soubor

Po nainstalování soft waru a databáze pomocí dbca se vytvořil i základní init soubor, jehož jmenná konvence je vždy stejná. Jedná-li se o dynamický soubor spfi le, pak to je spfile.ora nebo textový soubor init.ora. Textový soubor můžete libovolně editovat, ale změny v databázi se promítnou až po jejím restartování. Naopak dynamický spfile nemůžete měnit přímo, ale parametry můžete měnit za běhu databáze. Samozřejmě jen ty, u kterých to je povoleno. V init souboru jsou uloženy hodnoty všech zásadních parametrů. Jako nejdůležitější z nich lze označit parametr db_name, kde za rovnítko napíšete jméno vaší databáze a parametr control_fi les, kde zadáte cestu ke kontrolnímu souboru nebo souborům. Samozřejmě zde nastavujete různé parametry týkající se paměti, redo souborů, logovacích adresářů (adump), chování CBO, přístupy k diskům a mnoho dalších parametrů, které se mění tak, jak ladíte svou databázi. Nebudeme se zde věnovat všem parametrům.

Nomount, rozložení paměti a základní procesy

Je-li vytvořen init soubor můžete databázi otevřít v nomount režimu. Tímto krokem nastartujete vaši instanci. Záměrně mluvím o instanci, protože instance není nic jiného než spuštění základních procesů databáze a alokování paměťových struktur databáze v paměti RAM. V prostředí RAC (real application cluster) lze pojem instance vysvětlit daleko lépe. Máte zde totiž jednu databázi, která se jmenuje například orcl. Tato klastrová databáze je rozprostřena mezi více nodů (serverů), ale na každém nodu běží její instance zvlášť. Na node1 instance orcl1 a na node2 instance orcl2. Obě instance používají společné datové soubory a dohromady vytváří databázi orcl. Z prostředí sqlplus zadáte příkaz startup nomount. Máte-li správně nastavené prostředí například pomocí utility oratab, pak se bude vyhledávat init soubor v adresáři ORACLE_HOME/dbs. Jakmile se najde, začne se číst řádek po řádku a nastaví vše tak, jak je v něm zadáno. Jsou-li v init souboru všechny parametry platné, databáze se nastartuje v nomount režimu. To znamená, že v paměti RAM se alokují veškeré potřebné pamětové struktury sdílené paměti, které se říká SGA (system global area). Zároveň se nastartují všechny systémové neboli background procesy, které se starají o vlastní běh databáze. Z hlediska ladění databáze je důležité vědět, jak je paměť SGA segmentovaná a která část k čemu slouží. Velikost SGA paměti se nastavuje pomocí parametru SGA_TARGET, tento parametr má největší vliv na nastavení a rozložení vaší paměti a měl by se stát prvním kandidátem při ladění vaší databáze. Není však jediný, paměť SGA je rozložena na další, dílčí paměti, jako je Database buffer cache. Buffer cache se používá při veškeré komunikaci s datovými soubory a při jejím nesprávném použití dochází k výraznému čtení z datových souborů. K nastavení velikosti buffer cache slouží parameter DB_CACHE_SIZE. Jak víte čtení z datových souborů je několikanásobně pomalejší než čtení z pamětí. Další část paměti se jmenuje Redo log buffer, z názvu je patrné, že tato paměť slouží primárně při komunikaci s redo logy. Redo log soubory jsou soubory, do kterých se ukládají informace o veškeré činnosti databáze. Vše, co se v databázi děje, je zaneseno do redo log souborů. Z toho je patrné, že redo log soubory jsou nejčastěji přistupované soubory a velikost redo log bufferu zásadním dílem ovlivňuje rychlost, s jakou jsou data do daných souborů zapisována nebo z nich čtena. K nastavení redo log bufferu slouží parametr LOG_BUFFER. Další ze skupiny paměťových segmentů v SGA paměti je Shared pool. Sdílená paměť shared pool slouží k uchovávání všech konstrukcí SQL dotazu, informace o kurzorech a veškerá metadata k objektům, které mohou být sdíleny mezi všemi uživateli. K nastavení shared pool slouží parameter SHARED_POOL_SIZE. Paměť shared pool se dá ještě rozdělit na menší části z nichž nejdůležitější jsou Shared SQL area. Shared SQL area obsahuje informace o všech SQL dotazech, jejich exekučních plánech, složení dotazů atd. Jelikož se jedná o sdílenou paměť, uživatel, který vykoná dotaz stejný jako uživatel před ním, nepotřebuje již parsovat (rozkládat SQL dotaz), ale využije již vygenerovaný exekuční plán, a tudíž je jeho odezva daleko rychlejší než v prvním případě. Library cache v sobě uchovává spouštěné balíky z různých knihoven,které jsou použity (plsql procedury atd.), Data dictionary cache uchovává informace o objektech, se kterými se pracuje v paměti, aby nebylo třeba všechny informace pokaždé číst z datového slovníku. Další částí SGA paměti je Large pool, což je část paměti určena pro operace, které jsou náročné na IO. Ve většině případů se jedná o zálohy a obnovu případně nějaké serverové procesy. Nastavuje se pomocí parametru LARGE_POOL_SIZE. Poslední z pamětí, které stojí za zmínku je Java pool, slouží pro vykonávání kódu v Javě a JVM (java virtual machine) a Streams pool, který slouží pro technologii Oracle Streams. Mluvilo se zde o paměti SGA, která je sdílena mezi všechny uživatele, ale existuje ještě paměť PGA (program global area), která se alokuje zvlášť pro každý serverový proces a uchovává v sobě informace vždy pro konkrétní připojení. Velikost PGA paměti se nastavuje parametrem PGA_AGGREGATE_TARGET. V databázi 10g byl představen koncept ASMM (automatic shared memory management), což je velmi přínosná věc. Nechcete-li se zabývat ručním nastavením výše zmíněných parametrů, stačí tuto volbu aktivovat. Nastavit parametr SGA_TARGET na nenulovou hodnotu. Jakmile je ASMM zapnuté databáze sama provádí dynamicky změnu pamětových parametrů v závislosti na aktuální potřebě. Při nastartování databáze v nomount režimu se alokovala paměť, její jednotlivé části byli stručně popsány. Dalším krokem je spuštění background procesů. Než přistoupíte k backgroud procesům, je potřeba si uvědomit, že každý uživatel nebo aplikace generuje uživatelské procesy tzv. user procesy. Uživatelským procesem může být třeba připojení do databáze pomocí sqlplus.
Každý uživatelský proces může generovat jeden nebo více server procesů v závislosti na příkazech, které chce vykonávat uvnitř databáze. Uživatelské procesy jsou vytvořeny v případě,kdy se uživatel nebo aplikace snaží připojít do databáze. Serverové procesy se vytvoří tehdy, podaří-li se navázat spojení mezi uživatelským procesem a databází. Oproti tomu background procesy jsou vytvořeny ihned, jakmile je databáze otevřena, a to je v libovolném režimu. Existuje mnoho background procesů a jejich počet se zvyšuje v závislosti na komponentách, které běží. Například při nasazení RAC nebo ASM se spustí další procesy, které budou zajišťovat vzájemnou komunikaci. Ale u běžné single instance jsou tyto základní procesy.

Nomount, rozložení paměti a základní procesy

SMON (System monitor process) je proces, který je zodpovědný za obnovu instance při startu,je-li to nutné. Čistí dočasné segmenty, které již nejsou potřeba.
PMON (Process monitor) kontroluje běžící procesy a stará se o jejich opětovné spuštění. Zárověn provede rollback na operace, které nebyly potvrzeny příkazem commit. Má také na starosti registraci uživatelských procesů a přiřazování serverových procesů, alokování zdrojů.
DBWn (Database writer process) je základní proces, který má na starosti čtení a zápis do datových souborů. Komunikace probíhá mezi databázovou pamětí Cache a datovými soubory. Malé n značí číslo procesu, neboť daných procesů může být více. Například u RAC.
LGWR (Log writer process), je proces, který má na starosti čtení a zápis do redo log souborů. Zapisuje data z redo log buff eru do redo log souborů každé 3 vteřiny nebo při potvrzení transakce příkazem commit nebo je-li redo log buffer z 1/3 zaplněn.
CKPT (Checkpoint process) je proces, který vyvolává tzv. checkpoint, což je operace, kdy dochází k synchronizaci mezi všemi soubory databáze, a to z důvodů konzistence dat. Provádí se automaticky dle vnitřních pravidel nebo manuálně pomocí log switche.
ARCH (Archiver) je proces, který je vytvořen v případě, že databáze běží v archivním módu a má na starosti zazálohování redo log souborů do archivních souborů. Jak jsem zmínil na začátku, background procesů je daleko více, ale není důvod vypisovat zde všechny. Pouze v nomount režimu můžete provést obnovu kontrolního souboru.

Mount, kontrolní soubor a další typy souborů

Abyste mohli databázi přepnout do mount režimu, musíte mít kromě inicializačního souboru dostupný i kontrolní soubor. Při přepnutí do mount režimu se načte kontrolní soubor a kontroluje se dostupnost všech souborů zmíněných v kontrolním souboru. V mount režimu se provádí obnova všech datových souborů, přejmenování datových souborů, přidání, mazání nebo přejmenování redo log souborů. V mount režimu také přepínáte databázi do archivního režimu. Kontrolní soubor je soubor ve kterém jsou informace o fyzickém uspořádání databáze. To znamená veškeré cesty k souborům, jejich pojmenování, zároveň jsou zde uloženy informace o redo log souborech a veškeré informace o provedených zálohách pomocí RMANa. Bez kontrolního souboru není možné databázi přepnout do režimu open. Pro přepnutí databáze do nomount režimu musíte mít inicializační soubor. Pro přepnutí do mount režimu musíte mít navíc kontrolní soubor, ale databáze se skládá z různých souborů. Další soubory, které tvoří databázi jako celek, jsou datové soubory, což jsou soubory, ve kterých máte uložena veškerá data. Redo log soubory uchovávají informace o veškerých změnách provedených v databázi. Pak zde jsou backup soubory, což jsou zálohy datových souborů. Archivní soubory jsou zálohy online redo log souborů. Neméně důležitý je soubor hesel tzv. password file, ve kterém definujete uživatele s oprávněním sysdba, kteří se do databáze mohou přihlásit vzdáleně. Tento soubor se používá při ověřování uživatele pomocí databáze. Oproti tomu existuje ještě ověření uživatele pomocí operačního systému. Nejdůležitější soubor, který vám slouží k monitorování databáze je alert.log. Zde dohledáte veškeré chyby, které se v databázi vyskytly. Pakliže je v alert.logu zaznamenaná nějaká chyba, většinou se vygeneruje ještě příslušný trace file, což je soubor s dodatečnými informacemi o chybě. Jsou-li veškeré soubory na svém místě můžete databázi otevřít.

Open, otevření databáze

Přepnete-li databázi do režimu open, a to buď příkazem startup, nebo příkazem alter systemz režimu mount, neprovedete nic jiného než připojení všech souborů. Od této chvíle je databáze připravena k použití a vy můžete data ze souborů číst nebo do nich zapisovat. Jakmile je databáze otevřená můžete pracovat se všemi objekty v databázi. Jaké objekty v databázi vlastně jsou? Databáze Oracle byla původně navržena jako relační databáze, z toho také plyne uspořádání do tabulek. Samozřejmě, že v databázi můžete pracovat i objektově, ale pro pochopení principu uložení dat budeme vycházet z tabulek.

Shutdown, zavření databáze

Stejně jako se databáze otevírá, musí se i zavřít. Existují různé způsoby jak zavřít databázi. K zavření databáze se používá příkaz shutdown a pak jen specifi kace, jak se má databáze zavřít. Ať to je normal, což je způsob, jak se databáze zavře, nebudete-li defi novat další parametr. V tomto případě se počká na dokončení běžících operací. Další způsob je immediate, kdy se zavřou veškerá připojení (sessions) a provede se rollback započatých operací. Shutdown abort násilně ukončí veškeré operace, aniž by provedl rollback. Při následném otevření se musí odrolovat veškeré zrušené operace.
Více se dočtete v knize Oracle Databáze 11g – Hotová řešení zde



Komentáře