Máquina de desenvolvedor deveria ter memória infinita 🙂 ou próximo disso. Como isso ainda não é possível, utilizamos algumas maneira de otimizar o consumo de memória. Vamos ver como fazer isso para o Oracle 10g XE em ambiente de desenvolvimento. Não faça isso em ambientes de produção! Nós iremos modificar o SGA (System Global Area) do Oracle. Para mais informações sobre o que é SGA, veja nesse site.
- Faça backup do seguinte arquivo: $ORACLE_HOME/dbs/spfileXE.ora que é o arquivo que iremos alterar. No meu linux ele está localizado em: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/dbs/spfileXE.ora
- Abra o SQL Plus (Linux: "sqlplus /nolog" | Windows: "sqlplus.exe /nolog").
- Conecte com um usuário SYSDBA: "conn / as sysdba"
- Verifique a SGA com o comando: "show sga". Deve aparecer algo parecido com isso:
SQL> show sga Total System Global Area 805306368 bytes Fixed Size 1261444 bytes Variable Size 213909628 bytes Database Buffers 587202560 bytes Redo Buffers 2932736 bytes
- Verifique os parametros do SGA com o comando: "show parameter sga".
SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 768M sga_target big integer 768M
- Altere o sga_target para 130M (creio que seja mais que suficiente para máquina de desenvolvimento): "alter system set SGA_TARGET=130M scope=spfile;"
- Altere o sga_max_size para 256M: "alter system set sga_max_size=256M scope=spfile;"
- Desligue a base: "shutdown;"
- Ligue novamente: "startup;"
- Execute o: "show sga":
SQL> show sga Total System Global Area 268435456 bytes Fixed Size 1258392 bytes Variable Size 188746856 bytes Database Buffers 75497472 bytes Redo Buffers 2932736 bytes
- Execute o: "show parameter sga":
SQL> show parameter sga NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ lock_sga boolean FALSE pre_page_sga boolean FALSE sga_max_size big integer 256M sga_target big integer 132M
Como podemos ver, o uso de memória do SGA está bem reduzido. Caso você tenha algum problema similar a esse:
ORA-00604: error occurred at recursive SQL level 1
ORA-04030: out of process memory when trying to allocate 16 bytes (sql area,kglhin: temp)
restaure o backup do arquivo spfileXE.ora e se você esqueceu de fazer o backup utilize o procedimento de reinstalação do oracle-xe.