Als PDF Downloaden!

Werbung
Tipps & Tricks: Oktober 2011
Bereich:
DBA
Erstellung:
10/2011 RM
Versionsinfo:
11.2
Letzte Überarbeitung:
10/2011 RM
memory_target unter Linux
Wollten Sie schon mal, die unter 11g hinzugekommenen Parameter, memory_target und memory_max_target
verwenden und haben als Fehlermeldung beim Startup folgende Meldung:
ORA-00845: MEMORY_TARGET not supported on this system
erhalten, und sind Sie dann aus Zeitgründen oder Ähnlichem wieder auf die, in 10g aktuellen Parameter
ausgewichen?
Wenn ja, sind Sie hier richtig!
Die gerade angesprochene Fehlermeldung ORA-00845 sagt nämlich (milde ausgedrückt) nicht wirklich die
Wahrheit. Das Alertlog der entsprechenden Datenbank ist an dieser Stelle ein wenig gesprächiger und gibt z. B.
folgenden Text aus:
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the
/dev/shm file system to be mounted for at least 1577058304 bytes.
/dev/shm is either not mounted or is mounted with available space less than this size.
Please fix this so that MEMORY_TARGET can work as expected. Current
available is 1048576000 and used is 0 bytes. Ensure that the mount point is /dev/shm for
this directory. memory_target needs larger /dev/shm
Somit sind Sie hier schon ein bisschen schlauer und wissen nun, dass irgendetwas (um genau zu sein /dev/shm)
wohl zu klein ist und größer sein sollte.
Warum ist man aber vorher nicht schon auf dieses Problem gestoßen?
Die Erklärung ist ziemlich simpel:
Sobald Sie den Parameter memory_target setzen wird auf der Betriebssystemebene von Linux eine andere
Methode für die Arbeitsspeicherverwaltung verwendet, als es beim Setzen von z. B. pga_aggregate_target und
sga_target geschieht.
Zurück zum eigentlichen Problem: Wie kriegen Sie memory_target dazu auf Ihrem System "supported" zu sein?
Im Prinzip ist dies ganz einfach. Sie müssen nur /dev/shm entsprechend vergrößern.
Dazu gehen Sie wie folgt vor:
1. Mit dem Linux "df -h" können Sie überprüfen, ob derzeit jemand auf diesen Bereich zugreift bzw. Speicher
beansprucht. Die Ausgabe des Befehls könnte so aussehen.
df -h
Filesystem
Size Used Avail Use% Mounted on
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 4
/de...00-LogVol00
/dev/sdb1
/dev/sda1
tmpfs
5.8G 2.0G 3.6G 35% /
20G 11G 7.5G 60% /u01
99M 13M 82M 14% /boot
1000M
0 1000M 0% /dev/shm
Hier sehen Sie, dass tmpfs, welches unter /dev/shm gemountet ist, einen "Used"-Wert von 0 hat, was bedeutet,
dass derzeit niemand auf diese Weise Arbeitsspeicher beansprucht.
2. Nun müssen Sie als erstes diesen Bereich mit dem Befehl "umount /dev/shm" abkoppeln und danach die fstab
mit "vi /etc/fstab" editieren. Die Datei könnte wie folgend bei Ihnen aussehen:
/dev/VolGroup00/LogVol00 /
ext3 defaults
11
LABEL=/u01
/u01
ext3 defaults
12
LABEL=/boot
/boot
ext3 defaults
12
tmpfs
/dev/shm
tmpfs size=1000m,defaults
devpts
/dev/pts
devpts gid=5,mode=620 0 0
sysfs
/sys
sysfs defaults
00
proc
/proc
proc defaults
00
/dev/VolGroup00/LogVol01 swap
swap defaults
00
00
In dieser Datei ändern Sie nun den size Wert auf einen entsprechend höheren Wert oder fügen ihn neu hinzu.
Zum Beispiel:
/dev/VolGroup00/LogVol00 /
ext3 defaults
11
LABEL=/u01
/u01
ext3 defaults
12
LABEL=/boot
/boot
ext3 defaults
12
tmpfs
/dev/shm
tmpfs size=2000m,defaults
devpts
/dev/pts
devpts gid=5,mode=620 0 0
sysfs
/sys
sysfs defaults
00
proc
/proc
proc defaults
00
/dev/VolGroup00/LogVol01 swap
swap defaults
00
00
3. Als letztes muss /dev/shm wieder mit "mount /dev/shm" gemounted werden. Mit dem Befehl "df -h" können Sie
die geänderten Werte sehen.
Filesystem
/de...00-LogVol00
/dev/sdb1
/dev/sda1
tmpfs
Size Used Avail Use% Mounted on
5.8G 2.0G 3.6G 35% /
20G 11G 7.5G 60% /u01
99M 13M 82M 14% /boot
2.0G
0 2.0G 0% /dev/shm
Nun könnten Sie eine Oracle Instanz starten, die einen Memory_target Wert von 1,5 GB hat, welches vorher in
einem ORA-00845-Fehler geendet hätte.
SQL> startup
ORACLE instance started.
Total System Global Area 1570009088 bytes
Fixed Size
2226832 bytes
Variable Size
855639408 bytes
Database Buffers
704643072 bytes
Redo Buffers
7499776 bytes
Database mounted.
Database opened.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 4
SQL> show parameter memory_
NAME
TYPE
VALUE
------------------------------------ ----------- -----------------------------hi_shared_memory_address
integer
0
memory_max_target
big integer 1504M
memory_target
big integer 1504M
shared_memory_address
integer
0
Wenn Sie von den oben benutzen Werten abweichen müssen oder wollen, sind hier noch ein paar kleine Kniffe:
1. Durch ein Vertippen oder Ähnliches sind die Werte nicht zu gebrauchen und die Instanz startet nicht mehr.
In diesem Fall ist auch leider ein SQL-Befehl wie alter system set memory_target=<richtiger Wert>
scope=spfile; nicht mehr möglich und Sie müssen einen kleinen Umweg gehen.
Als erstes müssen Sie sich mit dem SQL Befehl create pfile='/tmp/pfile.ora' from spfile; einen Pfile
erzeugen. Diesen Pfile können Sie nun editieren und dort wieder die entsprechenden Werte eintragen.
Mit dem Befehl create spfile from pfile='/tmp/pfile.ora'; wird dann der gerade geänderte Pfile über
das SPfile geschrieben und die Instanz lässt sich wieder normal starten.
2. Leider besteht ein kleines Problem zwischen dem size Wert in der fstab und dem memory_target Wert in
Oracle, wenn Sie mit groben Angaben arbeiten wie z. B. 1500 M. Dies äußert sich wie folgt:
cat /etc/fstab
/dev/VolGroup00/LogVol00 /
ext3 defaults
11
LABEL=/u01
/u01
ext3 defaults
12
LABEL=/boot
/boot
ext3 defaults
12
tmpfs
/dev/shm
tmpfs size=1500m,defaults
devpts
/dev/pts
devpts gid=5,mode=620 0 0
sysfs
/sys
sysfs defaults
00
proc
/proc
proc defaults
00
/dev/VolGroup00/LogVol01 swap
swap defaults
00
df -h
Filesystem
/de...00-LogVol00
/dev/sdb1
/dev/sda1
tmpfs
00
Size Used Avail Use% Mounted on
5.8G 2.0G 3.6G 35% /
20G 11G 7.5G 60% /u01
99M 13M 82M 14% /boot
1.5G
0 1.5G 0% /dev/shm
cat /tmp/pfile.ora
.........
*.memory_target=1500M
........
SQL> create spfile from pfile='/tmp/pfile.ora';
File created.
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
Dazu der entsprechende Eintrag im Alertlog der Datenbank:
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 4
WARNING: You are trying to use the MEMORY_TARGET feature. This feature requires the
/dev/shm file system to be mounted for at least 1577058304 bytes.
/dev/shm is either not mounted or is mounted with available space less than this size.
Please fix this so that MEMORY_TARGET can work as expected. Current
available is 1572864000 and used is 0 bytes. Ensure that the mount point is /dev/shm for
this directory. memory_target needs larger /dev/shm
Weitere Informationen zu Linux und Oracle Datenbanken erhalten Sie in unseren Kursen.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 4 von 4
Herunterladen