Posts

Es werden Posts vom 2008 angezeigt.

Umgebungsvariablen per Script setzen

Für's einfacherere Handling von mehreren Oracle-Home's auf einem Server hat es sich bewährt, alle benötigten Umgebungsvariablen in entsprechende Scripte zu packen und bei Bedarf aufzurufen. source ~/env_ora102SE.sh Der Inhalt eines solchen Scriptes könnte z.B. wie folgt aussehen: export ORACLE_BASE=/d01 #export ORACLE_BASE=/opt/oracle/ export ORACLE_HOME=/opt/oracle/product/10gR2SE export NLS_LANG=german_germany.we8iso8859p15 export NLS_DATE_FORMAT="dd.mm.yyyy hh24:mi:ss" export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib export PS1='[\u@\h \W]\$ ' alias ll='ls -lhtr' alias o='set|grep ORA' alias ora='ps -ef|grep [ao][sr][ma]_;ps -ef|grep oraclef' alias plus='sqlplus / as sysdba' alias sv1='export ORACLE_SID=sv1' Im unteren Teil sind einige Aliase definiert, die das Abfragen der aktuellen Umgebung oder den Aufruf einiger Programme deutlich vereinfachen.

Explain Plan und DBMS_XPLAN

(für Oracle 10gR2) Installation sqlplus / as sysdba drop table plan_table; @?/rdbms/admin/utlxplan create public synonym plan_table for plan_table; grant all on plan_table to public; Weitere Informationen zum Explain Plan ( http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/ex_plan.htm#i26143 ) bzw. bei Tom Kyte ( http://asktom.oracle.com/tkyte/article1/autotrace.html ) Plan Table per DBMS_XPLAN.DISPLAY anzeigen 1) explain plan Kommando für einen SELECT Befehl ausführen: EXPLAIN PLAN FOR SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno AND e.ename='benoit'; 2) Anzeigen per DBMS_XPLAN.DISPLAY Tabellenfunktion: SET LINESIZE 130 SET PAGESIZE 0 SELECT * FROM table(DBMS_XPLAN.DISPLAY); Ergebnis-Bsp: Plan hash value: 3693697075 --------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | --------------------------------------------------------------------------- | 0 |

group by und grouping sets

Übersicht In SQL können Gruppierungen über verschiedene Wege erreicht werden: group by – "klassische" Gruppierung nach Spalten, liefert keine Zwischen-/Endsummen group by grouping sets (<mehrere Spaltenlisten>) – flexible Gruppierung über beliebige Kombinationen von Spalten, liefert entsprechende Zwischen-/Gesamtsummen group by rollup (<Spaltenliste>) – Gruppierung über ALLE Spalten der Liste, in der Reihenfolge, wie in der Liste angegeben. Lliefert entsprechende Zwischen-/Gesamtsummen. Per grouping()- oder nvl-Funktion können Summenzeilen entsprechend benannt werden (siehe unten). Gruppierung mit "normalem" group by Abfrage der Test-Tabelle per group by select nvl(to_char(monat),'- all -') monat, decode(grouping(monat),1,'- all -',monat) monat2, nvl(region,'- all -') r, nvl(kundengruppe,'- all -') K, grouping(monat) A1, grouping(region) A2, grouping(kundengruppe) A3, su

Install Oracle 10gR2 unter RH Linux

Für die Installation von Oracle 10gR2 (und anderen) sind zusätzliche rpm's nach der Installation von RH-Linux notwendig: benötigter Kernel: 2.6.9-5.0.5.EL prüfen mit: uname -r benötigte Pakete und Versionen (oder neuer): * binutils-2.15.92.0.2-10.EL4 * compat-db-4.1.25-9 * control-center-2.8.0-12 * gcc-3.4.3-9.EL4 * gcc-c++-3.4.3-9.EL4 * glibc-2.3.4-2 * glibc-common-2.3.4-2 * gnome-libs-1.4.1.2.90-44.1 * libstdc++-3.4.3-9.EL4 * libstdc++-devel-3.4.3-9.EL4 * make-3.80-5 * pdksh-5.2.14-30 * sysstat-5.0.5-1 * xscreensaver-4.18-5.rhel4.2 * libaio-0.3.96 * openmotif21-2.1.30-11.RHEL4.2 (nur für Oracle demos benötigt) prüfen mit: rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21 Damit sollten alle benötigten Pakete an Bord sein und die eigentliche Installation gelingen...

RMAN und FRA-Aufräumen

Normalerweise klappt das Zusammenspiel RMAN - FRA - Tape problemlos. In 3 Jahren Produktiveinsatz gab's keine Probleme. Mit dem Austausch der Tape-Library und dem Versionswechsel der Sicherungssoftware müssen jedoch die Daten im RMAN-Repository (DB oder controlfile) wieder mit den aktuellen Daten synchronisiert werden: Prüfung: crosscheck; Für Sicherungen nicht mehr benötigte Dateien entfernen: delete obsolete; Ältere Imagecopys entsorgen: delete copy of database device type disk completed before 'sysdate-8';

Achtung: force und create view

Unter Oracle 10gR2 lässt sich ein ORA-07445 reproduzierbar erzeugen, indem eine fehlerhafte View (unterschiedliche Zeilen in Header und select) per force erstellt wird. Bsp.: create or replace force view tst (name, vorname, gebdat, ort) as select name, vorname, gebdat from kunden;

ASM-Diskgroups verwalten

Allgemeines Begriffe: Wenn hier von einer Disk auf ASM-Seite die Rede ist, meint dies eine LUN (Logical Unit/Logisches Laufwerk) auf MSA-Seite. ASM kann mehrere Disks zu einer DiskGroup zusammenfassen. Eine Übersicht über den aktuellen Aufbau der ASM-DiskGroups und der aktuellen ASM-Konfiguration bzw. von laufenden Konfigurationsprozessen liefert das Skript asm_group.sh Alle unten aufgeführten SQL-Befehle in sqlplus mit ASM-Umgebung/SID. Neue RAW-Devices in DiskGroups einbinden Vorarbeiten - Zum Einbinden der neuen RAW-Devices auf OS-Ebene siehe: http://frankschmidt.blogspot.com/2006/04/asm-mit-raw-devices-unter-linux.html Bekannte RAW-Devices anzeigen: column path format a15; select name, path, group_number from v$asm_disk; Neues RAW-Device zu Diskgroup hinzufügen: alter diskgroup DATA add disk '/dev/raw/raw5' rebalance power 11; Power 0 - 11, 11 ist maximale Rebalance-Geschwindigkeit; 0 bitte nicht benutzen. Nach Absetzen des Befehls kehrt gleich der sqlplus-Prompt zurück, di

Ungenutzte Indizes finden

siehe Link: http://www.dba-oracle.com/oracle_tips_unused_indexes.htm

Apex: BLOB direkt im Report anzeigen (alter Weg)

Um direkt im Report ein Bild (als BLOB in der Tabelle gespeichert) anzuzeigen sind folgende Schritte nötig: 1) Tabelle mit Blob-Spalte bauen: CREATE TABLE UV_VERZEICHNIS ( VERID NUMBER(14) NOT NULL, PNR NUMBER(8), VNAME VARCHAR2(100 CHAR), NNAME VARCHAR2(100 CHAR), BLOB_ID NUMBER, BLOB_CONTENT BLOB, BLOB_FILENAME VARCHAR2(4000 CHAR), MIME_TYPE VARCHAR2(4000 CHAR), CONSTRAINT UV_VERZEICHNIS_PK PRIMARY KEY (VERID) ); 2) PL-Proc zum Anzeigen des BLOB schreiben: CREATE OR REPLACE procedure UNTERSCHRIFTEN.uv_blob_download -- Purpose : Anzeige einer BLOB-Bild-Datei (p_file in number) as v_mime varchar2(255); v_length number; v_file_name varchar2(2000); Lob_loc BLOB; BEGIN select mime_type, blob_content, substr(blob_filename, instr(blob_filename, '/') +1) ,dbms_lob.getlength(blob_content) into v_mime,lob_loc,v_file_name,v_length from uv_verzeichnis where blob_id = p_file; -- -- set up HTTP header -- -- use an NVL around the mime type and -- if it is a null set it to application/octect

Tabellen / Indizes in anderen Tablespace umziehen

Umzug von Objekten in anderen TS - Update 21.07.2020 - Um für Wartungsarbeiten einen TS „leer“ zu räumen, sind bisweilen alle Objekte aus diesem TS in einen anderen TS umzuziehen. Manuell ist das sehr mühsam – schneller geht’s mit dynamischem SQL: a) Per SQL eine Liste von SQL-Befehlen erzeugen b) Diese Liste am Block ausführen 1) Der einfache Fall: Grundsätzlicher Umzugsbefehl: alter table move tablespace ; alter index rebuild tablespace ; Wichtig: zuerst Umzug der Tabellen, dann Umzug der Indizes! select 'alter table 'owner'.'table_name' move tablespace ;' from dba_tables where TABLESPACE_NAME = 'Y' select 'alter index 'owner'.'index_name' rebuild tablespace ;' from dba_indexes where TABLESPACE_NAME = 'Y' 2) Tabellen mit LOB-Spalten: Syntax: ALTER TABLE foo MOVE LOB(lobcol) STORE AS (TABLESPACE new_tbsp); /* Bsp.:ALTER TABLE mupsys.INQUIRY MOVE LOB(DESCRIPTION) STORE AS ( TABLESPACE MUPSYS ENABLE STO