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
/de...00-LogVol00 5.8G 2.0G 3.6G 35% /
/dev/sdb1 20G 11G 7.5G 60% /u01
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 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 1 1
LABEL=/u01 /u01 ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs size=1000m,defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
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 1 1
LABEL=/u01 /u01 ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs size=2000m,defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
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 Size Used Avail Use% Mounted on
/de...00-LogVol00 5.8G 2.0G 3.6G 35% /
/dev/sdb1 20G 11G 7.5G 60% /u01
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 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.
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 1 1
LABEL=/u01 /u01 ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs size=1500m,defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
df -h
Filesystem Size Used Avail Use% Mounted on
/de...00-LogVol00 5.8G 2.0G 3.6G 35% /
/dev/sdb1 20G 11G 7.5G 60% /u01
/dev/sda1 99M 13M 82M 14% /boot
tmpfs 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:
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.
In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den
Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.