adminisztrációs feladatok ORACLE ORDBMS adminisztrációs feladatok 10. rész 2004 dr. Kovács László
Oracle teljesítménynövelés Biztosítani kell a működéshez szükséges válaszidőt real time DB OLTP OLAP on –line: 2-30 sec A felmérések alapján a gyenge teljesítmény okai: OS 2.5% RDBMS 17.5% Alkalmazás 60% DB Tervezés 20% A helyreállítási költségek: OS 5% RDBMS 15% Alkalmazás 15% DB tervezés 65%
Hatékonyság javító lépések 1.Adatmodell de-normalizáció - több értékű mezők bevonása a táblába - kódok helyet teljes érték - részösszegek tárolása - mesterséges kulcsok alkalmazása 2. FOREIGN KEY használata készítsünk index-et az idegen kulcs mezőhöz is a kulcs megszűnése zárolja a hivatkozást
Rekord elérési módszerek ROWID FULL SCAN INDEX SCAN - B-tree - bitmap - CLUSTER HASH JOIN - Nested Loop - Sorted Merge - Hash Join
Hatékonyság javító lépések 1. SQL parancsok - szabványos formában adjuk meg a parancsokat, hogy az RDBMS fel tudja ismerni őket. - kétfázisú végrehajtás beágyazott SQL-ben -használjuk a COST alapú optimalizálást, futtassuk az ANALYZE TABLE tnev COMPUTE STATISTIC ANALYZE TABLE tnev ESTIMATE STATISTIC ANALYZE TABLE tnev DELETE STATISTIC ANALYZE TABLE tnev VALIDATE ANALYZE INDEX ANALYZE CLUSTER parancsot
Hatékonyság javító lépések 1. SQL parancsok - A join-nál ügyeljünk a táblák megadási sorrendjére: FROM A,B nem ugyanaz mint FROM B.,A (a nagyobb méretű tábla neve szerepeljen előbb) - A tábla alias név használata javasolt - Az AND –nél a legutolsó feltételt értékeli ki elsőként - Az OR –nál a legelső feltételt értékeli ki elsőként - Ha lehet használjunk ROWID-t he lehet használjunk DECODE DECODE (kif, e1, k1, e2,k2,…, kv)
Hatékonyság javító lépések 1. SQL parancsok: - Használjunk unique, single-column indexet - Indexet csak a teljes mezőre vonatkozó feltételnél tud használni, ezért a teljes index-kifejezés szerepeljen a szelekciós kifejezésben - A DISTINCT mindig rendezést jelent - A COUNT mindig rendezést jelent - GROUP BY mindig rendezést jelent - A HAVING és GROUP BY tagokat együtt értékeli ki a rendszer
Hatékonyság javító lépések 1. optimalizálás kézi szabályozása: SELECT /* direktíva */ .. FROM … ALL_ROWS FIRST_ROW DYNAMIC_SAMPLING REWRITE FULL NO_INDEX(m) INDEX(m) USE_NL USE_HASH USE_MERGE
Hatékonyság ellenőrzése EXPLAIN PLAN [SET STATAMEN_DID =‘id’] [INTO tabla] FOR sql_parancs; Az eredmény a PLAIN_TABLE-be kerül OPERATION OPTIONS OBJECT_NAME COST ROWS ID … ORACLE_HOME/RDBMS/SCRIPTS/UTLXPLS.SQL
Hatékonyság ellenőrzése EXPLAIN PLAN FOR SELECT * FROM t1; COL QUERY FORMAT A04 SELECT OPERATION || ‘ ‘|| OPTIONS || ‘ ON ‘ || OBJECT_NAME ”QUERY”, COST, ROWS, BYTES FROM PLAN_TABLE ORDER BY ID; QUERY COST ROWS ------------------------------------ -------------- --------------- SELECT STATEMENT 778 752314 TABLE ACCESS FULL on T1 778 752314
Hatékonyság ellenőrzése SQL TRACE Egy nyomkövetési lista készíthető a DBMS működéséről ALTER SYSTEM ALTER SESSION Túl költséges!! SET STATISTIC_LEVEL = ALL SET SQL_TRACE = TRUE | FALSE SHOW PARAMETERS TRACE ../admin/SID/udump/*.trc
Hatékonyság ellenőrzése select grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,0),2)) From objauth$ where obj#=:1 group by grantee#,privilege#,nvl(col#,0) order by grantee# call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 9 0.00 0.00 0 0 0 0 Fetch 20 0.00 0.00 0 29 0 11 total 30 0.00 0.00 0 29 0 11 Misses in library cache during parse: 1 Misses in library cache during execute: 1 Optimizer mode: CHOOSE Rows Row Source Operation ------- --------------------------------------------------- 0 SORT GROUP BY (cr=2 pr=0 pw=0 time=18 us) 0 TABLE ACCESS BY INDEX ROWID OBJAUTH$ (cr=2 pr=0 pw=0 time=8 us) 0 INDEX RANGE SCAN I_OBJAUTH1 (cr=2 pr=0 pw=0 time=7 us)(object id 103)
Hatékonyság ellenőrzése Trace lista formátumozott kiírása TKPROF segédprogram
Hatékonyság ellenőrzése ALTER INDEX … REBUILD ALTER SESSION SET OPTIMIZER MODE = RULE | ALL_ROWS | FIRST_ROWS SELECT … FROM … GROUP BY m1, m2 GROUP BY ROLLUP (m1,m2) GROUP BY CUBE (m1,m2) SEQUENCE m m.NEXTVAL m.CURRVAL
Replikáció Bizonyos adatokat redundánsan is tárolhat a rendszer hatékonyság: - párhuzamosítás - gyorsabb hozzáférés - kisebb hálózati forgalom karbantartás - önálló adminisztráció - egyedi tárolási paraméterek adatvédelem - adatvesztés ellen jobban védett - önálló állományszintű védelmi lehetőség
Replikáció Replikálható objektumok: Tables Indexes Views Packages and Package Bodies Procedures and Functions Triggers Sequences Synonyms Replikációs csoport: logikailag összetartozó objektumok, azonos replikációs paraméterekkel Replikációs csomópont lehet: Master site: minden adat pontos másolata rajta van Snapshot site: csak bizonyos adatok, bizonyos időpontbeli képe van rajta
Replikáció replikációs stratégiák - Multimaster minden csomóponton teljes másolat helyezkedik el, az alkalmazásnak elegendő csak egy helyen elvégezni a módosítást - Snapshot teljes adatoknak csak egy időszakosan frissített, szűkített képe van jelen a csomóponton lehet : csak olvasható írható és olvasható a snapshot –on végzett módosítás automatikusan elmegy a master helyekre - Mixed
Replikáció snapshot frissítés módjai: fast (napló alapú) complete (teljes) force (megpróbál előbb gyors frissítést tenni)
Replikáció Replikáció típusai: Szinkron replikáció: a változások egy master helyen rögtön továbbítódnak a többi helyre. Minden master hely módosítása egy tranzakción belül megy végbe, ezért, ha valahol nem sikerül a módosítás, akkor a többi master helyen is visszagörgetődik a tranzakció. Aszinkron replikáció: a master helyen elvégzett módosítások egy későbbi időben, külön tranzakcióban hajtódnak végre Procedurális replikáció: nagy adatmennyiségek módosítása esetén hasznos. Ekkor csak a módosító eljárás kerül át a többi helyre, az adatok nem mozognak a hálózaton. Minden helyen lefut a módosító eljárás.
SQLPlus hatékony, parancs orientált eszköz a gyakorlott felhasználók számára funkciói: SQL és PL/SQL parancsok, parancsállományok készítése információ lekérdezés jelentés generálás különböző adatbázisok közötti műveletek adatbázis adminisztrálás >sqlplus // bejelentkezés sql> EXIT sql> HOST parancs sql> SELECT … sql>@pfile
SQLPlus Az SQL parancsok végrehajtása történhet: - explicit tranzakció vagy - autocommit mód keretében SET AUTOCOMMIT ON SET AUTOCOMMIT OFF SET AUTOCOMMIT n sql> DECLARE 2 x NUMBER; 3 BEGIN 4 x := 4; 5 END; 6 . sql> / Az utolsó parancsot megőrzi sql> / sql>LIST sql>SAVE filenév sql>GET filenév sql>CLEAR BUFFER
SQLPlus A működést számos környezeti változó jelöli ki SET paramnév érték STORE SET paramfile SHOW paramnév SET VERIFY ON|OFF SET DEFINE karakter SET ESCAPE karakter SET TERMOUT ON|OFF SET PAGESIZE n SET LINESIZE n SET ECHO ON|OFF SET FEEDBACK ON|OFF
SQLPlus Interaktív lehetőségek: &változó &&változó &n sql> CLEAR BUFFER sql> INPUT 1 SELECT &CSOP_M, 2 MAX(&ERTEK_M) MAXI 3 FROM &TABLA 4 GROUP BY &CSOP_M 5 sql> SAVE STATS sql>SELECT … FROM .. WHERE szam = &s AND szoveg = ‘&s’ AND datum = TO_DATE (‘&s’,’YYYY.MM.DD’) szam2 = &1 … sql>@STATS Enter value for csop_m: OSZT old 1: SELECT &CSOP_M, new 1: SELECT OSZT, …
SQLPlus Interaktív lehetőségek: DEFINE DEFINE változó DEFINE változó érték UNDEFINE változó PROMPT szöveg PROMPT ‘HELLO’ UNDEFINE m SET VERIFY OFF sql> DEFINE sql>DEFINE m = alma sql> SELECT .. WHERE mszoveg = ‘&m’ sql>DEFINE m = 2 sql> SELECT .. WHERE mszam = &m
Interaktív lehetőségek: ACCEPT változó típus PROMPT szöveg HIDE PAUSE szöveg ACCEPT v CHAR PROMPT ‘Tipus:’ SELECT * FROM tabla WHERE tt = &v … ACCEPT v CHAR PROMPT ‘Tipus:’ HIDE
SQLPlus Jelentés készítési lehetőségek: REPHEADER PAGE szöveg REPFOOTER szöveg TTITLE LEFT | CENTER | RIGHT szöveg SKIP n TTITLE OFF BTITLE … COLUMN mező ON | OFF COLUMN mező HEADING szöveg FORMAT formátum WORD_WRAPPED NEWVALUE változó NOPRINT CLEAR SCREEN
SQLPlus Jelentés készítési lehetőségek: BREAK ON mező SKIP n PAGE BREAK ON REPORT COMPUTE kifejezés OF mező ON mező SPOOL filenév SPOOL OFF SPOOL OUT CLEAR COLUMNS BREAKS SQL.PNO SQL.LNO SQL.USER SQL.CODE SUM MIN MAX COUNT AVG
SQLPlus Kapcsoló változók használata SQLPlus PL/SQL :X X VARIABLE változó típus PRINT változó VARIABLE változó REFCURSOR EXECUTE eljárás(:változó) EXECUTE :változó := függvény(..) :X = :X + 1; OPEN :X FOR SELECT ..
SQLPlus -- uj felhasznalo letrehozasa accept nev prompt 'nev:' accept jsz prompt 'jelszo:' hide create user &nev identified by &jsz; Új parancsfile generálása SPOOL file SELECT ‘SELECT …’ FROM … SELECT DECODE (kif,e1,e2,…) … SPOOL OFF @file
SQLPlus set verify off set feedback off set heading off set pagesize 0 def uname = &&1 def fname = &&2 spool &fname select ‘set echo on’ from dual; select ‘drop ‘||object_type||’ ‘||owner||’.’||object_name||’;’ from dba_objects; where owner like ‘&uname’; select ‘set echo off’ from dual; spool off set newpage 1