Archív pre kategóriu 'Oracle'.

Tento článoček, alebo skôr záznam postupu vznikol z potreby migrovať dáta z MySQL do Oracle XE 10g pod OS Centos.

Postupne prerábam časti niektorých svojich projektov aby spolupracovali s Oracle miesto MySQL. Keďže má však Oracle XE verzia niektoré obmedzenia, hlavne týkajúce sa veľkosti databázy, bolo potrebné časť dát držať mimo, ale stále prístupné z Oracle.

Čítať ďalej »

Daniel

Oracle 11g uz aj pre dalsie platformy

Microsoft Windows (1.7 GB)
Linux x86 (1.7 GB)
Linux x86-64 (1.8 GB)

Objavil som veľmi dobrý článok / how-to (v angličtine) :

Oracle 11g RAC na Oracle Enterprise Linux 4(Update 5) a VMware Server 1.0.3

Konečne som sa dostal doma za mašinu a mám trochu voľného času, takže slúbené inštalačné how-to Oracle 11G x86 CentOS 5.

Ak ešte nemáte nainštalovaný CentOS 5 tak krok za krokom inštalácia pre VMWare sa nachádza tu.

Nastavíme kernel parametre v /etc/sysctl.conf pomocou vašeho obľúbeného text editora:

CODE:
  1. kernel.sem = 250 32000 100 128
  2. net.ipv4.ip_local_port_range = 1024 65000
  3. net.core.rmem_default=4194304
  4. net.core.rmem_max=4194304
  5. net.core.wmem_default=262144
  6. net.core.wmem_max=262144

Čítať ďalej »

Daniel

Oracle Databáza 11g je vonku

Oracle Databáza 11g je vonku, zatiaľ len pre platformu Linux x86 ale iné budú nasledovať. Download odkaz tu. V nasledujúcich dňoch sa pokúsim vyrobiť step-by-step inštalačné how-to pre CentOS 5. 11g má kopec nových fičúr, popísané tu a oficialne tu(PDF).

Daniel

Jonathan Lewis v Bratislave

V dňoch 21.03.2007 až 22.03.2007 som mal možnosť zúčastniť sa seminárov s nadpisom "Jonathan Lewis: Trouble Shooting and Tuning" a "Writing Optimal SQL with Jonathan Lewis". Musím konštatovať, že bolo ukázané / demonštrované veľa užitočných vecí. Mr. Lewis má 19+ rokov skúseností s Oracle, klobúk dolu. Pre tých ktorí nepristupujú k databáze ako ku čiernej skrinke a zaujímaju sa o detaily, vrele v budúcnosti odporúčam. Oracle Slovensko - čo tak v budúcnosti okoreniť podujatie po samotnom seminári súťažou "SQL Tuning", 1. cena Inštalačky Oracle 10G, 2. cena Oracle manuály(in print), 3. cena Inštalačky Oracle 10G(na disketách) ;-) Dúfam že bude v budúcnosti Oracle Slovensko pripravovať ďalšie skvelé akcie podobného typu, čo tak Tom Kyte? ;-)

Veľa krát sa stáva že naše sessions čakaju na event='enqueue', čakanie na úrovni tranzakcie. Kto blokuje a kto čaká sa dá jednoducho zistiť pomocou dictionary pohľadov DBA_WAITERS a DBA_BLOCKERS, ale ako zistiť na ktoré konkrétne riadky z tabuľky sa čaká? V pohľade v$session sa nachádzajú stĺpce ROW_WAIT_OBJ#, ROW_WAIT_FILE#, ROW_WAIT_BLOCK#, ROW_WAIT_ROW# a sú vyplnené v prípade event 'enqueue', podľa ktorých vieme spätne vyskladať pomocou funkcie DBMS_ROWID.ROWID_CREATE jednoznačný identifikátor riadku v každej Oracle tabuľke - ROWID.

SQL:
  1. SELECT SID,
  2.        DO.OWNER,
  3.        DO.OBJECT_NAME,
  4.        DBMS_ROWID.ROWID_CREATE(
  5.         1,
  6.         (SELECT DATA_OBJECT_ID
  7.             FROM DBA_OBJECTS AAA
  8.           WHERE AAA.OBJECT_ID =
  9.               ROW_WAIT_OBJ#),
  10.               ROW_WAIT_FILE#,
  11.               ROW_WAIT_BLOCK#,
  12.               ROW_WAIT_ROW#
  13.          ) AS "ROWID_STR"
  14.   FROM V$SESSION S,
  15.        DBA_OBJECTS DO
  16.  WHERE SID IN (SELECT SID
  17.                  FROM V$LOCK
  18.                 WHERE REQUEST = 6)
  19.    AND S.ROW_WAIT_OBJ# = DO.OBJECT_ID
  20. /
  21.  
  22.  
  23. SID  OWNER       OBJECT_NAME   ROWID_STR
  24. -------------------------------------------------
  25. 15   SOME_OWNER  TABLE_NAME    AAKpw0AM8AApp0VAAA
  26.  
  27.  
  28. SELECT * FROM SOME_OWNER.TABLE_NAME
  29.  WHERE ROWID = 'AAKpw0AM8AApp0VAAA'
  30. /

Daniel

Oracle Hard Parse Detector 1.0

Ora 'Hard Parse Detektor' je nástroj ktorý využijú najmä SQL developeri a databázový administrátori, pomôže Vám identifikovať ktoré selekty sú často "Hard Parsované" (viď. Oracle docs pre termíny a koncepty cacheovania) a zároveň aj počty nálezov týchto SQL príkazov v pohľade v$sqlarea, v pamäťovom regióne 'Library Cache'. Ako to funguje? Pre každý záznam z v$sqlarea nahradim číselné znaky za znakom '=' znakom '_', ďalej nahradím reťazce typu LIKE 'fwsefwe%' za LIKE '%', takto pripravené SQL používam vo where podmienke selektu typu:

SQL:
  1. SELECT COUNT(1) FROM TMP_OBRAZ_VSQLAREA
  2.     WHERE SQL_TEXT LIKE 'SELECT ..
  3.         WHERE COL1 = ____ AND COL2 LIKE ''%''';

Ktorým zistím presný počet výskytov tohto konkrétneho typu SQL vo v$sqlarea. Nepoužívanie bind variables v SQL typu OLTP zapríčiňuje neškálovatelnosť, mrhanie CPU zdrojmi a obrovké konkurentné latch čakania v pamäťovom regióne 'Shared Pool'.

Screenshot

Hash Value, ak nie sú použité bind premenné je samozrejme vždy iná a je uvedená len ako ukážka pre potreby rýchleho dohľadania konkrétneho typu selektu z v$sqlarea. SQL dotaz je zobrazený vo výsledkoch iba ak je počet výskytov vačší ako 1.

Tento program 'Hard Parse Detector' je poskytovaný tak ako je bez akejkoľvek podpory, autor nemože byť zodpovedný za použivanie a akékoľvek škody spôsobené používaním tohto programu. Program je možné pužívať iba na vlastné riziko. Licencia = Freeware.

Download Hard Parse Detector

Vyhľadávať v kóde v Oracle Vám pomôžu zrýchliť nasledovné techniky:

Balíky, funkcie a procedúry:

SQL:
  1. SELECT --+ORDERED PARALLEL(A)
  2.        B.OBJECT_NAME,
  3.        A.LINE,
  4.        A.SOURCE
  5.   FROM SYS.SOURCE$ A,
  6.        DBA_OBJECTS B
  7.  WHERE UPPER (A.SOURCE)
  8.         LIKE '%VYHLADAVANY RETAZEC%'
  9.    AND B.OWNER = 'OBJ_OWNER'
  10.    AND A.OBJ# = B.OBJECT_ID
  11. /

Pohľady:

SQL:
  1. -- vytvorime pomocnu tabulku
  2. CREATE TABLE VIEW_CONVERT
  3. (
  4.    OWNER VARCHAR2(255),
  5.    VIEW_NAME VARCHAR2(255),
  6.    VIEW_TEXT CLOB
  7. )
  8. NOLOGGING PARALLEL PCTFREE 0
  9. /
  10.  
  11. -- naplnime tabulku + konvertneme long stlpec
  12. INSERT --+APPEND
  13.        INTO VIEW_CONVERT NOLOGGING
  14.    SELECT --+PARALLEL(AA)
  15.           OWNER
  16.         , VIEW_NAME
  17.         , TO_LOB(TEXT)
  18.      FROM DBA_VIEWS AA
  19.     WHERE AA.OWNER = 'OBJ_OWNER'
  20. /
  21.  
  22. COMMIT
  23. /
  24.  
  25. -- vyhladavanie
  26. SELECT --+PARALLEL(A)
  27.        *
  28.   FROM VIEW_CONVERT A
  29.  WHERE VIEW_TEXT LIKE '%VYHLADAVANY RETAZEC%'
  30. /

Vytváranie indexov môžme urýchliť pomocou nasledovných kľúčových slov: NOLOGGING PARALLEL, príklad:

ALTER SESSION ENABLE PARALLEL DDL;

CREATE INDEX NAZOV_INDEXU ON NAZOV_TABULKY ( STLPEC1, STLPEC2, ..)
NOLOGGING PARALLEL
TABLESPACE NAZOV_TBS;

Pozor nastavenia nologging a parallel je nutné nastaviť do pôvodného stavu:

ALTER INDEX nazov_indexu LOGGING NOPARALLEL;

Na záver estimujeme štatistiky nad novovytvoreným indexom:


BEGIN
DBMS_STATS.GATHER_INDEX_STATS(
OWNNAME => 'vlastnik_indexu'
,INDNAME => 'nazov_indexu'
-- podla velkostu indexu, alebo mozme pouzit: DBMS_STATS.AUTO_SAMPLE_SIZE
, ESTIMATE_PERCENT => 10
-- celu operaciu sparallelizuj(podla nastavenia systemu a system HW)
, DEGREE => DBMS_STATS.DEFAULT_DEGREE
);
END;

Poznámka: Na v.10G sú štatistiky zbierané automaticky pri vytvárani indexu.