Schlagwort-Archive: Unix

Alt, aber bezahlt: Oracle Disk Manager auf VxFS

Neues aus den Rubriken „Old Feature“ und „unbekannt oder unterbewertet„: Der Oracle Disk Manager (ODM)!

Nicht immer hat man als DBA in einem Unternehmen die Wahl, welche Speichersysteme man für die Datenbank einsetzt, und seien sie auch noch so effizient: Es gibt oft altertümliche Standards, gerne auch als „Best Practice“ bezeichnet (um sie über jeden Zweifel, jedes Gegenargument und jegliche Innovation erhaben zu machen), an die man sich halten muss. Ein solcher Standard ist die zwingende Nutzung von Dateisystemen anstelle von ASM und/oder Raw Volumes.

Worin aber sollen denn die Nachteile von Dateisystemen liegen? Sie sind doch so schön bequem handhabbar?

Weiterlesen

Hallo Steinzeit! 8-Zeichen-Restriktion bei Servernamen

Manchmal trifft man noch auf Relikte aus der IT-Steinzeit. Zum Beispiel, wenn man den folgenden Code ausführen will, um in SQL die IP-Adresse des Hosts zu ermitteln. In diesem Beispiel ist der Servername „xx-myserver“:

SQL> select sys.utl_inaddr.get_host_address() from dual;

select sys.utl_inaddr.get_host_address() from dual

*

ERROR in line 1:

ORA-29257: host xx-myser unknown

ORA-06512: at "SYS.UTL_INADDR", line 19

ORA-06512: at "SYS.UTL_INADDR", line 40

ORA-06512: at line 1

Auch in Tracefiles fällt in diesem Fall auf, daß der Servername auf „xx-myser“ gekürzt ist.

Gut versteckt in der Oracle Knowledge Base findet sich das Dokument 957443.1, das folgendes aussagt:

Oracle 10.1, 10.2 and 11.1 do not support a hostname longer than 8 characters on HP-UX operating system.

Also frei übersetzt: Bis ins Jahr 2009 (Release von 11gR2) war es für Oracle unter HP-UX nicht vorgesehen, Servernamen mit mehr als acht Zeichen zu unterstützen!

Zugegeben, die Zahl der potentiellen Probleme damit wird klein sein, aber auf jeden Fall größer als Null, wie man in diesem Thread sehen kann. Wer bei der Vergabe von Servernamen diese Grenze überschreiten will, sollte also besser Oracle 11.2 einsetzen…

SQL*Plus unter Ubuntu (Instant Client)

Diese Beschreibung wurde mit dem Oracle Instant Client 11.2.0.1 x86-64 auf Ubuntu 10.04 „Lucid Lynx“ getestet.

Allgemeines

Seit der Version 9i liefert Oracle den Client — also die SQL*Net-Treiber — nicht mehr einzeln aus sondern nur noch im Bundle mit dem Oracle Server. Hat man die CDs gerade nicht zur Hand, muß man daher leider fast 1GB Daten herunterladen, um den Client installieren zu können.

Wer Produkte vertreibt, die auf Oracle aufsetzen und daher den Client benötigen, konnte bislang nicht einfach den Client mit vertreiben, da dies durch Oracles Lizenz nicht erlaubt war.

Beide Probleme löst der frei erhältliche „Instant Client“, der separat von anderer Oracle-Software (und damit z.B. ohne obligatorisches ORACLE_HOME) installiert werden kann. Dieser ist mit etwa 36MB (10g, 46 MB bei 11g) noch relativ schlank.

Installation

Wenn schon Oracle-Software installiert ist

  • Den Instant Client nicht in das gleiche Verzeichnis kopieren, in dem bereits die Binaries der anderen Oracle-Software liegen ($ORACLE_HOME)! Andernfalls zerschießt man sich damit die bestehende Installation.
  • In der Umgebungsvariablen PATH sollte — unabhängig von der Reihenfolge — entweder nur der Pfad zum Instant Client oder der Pfad zu den anderen Binaries stehen.

Installation unter Ubuntu

  1. Herunterladen des „Basic Clients“ von hier.
  2. Der Download muss zur Systemarchitektur passen (32/64 Bit, Prozessortyp)
    • Es ist jeweils die ZIP-Datei zu laden, da Ubuntu (wie auch Debian u.a.) nicht mit RPM-Paketen umgehen kann.
    • Ggf. kann auch der deutlich kleinere „Basic Lite“ Client eingesetzt werden, dieser unterstützt aber nur NLS_LANGUAGE=American mit den Zeichensätzen ASCII, WE8DEC und UTF.
  3. SQL*Plus kann ebenfalls unter obigem Link als Add-on heruntergeladen werden.
  4. Entpacken der Archive in ein eigenes Verzeichnis (z.B. „~/oracle/instantclient“ oder „/usr/lib/oracle/instantclient“).
  5. Einstellen des Suchpfades auf das neu erstellte Verzeichnis (zur Variablen LD_LIBRARY_PATH hinzufügen).
  6. Wenn eine tnsnames.ora genutzt werden soll: Einstellen der Umgebungsvariablen TNS_ADMIN=/pfad/zur/tnsnames.

Es gibt auch eine alternative, aber aufwendigere Installationsmöglichkeit, bei der der Instant Client in ein .deb-Paket konvertiert wird und sich damit später komfortabler deinstallieren lässt.

Für die Fans von Cut&Paste habe ich hier mal die Anweisungen am Beispiel meines Testsystems zusammengestellt (Auszuführen nach erfolgtem Download im Download-Verzeichnis). Er entpackt die Downloads, richtet einen symbolischen Link ein, damit SQL*Plus ohne Pfadangabe gestartet werden kann und trägt die Umgebungsvariable LD_LIBRARY_PATH fest für den momentanen Benutzer ein:

sudo unzip oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip -d /usr/lib/oracle/
sudo unzip oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.x86_64.zip -d /usr/lib/oracle/
export LD_LIBRARY_PATH=/usr/lib/oracle/instantclient_11_2
sudo ln -s /usr/lib/oracle/instantclient_11_2/sqlplus /usr/bin/sqlplus
echo export LD_LIBRARY_PATH=/usr/lib/oracle/instantclient_11_2 >> ~/.bashrc

Verbindungsdeskriptoren

So kann man sich mit dem Instant Client zu einer Datenbank verbinden, wenn keine tnsnames.ora genutzt wird:

Variante 1:

sqlplus scott/tiger@//host:[port][/service name]

Variante 2:

sqlplus scott/tiger@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=meinserver)\
(Port = 1521)))(CONNECT_DATA=(SID=ORCL)))"

Weblinks

Unix-Umgebung einrichten mit oraenv

Heute ist mir bei der Lektüre eines Leitfadens zum DB-Upgrade unter Unix ein Klassiker aufgefallen: Das Tool „oraenv“, das vielen Unix-Oraclern nicht bekannt ist oder nicht verwendet wird, weil die Systemumgebung (namentlich die Datei „oratab“) nicht richtig gepflegt ist.

Wird eine Datenbank unter Unix mit dem Database Configuration Assistant (DBCA) angelegt, dann pflegt der DBCA auch die Datei „/etc/oratab“ (auf manchen Unixen auch „/var/opt/oracle/oratab“). Diese folgt dem Format

SID:ORACLE_HOME:[Y|N]

Ist die Datei korrekt gepflegt, können alle notwendigen Umgebungsvariablen zur Benutzung weiterer Oracle-Tools wie sqlplus, expdp, impdp etc. direkt mit oraenv eingestellt werden. oraenv fragt dann nach der einzustellenden SID und – falls es diese in der oratab nicht findet – auch nach dem passenden Home-Verzeichnis.

Damit entfällt die Notwendigkeit, mit eigenen Skripten ORACLE_HOME, ORACLE_SID und PATH explizit zu setzen. Stattdessen kann jeder OS-Benutzer „. oraenv“ oder „. coraenv“ (C-Shell) aufrufen und diese Werte setzen lassen. Die Pfade einer Oracle-Installation lassen sich damit zentral in der oratab verwalten.

Soll das ganze skriptgesteuert ohne Interaktion laufen, kann die Umgebungsvariable ORAENV_ASK eingesetzt werden:

export ORACLE_SID=ORCL
export ORAENV_ASK=NO
. oraenv

Nicht davon berührt werden andere, eventuell notwendige Einstellungen, wie z.B. NLS_LANG, ORACLE_BASE oder ORACLE_ADMIN. Diese müssen weiterhin explizit gesetzt werden. Allerdings ist NLS_LANG anwendungsspezifisch und muss nicht zentral verwaltet werden. Und die beiden anderen Beispiele werden selbst bei administrativen Aufgaben eher selten benötigt.

Weblinks