Posts

Es werden Posts vom 2006 angezeigt.

Oracle 10gR2 Recovery mit RMAN und ASM

Wichtig: Verzeichnisstruktur für Restore-Datenbank erstellen (/d01/admin/ /...). source ~/env_ora102SE.sh export ORACLE_SID= rman target / set DBID 4181459256 <- ID der Datenbank, den Sicherungslogfiles zu entnehmen! startup nomount; run { allocate channel 'dev_0' type 'sbt' parms 'ENV=(OB2ARTYPE=Oracle8,OB2APPNAME=sv2,OB2BARLIST=Ora10)'; restore spfile from 'c-4181459256-20061107-01';} oder restore spfile from autobackup maxseq=02;} shutdown immediate; startup nomount; run { allocate channel 'dev_0' type 'sbt' parms 'ENV=(OB2ARTYPE=Oracle8,OB2APPNAME=sv2,OB2BARLIST=Ora10)'; restore controlfile from autobackup maxseq=02;} alter database mount; run { allocate channel 'dev_0' type 'sbt' parms 'ENV=(OB2ARTYPE=Oracle8,OB2APPNAME=sv2,OB2BARLIST=Ora10)'; evtl.: set until time "to_date('15 08 2006','DD MM YYYY')"; restore database; } run { allocate channel 'dev_0' type 'sb

Oracle Konfig-Files in Linux-Systemen

folgende "Config"-Files finden sich unter Linux-Systemen: oratab: * /etc/oratab dbhome: * /usr/local/bin/dbhome oraenv: * /usr/local/bin/oraenv coraenv: * /usr/local/bin/coraenv

RAW-Devices unter LINUX erstellen

Alles als User root. 1) Partition erstellen fdisk /dev/sd? (für SCSII-Platten) oder fdisk /dev/hd? (für IDE-Platten), wobei ? die Kennung der Festplatte a-z ist im fdisk: m - für Hilfe (... ohne Worte!) p - "print" - zeigt die aktuelle Partitionstabelle an n - "neu" - erstellt eine neue Partition w - "Write/Exit" - schreibt die Änderungen fest und beendet fdisk. 2) neue Partition(en) als RAW-Device einbinden - prüfen: raw -a -> zeit alle aktuellen RAW-Devices - Eintragen: Datei /etc/sysconfig/rawdevices (Bsp.: /dev/raw/raw1 /dev/sda5 -> ordnet das erste RAW-Device (raw1) sda5 zu, wobei sda5 die 5.Partition auf dem ersten (a) SCSII-Device (sd) ist - Platten-Geräte einbinden: service rawdevices restart - evtl. Rechte vergeben: chown oracle.oracle /dev/raw/raw4 Damit sind die RAW-Devices eingebunden und können genutzt werden. WICHTIG: Um den Zugriff auch nach einem Serverneustart zu ermöglichen, müssen die raw-Devices für den oracle-User l

Excel: csv-Dateien nach Download korrekt öffnen

Um zu verhindern, dass csv-Dateien nach dem Download in Excel in die erste Spalte eingelesen werden, ist eine Veränderung der Dateizuordnungen im Windows-Explorer notwendig: (unter Windows XP) * im Windows-Explorer-Menü: Extras / Ordneroptionen / Dateitypen -> csv suchen * "erweitert" / "open" auswählen / Bearbeiten: * Anwendung für diesen Vorgang: ... \EXCEL.EXE" "%1" * DDE abwählen => dann klappt's auch mit dem Öffnen Dieser Tip stammt Timo Junge!

Datapump - einrichten

einrichten der Datapump: 1) Verzeichnis anlegen: CREATE DIRECTORY DPUMP_TEST AS ' '; 2) Userrechte erstellen: GRANT READ, WRITE ON DIRECTORY DPUMP_TEST to test; Beispielaufruf: expdp test/test DIRECTORY=dpump_test DUMPFILE=test.dmp LOGFILE=test.log schemas=test

Datapump - Verzeichnis erstellen

siehe auch Metalink-Doc: 266875.1 HOW TO SPECIFY A DIRECTORY IN ORACLE10G EXPORT/IMPORT DATAPUMP -------------------------------------------------------------- 1. SERVER-BASED OR CLIENT-BASED ---------------------------- The parameter DIRECTORY specifies the location to which Export DataPump or Import DataPump can write the dump file set, the log file, and the SQL file (Import DataPump only). As export DataPump and import DataPump are server-based, rather than client-based, the output files are accessed relative to server-based directory paths. Data Pump requires you to specify directory paths as directory objects. A directory object maps a name to a directory path on the file system. 2. HOW TO CREATE A DIRECTORY ------------------------- To create a directory, you must have the DBA role or you must have been granted the CREATE ANY DIRECTORY privilege. Example (a DBA creates directories on the Windows platform and grants access to user scott): SQL> CONNECT

Komplettes Datenbankschema in andere Datenbank kopieren

siehe Metalink-Dokument 336012.1 : How To Copy Database Schemas To A New Database With Same Login Password ? In Oracle10g you can use the Export DataPump and Import DataPump utilities. Example: 1. Run a schema level Export DataPump job and connect with a user who has the EXP-FULL_DATABASE role. E.g.: expdp system/manager directory=my_dir dumpfile=exp_scott.dmp logfile=exp_scott.log schemas=scott 2. Run a schema level Import DataPump job which will also create the user in the target database. E.g.: impdp system/manager directory=my_dir dumpfile=exp_scott.dmp logfile=imp_scott.log schemas=scott 3. Or you can create a logfile (SQLFILE) with all relevant statements. E.g.: impdp system/manager directory=my_dir dumpfile=exp_scott.dmp logfile=imp_scott.log schemas=scott sqlfile=imp_user.sql

Datapump und ASM - Einrichten

Um Datapump zusammen mit ASM nutzen zu können sind folgende Schritten zu unternehmen: 1) Verzeichnis im ASM erstellen: - im ASMCMD: mkdir DUMPSETS 2) DB-Directory erstellen: - im SQLPlus nach Anmedlung an der entsprechenden DB: create or replace directory dumpsets as '+FRA/DUMPSETS'; - Rechte setzen: grant read,write on directory dumpsets to public; (nur für Testumgebung ;-)) 3) Log-Verzeichnis erstellen: - auf der Zeile: mkdir /d01/admin/dumplogs - im SQLPlus: create directory dumplogs as '/d01/admin/dumplogs'; grant read,write on directory dumplogs to public;

RMAN und KEEP - Option

Um Datensicherungen über als das "Standard"-Sicherungsfenster hinaus aufheben zu können, gibt es beim RMAN die KEEP-Option: backup database keep until time 'sysdate+45' nologs; Im Beispiel wird die Datenbank gesichert und das Backupset 45 Tage lang aufgehoben. Einschränkung: Obiges Statement läuft nur bei einer Sicherung auf Band. Bei Sicherungen in die FRA (Flash Recovery Area) ist die KEEP-Option NICHT ZULÄSSIG. Bei Datenbanken im NOArchivelog -Modus (ja sowas setzen wir produktiv ein) muß sich die Datenbank im MOUNT-Status befinden, steht für normale Datenbankoperationen also nicht zur Verfügung. Für eine Sicherung zum einen in die FRA (für schnelles Recovery) und zum anderen in eine separate Wochensicherung (mit KEEP) müßte die Datenbank also zweimal gesichert werden (= doppelte Downtime). Als Alternative bietet sich folgende Lösung an: 1) backup as copy incremental level 0 database; 2) backup recovery area; 3) backup as backupset copy of database keep until time

Import größerer Tabellen, ohne UNDO-Tablespace zu sprengen

Beim Import einer Tabelle aus einem dump ist mir nach geraumer Zeit der Undo-TS um die Ohren geflogen - schlimmer noch: Die Transaktion wurde daraufhin abgebrochen und 10GB Daten wurden wieder zurückgerollt (rollback auf 10GB!). Das hat dann nochmal doppelt so lange gedauert. Besser: Commit einschalten! imp user@tst3 ignore=y feedback=100000 tables=ex_facts_all commit=Y

URL-Parameter für Oracle Discoverer Plus

Im Metalink-Dokument 340203.1 finden sich einige Parameter, um Oracle Discoverer Plus auch ohne die Application-Server Verbindungsseite aufzurufen. Ein Beispiel: ../discoverer/ plus ?&us= user &db= host:port:sid &lm= OLAP &workbookname= Users/USER/My+WB &sheet= My+Sheet Ohne den Workbook-Parameter wird die Liste, der zuletzt geöffneten Workbooks angezeit. Damit läßt sich sehr elegant das Einrichten privater Verbindungen umgehen...

Top 10 Backup and Recovery best practices

Eine kurze Zusammenfassung des Metalink-Dokumentes Note:388422.1 mit Stand von Ende Aug 2006: 1. Turn on block checking alter system set db_block_checking = true scope=both; 2. Turn on block tracking when using RMAN backups (if running 10g) Anm: Das geht nur in der EnterpriseEdition. alter database enable block change tracking; 3. Duplex log groups and members and have more than one archive log dest Anm: Das geht nur in der EnterpriseEdition. alter system set log_archive_dest_2='location=/new/location/archive2' scope=both; alter database add logfile member '/new/location/redo21.log' group 1; 4. When backing up the database use the 'check logical' parameter backup check logical database plus archivelog delete input; 5. Test your backup restore validate database; 6. Have each datafile in a single backup piece Anm: Ob dies im allgemeinen sinnvoll ist, bezweifel ich. backup database filesperset 1 plus archivelog delete input; 7. Maintain your RMAN catalog/controlfi

DataProtector 5.5 unter Linux: Installation und Einbindung in RMAN

Auf dem Zielsystem 1. root: Kopieren der DataProtector Software auf den Server 2. root: Installation der DataProtector Software cd /LOCAL_INSTALL ./omnisetup.sh -source /opt/oracle/install/DP55/ -server backup2 -install da,oracle8 wobei: - source - Quellverzeichnis für Installation - server – DNS-Name des Backupservers - install – zu installierende Optionen - hier: o da – Disk Agent o oracle8 – Oracle Integration Hinweis: Die Installation geht nach /usr/omni/... bei Problemen: o nur ./omnisetup.sh aufrufen und interaktiv die Module installieren o Cell_Server mit ./omnisetup.sh –server backup bekannt machen o manuell Datei cell_server im Verzeichnis /usr/omni/config/client erstellen: Inhalt: DNS-Name des DataProtector-Cell-Servers (z.B. dpserver) 3. oracle: (Oracle 8i/9i/10g) Einbindung in RMAN durch LINK · ALLE Datenbanken STOPPEN · Je ORA-HOME Link zum DP setzen: (User oracle) cd /lib mv libobk.so libobk.so_org ln –s /usr/omni/lib/libob2oracle8.so l

Installation Patch für DataProtector5.5 unter LINUX

Installation Patch für DataProtector5.5 unter LINUX - Download Patch von http://support.openview.hp.com/patches/dp/5.50/s700_800_11.X.jsp - mkdir tmp - cd tmp/ - cp ../PHSS_34495 . - PHSS_ auspacken: sh PHSS_XXXX Warnungen ignorieren, dann erhalten Sie 2 Dateien: PHSS_XXXX.depot und PHSS_XXXX.text - Wegmoven des Patch Files mv PHSS_XXXX org_PHSS_XXXX - entpackt das Depot File tar xvf PHSS_XXXX.depot - cd cd PHSS_34495/OMNI-OR8-P/opt/omni/databases/vendor/*./../packet.Z, wobei gpl für Linux steht - gunzip packet.Z -> packet - mv packet packet.Z - gunzip packet.Z - tar xvf packet - Org.Verzeichnisse sichern: cp -rf /usr/omni/bin/ /usr/omni/org_bin cp -rf /usr/omni/lib/ /usr/omni/org_lib - Kopieren Sie die erhaltenen Dateien aus ./bin bzw. ./lib nach /usr/omni/bin bzw. /usr/omni/lib usw. cp -rf bin/* /usr/omni/bin/ cp -rf lib/* /usr/omni/lib/ => Fertig! Wichtig: Die abenteuerliche Mischung aus doppeltem gunzip und tar-Packen ist ernst gemeint!

Konfigurationen für Linux-Systeme mit Oracle

Auf den Oracleseiten gibt es eine neue Rubrik: Oracle Validated Configurations auf der empfohlene Konfigurationen für Linux-Systeme sehr detailiert beschrieben sind. Für Redhat 4 Upd3 finden sich hier zum Bsp. alle Systemeinstellungen, die den Installer dazubringen, ohne zu meckern seine Arbeit zu verrichten. Ein Auszug gefällig: Boot options elevator=deadline /etc/modprobe.conf: options e1000 FlowControl=1 (if using e1000) options hangcheck_timer hangcheck_reboot=1 /etc/sysctl.conf settings fs.file-max=327679 net.ipv4.ip_local_port_range=1024 65000 kernel.msgmni=2878 kernel.msgmax=8192 kernel.msgmnb=65536 kernel.sem=250 32000 100 142 kernel.shmmni=4096 kernel.shmall=3279547 # set to a value half the size of physical memory kernel.shmmax=3700000000 kernel.sysrq=1 # rmem_max can be tuned based on workload to balance performance vs lowmem usage net.core.rmem_default=262144 net.core.rmem_max=2097152 net.core.wmem_default=262144 net.core.wmem_max=262144 fs.aio-max-nr=3145728 vm.lower_zon

Mark Rittman: Some Thoughts on Oracle Portal Sizing and Monitoring

Im Blog von Mark Rittmann findet sich ein sehr ausführlicher Artikel über die Dimensionierung und das Monitoring von Oracle Portal. Link: http://www.rittman.net/archives/2006/07/some_thoughts_on_oracle_portal.html

Datumsfragen - das geliebte Vorjahr

Für die Ermittlung des Vorjahres gibt es eine Reihe von Funktionen, die den Umgang mit dem Datum erleichtern können. Anbei ein Beispiel zur Ermittlung des äquivalenten Tages im Vorjahr (für tagesbezogene Vorjahresvergleiche: select to_char(AJ.datum,'Dy dd.mm.yyyy') AJ, to_char( AJ.datum - (AJ.datum - to_date(to_char(AJ.DATUM,'yyyy') - 1||to_char(AJ.DATUM,'mmdd'),'yyyymmdd')) ,'Dy dd.mm.yyyy') VJ1, to_char( ADD_MONTHS(AJ.datum, -12) ,'Dy dd.mm.yyyy') VJ2, to_char( AJ.datum - 364 ,'Dy dd.mm.yyyy') VJ_MO_MO, AJ.datum - to_date(to_char(AJ.DATUM,'yyyy') - 1||to_char(AJ.DATUM,'mmdd'),'yyyymmdd') TAGE_DIFF from TZ_TAGESZAHLENTEST1 AJ AJ - steht für Tag im aktuellen Jahr VJ1 - ermittelt den Tag im Vorjahr (VJ) indem vom Jahr eins abgezogen wird und daraus das VJ-Datum wieder "zusammengebaut" wird. !!!=> dies Scheitert im Schaltjahr !!

Einige best practices für Oracle-OLAP

Einige Punkte im Umgang mit Oracle-OLAP: * Eigener User für den/die Analytical Workspaces ** Vorteil: rel. Dimensionstabellen lasssen sich exp/imp OHNE den kompletten AW mitnehmen zu müssen.

Index rebuild nur eine dummy-Funktion?

Folgender Fall: Eine Tabelle ist in einer Produktionsumgebung und einer Testumgebung angelegt. Im Produktionssystem sind 1,5Mio Zeilen enthalten, im Testsystem 150tsd. Im Produktionssystem werden alle Indizes wöchentlich per index rebuild neu aufgebaut und täglich analysiert(DBMS_STATSPACK). Folgende Abfrage führt auf beiden Systemen zu unterschiedlichen Ausführungsplänen: select count(*) from BDE_SORGFALT_QUALITAET where SOQU_LAGER = 8 and SOQU_PNR = 298622 and SOQU_DATUM >= 20060301 and SOQU_DATUM < 20060331 -> auf LIVE: FULL TABLE SCAN -> auf TEST: INDEX SCAN 1. Ansatz - Analysierung nicht mehr aktuell: neues analysieren mit DBMS_STATSPACK -> keine Änderung 2. Ansatz - fehlende "not null" Spalten: alter table BDE_SORGFALT_QUALITAET modify SOQU_LAGER not null; alter table BDE_SORGFALT_QUALITAET modify SOQU_PNR not null; alter table BDE_SORGFALT_QUALITAET modify SOQU_DATUM not null; -> gleiches Ergebnis 3. Ansatz - Index löschen und neu erstellen: DR

kleine OLAP-DML Zusammenfassung

wichtige Befehle im OLAP-Worksheet * AW - aw validate -> prüfen * LIMIT - limit to ' ' -> Dimension auf einzelnes Element einschränken - limit time add descendants using time_parentrel -> - limit time add / remove / keep -> Elemente hinzufügen / entfernen / behalten - limit time to all -> Filter wieder aufheben - allstat -> ALLE Filter wieder aufheben - show statlen(time) -> Anzahl der anzuzeigenden Elemente - status time -> aktuelle Limit-Einstellungen anzeigen * Anzeigen - dsc - Describe / Beschreibe - rpr -> "report" - Elemente der Dim anzeigen - rpr - Report / Anzeigen lassen - rpr down time time_long_description -> down für senkrechte Darstellung der Elemente -> _long_description für sprechende Namen anzeigen lassen * Logische Operatoren - eq gt lt -> gleich / größer / kleiner

Integration neuer Daten in partitionierte Tabelle

Ein effizienter Weg neue Daten in eine partitionierte Tabelle zu integrieren, unter der Voraussetzung, dass kein Primärschlüssel für diese Tabelle existiert: 1) Daten in neue, leere Tabelle A importieren 2) Diese Tabelle als Partition in partitionierte Tabelle einbinden (es werden KEINE Daten kopiert) ALTER TABLE A EXCHANGE PARTITION WITH TABLE B WITHOUT VALIDATION; 3) Indizes neu erstellen ALTER TABLE A MODIFY PARTITION REBUILD UNUSABLE LOCAL INDEXES; Eine sehr gute Zusammenfassung zu Partitionierung ist unter http://www.akadia.com/services/ora_partition.html zu finden.

ASM mit raw-Devices unter Linux

Mit ASM können auch raw-Devices sehr einfach für die Nutzung in Oracle-Umgebungen eingebunden werden. Die Schwierigkeiten und der Verwaltungsmehraufwand mit raw-Devices enthallen mit ASM völlig, was bleibt ist ein spürbarer Geschwindigkeitsvorteil (wer was und wieviel schneller ist soll hier nicht thematisiert werden...) Wie können raw-Devices unter Linux (hier RedHat ES3 Upd 7) eingebunden und für ASM verfügbar gemacht werden? Hierzu gibt es auch ein sehr gutes Metalink Doc: Note:249992.1. * neue LUN's zuweisen (Bsp: LUN4) * mit hp_rescan -a nach neuen LUN's suchen * mit lssd Zuordnung prüfen (im Beispiel: sdd 0,0,0,4 COMPAQ MSA1000 VOLUME 5.02 5005-08b3-0091-e3c1 soll heißen, LUN04 ist als /dev/sdd verfügbar) * Mapping des raw-Devices in Datei /etc/sysconfig/rawdevices eintragen (Bsp.: /dev/raw/raw4 /dev/sdd) * Zugriff für Oracle-User ermöglichen: chown oracle.oracle /dev/raw/raw4 * Platten-Geräte einbinden: service rawdevices restart Damit ist das LUN für ASM si

ASMlib konfigurieren

Hintergrund: Um den Einsatz von ASM unter Linux zu erleichtern, wird die Kernelerweiterung ASMlib als rpm installiert. Über /etc/init.d/oracleasm wird ein Dienst installiert, der die Einrichtung von ASM-Platten stark vereinfacht. ASMlib-Webseite: http://www.oracle.com/technology/tech/linux/asmlib/install.html Installation: [root@server ~] /etc/init.d/oracleasm configure ASM-Platten erstellen: 1) LUN erstellen 2) evtl. Rescan des SCSI-Busses: [root@server ~] hp_rescan -a 3) EINE primäre Partition auf LUN erstellen: [root@server ~] fdisk /dev/sdX 4) neue Partition als ASM-Platte [root@server ~] /etc/init.d/oracleasm createdisk R05_01 /dev/sdX1 5) Rescan und Listing [root@server ~] /etc/init.d/oracleasm scandisks [root@server ~] /etc/init.d/oracleasm listdisks 6) In bestehende ASM-Diskgroup einbinden oder neue ASM-Diskgroup erstellen Wichtig: ASM_DISKSTRING korrekt setzen! -> für 10gR2: [oracle@server ~] export ORACLE_SID=+ASM [oracle@server ~] sqlplus / as sysdba SQL> alter system

Ten Tips for a Successful OWB Project

gefunden bei Mark Rittmann: 10 Tips für erfolgreiche Oracle Warehouse Builder Projekte Beispiele: - gründliche Analyse und Design - Spezifikation und Testplan für jeden Schritt entwickeln und festhalten - FLASHBACK TABLE bzw ~ DATABASE nutzen; um Fehler leichter zurücksetzen zu können

MS Flight Simulator X - erste Bilder

Zur neuen Version des Microsoft Flugsimulators X gibt es erste Bilder. Nach aktuellem Stand ist mit der Veröffentlichung zum Jahresende 2006 zu rechnen. Info's und Bilder bei fsinsider.com Bilder bei chip.de

new Artikel on "Faster Batch Processing" by Mark Rittman

gefunden bei Mark Rittmann: Artikel im Oracle Magazine: " Faster Batch Processing " incl. Fehlerhandling mit LOG ERRORS-Clause Link: http://www.oracle.com/technology/oramag/oracle/06-mar/o26performance.html Artikel von Mark Rittmann zu "Performance Issues with DML Error Logging and Conventional Path Inserts" Link: http://www.rittman.net/archives/2005/12/performance_issues_with_dml_er.html

Wrappen von PL/SQL-Source-Code

Zum "Verbergen" von PL/SQL-Funktionen, -Prozeduren und -Paketen folgende zwei Statements auf der Kommandozeile auszuführen: wrap iname=/mydir/myfile.sql -> erzeugt aus der .sql-Datei eine codierte .plb-Datei sqlplus @myfile.plb -> Compiliert den Sourcecode Im Ergebnis ist die PL/SQL-Funktion nicht mehr les- und änderbar, funktioniert aber wie gewohnt. Beispiel: aus CREATE PACKAGE -- Author: J. Hollings -- Date: 10/15/99 banking AS minimum_balance CONSTANT REAL := 25.00; insufficient_funds EXCEPTION; END banking; wird CREATE PACKAGE -- Author: J. Hollings -- Date: 10/15/99 banking wrapped 0 abcd ...

Web-Seminar: Storage-Verwaltung mit ASM

Mein persönliches Fazit aus dem heutigen Webseminar zu ASM: Ratio zwischen Data-und FRA-Platzbedarf mind 1:2 d.h. die Flash-Recovery-Area sollte mind. doppelt so groß sein, wie der Data-Bereich eigenes ASM-Home empfohlen (ab 10.2 möglich) einfacheres Patchen RAID-Konfiguration keine allg. Empfehlung Überlegung für uns (zu prüfen): - Kombination auf HW und ASM-Funktionen RAID1 per Hardware RAID0 per ASM bei Wartung: einzelne Discs VORHER aus Discgroup rausnehmen -> sicheres Rebalancing Erweiterungen: besser einzelne Discs zu Discgroup hinzufügen, als Resize einzelner Discs Alle ASM-Discs sollten in extended-Partition erstellt werden, um Überschneidungen mit Betriebsystem-eigenen Funktionen zu vermeiden. ASM_DISCSTRING-Parameter setzen, um Suche nach ASM-Platten zu optimieren. Partitionskennung unter Windows per ASMTOOL setzen.

Tips zur Arbeit mit htmlDB

Anbei einige gesammtelte Tips zur Arbeit mit htmlDB (damals mit Version 1.4 :-)) Bilder zentral allen Applikationen zur Verfügung stellen: eigenes Bilderverzeichnis auf dem Webserver einrichten und hier alle eigenen Bilder einstellen Logo auf Seiten: im Template (nur einmal) bei Login-Page: direkt im Header der Seite per Reset-Button Datumsfelder vorbelegen: eigener Prozeß "zurücksetzen" an den Button Reset hängen im Prozeß: Feld SOURCE: Begin / select .. into :von from Tbl / End; Datumsfelder beim ersten Seitenaufruf vorbelegen: in "Default Value" des Feldes per PL-Block definieren: BEGIN / select .. into :von from tbl / return :von / END; wichtig ist die Zeile return , um Variable bekannt zu machen. EDIT ATTRIBUTES (globale App.-Einstellungen): globales Festlegen des Datumsformates für eine Anwendung SUCHE-Felder: Vorteil bei Textfeldern durch ...like % % -&

null-Werte und Indizes

gerade bei Tom Kyte gefunden: Um bei Abfragen von null-Werten trotzdem einen Index nutzen zu können, wird künstlich ein verbundener Index erstellt: create index t_idx_new on t(object_id,0); null-Werte werden nicht in B*Tree-Indizes abgelegt. Daher wird bei Abfragen where column is null kein Index verwendet, auch wenn column indiziert ist. Da in verbundenen Indezies (concatenated index) null-Werte enthalten sein können (wenn die andere Spalte einen Wert not null enthält), kann der CBO so den Index benutzen Quelle: http://tkyte.blogspot.com/2006/01/something-about-nothing.html siehe auch: http://tkyte.blogspot.com/2006/01/mull-about-null.html