He decido cambiarle la cantidad de memoria disponible a 3GB. Después he iniciado la MV y he cambiado el parámetro estático MEMORY_MAX_TARGET. A continuación el tamaño actual:
SQL> show parameter mem;Realizo el cambio y paro la base de datos (BD):
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 436M
memory_target big integer 436M
shared_memory_address integer 0
SQL>alter system set memory_max_target=2G scope=spfile;Reinicio y se produce un error, no se puede arrancar la BD:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;En esta situación no puedo iniciar la BD, ni siquiera ponerla en NOMOUNT ya que existe algún error en el archivo de parámetros spfile.
ORA-00845: MEMORY_TARGET not supported on this system
Se puede optar por dejar el spfile como estaba o bien solucionar el error.
Para recuperar el spfile podemos tirar de copia de seguridad o bien editarlo con el objetivo de dejar el valor modificado como se encontraba originalmente.
Para este último caso podemos genera un archivo de texto a partir del spfile (que es binario) usando el siguiente comando:
SQL> create pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/sptxt.ora' from spfile;Ahora podemos usar vi para editar el archivo y dejar el valor correcto en MEMORY_MAX_TARGET. Seguidamente podemos volver a crear el archivo spfileorcl.ora a partir del nuestro.
SQL> create spfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/spfileorcl.ora' from pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_2/dbs/sptxt.ora';
Iniciamos de nuevo la BD sin ningún problema:
SQL> startup;Lo correcto sería solucionar el error ya que nos interesa disponer de más memoria para el uso de Oracle.
ORACLE instance started.
Total System Global Area 456146944 bytes
Fixed Size 1344840 bytes
Variable Size 369101496 bytes
Database Buffers 79691776 bytes
Redo Buffers 6008832 bytes
Database mounted.
Database opened.
El error ORA_00845 MEMORY_TARGET NOT SUPPORTED ON THIS SYSTEM, se genera cuando el tamaño de MEMORY_MAX_TARGET es mayor que el configurado en /dev/shm (memoria de intercambio requerida por Oracle).
Para conocer el tamaño de shm:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 11G 2.3G 7.3G 24% /
/dev/hdb1 12G 7.0G 4.2G 63% /home
tmpfs 1.8G 0 1.8G 0% /dev/shm
/dev/hdc 53M 53M 0 100% /media/VBOXADDITIONS_4.2.4_81684
Para modificar el valor de forma permanente hay que editar como root el archivo fstab e indicar un valor igual o superior a MEMORY_MAX_TARGET:
# vi /etc/fstabUna vez editado hay que montar de nuevo shm:
....
tmpfs /dev/shm tmpfs defaults,size=2G 0 0
....
# mount -o remount /dev/shmAhora, ya podemos iniciar la BD con un tope de memoria de 2G, también indicamos el uso de MEMORY_TARGET a 1G:
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 2042241024 bytes
Fixed Size 1345204 bytes
Variable Size 1929382220 bytes
Database Buffers 100663296 bytes
Redo Buffers 10850304 bytes
SQL> show parameters mem;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 2G
memory_target big integer 448M
shared_memory_address integer 0
SQL> alter system set memory_target=1G scope=both;
SQL> show parameter mem;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 2G
memory_target big integer 1G
shared_memory_address integer 0
Espero que os sirva y podéis consultar las siguientes fuentes:
http://asktom.oracle.com
http://www.orasite.com
http://www.cyberciti.biz