Archive for Sem categoria

Como extender a memória usada pelo Oracle

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.ora e do spfile.ora

$ mkdir bkp
$ cp init.ora spfile.ora bkp

Agora vamos alterar algumas configurações do pfile, init.ora.
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.ora

*.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.ora nomount;

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/