Posts

Es werden Posts vom April, 2006 angezeigt.

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