Der letzte Strohhalm – Daten mit dem Logminer wiederherstellen.

Folgendes Szenario. Eine Datenbank ist aufgrund eines Storage Fehlers komplett verloren gegangen. Alle Datendateien sind unwiederbringlich verloren. Das Backup wurde zwar gemacht, ist jedoch ebenfalls aufgrund des Storage Fehlers verloren. Einzig ein Datapump Export der Datenbank der einige Wochen zuvor erzeugt wurde und die archivierten Redo Informationen sind lückenlos vorhanden.

Weiterlesen „Der letzte Strohhalm – Daten mit dem Logminer wiederherstellen.“

Heiße Teile – Identifizieren von Hot Blocks

Heute wollen wir uns dem Thema Hot Blocks widmen bzw. wie identifizieren wir Hot Blocks und vor allem wie lösen wir das Problem der Buffer Busy Waits.

Seit Oracle 10.1 macht es uns der AWR Report ein wenig leichter Buffer Busy Waits zu unterscheiden. Aber das Problem ist das selbe geblieben. So gibt es z.B. in einem AWR Report das Wait Event Read by other Session was in früheren Versionen nicht separat aufgelistet wurde, sondern als Buffer Busy Wait ausgegeben wurde.

Weiterlesen „Heiße Teile – Identifizieren von Hot Blocks“

Masse statt Klasse – Anzahl der Redolog-Wechsel

Heute wollen wir uns ein Skript anschauen das uns die Arbeit erleichtern kann. Wenn wir uns eine der Grundregeln von Oracle bezüglich der Anzahl an Redolog-Wechsel vor Augen führen, dann sagt diese aus, dass es nicht mehr als 5-10 Redolog Wechsel pro Stunde zu Zeiten höchster Last geben soll. Das ist eine konkrete Aussage, jedoch ist es schwieriger herauszufinden wie viele Wechsel wir tatsächlich pro Stunde haben. (Zumindest mit Oracle Bordmitteln).

Weiterlesen „Masse statt Klasse – Anzahl der Redolog-Wechsel“

Die Wanne ist voll – Shrink Table

high_water_mark1Ich gebe es zu, manchmal sind die Regeln einer Oracle DB verwirrend. Darunter fällt wohl auch die Regel der High Water Mark und der Extent-Allokierung.  Es klingt nicht gerade einleuchtend, dass gelöschte Datensätze den vorher benötigten Platz in einem Tablespace nicht wieder freigeben. Das liegt daran, dass ein Segment (wie eine Tabelle) bei Bedarf sogenannte Extents in einem Tablespace allokiert. Ein Extent ist dabei nichts anderes als eine bestimmte Menge an Datenbankblöcken. Bei dieser Allokation wird die High Water Mark des Segments nach oben gerückt. Wenn wir nun Datensätze aus einer Tabelle löschen, werden diese allokierten Extents nicht wieder an den Tablespace zurückgegeben. Das heißt also, es wird kein Freiplatz durch das Löschen von Datensätzen erzeugt.

Weiterlesen „Die Wanne ist voll – Shrink Table“

Oracle Universal Installer – Systemprüfung umgehen

Von Zeit zu Zeit kann es vorkommen, dass manche Versionen des Universal Installers nicht gewillt sind mit bestimmten Systemumgebungen zu arbeiten. Meißtens liegt das daran, dass wir versuchen eine alte Oracle Version auf einem neuen (zu dem Zeitpunkt noch nicht freigegebene) Version des Betriebsystems zu installieren. Aber auch dafür hat Oracle uns eine Hintertür geschaffen. Wir können den Universal Installer starten und ihn dazu auffordern, die Prüfung der Systemvorraussetzungen zu umgehen. Der Universal Installer ist in diesem Fall mit der Option -ignoreSysPrereqs zu starten.

./runinstaller -ignoreSysPrereqs

Viel Spaß beim Installieren.

Euer Oracleme

11g Features Teil I – SQL Performance Analyzer

Im ersten Teil dieser Serie wollen wir uns auch das erste der Features von Oracle 11g anschauen. Oracle 11 ist zwar nicht brandneu, jedoch gibt es nach meiner Meinung immernoch viele offene Fragen was Oracle 11g alles mit sich bringt. Wir schauen uns hier die (aus meiner Sicht) interessantesten Features von 11g an. Aber das Wort „neu“ werde ich hier bewusst vermeiden. 🙂

Der SQL Performance Analyzer ist in der Theorie ein tolles Feature das uns hilft Veränderungen an Parametern vorzunehmen und daraus direkt abzuleiten welche Auswirkungen es auf die Statementperformance (bzw. deren Ausführungsplan) haben wird. Wir benötigen dazu erst einmal einige SQL Statements und den Oracle Enterprise Manager in der Version 11.

Weiterlesen „11g Features Teil I – SQL Performance Analyzer“

Oracle Inventory neu aufbauen

Es soll vorkommen, dass uns das Oracle Inventory abhanden kommt. Oder das wir ein bestehendes Oracle Home in ein Inventory hinzufügen wollen. Egal was unsere Motivation ist, wir wollen uns einmal anschauen wie wir ein bestehendes Oracle Home in ein Oracle Inventory „einhängen“.

Zunächst müssen wir definieren wo das Oracle Inventory denn abgespeichert ist das wir erweitern wollen. Dazu müssen wir uns die Datei oraInst.loc anschauen. Sie ist (je nach System) entweder unter /etc/oraInst.loc oder unter /var/opt/oracle/oraInst.loc abgelegt und sieht normalerweise etwa folgendermaßen aus:

oracle@:/ # cat /var/opt/oracle/oraInst.loc
inventory_loc=/oraInventory102
inst_group=dba

Der Parameter inventory_loc muss entsprechend angepasst werden. Je nachdem wo unser Inventory den abgelegt sein soll (oder ein bestehendes bereits abgelegt ist).

Nun fügen wir ein weiteres Oracle Home zu einem Inventory hinzu. Dazu müssen wir den runInstaller zuhilfe nehmen. Er ist unter $ORACLE_HOME/oui/bin zu finden.

./runInstaller -silent -attachHome ORACLE_HOME=/oracle/product/102 ORACLE_HOME_NAME=ORACLE_HOME_10204

Der Parameter ORACLE_HOME ist entsprechend der eingesetzten Umgebung zu setzen. In unserem Fall liegt das gewünschte Oracle Home eben unter /oracle/product/102 ab. Der Name des Oracle Homes ist frei zu wählen. Es empfiehlt sich aber, einen eindeutigen Namen für das Oracle Home zu wählen.

Je nach Größe und installierten Optionen kann das „attachen“ eines Oracle Homes gerne mal ein paar Minuten in Anspruch nehmen. Nach Abschluss können wir das ganze natürlich auch überprüfen. Hierzu nehmen wir das Tool opatch von Oracle zuhilfe. Bei älteren Oracle Versionen ist opatch separat zu installieren (bzw. abzulegen).

oracle@:/oracle/ # opatch lsinventory -all
Invoking OPatch 10.2.0.3.2
Oracle interim Patch Installer version 10.2.0.3.2
Copyright (c) 2007, Oracle Corporation.  All rights reserved..
Oracle Home       : /oracle/product/102
Central Inventory : /oraInventory102
from           : /var/opt/oracle/oraInst.loc
OPatch version    : 10.2.0.3.2
OUI version       : 10.2.0.4.0
OUI location      : /oracle/product/102/oui
Log file location : /oracle/product/102/cfgtoollogs/opatch/opatch2009-01-16_15-57-02PM.log
Lsinventory Output file location : /oracle/product/102/cfgtoollogs/opatch/lsinv/lsinventory2009-01-16_15-57-02PM.txt
--------------------------------------------------------------------------------
List of Oracle Homes:
Name          Location
ORACLE_HOME_10204         /oracle/product/102
ORACLE_HOME_10204b         /oracle/product/102b
ORACLE_HOME_10204c         /oracle/product/102c

Wir sehen, dass wir auch mehrere Oracle Homes in einem Inventory registrieren können. Das beugt bei vielen Oracle Homes dem Wildwuchs etwas vor.

Euer Oracleme