ORACLE: System Datenfiles/Conrolfiles umbenennen/verschieben
Wenn man das Datenfile des System-TBS oder die Controlfiles an einer anderen Stelle des Filesystems platzieren möchte, kann man wie folgt vorgehen:
Erstmal ein PFILE erzeugen, damit man die Datenbankparameter wieder hat (Pfade natürlich vollständig angeben):
CREATE PFILE='initINSTANZ.ora' FROM 'spfileINSTANZ.ora';
Dann brauchen wir die CREATE-Statments um die Controlfiles wieder neu erzeugen zu können:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
Dann Datenbank runterfahren:
SHUTDOWN IMMEDIATE
Nun verschiebt man die Controlfiles und/oder die Systemdatenfiles ins gewünschte Verzeichnis. Man kann auch gleich noch "normale" Datenfiles verschieben, aber das macht man normalerweise durch offline Setzen des entsprechenden TBS und dann die Datenfiles umbenennen. Aber grundsätzlich kann man mit dieser Methode hier gleich eine ganze DB verschieben.
Im Userdump-Verzeichnis (cd $ORACLE_BASE/admin/INSTANZ/udump/) entstehen dann drei Dateien, von denen eines das CREATE CONTROLFILE Statement enthält. In dem File steht etwas mehr drin, als was man braucht. Das wichtige Statement sieht dann z.B. so aus (wir gehen davon aus, das die Datenbank vorher mit SHUTDOWN oder SHUTDOWN IMMEDIATE sauber beendet wurde!):
CREATE CONTROLFILE REUSE DATABASE "INSTANZ" NORESETLOGS ARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 3
MAXDATAFILES 300
MAXINSTANCES 10
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/DATENVERZEICHNIS/INSTANZ/redo/redo01.log' SIZE 50M,
GROUP 2 '/DATENVERZEICHNIS/INSTANZ/redo/redo02.log' SIZE 50M,
GROUP 3 '/DATENVERZEICHNIS/INSTANZ/redo/redo03.log' SIZE 50M
DATAFILE
'/DATENVERZEICHNIS/INSTANZ/data/system01.dbf',
'/DATENVERZEICHNIS/INSTANZ/undo/undotbs01.dbf',
'/DATENVERZEICHNIS/INSTANZ/data/sysaux01.dbf',
'/DATENVERZEICHNIS/INSTANZ/data/blahblub.dbf',
CHARACTER SET AL32UTF8;
Hier passt man nun die Pfade entsprechend an, wo man die Dateien hinverschoben hat. Das oben erstellte initINSTANZ.ora File kopieren wir nach $ORACLE_HOME/dbs/initINSTANZ.ora. Wenn man nicht nur das System-Datenfile verschoben hat sondern auch die Controlfiles, dann muss man auch den CONTROL_FILES-Parameter in der initINSTANZ.ora anpassen. Oracle 10.2 z.B. verwendet dann diese init.ora Datei später automatisch.
Nun fährt man die DB wie folgt hoch:
STARTUP NOMOUNT
Als nächstes führt man obiges CREATE CONTROLFILE Statement aus. Das erzeugt dann die neuen Controldateien dort, wie sie im CONTROL_FILES Parameter angegeben wurden. Wenn die DB das erfolgreiche Anlegen mit Control file created. bestätigt hat, kann man die DB wieder öffnen:
ALTER DATABASE OPEN;
Zum Schluss sollte man dann noch ein SPFile erzeugen (es sind natürlich die vollständigen Pfade anzugeben):
CREATE SPFILE='spfileINSTANZ.ora' FROM PFILE='initINSTANZ.ora';
Das sollte es eigentlich gewesen sein...
Ein paar Links:
Ask Tom "move system datafiles", version 8.1.7 - http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:5033895918209
init.ora SpFile Parameters - http://www.ss64.com/orasyntax/initora.html
Posted at 08:00nachm. Feb. 27, 2006 by cetixx in Tipps | Kommentare [0]
POSTGRESQL: max_fsm_pages / max_fsm_relations
Wer sich immer schon mal gefragt hat, was er bei den beiden Parametern max_fsm_pages und max_fsm_relations in der postgresql.conf eigentlich einstellen soll, der sollte einfach mal Folgendes machen: psql mit der entsprechenden Datenbank starten und dann
db=# VACUUM ANALYZE VERBOSE;
...
INFO: free space map contains 14679 pages in 999 relations
DETAIL: A total of 27808 page slots are in use (including overhead).
27808 page slots are required to track all free space.
Current limits are: 40000 page slots, 2000 relations, using 362 KB.
Da kommt dann jede Menge Ausgabe, aber wichtig sind die letzten vier Zeilen. Ich habe z.B. bei dieser Datenbank
max_fsm_pages = 40000
max_fsm_relations = 2000
in der postgresql.conf eingestellt. Das sieht man auch bei der Ausgabe in der letzten Zeile bei den Current limits. Der Analyze zeigt an, das die Free Space Map momentan 14679 Pages und 999 Relations beansprucht. Das paßt also locker in die angegebenen Parameter (40000 > 14679 und 2000 > 999). Wenn die Werte zu klein sind, kann Postgres die freien Speicherblöcke nicht mehr in Hauptspeicher verwalten, was die Sache natürlich erheblich verlangsamt. Man sollte das also des Öfteren kontrollieren.
Posted at 08:00nachm. Feb. 23, 2006 by cetixx in Tipps | Kommentare [0]
JMETER: Bad Call to remote host
Mit Apache's JMeter aus dem Jakarta Projekt, lassen sich ja schon mal ganz gut Lasttests erstellen für HTTP, FTP, JDBC, LDAP und noch Vieles mehr. Dazu kann man auch mehrere JMeter Server aufsetzen und dann von eine entfernten Client aus starten. Damit kann man dann richtig Last erzeugen. Nur leider funktioniert das auf Grund der benutzten Kommunikation per RMI hinter einer Firewall oder NAT nicht so wahnsinnig gut. Aber per X Protokoll kann man das ja auch auf einem entfernten Server starten und sich die GUI dann lokal anzeigen lassen.
Nun ich hatte also drei solcher JMeter Server aufgesetzt, hab die jmeter.properties angepaßt, JMeter gestartet und wollte dann mit dem Client darauf zugreifen... Und da kam sie dann wieder die blöde Meldung: Bad Call to remote host . Nun es stellte sich heraus, das in dem Skript jmeter-server rmiregistry ohne Pfadangabe gestartet wurde und das hat in diesem Fall dann rmiregistry unter /usr/bin gestartet und das war eine 1.3er Java VM. JMeter lief aber mit einer 1.5er. Tja und das passt nun gar nicht zusammen. Man muss also unbedingt dafür sorgen, das JMeter und rmiregistry die gleiche Java Version verwenden!
Posted at 07:59nachm. Feb. 16, 2006 by cetixx in Tipps | Kommentare [0]
SOLARIS: Wichtige Netzwerk Monitoring Tools
kstat
- the Kernel Statistics framework.
nx.se
- SE Toolkit's nx.se.
nicstat
- nicstat for network interface utilisation.
SNMP
- SNMP based tools include MRTG.
traceroute
- timing hops to destination.
TTCP
- creates test load between two hosts.
pathchar
- traceroute with throughputs, an amazing tool.
ntop
- comprhensive statistics for snooped traffic.
tcptop
- TCP PID summary.
tcpsnoop
- watch TCP traffic live with PID.
Posted at 07:10nachm. Feb. 08, 2006 by cetixx in Tipps | Kommentare [0]
ORACLE: Welches Datenfile erzeugt am meisten I/O?
Dazu nimmt man folgende Query:
SELECT NAME,
PHYRDS "Physical Reads",
round((PHYRDS / PD.PHYS_READS)*100,2) "Read %",
PHYWRTS "Physical Writes",
round(PHYWRTS * 100 / PD.PHYS_WRTS,2) "Write %",
fs.PHYBLKRD+FS.PHYBLKWRT "Total Block I/O's"
FROM (
SELECT sum(PHYRDS) PHYS_READS,
sum(PHYWRTS) PHYS_WRTS
FROM v$filestat
) pd,
v$datafile df,
v$filestat fs
WHERE df.FILE# = fs.FILE#
ORDER BY fs.PHYBLKRD+fs.PHYBLKWRT DESC;
Hier zahlt es sich mal wieder ganz besonders aus, wenn man die Tablespaces/Datenfiles verschiedenen Projekten zuordnert und nicht alles in eine Datei stopft. Denn dann sieht man mit dieser Query sofort das Projekt, das am meisten Festplatten-I/O verursacht.
Posted at 08:02nachm. Feb. 07, 2006 by cetixx in Tipps | Kommentare [0]
Intranet/Internet Open Source Suchmaschinen
Wer auf der Suche nach einer Suchengine für seine eigenen Intranet/Internet Webseite ist, der kann mal folgende Engines ins Auge fassen:
Webglimpse
Nutch
Mnogosearch
Egothor
Dataparksearch
Swish-e
Posted at 07:54nachm. Feb. 07, 2006 by cetixx in Tipps | Kommentare [0]
ORACLE: Füllgrad der Tablespaces feststellen
Wie findet man raus, wie voll die Tablespaces schon sind? Darüber gibt folgendes SQL-Skript Auskunft:
SELECT a.TABLESPACE_NAME,
a.BYTES bytes_used,
b.BYTES bytes_free,
b.largest,
round(((a.BYTES-b.BYTES)/a.BYTES)*100,2) percent_used
FROM
(
SELECT TABLESPACE_NAME,
sum(BYTES) BYTES
FROM dba_data_files
GROUP BY TABLESPACE_NAME
)
a,
(
SELECT TABLESPACE_NAME,
sum(BYTES) BYTES ,
max(BYTES) largest
FROM dba_free_space
GROUP BY TABLESPACE_NAME
)
b
WHERE a.TABLESPACE_NAME=b.TABLESPACE_NAME
ORDER BY ((a.BYTES-b.BYTES)/a.BYTES) DESC;
Posted at 06:45nachm. Feb. 07, 2006 by cetixx in Tipps | Kommentare [0]
MYSQL: Client does not support authentication protocol
Wenn man sich auf eine MySQL 5 z.B. mit PHP 4 oder einem mysql-Clientprogramm in Version 4 connecten möchte und die Meldung
Client does not support authentication protocol
bekommt, dann liegt das daran, das sich der Passworthashing-Algo in MySQL 5 geändert hat (was mal wieder typisch für MySQL ist...) In diesem Fall muss man das Passwort wie folgt behandeln:
SET PASSWORD FOR <USERNAME>@'<IRGENDWO.DE>' = OLD_PASSWORD('password');
Dann sollt's schon funken (<USERNAME> und <IRGENDWO.DE> natürlich ersetzen..
Posted at 06:59nachm. Feb. 03, 2006 by cetixx in Tipps | Kommentare [0]