
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
Weiterführende Links
|
|
Die Vergrößerung des Volumes funktioniert ohne Probleme. Als er aber das Dateisystem vergrößern will, bekommt Larry folgende Fehlermeldung:
root@larry1 # growfs -M /oracle/data /dev/md/rdsk/d220 mkfs: bad value for nbpi: must be at least 1048576 for multi-terabyte, nbpi reset to default 1048576
Larry ist ratlos. Bisher konnte er das Dateisystem immer problemlos vergrößern. Aber warum schlägt es heute fehl? Wenn Sie die Erklärung kennen, schicken Sie sie bis zum 20.01.2009 an kniffel@ordix.de.
Im letzten Rätsel ging es darum, auf 20 Datenbank-Servern per Skript den Eintrag für die Testdatenbank "LOGTEST01" aus der tnsnames.ora zu entfernen. Larry hat viele sehr gute Lösungsvorschläge der Leser erhalten, die bemerkenswerterweise alle eine Gemeinsamkeit hatten: es wurde die Programmiersprache Perl eingesetzt!
Perl eignet sich in der Tat hervorragend für diese Aufgabe und daher konnte Larry diese Entscheidung sehr gut verstehen.
Für diejenigen unserer Leser, denen Perl mit ihren gerade einmal 21 Jahren Existenz noch zu jung ist und auch als Ehrenrettung für eine oft zu Unrecht vernachlässigte Unix-Skriptsprache, stellen wir hier jedoch eine Lösung mit der Programmiersprache awk vor, welche selbst mit ihren 31 Jahren noch lange nicht zum alten Eisen gehört:
#!/bin/sh
DBNAME="LOGTEST01"
awk '
# Startzeile gefunden?
/^[ \t]*'"$DBNAME"'[ \t\n=]/ {
# Solange noch offene Klammern (bo) uebrig sind
# oder die erste Klammer (fstb) noch nicht gefunden
# wurde, Schleife durchlaufen
while(bo>0||!fstb) {
# Wenn offene Klammer gefunden fstb=1
if(index($0,"(")){fstb=1}
# Addiere Differenz oeffnende/schliessende Klammern
# zur Anzahl geoeffneter Klammern
bo+=(gsub("[(]","")-gsub("[)]",""))
# Naechste Zeile einlesen, wenn nicht EOF erreicht
if(!getline){exit}
}
}
# Alle Zeilen ausgeben, die vorher nicht uebersprungen wurden
//
' $ORACLE_HOME/network/admin/tnsnames.ora > /tmp/tnsnames.ora.$$
mv /tmp/tnsnames.ora.$$ $ORACLE_HOME/network/admin/tnsnames.ora
|