Posts

Es werden Posts vom Mai, 2010 angezeigt.

Oracle und seine Statistiken

Zum Aktualisieren von Tabellenstatistiken: begin     SYS.dbms_stats.delete_table_stats(user, myTbl );     SYS.DBMS_STATS.gather_table_stats (       ownname        => 'LABP'      ,tabname        => 'myTbl'     ,estimate_percent  => 25     ,block_sample      => TRUE -- besser weglassen!   ,method_opt        => 'FOR ALL INDEXED COLUMNS SIZE 254 '     ,degree            => 4     ,cascade           => TRUE     ,no_invalidate     => FALSE); end; / Zum Prüfen, welche Ergebnisse ermittelt wurden: SELECT column_name, num_distinct      , histogram, num_buckets      , TO_CHAR (last_analyzed, 'yyyy-dd-mm hh24:mi:ss') last_analyzed   FROM user_tab_col_statistics  WHERE table_name = myTbl Quelle: http://structureddata.org/2008/10/14/dbms_stats-method_opt-and-for-all-indexed-columns/

Index benutzt? index used?

Zum Prüfen, ob ein Index auch benutzt wird, sind 3 Schritte nötig: -- Index für Monitoring anschalten alter index myIdx monitoring usage; -- Prüfen, ob Monitoring für Indizes angeschaltet ist und Index verwendet wurde select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage; -- Abfrage oder Anwendung ausführen, dann erneut abfragen -- Index für Monitoring wieder abschalten alter index myIdx nomonitoring usage; Quelle: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439329623515

Mehrere Zeilen zu einer Zeile zusammenfassen - per SQL (ohne 11g LISTAGG)

Immerwieder gebraucht: Mehrere Zeilen einer Abfrage zu einer Liste zusammenzufassen. Eine Lösung per SQL: select fall, MAX(LTRIM(sys_connect_by_path(TXT,', '),', ')) liste from (  select fall , row_number() over (partition by fall order by fall) zeile , nr, txt from ( select 1 fall, 11 Nr, 'Txt 1A' Txt from dual union all select 1 fall, 12, 'Txt 1B' from dual union all select 1 fall, 13, 'Txt 1C' from dual union all select 1 fall, 14, 'Txt 1D' from dual union all select 2 fall, 15, 'Txt 2A' from dual union all select 2 fall, 16, 'Txt 2B' from dual union all select 2 fall, 17, 'Txt 2C' from dual union all select 2 fall, 18, 'Txt 2D' from dual ) ) start with zeile = 1 connect by fall = PRIOR fall and prior zeile = zeile -1 group by fall ; Liefert als Ergebnis: Fall Liste 1    Txt 1A, Txt 1B, Txt 1C, Txt 1D 2    Txt 2A, Txt 2B, Txt 2C, Txt 2D Aufbau des Statements: select 1 f