Posts mit dem Label oracle database werden angezeigt. Alle Posts anzeigen
Posts mit dem Label oracle database werden angezeigt. Alle Posts anzeigen

2015-11-20

Und es geht doch: Oracle DB unter VMware und dennoch nicht alle Server lizenzieren

Die Unconference Sessions gehören ja mittlerweile zum festen und erfolgreichen Bestandteil der DOAG 2015 Konferenz + Ausstellung. Leider etwas untergegangen, da in den täglichen Konferenz-News unerwähnt, ist die letzte Unconference Session in diesem Jahr. Hier hat sich der Tooling Strategy Programm Manager der LMS - Business Services von Oracle den Fragen zum Thema Lizenzierung gestellt.

Wir hatten dann ein sehr intensives Gespräch zu dritt. Ein Ergebnis aus dieser Unconference Session ist,
dass es sehr wohl möglich ist,

Oracle DB in einer virtuellen Maschine unter VMware zu betreiben und
dennoch nicht alle Server lizenzieren zu müssen

und das unabhängig von der VMware vSphere Version. Man muss nur wissen, wie das zu konfigurieren ist und es bedarf dann eines Approval über Oracle LMS.
Dazu gibt es auch eine Nachricht von der DOAG, die aber nur einen Teil der Möglichkeiten aufzeigt. Die Varianten sind auf Grund der Vielfalt an möglichen Konfigurationen aber auch zu umfangreich, um sie in ein Pressenachricht oder auch hier im Blog darzustellen.

Wir setzen gerne mit Ihnen die korrekte Konfiguration Ihrer Oracle Umgebung unter VMware um und unterstützen Sie beim Approval Prozess.
Weitere Informationen über unsere Lizenz-Dienstleistungen erhalten Sie von Frau Tiggesmeier oder telefonisch unter +49 (0) 5254 8008 50.

2015-11-12

DOAG 2015 Konferenz + Ausstellung, selbstverständlich nicht ohne TEAM

Auch in diesem Jahr ist TEAM auf der DOAG 2015 Konferenz + Ausstellung selbstverständlich mit einem Messestand und gleich mit fünf Vorträgen vertreten. Besuchen Sie uns und lernen Sie das umfassende Consulting-Angebot von TEAM kennen. Es gibt jede Menge aktuelle Themenschwerpunkte, über die wir uns gerne mit Ihnen an unserem Stand 204 in der 2. Etage (gelb) unterhalten möchten!
Oder besuchen Sie TEAM bei folgenden, spannenden Vorträgen zu den Streams
  • Strategie & Business Practices
  • Development
  • Middleware
  • Oracle Datenbank
einen Querschnitt der Themenfelder aus unserem "Oracle Business" repräsentieren:
Ein Lizenzaudit: Besorgniserregend oder entspannt angehen?
Dienstag, 17. November 2015, um 11:00 Uhr im Raum Stockholm
Referent: Ralf Appelbaum, TEAM GmbH
Detail-Informationen finden Sie hier.
Effiziente Modernisierung von Oracle-Anwendungen auf Alta UI
Dienstag, 17. November 2015, um 16:00 Uhr im Raum Hongkong
Referenten: Janis Krasemann, enpit consulting OHG; Markus Klenke, TEAM GmbH
Detail Informationen finden Sie hier.
Tuning Oracle Web-Applications in WLS 12c
Mittwoch, 18. November 2015, um 11:00 Uhr im Raum Prag
Referent: Markus Klenke, TEAM GmbH
Detail Informationen finden Sie hier.
Oracle Backup & Recovery - Konzepte, Umsetzung, Best Practice
Mittwoch, 18. November 2015, um 12:00 Uhr im Raum St. Petersburg
Referent: Andreas Kother, TEAM GmbH
Detail Informationen finden Sie hier.
Einfach erklärt: RAC Grundlagen für Dummies
Donnerstag, 19. November 2015, um 09:00 Uhr im Raum Seoul
Referent: Ralf Appelbaum, TEAM GmbH
Detail-Informationen finden Sie hier.

2013-11-25

Titel: Segen oder Fluch? – Oracle Trace- und Logdateien!

Trace- und Logdateien sind ein Segen, wenn man nach der Ursache für Probleme in Datenbank, Net Services, Applicationserver oder anderen Oracle Komponenten sucht. Sie können aber auch zum Fluch werden, wenn man sie gar nicht benötigt. Unablässig protokolliert die Oracle-Software alle Aktivitäten. Die Dateien füllen langsam und unmerklich den Plattenplatz. Und dann steht plötzlich die Datenbank wegen „no space left on device“ oder der Applicationserver hängt, weil die Logdatei zu groß geworden ist.
Mit Einführung des Automatic Diagnostic Repositories (ADR) für die Datenbanksysteme hat Oracle einen Anfang gemacht Log- und Tracedateien automatisch zu kürzen bzw. aufzuräumen.
Doch die Gefahr ist nicht gebannt: Längst nicht alle Logdateien werden zentral im ADR abgelegt. Auch an anderen Speicherorten finden sich Logdateien, die nicht durch Oracle Prozesse aufgeräumt werden. Und selbst im ADR bleiben einige Logdateien ungekürzt oder werden zu lange vorgehalten.

Ein einleitendes Manuskript ist zu finden unter: 2013-K-DB-Appelbaum-Segen oder Fluch-Oracle Log&Tracedateien -Manuskript.pdf

Im Vortrag auf der DOAG 2013 Konferenz habe ich aus unseren Erfahrungen im Rahmen unserer Oracle Administration Services wichtige Best Practices an die Hand dargestellt, wo welche Dateien zu finden sind und wie für diese Rotation und Löschen eingerichtet werden können.
Ich habe Trace- und Logdatein und ebenso die Auditdateien bei Datenbank, Listener, Grid/Cloud Control, Agent, Application-/Weblogicserver und bei anderen Oracle Komponenten betrachtet. Erforderliche Skripte habe ich sowohl für Unix/Linux als auch für Windows Installationen vorgestellt.

Die Präsentation ist zu finden unter: 2013-K-DB-Appelbaum-Segen oder Fluch-Oracle Log&Tracedateien-Präsentation.pdf

Bei Interesse an den Skripten können Sie mich gerne kontaktieren.

2013-11-18

Man trifft sich, auf der DOAG 2013 Konferenz

Die Oracle Community trifft sich und auch TEAM ist mit einem Stand und zwei Vorträgen wieder dabei! Besuchen Sie uns und lernen Sie das umfassende Consulting-Angebot von TEAM kennen. Es gibt jede Menge aktuelle Themenschwerpunkte, über die wir uns gerne mit Ihnen an unserem Stand 204 in der 2. Etage (gelb) unterhalten möchten!

Auch zum immer wieder brisanten Thema Lizenz-Compliance, dem sich die DOAG ganz aktuell mit einem digitalen Lizenzguide widmet, sind wir als offizieller Oracle LMS JPE Partner sicher ein qualifizierter Ansprechpartner. Als in Oracle LMS Audits erfahrener und von Oracle qualifizierter Mitarbeiter diskutiere ich, Ralf Appelbaum, gerne mit Ihnen an unserem Messestand als Hersteller unabhängiger Berater Ihre Vorbehalte zu diesem Thema.

Besuchen Sie TEAM bei folgenden, spannenden Vorträgen zum Stream - Middleware & SOA sowie Oracle Datenbank:

Migration auf Knopfdruck – Macht das überhaupt Sinn?
Donnerstag, 21. November 2013, um 12:00 Uhr im Raum 5
Referent: Markus Klenke, TEAM GmbH
Detail Informationen finden Sie hier.

Segen oder Fluch? – Oracle Trace- und Logdateien!
Donnerstag, 21. November 2013, um 10:00 Uhr im Raum 19
Referent: Ralf Appelbaum, TEAM GmbH
Detail-Informationen finden Sie hier.

Wer nicht recht weiß, welche Vorträge er auf der Doag 2013 sonst noch besuchen soll, nutze doch einfach den
iConfGuide von TEAM, der bringt den Überblick
Mit dem von TEAM auf Basis von Oracle ADF entwickelten iConfGuide stellen Sie ganz bequem aus 400 Vorträgen Ihr ganz persönliches Programm zusammen - und das auf Ihrem iPhone (optimiert) oder SmartPhone! Schauen Sie rein: iconfguide.doag.org

2013-05-15

Manuelles Standby Skripting: Data Guard für Arme?

Nein, es ist kein Data Guard, aber dessen Möglichkeiten sind auch nicht immer erforderlich. Zur reinen Absicherung einer Datenbank im Desasterfall ist eine selbst geskriptete Standby Datenbank oft ausreichend. Darüber hinaus erhält man damit die Möglichkeit Reporting in eine Read Only Datenbank auszulagern oder ein Testsystem kurzfristig mit den aktuellen Daten verfügbar zu haben.

Ja sicher ist damit ein enormer Kostenvorteil gegeben. Oracle Data Guard ist eine Option, die nur für die Enterprise Edition zur Verfügung steht. Aber wenn man nur den Desasterfall absichern möchte und ansonsten keinerlei Enterprise Edition Features benötigt, sind die Mehrkosten nicht gerechtfertigt.

Im Vortrag zeigte ich wie eine Standby Datenbank Konfiguration für eine Oracle 11gR2 Standard Edition (One) eingerichtet wird, welche Skripte erforderlich sind und was überwacht werden sollte. Dargestellt habe ich auch einige Unterschiede zu Konfigurationen zwischen Linux und Windows. Die Präsentation dazu ist zu finden als “Appelbaum-Data_Guard_für_Arme.pdf”

Im Wesentlichen sind zwei Skripte beteiligt:

  1. Ein Script (stdby_sync.sh) zum Synchonisieren einer Standby Datenbank mit der produktiven Datenbank. Dieses Skript sollte auf dem Standby-Server ueber Crontab oder einen anderen Mechanismus regelmaessig (mehrmals in der Stunde) ausgeführt werden.
    Die Einzelschritte:
    • das aktuelle Redo-Log der Primaer-DB wird gewechselt
    • alle Online Redo-Logs der Primaer-DB werden archiviert
    • die Ziel-SCN (System Change Number) fuer das Recovery wird ermittelt
    • die Archivelog Dateien werden auf den Standby Server synchronisiert
    • die Archivelogs werden in der Standby-DB bis zur Ziel-SCN recovert
    • die Differenz der Logsequenzen zwischen Prod- und Standby-DB wird geprüft
      ggf. wird eine Warn-Mail versandt
  2. Ein Script (archive_prim_remove.sh) zum Aufraumen der Archivelogs einer Primär-Datenbank. Dieses Skript sollte auf dem Primär-Server ueber Crontab oder einen anderen Mechanismus regelmaessig (einmal am Tag bzw. nach jedem Archivelog Backup) ausgeführt werden.
    Die Einzelschritte:
    • juengste Log-Sequence-Nummer im Backup ermitteln
    • juengste auf Standby-Datenbank recoverte Log-Sequence-Nummer ermitteln
    • Archivelog Dateien mittels RMAN bis zur ältesten der ermittelten
    • Log-Sequence-Nummern loeschen

Hier einige Auszüge aus den Skripten:

stdby_sync.sh
DoLogTransport-Extract
DoLogApply-Extract 

archive_prim_remove.sh
RemoveArchivelogs-Extract

Interessant ist, dass sich die Standby-Datenbank unter Linux anders verhält als die unter Windows:
Unter Linux waren die recoverten Archivelogs in der View v$archived_log sichtbar, unter Windows dagegen war die View v$archived_log immer leer. Damit können die Archivelogs unter Windows nicht mittels des RMAN Befehls delete noprompt archivelog until sequence … auf dem Standby-Server gelöscht werden, auf dem Linux-Standby-Server geht das dagegen schon. Unsere aktuellen Skripte benötigen das allerdings nicht.

Am Ausstellungsstand von TEAM auf der DOAG 2013 Datenbank am 14. Mai 2013 konnte die Konfiguration in einer virtuellen Umgebung dann auch auf die Probe gestellt werden. Bei Interesse diese Installation zu begutachten, wenden Sie Sich bitte an TEAM oder direkt an mich.

2013-02-05

Data Pump Export mit Flashback-Zeit über Enterprise Manager

Im Database Control einer 11.2.0.2 Datenbank habe ich versucht einen lesekonsistenten Data Pump Export auf eine Flashback-Zeit als Job zu konfigurieren. Dabei bin ich auf zwei Probleme getroffen:

  1. Bei der Auswahl der Flashback-Zeit kann keine volle Stunde gewählt werden, da als Minuten 5 bis 60 in Fünferschritten angeboten werden. 00 Minuten fehlen und 60 Minuten ist ja Unsinn bei einer Zeitangabe. Siehe auch folgenden Bildschirmabzug:
    OEM-DP-Job-Fehler
  2. Wenn eine sinnvolle Flashback-Zeit (z.B. 11.03.2013 15:05 Uhr) angegeben ist, dann führt das Weiterleiten des Jobs zum Fehler ORA-39001, ORA-39150, ORA-08186:
     OEM-DP-Job-Fehler2

Den ersten Fehler kann ich in anderen Installationen (10gR2, 11gR1 und 11gR2) nicht nachvollziehen. Das kann also eventuell an einer ungünstigen Kombination der NLS Parameter liegen.

Den zweiten Fehler habe ich auch in anderen Installationen, so auch beim Database Control einer 10.2.0.3 Datenbank als auch im Grid Control 11g bei einer 11.1.0.7 und einer 11.2.0.1 Datenbank. Das scheint also ein Bug zu sein.
Der eigentliche Fehler ORA-08186 resultiert aus dem generierten Data Pump Script, speziell aus der folgenden Zeile:
  dbms_datapump.set_parameter(handle => h1, name => 'FLASHBACK_TIME', value => '11-03-13 15.05');
Es wird implizite und keine explizite Typkonvertierung durchgeführt. Das Format der Datum/Zeitangabe, endspricht nicht dem Default. Dieser kann ermittelt werden mit dem folgenden Select (siehe MOS Note ID 464132.1):
  SELECT * FROM V$NLS_PARAMETERS where parameter = 'NLS_TIMESTAMP_FORMAT';
In meinem Fall ist das Ergebnis:
  PARAMETER VALUE
  NLS_TIMESTAMP_FORMAT DD.MM.RR HH24:MI:SSXFF

Das Format entspricht der deutschen Territory Einstellung. Diese wird aber weder im Database Control noch im Grid Control berücksichtigt.

Wenn man den Data Pump Export mit Flashback-Zeitpunkt über den Enterprise Manager machen möchte, bleibt also nichts anderes übrig als einen manuellen SQL-Skript Job anzulegen und darin dann entweder den Zeitpunkt im zum Default korrekten Format anzugeben oder aber eine explizite Typkonvertierung durchzuführen, z.B.:
  dbms_datapump.set_parameter(handle => h1, name => 'FLASHBACK_TIME', value => '11.03.13 15:00:00');

Ich hoffe diese Information hilft anderen bei der Problemanalyse.

2012-10-23

Download älterer Versionen der Oracle Software

Seit Mitte 2012 können ältere Versionen der Oracle Software nicht mehr über das Oracle Technology Network (OTN) und auch nicht ohne weiteres aus der Oracle Software Delivery Cloud herunter geladen werden. Das betrifft alle Produkte.

Die Downloadlinks älterer Versionen sind aus dem OTN spurlos verschwunden.

Beim Enterprise Manager Download im OTN hatte ich vor einigen Wochen noch einen Hinweis gesehen, wie man an den Downloadlink einer alten Version herankommt. Dieser Hinweis ist aber nun auch nicht mehr vorhanden und bei anderen Produkten stand er nicht. Im OTN findet sich also kein Hinweis ob und wie man eine alte Version herunter laden kann.

In einem anderen Blog habe ich den Hinweis gefunden, dass man mit einem bekannten Link auf eine alte Software Version im OTN diese noch herunter laden kann. Das geht nun jedoch auch nicht mehr. Die alten Softwarestände scheinen aus dem OTN komplett entfernt zu sein.

Benötigt man ältere Softwarestände der Oracle Produkte, so muss man über einen gültigen Support Vertrag mit Oracle verfügen. Die Medien oder Downloads kann man dann über My Oracle Support (MOS) anfordern (siehe FAQ: Downloading 9i, 10g, and 11g database software media [ID 1476075.1]). Dazu erstellt man einen “Contact Us” bzw. “non-technical” Service Request. Details, wie ein solcher Service Request (SR) erstellt wird finden sich in folgender MOS Note:

Wünscht man im SR kein “physical software media shipment” dann erhält man als Ergebnis bzw. Lösung im SR einen Link auf die Oracle Software Delivery Cloud mit einem eigenen Token. Über diesen kann man die Software dann herunterladen. Bei komplexeren Produkten, wie z.B. Enterprise Manager Grid Control, für die mehrere Downloads erforderlich sind (z.B. Grid Control, WebLogic Server, 32bit jdk for 64bit Java, Grid Control Agent), kann man diese in einem gemeinsamen SR anfordern und kann sie dann auch unter einem Link herunter laden.

Wichtig: Der angeforderte Downloadlink ist nur eine begrenzte Zeit (7 Tage) verfügbar!

Danach bekommt man folgende Meldung:
error

2012-09-14

Lizenzprobleme bei Oracle Datenbankserver mit Virtualisierung/Partitionierung

Das Lizenzmanagement für Oracle Produkte, insbesondere Datenbank, führt immer wieder zu reichlich Diskussionen. Das liegt vor allem daran, dass Oracle für die Enterprise Edition und die Standard Edition unterschiedliche Lizenzmodelle verwendet, wenn es um die Lizensierung nach CPU geht:

  • In der Enterprise Edition bedeutet CPU ein Core, der mit einem architekturabhängigen Faktor belegt wird.
  • In der Standard Edition bedeutet CPU ein CPU-Sockel, unabhängig von Anzahl Cores und auch der CPU-Architektur.

Das alleine kann schon zu enormen Kostenunterschieden führen. Besonders hitzig werden Diskussionen, wenn das Thema Virtualisierung, bei Oracle als Server/Hardware Partitioning bezeichnet, ins Spiel kommt. Oracle unterscheidet hier zwei bzw. drei Partitionierungsmethoden:

  • weiche Partitionierung (Soft Partitioning)
  • harte Partitionierung (Hard Partitioning)
  • Oracle Trusted Partitions for Oracle Engineered Systems

Die letzte Form ist lizenztechnisch mit Hard Partitioning gleich zu setzen, so dass nur Soft und Hard Partitioning zu unterscheiden sind. In dem Dokument “Oracle Partitioning Policy” sind die Auswirkungen der Partitionierungsmethoden auf die Lizenzen an sich unmissverständlich definiert.

So gilt:

Soft partitioning is not permitted as a means to determine or limit the number of software licenses required for any given server.

Die beliebte Virtualisierung über VMware gilt dabei als Soft Partitioning, Oracle VM in besonders definierten Konfigurationen aber als Hard Partitioning.Mit Hard Partitioning lassen sich also erheblich kosten sparen, wenn ein Server nicht komplett und ausschließlich für Oracle genutzt wird und damit nicht die gesamte Hardware mit allen Sockeln bzw. allen Cores lizensiert werden muss.
Die Sache hat aber einen ganz entscheidende Haken, wenn es darum geht Oracle Standard Edition bzw. Standard Edition One auf einem Serversystem mit Hard Partitioning zu lizensieren:

Die Hardware eines Servers für Oracle Standard Edition darf nur über vier Sockel und bei Oracle Standard Edition One nur über zwei Sockel verfügen!

Das bedeutet, hat ein Server mehr als vier Sockel, auch wenn nur vier oder weniger belegt sind, dann darf keine Standard Edition eingesetzt werden. Auch bei Einsatz von Hard Partitioning darf der Server nicht mehr als vier Sockel besitzen, dabei spielt es keine Rolle dass die Partition (virtuelle Maschine) ja auf vier Sockel begrenzt werden könnte. Hard Partitioning beeinflusst nur die tatsächlich zu erwerbenden Lizenzen.
Wird die RAC Option der Standard Edition genutzt, die dort ja kostenfrei enthalten ist, so darf die Hardware des gesamten Clusters ebenfalls nicht mehr als vier Sockel besitzen. Somit darf ein RAC für die Standard Edition aus maximal zwei Knoten mit jeweils zwei Sockeln oder aus maximal vier Knoten mit jeweils einem Sockel aufgebaut werden.

Für die Standard Edition One gilt bis auf die RAC Option vergleichbares nur mit der Begrenzung auf zwei Sockel.

Die Auswahl der richtigen Hardware spielt also eine ganz entscheidende Rolle, ob die Standard Edition eingesetzt werden kann oder nicht. Dieser Aspekt sollte also bereits bei der Beschaffung von Hardware und nicht erst bei der Lizenzbeschaffung betrachtet werden. Da gilt auch bei der Evaluation eines Downgrade von der Enterprise Edition auf die Standard Edition, bei der die Ausstattung der vorhandenen Hardware berücksichtigt werden muss.
(siehe auch den Gartner Report "Consider Oracle Standard Edition to Reduce Database Management System Costs")

2012-07-20

PL/SQL - Eine Liste von Tokens aus einem Text mit Hilfe von Regular Expressions erstellen

Problem:

Ein Text soll in PL/SQL nach Auftreten von Ausdrücken durchsucht werden. Als Ergebnis sollen die Treffer als Collection zurückgeben werden.

Lösung:

Der hier vorgestellte Lösungsansatz basiert auf der Verwendung von Regular Expressions. Wir nutzen eine Nested Table zum Sammeln der gefundenen Token und nutzen diesen Typ auch als Rückgabe unserer Splitfunktion.
Mit der Standard-PL/SQL-Funktion regexp_substr lassen sich Bereiche aus einem String herauslesen:
REGEXP_SUBSTR(
   source_string,
   pattern [,
   position [,
   occurrence [,
   match_parameter ]]]
)
source_string:       Zu untersuchender Text
pattern:                 regular expression
position:                Position in source_string, ab der gesucht werden soll
occurence:            Nr. des Tokens, welches als Ergebnis zurückgeben
                            werden soll

match_parameter:  kann eine beliebige Kombination der folgenden
                             Angaben sein:

                                   i: Groß-/Kleinschreibung wird ignoriert
                                  c: Groß-/Kleinschreibung wird beachtet
                                  n: Punkt (.) im Pattern gibt an, dass neue
                                      Zeilen ebenfalls beachtet werden sollen

                                  m: ^ und $ markieren den Anfang bzw.
                                      das Ende einer Zeile bei Multi-Line Strings
Des Weiteren wird die Funktion regexp_instr verwendet, die die Position (Anfang oder Ende) eines Teilstrings ermittelt:
REGEXP_INSTR(
   source_string,
   pattern [,
   position [,
   occurrence [,
   return_option[,
   match_parameter ]]]]
)
source_string:       Zu untersuchender Text
pattern:                regular expression
position:               Position in source_string, ab der gesucht werden soll
occurence:           Nr. des Tokens, welches als Ergebnis zurückgeben
                           werden soll

return_option:      0, wenn die erste Position eines gefundenen Tokens
                               zurückgegeben werden soll;

                           1, wenn die Position nach dem gefundenen Token
                               ausgegeben werden soll

match_parameter: kann eine beliebige Kombination der folgenden
                            Angaben sein:

                                   i: Groß-/Kleinschreibung wird ignoriert
                                  c: Groß-/Kleinschreibung wird beachtet 
                                  n: Punkt (.) im Pattern gibt an, dass neue
                                      Zeilen ebenfalls beachtet werden sollen

                                  m: ^ und $ markieren den Anfang bzw. das
                                      Ende einer Zeile bei Multi-Line Strings
Im Folgenden werden hier zwei Lösungswege vorgestellt. In der ersten Lösung (reg_split(p_string, p_pattern)) wird der String über ein CONNECT-BY-SELECT-Statement mehrfach untersucht. Dabei wird die LEVEL-Variable dazu genutzt den Occurence-Parameter zu füllen.
Die zweite Lösung (reg_split_rec(p_string, p_pattern, p_pos)) verwendet einen rekursiven Ansatz, bei dem der nächste verfügbare Startpunkt an die nächste Rekursionsebene übergeben wird.
IMPLEMENTIERUNG ALS ANONYMER PL/SQL-BLOCK:
==========================================

declare
   type nt_tab_vc2 is table of varchar2(4000);
   v_return nt_tab_vc2;

   function reg_split(p_string in varchar2, 
                      p_pattern in varchar2)
   return nt_tab_vc2 is
      v_ret nt_tab_vc2;
   begin
      v_ret := nt_tab_vc2();
      select
         regexp_substr(p_string, p_pattern, 1, level) token
      bulk collect into
         v_ret
      from
         dual
      where
         regexp_substr(p_string, 
                       p_pattern, 
                       1,
                       level,
                       'i') is not null
      connect by
         regexp_instr(p_string, 
                      p_pattern, 
                      1, 
                      level) > 0;
      return v_ret;
   end;

   function reg_split_rec(p_string in varchar2, 
                          p_pattern in varchar2,
                          p_pos in number default 1)
   return nt_tab_vc2 is
      v_ret nt_tab_vc2;
      v_token varchar2(4000);
      v_pos_next number;
   begin
      v_token := regexp_substr(p_string, 
                               p_pattern, 
                               p_pos, 
                               1);
      if v_token is not null then
         --pattern is found
         v_pos_next := regexp_instr(p_string, 
                                    p_pattern, 
                                    p_pos,
                                    1,
                                    1);

         v_ret := reg_split(p_string,
                           
p_pattern,
                           
v_pos_next);
         v_ret.extend(1);
         v_ret(v_ret.last) := v_token;
         return v_ret;
      else
         --pattern is not found
         return nt_tab_vc2();
      end if;
  end;

begin
   v_return := reg_split(
                    'Hello @world@! The weather is @great@ today.', 
                    '(\@)([a-z-]\w+)(\@)');
   if v_return.count > 0 then
      for i in v_return.first .. v_return.last
      loop
         dbms_output.put_line(lpad(i, 
                                   round(log(10,v_return.count))+1)||' '||v_return(i));
      end loop;
   end if;
end;

BEISPIEL-AUSGABE:
=================
1 @world@
2 @great@

2012-07-12

Manchmal ist char kürzer als char(xxx)

Aufgabe: Mit Hilfe einer einer externen Tabelle sollen Daten aus einer csv-Datei mit Oracle Warehouse Builder eingelesen und weiter verarbeitet werden.

Damit die ohne Probleme verarbeitet werden können und es zu keinen Fehlern mit falschen Formatmasken kommt wird die Tabellenstruktur folgendermaßen angelegt:

-- Create table
create table IMPORT_SRC
(
  id         VARCHAR2(4000),
  datum VARCHAR2(4000),
  daten VARCHAR2(4000)
)
organization external
(
  type ORACLE_LOADER
  default directory MOD_CSV_LOCATION
  access parameters
  (
    RECORDS DELIMITED BY '\r\n'
    CHARACTERSET WE8MSWIN1252
    STRING SIZES ARE IN BYTES
    NOBADFILE
    NODISCARDFILE
    NOLOGFILE
    SKIP 1
    FIELDS
      TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"' AND '"'
      NOTRIM
      (
        "ID" CHAR,
        "DATUM" CHAR,
        "DATEN" CHAR      )

  )
  location (MOD_CSV_LOCATION:Import.csv')
)
reject limit UNLIMITED;

 

Problem: Es werden nicht alle Zeilen der Datei verarbeitet. Auch ein SQL-Statement auf die Externe Tabelle liefert von den 10 sich in der Datei befindeten Zeilen nur 8 zurück. Beim betrachten der Datei sticht hervor, dass in 2 Zeilen die Werte in der Spalte für Daten deutlich länger sind als in den anderen Zeilen.

Lösung: Nach einigem Testen und Modifizieren der Datei stellt sich raus, dass die magische Grenze bei 255 Zeichen liegt. Sobald die Länge diesen Wert übersteigt, wird die Zeile nicht mehr verarbeitet.

Abhilfe schafft hier die Definition der Externen Tabelle mit einer Angabe für die maximale Spaltenlänge. So greift die Einschränkung der Länge nicht mehr und die Daten können verarbeitet werden.

-- Create table
create table IMPORT_SRC
(
id VARCHAR2(4000),
datum VARCHAR2(4000),
daten VARCHAR2(4000)
)
organization external
(
type ORACLE_LOADER
default directory MOD_CSV_LOCATION
access parameters
(
RECORDS DELIMITED BY '\r\n'
CHARACTERSET WE8MSWIN1252
STRING SIZES ARE IN BYTES
NOBADFILE
NODISCARDFILE
NOLOGFILE
SKIP 1
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' AND '"'
NOTRIM
(
"ID" CHAR,
"DATUM" CHAR,
"DATEN" CHAR (1000) )
)
location (MOD_CSV_LOCATION:Import.csv')
)
reject limit UNLIMITED;

 

Lesson learned: Manchmal ist char kürzer als char(xxx)

2012-02-08

RAC-Migration von 10g R2 auf 11g R2 über Data Guard mit Handicaps

In der aktuellen DOAG News (Nr.1 | Februar 2012) ist ein Artikel mit oben genanntem Titel veröffentlicht. Dieser beschreibt neben dem technischen Hintergrund auch ausführlich die Erfahrungen aus einem Projekt beim Versicherungsverbund Die Continentale und insbesondere die kleineren und größeren Handicaps, die es zu bewältigen gab.

Im Rahmen des Projekts wurde ein Oracle 10g Rel.2 zwei Knoten „extended distance“ RAC mit möglichst geringer Downtime auf einen drei Knoten 11g Rel. 2 „extended distance“ RAC migriert. Die Migration der Datenbanken erfolgte als Rolling Upgrade über Data Guard mittels Logical Standby.

Der Artikel ist in Anlehnung an den gleichlautenden Vortrag von Herrn Dr. Andreas Fleige und mir auf der DOAG Konferenz 2011 verfasst worden.

2011-12-23

Oracle Scheduler Jobs ein-/ausschalten

ab Oracle Version 10g werden regelmäßig auszuführende, zeitgesteuerte Jobs über den Scheduler (Package: dbms_scheduler) und nicht mehr als Jobs (Package: dbms_jobs) eingerichtet. Immer wieder steht man vor der Aufgabe alle Scheduler-Jobs auf einmal zu deaktivieren, insbesondere z.B. nach dem Clonen einer Produktiv-DB in eine Test-DB.

Komplett ausgeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','TRUE');
Komplett eingeschaltet werden kann der Scheduler mittels:
   dbms_scheduler.set_scheduler_attribute('SCHEDULER_DISABLED','FALSE');
Zu beachten ist hier die, auf den ersten Blick, vertauschte Bedeutung von 'TRUE' und 'FALSE'!

Ein einzelner Job kann deaktiviert werden mittels:
   exec dbms_scheduler.disable('<job_name>');
und aktiviert wird er über:
   exec dbms_scheduler.enable('<job_name>');
Hiermit können jedoch nur Jobs des am SQL*Plus angemeldeten Benutzers (aktuelles Schema) ein- bzw. ausgeschaltet werden. Die Dokumentation liefert keinen Hinweis darauf, wie man z.B. als sys alle Scheduler-Jobs auch fremder Schamata ausschalten kann.

Etwas Herumexperimentieren hat aber ergeben, dass ein einzelner Job in einem fremden Schema deaktiviert werden kann mittels:
   exec dbms_scheduler.disable('<owner>.<job_name>');
und aktiviert wird ein Job in einem fremden Schema über:
   exec dbms_scheduler.enable('<owner>.<job_name>');
Man muss also einfach den Job-Namen ersetzen durch Eigentümer.Job-Name.

Die notwendigen Informationen zu den Scheduler-Jobs liefert die View DBA_SCHEDULER_JOBS.

Alle Scheduler-Jobs aller DB-Benutzer auf einmal ausschalten geht mit folgendem PL*SQL Block:
begin
   for v_job_info in (select owner, job_name from DBA_SCHEDULER_JOBS where enabled = 'TRUE')
   loop
      dbms_scheduler.disable(v_job_info.owner || '.' || v_job_info.job_name);
   end loop;
end;

Folgende Scheduler-Jobs sollte man typischer Weise aktiv/eingeschaltet lassen
(und es gibt sicher noch weitere, die laufen sollten):
OWNER                          JOB_NAME
------------------------------ ------------------------------
SYS                            BSLN_MAINTAIN_STATS_JOB
SYS                            DRA_REEVALUATE_OPEN_FAILURES
SYS                            ORA$AUTOTASK_CLEAN
SYS                            PURGE_LOG
ORACLE_OCM                     MGMT_STATS_CONFIG_JOB
ORACLE_OCM                     MGMT_CONFIG_JOB
EXFSYS                         RLM$SCHDNEGACTION
EXFSYS                         RLM$EVTCLEANUP

2011-12-01

Überwachungsvorlagen im Enterprise Manager Grid Control 11g: Quellcode zum Vergleich der Metrik-Werte aus den Überwachungsvorlagen und den Zielsystemen

Im Enterprise Manager Grid Control kann die Konfiguration von Metriken und deren Schwellwerten über alle Datenbanken und anderen Ziele hinweg mit Überwachungsvorlagen vereinfacht und vereinheitlicht werden. Was ist jedoch, wenn in einer gewachsenen Oracle-Infrastruktur nachträglich die Überwachung vereinheitlicht werden soll?

Dann ist ein aufwändiger Abgleich bereits vorhandener Metrikeinstellungen zwischen einer Vorlage und dem Zielsystem bzw. zwischen den Zielsystemen untereinander nötig. Im Enterprise Manager Grid Control kann immer nur ein Zielsystem mit einer Vorlage verglichen werden. Das ist somit sehr mühselig.

Mit Hilfe des folgenden Codes kann eine komplette Ansicht der Metrikwerte der gewünschten Vorlagen und der gewünschten Zielsysteme generiert werden.

Code:

1. Anlegen der Tabellen:

-- Tabelle anlegen
create table TEAM_METRIC_VERGLEICH
(
  ZEILE            NUMBER,
  TYP              VARCHAR2(7),
  TEMPLATE_NAME    VARCHAR2(64),
  TARGET_NAME      VARCHAR2(256),
  TARGET_TYPE      VARCHAR2(64),
  METRIC_NAME      VARCHAR2(64),
  COLUMN_LABEL     VARCHAR2(323),
  SPALTEN_LABEL    VARCHAR2(323),
  COLLECTION_NAME  VARCHAR2(64),
  KEY_VALUE        VARCHAR2(256),
  WARN             VARCHAR2(4000),
  CRIT             VARCHAR2(4000),
  DIFF             CHAR(1),
  VATER            NUMBER,
  GRUPPE           NUMBER,
  OCCURRENCE_COUNT NUMBER,
  METRIC_GUID      RAW(16),
  TARGET_GUID      RAW(16),
  TEMPLATE_GUID    RAW(16)

);

-- Create table
create table TEAM_TARGETS_METRIC
(
  TARGET_NAME     VARCHAR2(256) not null,
  TARGET_TYPE     VARCHAR2(64) not null,
  TYPE_QUALIFIER1 VARCHAR2(64),
  HOST_NAME       VARCHAR2(256),
  GRUPPE          VARCHAR2(256),
  DATENBANK       VARCHAR2(256),
  METRIC_KNZ      NUMBER,
  RULES_KNZ       NUMBER,
  TARGET_GUID     RAW(16) not null
);

Bsp.:

insert into TEAM_TARGETS_METRIC
select    target_name, target_type, t.type_qualifier1, t.host_name,
  decode(target_type, 'host', '------------------', target_name) gruppe,
  decode(target_type, 'host', '------------------', target_name) datenbank,
            -1 metric_knz,
            0 rules_knz,           
      target_guid
from MGMT$TARGET t
where  t.target_type in ( 'host' ,'oracle_database','rac_database');

2. Skript zur Vergleichsberechnung:

declare
/*
Kurzbeschreibung:
Innerhalb dieses Skripts wird die Tabelle TEAM_METRIC_VERGLEICH mit den Metrik-Daten der Vorlagen und der Zielsystem (Datenbankinstanzen, Host, ..) gefüllt. Danach werden die Werte der Metriken zwischen der Vorlage und der Ziele miteinander verglichen.

Voraussetzung:
1) Der Name der Vorlagen, deren Metriken mit den Ziel-Metriken verglichen werden sollen, haben einen eindeutigen Präfix. Bsp.: „Vorlage_“.
Der Präfix muss in das nachfolgende Skript eingetragen werden.
2) Es werden für den Vergleich nur die Ziele verwendet, die in der Spalte METRIC_KNZ der Tabelle TEAM_TARGET_METRIC eine 1 stehen haben.
  
select target_name from team_targets_metric where metric_knz = 1
*/

k_vorlage_praefix   varchar2(80) := 'Vorlage_';

begin
-- Alten Daten löschen
delete from TEAM_METRIC_VERGLEICH;

-- Fülle die Tabelle mit den Vorlagen-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, template_guid, metric_guid )
select   'VORLAGE' typ,  t.template_name, '- Vorl.' target_name, t.target_type, t.metric_name,
            t.column_label,  t.column_label spalten_label,     t.collection_name, t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,   3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit,
            null , '-' diff, 0 vater, template_guid, metric_guid
from MGMT$TEMPLATE_METRIC_SETTINGS t
where  template_name like k_vorlage_praefix||'%'
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Fülle die Tabelle mit den Ziel-Metrik-Daten
insert into TEAM_METRIC_VERGLEICH (  typ, template_name,  target_name, target_type, metric_name,
            column_label,  spalten_label,  collection_name, key_value, warn,  crit, occurrence_count, diff,  vater, target_guid, metric_guid )
 select  'TARGET' typ, '' ,  t.target_name, t.target_type, t.metric_name,
            t.column_label, t.column_label spalten_label, t.collection_name , t.key_value,
            decode( t.warning_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', warning_operator)||' '||t.warning_threshold warn,
            decode( t.critical_operator, 0 , '>' ,   1 ,' =' ,     2 , '<' ,    3, '<=',    4 , '>=' ,    5, 'CONTAINS' ,    6, 'NE' ,    7, 'MATCH', critical_operator)||' '||t.critical_threshold crit        
           ,occurrence_count ,'-' diff  , -1 vater, target_guid, metric_guid
     from MGMT$TARGET_METRIC_SETTINGS t
     where target_name in (select target_name from team_targets_metric where metric_knz = 1  )
order by  t.target_type,  t.metric_name ,  t.column_label,  t.key_value;

-- Berechnung

--    Vorbereitung
update TEAM_METRIC_VERGLEICH set key_value = ' '
where key_value is null ;

update TEAM_METRIC_VERGLEICH set spalten_label = replace(spalten_label,' - '||key_value),
      vater = zeile,
      diff = '.'
where typ = 'VORLAGE';

-- Sonderbehandlung für User Defind Metriken
update TEAM_METRIC_VERGLEICH set spalten_label = collection_name
where typ = 'TARGET'
  and metric_name in ( 'SQLUDM', 'SQLUDMNUM', 'SQLUDMSTR');
  

update TEAM_METRIC_VERGLEICH set key_value = ''
where spalten_label = key_value;

-- Template-Name zu den Ziel-Zeilen hinzufügen
update TEAM_METRIC_VERGLEICH t set (template_name, template_guid) =
   (  select distinct template_name, template_guid
         from TEAM_METRIC_VERGLEICH v
      where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
   )
where typ = 'TARGET';

-- Differenz berechnen: für Metriken mit einem KEY_VALUE- Wert
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and t.key_value  = v.key_value
              and t.spalten_label  = v.spalten_label        
   )
where typ = 'TARGET'
  and template_name is not null
  ;

-- Differenz berechnen: für die restlichen Metriken
update TEAM_METRIC_VERGLEICH t set diff =
   ( select  decode( nvl(v.key_value,'#') ,  nvl(t.key_value,'#'),
                  decode( nvl(v.warn,'#') ,  nvl(t.warn,'#'),
                      decode( nvl(v.crit,'#'), nvl(t.crit,'#'), '.', 'X'), 'X'), 'X')
        from TEAM_METRIC_VERGLEICH v
        where v.typ = 'VORLAGE'
              and t.metric_guid = v.metric_guid
              and v.key_value  = ' '
              and t.spalten_label  = v.spalten_label
   )
where typ = 'TARGET'
  and template_name is not null
  and diff is null
  ;

commit;

end;

3. Anzeige:

select nvl(p.gruppe,'X') nr, nvl(p.nr,999) nr, m.*
from   team_pruefungen  p,
(     select  v.template_name,  v.target_name,  v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
               v.spalten_label sortierung, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and typ = 'VORLAGE'
      union all
      select  v.template_name, v.target_name, v.spalten_label, v.key_value, v.warn, v.crit, v.diff, metric_guid gruppe, v.occurrence_count, v.metric_name,v.target_type, 
            v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where template_name is not null and  typ = 'TARGET'
      union all
      select  distinct v.template_name,  '***************','********','********','********','********','********', 
              metric_guid gruppe,  null, '********', v.target_type, 
              v.spalten_label, decode(target_type,'host','host','datenbank') sort_1
      from TEAM_METRIC_VERGLEICH v
      where typ = 'VORLAGE'
)    m
where m.gruppe = p.metric_guid(+)
order by 1, 2, 10, 4, 6
;

Den Artikel zu diesem Code finden Sie in der DOAG News Ausgabe 6/Dezember 2011
Thema: „Überwachungsvorlagen im Enterprise Manager Grid Control 11g,
Vergleich und Vereinheitlichung von überwachten Metriken“
Autoren: Claudia Gabriel und Ralf Appelbaum, TEAM GmbH

2011-04-15

Deinstallation Oracle Database 11gR2

Öfter mal was Neues.... 1

Wer schon mal versucht hat eine Oracle 11gR2 Database unter Windows zu deinstallieren, wird schnell feststellen, dass es den Oracle Universal Installer mit der Option "Produkt entfernen" nicht mehr gibt !

Ab Oracle 11gR2 wird dies jetzt mit einem Command Line Tool “deinstall.bat” durchgeführt.

2

2010-10-04

Oracle DB Softwareinstallation mit Responsefile bei 11gR2

Ein Responsefile für eine Installation kann man mit 11gR2 direkt über den Installer erstellen. Hierzu muss man am Ende im Überblick (Schritt 6 von 8 bei Clientinstallation) den Button "Antwortdatei speichern..." wählen. Nach dem Speichern kann man die Installation über den Installer abbrechen.

Der Installer kann dann mit dem Responsefile gestartet werden über:
> setup.exe -silent -nowait -responseFile <Pfad>ora11gR2client.rsp

Dazu muss man sich natürlich im Pfad mit der setup.exe Datei befinden und das Responsefile muss mit absolutem Pfad angeben werden oder Alles wird mit absolutem Pfad angegeben.

(Das große F beim Parameter responseFile scheint auch wichtig zu sein.)

2010-08-09

Oracle Lite Database Client wird von der Preisliste genommen (Q2FY11 – Ende November 2010)

Nach mehreren Jahren und einigen Releases von Oracle Lite hat sich Oracle scheinbar dazu entschieden Komponenten dieses Produktes (Oracle Lite Database Client, Branch Office und Web-toGo) in den Maintenance – Mode zu setzen. D.h. es wird keine weiteren Neuentwicklungen bzw. Fortführung dieser Komponenten geben.

Als mobile Client Database setzt Oracle setzt auf Berkeley DB mit SQL Support von SQLite. Die Komponente Branch Office kann nach Aussagen von Oracle durch eine Oracle Database SE1 ersetzt werden. Nur für Lösungen, die auf Web-To-Go (Mobile Servlet Container) aufsetzen, gibt es zur Zeit keinen nennenswerten Lösungsansatz aus dem Hause Oracle.

Weitere Informationen gibt es hier.

2010-07-28

TEAM auf der DOAG 2010

Passend zu den Themen, die Sie hier im Blog lesen können, werden die Autoren auch in diesem Jahr wieder mit Vorträgen auf der DOAG-Konferenz 2010 zu sehen sein. Folgende Titel sind Stand heute im Konferenzprogramm enthalten:

  • Hürdenlauf beim Upgrade eines Oracle RAC von 11gR1 nach 11gR2
  • Bi-Publisher - Metadatendokumentation im BI-Server
  • Forms 11g im Weblogic Server - Vertrautes in neuem Gewand
  • Service-oriented Reporting - Zentrales Reporting Service im Unternehmen
  • Umstellung von Forms auf Oracle ADF - Was kann übrig bleiben?

Ebenfalls wird die Firma TEAM GmbH mit einem Stand vor Ort in Nürnberg vertreten sein, an dem Sie die Chance haben, mit den Autoren in die Diskussion einzusteigen.

Abgerundet wird die Konferenz in diesem Jahr mit dem Schulungstag zum Thema

Oracle ADF – Ein Quereinstieg für Forms-Entwickler

2010-07-12

Start von Listener und DB Instanz mittels Oracle Restart

Im Posting “Automatischer Start von Listener, DB Instanz und Database Control” hatte ich beschrieben, wie der automatische Start von Listener, DB Instanz und Database Control vom Administrator über Skripte manuell eingerichtet werden kann/muss. Hier beschreibe ich nun, wie der automatische Start von Listener und DB Instanz über Oracle Restart konfiguriert werden kann.

Oracle Restart ist eine neue Option der Oracle Grid Infrastruktur. Damit werden alle wichtigen Komponenten eines Oracle DB Servers, wie Listener, ASM Instanz und DB Instanz überwacht. Bei Booten des Servers werden die Komponenten ebenfalls gestartet und bei Ausfall einer Komponente im laufenden Betrieb wird diese neu gestartet.
Der Neustart einzelner Komponenten bei deren Ausfall unterscheidet Oracle Restart von der Variante des automatischen Starts mittels Skript.
Das Database Control wird von Oracle Restart nicht überwacht bzw. gestartet. Hier geht Oracle wohl von der Nutzung von Oracle Grid Control aus, dessen Agenten immer automatisch startend installiert werden.

Die Installationsschritte:

  • Oracle Grid Infrastruktur Software für Oracle Restart installiert
  • SQL-Net Umgebung konfigurieren
  • Oracle Datenbanksoftware installiert
  • Datenbank angelegen

GridInf-Inst04

 

Oracle Restart wird im Universal Installer (OUI) der Grid Infrastruktur an sich über die Installationsoption “Grid Infrastructure für einen Standalone-Server installieren und konfigurieren” ausgewählt. Hierbei will Oracle aber partout auch ASM installieren und konfigurieren. Bei Standalone-Servern ist ASM in der Regel aber nicht gewünscht. So bleibt zunächst nur die reine Softwareinstallation.

Konfiguriert wird Oracle Restart dann nicht über den OUI, sondern per Perl-Skript im Anschluss an die Softwareinstallation. Einen Hinweis darauf, wie das geht, liefert das root-Skript am Ende der Installation:
[root@vmschullinux ~]# /u01/app/11.2.0/grid/root.sh
Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/11.2.0/grid

Enter the full pathname of the local bin directory: [/usr/local/bin]:
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
To configure Grid Infrastructure for a Stand-Alone Server run the following command as the root user:
/u01/app/11.2.0/grid/perl/bin/perl -I/u01/app/11.2.0/grid/perl/lib -/u01/app/11.2.0/grid/crs/install /u01/app/11.2.0/grid/crs/install/roothas.pl


To configure Grid Infrastructure for a Cluster perform the following steps:
1. Provide values for Grid Infrastructure configuration parameters in the file - /u01/app/11.2.0/grid/crs/install/crsconfig_params. For details on how to do this, see the installation guide.
2. Run the following command as the root user:
 /u01/app/11.2.0/grid/perl/bin/perl -I/u01/app/11.2.0/grid/perl/lib -I/u01/app/11.2.0/grid/crs/install /u01/app/11.2.0/grid/crs/install/rootcrs.pl
To update inventory properties for Grid Infrastructure, perform the following
steps. If a pre-11.2 home is already configured, execute the following:
11.2_Home/oui/bin/runInstaller -updateNodeList -silent -local CRS=false ORACLE_HOME=pre-11.2_Home
Always execute the following to register the current home:
11.2_Home/oui/bin/runInstaller -updateNodeList -silent -local CRS=true ORACLE_HOME=11.2_Home.
If either home is shared, provide the additional argument -cfs.
[root@vmschullinux ~]#

Den Aufruf als root starten:
/u01/app/11.2.0/grid/perl/bin/perl -I/u01/app/11.2.0/grid/perl/lib -I/u01/app/11.2.0/grid/crs/install /u01/app/11.2.0/grid/crs/install/roothas.pl

Ausgabe:
[root@vmschullinux ~]# /u01/app/11.2.0/grid/perl/bin/perl -I/u01/app/11.2.0/grid/perl/lib -I/u01/app/11.2.0/grid/crs/install /u01/app/11.2.0/grid/crs/install/roothas.pl
2010-06-01 15:13:22: Checking for super user privileges
2010-06-01 15:13:22: User has super user privileges
2010-06-01 15:13:22: Parsing the host name
Using configuration parameter file: /u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
LOCAL ADD MODE
Creating OCR keys for user 'oracle', privgrp 'oinstall'..
Operation successful.
CRS-4664: Node vmschullinux successfully pinned.
Adding daemon to inittab
CRS-4123: Oracle High Availability Services has been started.
ohasd is starting

vmschullinux     2010/06/01 15:14:27     /u01/app/11.2.0/grid/cdata/vmschullinux/backup_20100601_151427.olr
Successfully configured Oracle Grid Infrastructure for a Standalone Server
[root@vmschullinux ~]#

Der Listener darf nun, bei Oracle Restart, nicht aus einem Oracle Datenbank Home genutzt werden, sondern muss aus dem Homeverzeichnis der Grid Infrastruktur konfiguriert werden.

Danach wird ganz normal die DB Software in einem eigenen Homeverzeichnis installiert und eine DB angelegt.

2010-05-21

Automatischer Start von Listener, DB Instanz und Database Control

Unter Windows als Serverbetriebssystem ist der automatische Start von Listener, DB Instanz und Database Control kein Thema. Hier sind diese Komponenten durch die Installation als Windows Dienste definiert, die beim Start des Servers automatisch mit gestartet werden.

Unter Linux / Unix sieht das anders aus. Der der automatische Start von Listener, DB Instanz und Database Control muss vom Administrator manuell eingerichtet werden. Dies soll hier kurz am Beispiel einer Datenbank Namens demo beschrieben werden, die in einer VMware Umgebung mit Oracle Enterprise Linux 5 und Oracle Datenbank Software 11g Rel.2 eingerichtet ist:

  1. Zunächst in /etc/oratab den Eintrag zur Instanz demo auf Autostart setzen, dazu in der letzten Spalte den Wert N auf Y abändern.
    vi /etc/oratab
    alte Zeile:
    demo:/u01/app/oracle/product/11.2.0/db_1:N
    ersetzen durch:
    demo:/u01/app/oracle/product/11.2.0/db_1:Y
  2. Dann folgendes Start/Stop Skript für den Oracle Service in /etc/init.d erstellen.
    vi /etc/init.d/dbora
    Datei mit folgendem Inhalt erstellen:
    #!/bin/bash
    #
    # oracle Init file for starting and stopping
    # Oracle Database and Listener. Script is valid for 10g and 11g versions.
    #
    # chkconfig: 35 99 80
    # description: Oracle Database startup script

    # Change the value of ORACLE_OWNER to the login name of the
    # oracle owner at your site.
    #
    ORACLE_OWNER=oracle

    # Change the value of ORACLE_HOME to specify the correct Oracle home
    # directory for your listener installation.
    ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

    case $1 in
    'start')
            su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
            su - $ORACLE_OWNER -c "export ORACLE_SID=demo; $ORACLE_HOME/bin/emctl start dbconsole"
            touch /var/lock/subsys/dbora
            ;;
    'stop')
            su - $ORACLE_OWNER -c "export ORACLE_SID=demo; $ORACLE_HOME/bin/emctl stop dbconsole"
            su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
            rm -f /var/lock/subsys/dbora
            ;;
    *)
            echo "usage: $0 {start|stop}"
            exit
            ;;
    esac
    #
    exit
  3. Die die Rechte des Skripts dbora anpassen und dieses zum Start in den entsprechenden Runleveln hinzufügen.
    chmod 750 /etc/init.d/dbora
    chkconfig --add dbora --level 35
  4. Reboot der VM bzw. des Servers als root durchführen, um zu testen, dass der Listener und die Instanz der Datenbank sauber starten.
    reboot

Die Konfiguration des automatischen DB Starts mit diesem Skript funktioniert auch mit Oracle Versionen 11gR1 und 10g. Mit Oracle 11gR2 gibt es Oracle Restart als eine neue Option der Oracle Grid Infrastruktur, die ebenfalls den automatischen Start der wichtigsten Oracle DB Komponenten in einer Einzel-Server/-Instanz Umgebung realisiert.

Der automatische Start von Listener und DB Instanz mittels Oracle Restart wird in einem folgenden Post beschrieben.