Segue a baixo os passos que segui para realizar a tarefa.
Qualquer dúvida, favor utilizar os links das fontes as quais explicam tudo que é necessário para a tarefa.
Como usuário oracle:
Procure pelo SPFILE, já que o Oracle toda vez ao iniciar a instância, ele utilizará esse arquivo para coletar os dados dos parâmetros.
$ cd /opt/oracle/product/11gR2/db/dbs
Faça backup do init
$ mkdir bkp
$ cp init
Agora vamos alterar algumas configurações do pfile, init
Como queremos disponibilizar mais memória para o segmento compartilhado, vamos para a parte interessante.
Veja a quantidade disponível como root:
# sysctl -a | grep shmmax
Já que temos 8 de ram, e queremos colocar 6g para o oracle usar, vamos começar a modificar o shmmax.
# umount /dev/shm2
# mount -t tmpfs shmfs -o size=6g /dev/shm@
Se por ventura precisar restartar o servidor ou tiver queda de energia, adicione ao fstab.
shmfs /dev/shm tmpfs size=6g 0 0
Salve, altere agora o /etc/sysctl.conf. Faça os calculos, 6*1024^3 e adicione.
kernel.shmmax = 6442450944
Pronto, reinicie o servidor e verifique se está tudo ok.
# df -h /dev/shm
Filesystem Size Used Avail Use% Mounted on
shmfs 6.0G 3.0G 3.1G 49% /dev/shm
# sysctl -a | grep shmmax
kernel.shmmax = 6442450944
Tudo ok, vamos para o banco…
Agora precisamos ajustar os 2 parâmetros do oracle… memory_max_target e memory_target!
Não sei o motivo (e também não pesquisei), mas ao colocar os 6gb para o oracle, o mesmo reclama.
Então só adicionei 5gb (5*1024^3), como pode ser visto:
$ cd /opt/oracle/product/11gR2/db/dbs
$ vim init
*.memory_max_target=5368709120
*.memory_target=5368709120
Agora…
$ sqlplus /nolog
SQL> connect / as sysdba;
SQL> shutdown immediate;
SQL> startup force pfile=/opt/oracle/product/11gR2/db/dbs/init
ORACLE instance started.
…
Database mounted.
Database opened.
Assim conseguimos montar e iniciar a instância, e criaremos agora o spfile a partir do novo pfile já configurado de forma correta.
SQL> create spfile from pfile;
File created.
Reinicie o oracle e verifique se está tudo ok, com os 5gb alocados.
SQL> show parameters memory_max_target
SQL> show parameters memory_target
Agora é botar o oracle para funcionar.
Essa modificação pode ser feito usando comandos direto no banco e usando pfile no lugar de spfile como descrito no link [1].
Fontes:
[1] http://oraclehack.blogspot.com/2010/07/memorymaxtarget-and-memorytarget.html
[2] http://kevinclosson.wordpress.com/2007/08/24/oracle11g-automatic-memory-management-part-ii-automatically-stupid/
[3] http://www.dba-oracle.com/t_ora_01102_cannot_mount_database_in_exclusive_mode.htm
[4] http://www.orafaq.com/forum/t/40030/0/
[5] http://www.dba-oracle.com/concepts/starting_database.htm
[6] http://download.oracle.com/docs/cd/B28359_01/server.111/b32009/appc_linux.htm
[7] http://www.oracle-base.com/articles/linux/LargeSGAOnLinux.php
[8] http://www.dicas-l.com.br/arquivo/semaforos_kernel_memoria_compartilhada_e_cia.php
[9] http://book.chinaunix.net/special/ebook/SLES9Administrators_Handbook/067232735X/ch07lev1sec4.html
[10] http://www.softpanorama.org/Commercial_linuxes/Performance_tuning/semaphore_and_shared_segment_kernel_parameters.shtml
[11] http://ocw.novell.com/suse-linux-enteprise-operating-system-migration/migrating-to-suse-linux-enterprise-server-9/3019_10_manual.pdf
[12] http://www.orafaq.com/wiki/Memory_target
[13] http://www.dba-oracle.com/sf_ora_27101_shared_memory_realm_does_not_exist.htm
[14] http://www.orafaq.com/forum/t/40030/0/