Conditional compilation mit Oracle 10 und jünger

Bedingte Compilierung ist ein nettes Feature, um z.B. Debug- oder Test-Code aus einer Produktionsumgebung rauszuhalten, ohne den Quelltest zu duplizieren.

Oracle unterstützt dies seit der Version 10.2.

So gehts:

Die Befehle für Conditional Defines sind $IF, $THEN, $ELSE und $END. Die Variablen werden mittels $$ angesprochen, also z.B.

Create or replace Function foobar (v_para1 integer, 
                                   v_para2 integer) return integer 
is 
Begin
  $IF $$debug_flag $THEN
   dbms_output.put_line ('Calling foobar with ' || v_para1 || ', ' || v_para2);
  $END
  return v_para1 * v_para2;
End;

Spielt man diese Funktion ein und ruft sie anschliessend auf, so wird keine Ausgabe im Server-Output erscheinen.

Dies muss man durch

ALTER FUNCTION foobar COMPILE PLSQL_CCFLAGS = 'debug_flag:TRUE' REUSE SETTINGS;

aktivieren.

Dann gibt es beim Aufruf die erwartete Ausgabe.

Natürlich kann man den Conditional Define auch wieder zurücksetzen, so dass man keine Ausgabe mehr erhält.

ALTER FUNCTION foobar COMPILE PLSQL_CCFLAGS = 'debug_flag:FALSE' REUSE SETTINGS;

Xcode 5.0.2 und svn 1.8

Will man Xcode in der Version 5.0 mit SVN 1.8 zusammen verwenden, erhält man seltsame Fehlermeldungen. Etwas Recherche im Internet liefert den sehr hilfreichen Hinweis, dass die SVN-Server-Version nicht zur Clientversion von SVN in Xcode passen könnte. Ich verwende die aktuelle Version 1.8 von svn als Server, die Client-Version erfährt man durch direkten Aufruf von svn in Xcode durch:

/Applications/Xcode.app/Contents/Developer/usr/bin/svn --version

und das liefert

svn, version 1.7.10 (r1485443)

Die Kombination Server-Version 1.8 und Client-Version 1.7 habe ich  nicht ans Laufen gebracht. In diesem Post auf stackoverflow.com wird eine Lösung erläutert, die abgewandelt auf Xcode 5 ebenfalls passt :

Vorhandenen svn-binaries verschieben in ein Sicherungsverzeichnis

cd /Applications/Xcode.app/Contents/Developer/usr/bin
sudo mkdir svn_V17
sudo mv svn* svn_V17/

und dann die Links auf die richtigen Programme in opt/local/bin anlegen

cd /Applications/Xcode.app/Contents/Developer/usr
sudo ln -s /opt/local/bin/svn* bin/

Danach funktionierte svn auch in Xcode.
Das muss man dann mit jeder Aktualisierung von Xcode wiederholen.

 

Oracle 11gR2 unter Mac OS X

Was waren das noch für Zeiten, als von Oracle ein DB-Server für OS X bereitgestellt wurde. Heute muss man sowas über eine virtuelle Maschine erledigen.

  1. Installiere zuerst Virtualbox 4.x. Gibts für lau bei Virtualbox.org.
  2. Dann eine Developer VM von Oracle mit Oracle 11 herunterladen. So spart man sich die Einrichtung und Installation des Oracle Servers. Was da alles schief gehen könnte…..
  3. Nun den Speicher der VM auf einen sinnvollen Wert hochsetzen: 900 MB ist doch ein wenig knapp:  Besser sind 2 GB.
  4. In Virtualbox wird noch ein Host-Only Netzwerk definiert. Dazu Einstellungen in VirtualBox öffnen, dann Netzwerk. Dort je ein NAT-Netzwerk und Host-Only-Netzwerk anlegen.
  5. Der Virtuellen Maschine nun diese beiden Netzwerke als Adapter 1 und Adapter 2 zuordnen.
  6.  Nun die VM booten. Das Betriebssystem-Login lautet oracle/oracle.
  7. Nun loggen wir uns als sysdba in den Oracle-Server ein:
    [oracle@entw01 ~]$ sqlplus sys as sysdba@orcl

    Passwort ist oracle.

    SQL>Alter user scott identified as tiger;
    SQL>Alter user scott account unlock;
  8. Tastatur auf deutsch umstellen.
    Es ist eine gute Idee, die Tastatur in der VM auf die gleiche Nationalität einzustellen, wie außerhalb. Dazu über das Gnome-Hauptmenü Administration/Keyboard die deutsche Tastatur aktivieren.
  9. In der Hosts-Datei der virtuellen Maschine sollte noch der Host-Name von Host und Guest eingetragen werden:
    127.0.0.1 localhost.localdomain localhost
    ::1 localhost6.localdomain6 localhost6
    192.168.56.1 host
    192.168.56.1 macbook
    127.0.0.1 entw01
  10. Der Client ist jetzt fertig. Jippie!

Nun wenden wir uns wieder dem Host zu.

  1. Der Host-Name des Guests muss noch in der Host-Datei des Hosts eingetragen werden:
    127.0.0.1       localhost
    255.255.255.255 broadcasthost
    ::1             localhost
    fe80::1%lo0     localhost
    192.168.56.101  entw01
  2. SSH-Zugang zur virtuellen Maschine:
    Wir haben als Hostname entw01 festgelegt, somit kann einfach eine Sitzung auf der virtuellen Maschine beginnen:

    >$ ssh entw01 -l oracle
  3. Nun muss noch der InstantClient für Mac 64 Bit heruntergeladen werden – wir brauchen das Basic-Package sowie die SQL-Plus-Files.
  4. Diese Dateien werden in einem Ordner ausgepackt, z.B. ~/bin/instantclient_11_2.
  5. Anschliessend in der Datei _bash_profile diesen Ordner den Systemvariablen PATH und DYLD_LIBRARY_PATH zufügen:
    export ORA_IC=/Users/xx/bin/instantclient_11_2
    export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$ORA_IC
    export PATH=$PATH:$ORA_IC
  6. Jetzt können wir mittels SQLPLUS auf den Oracle-Server zugreifen:
    sqlplus scott/tiger@entw01:1521/orcl
  7. oder für den sysdba
  8. sqlplus sys/oracle@entw01/ORCL as sysdba
  9. Fertig.

Passwortsicherheit

Passwortsicherheit ist in Zeiten mobiler Geräte und von Cloud-Diensten, eCommerce und Online-Shopping eine zentrale Fragestellung für jeden. Doch was ist ein sicheres Passwort? und wie kommt man an die vielen sicheren Passworte? Schliesslich braucht man für jede Webseite und für jeden Dienst ein anderes.

Ein sicheres Passwort muss

  • gut zu merken sein. Andernfalls müsste es irgendwo notiert werden,
  • für Fremde nicht zu erraten sein,
  • durch Wörterbuch-Attacken nicht (zu leicht) zu knacken sein,
  • einmalig sein, d.h. das gleiche Passwort nicht für unterschiedlichen Zwecke bzw. Dienste verwenden.

Grundsätzlich gilt:

  • Länger ist besser als kürzer
  • Zufälliger ist besser als Wörter, Begriffe oder andere bekannte Folgen (Fibonacci, die Zahl PI, die Zahl E, usw.)
  • Keine bekannten Fakten in Passworten verwenden.
  • Sicherheitsfragen wie Erster Wohnort, erstes Auto, Name der ersten Freundin NIEMALS wahrheitsgemäß beantworten.

Einen interessanten Ansatz zur Erzeugung langer, aber merkbarer Passworte ist Diceware.

Diceware

Dazu nimmt man sich einen echten (!) Würfel und würfelt 30 mal. Die Ergebnisse werden jeweils notiert und dann 5er-Gruppen gebildet. Die 5er-Gruppen sucht man dann in sog. Diceware-Listen. Die gibts auch auf Deutsch. Auf diese Weise bildet man sich eine Gruppe von 6 Begriffen, die als Passwort dienen und besser merkbar sind als die gewürfelten Zahlenfolgen.

Software-Unterstützung

Anfangs speicherte ich meine Passworte in einer einfachen Textdatei, die händisch auf zwei Computer, ein Smartphone und ein Tablett übertragen wurde. Das machte nicht wirklich Spass, war fehleranfällig und reichlich unsexy. Schliesslich versuchte ich DataVault Password Manager, welches meine Anforderungen der Pflege und Synchronisierung halbwegs erfüllt. „Halbwegs“ deshalb, weil das Synchronisieren mit Datavault händisch passieren muss.  Als Alternative stellte sich 1Password dar – hier ist synchronisieren ganz einfach. Ich brauche  nichts dafür zu tun. So muss es sein.

Einzig negativ an 1Passwort ist der sehr hohe Preis.

VMware Fusion und Mac-Virtualiserung

Kleine Falle beim Erstellen einer Virtuellen Mac-Umgebung mit VMWare Fusion:  Die Standardtastatureinstellung ist amerikanisch. Und da ist das @ nicht auf dem L sondern irgendwo anders. Erfreulicherweise hat Apple aber dran gedacht, die Tastatureinstellung im Setup änderbar zu machen.

Anders ausgedrückt: Obwohl ich als Installationsprache Deutsch gewählt hatte, wurde die Tastatur nicht entsprechend umgestellt.