Partícionálás ------------- (DBA_PART_TABLES, DBA_PART_INDEXES, DBA_TAB_PARTITIONS, DBA_IND_PARTITIONS, DBA_TAB_SUBPARTITIONS, DBA_IND_SUBPARTITIONS, DBA_PART_KEY_COLUMNS) Adjuk meg az SH felhasználó tulajdonában levő partícionált táblák nevét és a particionálás típusát. select * from dba_part_tables where owner='SH'; Soroljuk fel az SH.COSTS tábla partícióit valamint, hogy hány blokkot foglalnak az egyes partíciók. (Vigyázat! Különböző értéket kaphatunk a különböző adatszótárakban. Ennek magyarázatát lásd később az ANALYZE parancsnál) select * from dba_tab_partitions where table_owner='SH' and table_name='COSTS'; Adjuk meg, hogy az SH.COSTS tábla mely oszlop(ok) szerint van particionálva. select * from dba_part_key_columns where owner='SH' and name='COSTS' and object_type='TABLE'; Adjuk meg, hogy a NIKOVITS.ELADASOK3 illetve az SH.COSTS táblák második partíciójában milyen értékek szerepelhetnek. select * from dba_tab_partitions where table_owner='NIKOVITS' and table_name='ELADASOK3' or table_owner='SH' and table_name='COSTS'; Adjuk meg egy partícionált tábla logikai és fizikai részeit (pl. NIKOVITS.ELADASOK). Maga a tábla most is logikai objektum, a partíciói vannak fizikailag tárolva. Nézzük meg az objektumok és a szegmensek között is. select * from dba_objects where owner='NIKOVITS' and object_name='ELADASOK'; select * from dba_segments where owner='NIKOVITS' and segment_name='ELADASOK'; Illetve ha alpartíciói is vannak (pl. nikovits.eladasok4), akkor csak az alpartíciók vannak tárolva. Nézzük meg az objektumok és a szegmensek között is. select * from dba_objects where owner='NIKOVITS' and object_name='ELADASOK4'; Melyik a legnagyobb méretű partícionált tábla az adatbázisban a partíciók összméretét tekintve? (az alpartícióval rendelkező táblákat is vegyük figyelembe) select owner, segment_name, sum(bytes) from dba_segments where segment_type like 'TABLE%PARTITION' GROUP BY owner, segment_name ORDER BY sum(bytes) desc; Klaszter (CLUSTER) ------------------ (DBA_CLUSTERS, DBA_CLU_COLUMNS, DBA_TABLES, DBA_CLUSTER_HASH_EXPRESSIONS) Hozzunk létre egy DOLGOZO(dazon, nev, beosztas, fonoke, fizetes, oazon ... stb.) és egy OSZTALY(oazon, nev, telephely ... stb.) nevű táblát. (lásd NIKOVITS.DOLGOZO és NIKOVITS.OSZTALY) A két táblának az osztály azonosítója (oazon) lesz a közös oszlopa. A két táblát egy index alapú CLUSTEREN hozzuk létre. (Előbb persze létre kell hozni a clustert is.) Majd tegyünk bele 3 osztályt, és osztályonként két dolgozót. Adjunk meg egy olyan clustert az adatbázisban (ha van ilyen), amelyen még nincs egy tábla sem. SELECT owner, cluster_name FROM dba_clusters MINUS SELECT owner, cluster_name FROM dba_tables; Adjunk meg egy olyant, amelyiken legalább 6 darab tábla van. SELECT owner, cluster_name FROM dba_tables WHERE cluster_name IS NOT NULL GROUP BY owner, cluster_name HAVING COUNT(*) >= 6; Adjunk meg egy olyan clustert, amelynek a cluster kulcsa 3 oszlopból áll. (Vigyázat!!! Több tábla is lehet rajta) SELECT owner, cluster_name FROM dba_clu_columns GROUP BY owner, cluster_name HAVING COUNT(DISTINCT clu_column_name) = 3; HASH CLUSTER Hány olyan hash cluster van az adatbázisban, amely nem az oracle alapértelmezés szerinti hash függvényén alapul? SELECT COUNT(*) FROM (SELECT owner, cluster_name, hash_expression FROM dba_cluster_hash_expressions) Hozzunk létre egy hash clustert és rajta két táblát, majd szúrjunk be a táblákba sorokat úgy, hogy a két táblának 2-2 sora ugyanabba a blokkba kerüljön. Ellenőrizzük is egy lekérdezéssel, hogy a 4 sor valóban ugyanabban a blokkban van-e. (A ROWID lekérdezésével) TIPP: A sorok elhelyezését befolyásolni tudjuk a HASH IS megadásával.