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 »
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:
-
kernel.sem = 250 32000 100 128
-
net.ipv4.ip_local_port_range = 1024 65000
-
net.core.rmem_default=4194304
-
net.core.rmem_max=4194304
-
net.core.wmem_default=262144
-
net.core.wmem_max=262144
Čítať ďalej »
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).
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:
-
SELECT SID,
-
DO.OWNER,
-
DO.OBJECT_NAME,
-
DBMS_ROWID.ROWID_CREATE(
-
1,
-
(SELECT DATA_OBJECT_ID
-
FROM DBA_OBJECTS AAA
-
WHERE AAA.OBJECT_ID =
-
ROW_WAIT_OBJ#),
-
ROW_WAIT_FILE#,
-
ROW_WAIT_BLOCK#,
-
ROW_WAIT_ROW#
-
) AS "ROWID_STR"
-
FROM V$SESSION S,
-
DBA_OBJECTS DO
-
WHERE SID IN (SELECT SID
-
FROM V$LOCK
-
WHERE REQUEST = 6)
-
AND S.ROW_WAIT_OBJ# = DO.OBJECT_ID
-
/
-
-
-
SID OWNER OBJECT_NAME ROWID_STR
-
-------------------------------------------------
-
15 SOME_OWNER TABLE_NAME AAKpw0AM8AApp0VAAA
-
-
-
SELECT * FROM SOME_OWNER.TABLE_NAME
-
WHERE ROWID = 'AAKpw0AM8AApp0VAAA'
-
/
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:
-
SELECT COUNT(1) FROM TMP_OBRAZ_VSQLAREA
-
WHERE SQL_TEXT LIKE 'SELECT ..
-
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.

Vyhľadávať v kóde v Oracle Vám pomôžu zrýchliť nasledovné techniky:
Balíky, funkcie a procedúry:
SQL:
-
SELECT --+ORDERED PARALLEL(A)
-
B.OBJECT_NAME,
-
A.LINE,
-
A.SOURCE
-
FROM SYS.SOURCE$ A,
-
DBA_OBJECTS B
-
WHERE UPPER (A.SOURCE)
-
LIKE '%VYHLADAVANY RETAZEC%'
-
AND B.OWNER = 'OBJ_OWNER'
-
AND A.OBJ# = B.OBJECT_ID
-
/
Pohľady:
SQL:
-
-- vytvorime pomocnu tabulku
-
CREATE TABLE VIEW_CONVERT
-
(
-
OWNER VARCHAR2(255),
-
VIEW_NAME VARCHAR2(255),
-
VIEW_TEXT CLOB
-
)
-
NOLOGGING PARALLEL PCTFREE 0
-
/
-
-
-- naplnime tabulku + konvertneme long stlpec
-
INSERT --+APPEND
-
INTO VIEW_CONVERT NOLOGGING
-
SELECT --+PARALLEL(AA)
-
OWNER
-
, VIEW_NAME
-
, TO_LOB(TEXT)
-
FROM DBA_VIEWS AA
-
WHERE AA.OWNER = 'OBJ_OWNER'
-
/
-
-
COMMIT
-
/
-
-
-- vyhladavanie
-
SELECT --+PARALLEL(A)
-
*
-
FROM VIEW_CONVERT A
-
WHERE VIEW_TEXT LIKE '%VYHLADAVANY RETAZEC%'
-
/
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.