Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  4/2008  Pfeil  Aktuell
suche: 

ORDIX News Archiv

Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.

Weiterführende Links



Larry Ratlos:

Problem bei Dateisystemerweiterung in Solaris 10


Larry möchte auf einem Solaris 10 Datenbankserver ein ufs-Dateisystem vergrößern, auf dem sich vorwiegend Datenbankdateien befinden. Das bestehende Dateisystem mit 984 Gigabyte befindet sich auf einem Metadevice des Solaris Volume Manager. Es soll nun um zusätzliche 400 Gigabyte erweitert werden.

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

Können Sie Larry helfen?

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.

Lösung der Aufgabe aus 3/2008

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