Olá Mundo GNU!
Aqui veremos como instalar a versão Express Edition (XE) do banco de dados Oracle em um Slackware 14.0 64 bits. Lembrando que este tutorial aborda uma instalação em desktops, apenas para fins de estudo.
AUTOR: Leandro Nkz
Introdução e requisitos.
Segundo a documentação desta versão, disponível em:
Os requisitos básicos são:
– Swap – 2 GB ou mais.
Se você não tem 2 GB de memória swap, você pode acrescentar mais sem precisar formatar. Veja como nesta dica:
– Alterar parâmetros do kernel
Além disso, é necessário alguns parâmetros adicionais no kernel. Normalmente, o próprio Oracle checa e faz a configuração durante a instalação. Mas, para evitar problemas, vamos configurar à moda Slack: na unha.
Para setar os valores, basta adicionar no arquivo /etc/sysctl.conf (se ele não existir, crie):
kernel.sem=250 32000 100 128 kernel.shmmax=4294967295 kernel.shmmni=4096 kernel.shmall=2097152 fs.file-max=6815744 net.ipv4.ip_local_port_range=9000 65000 vm.swappiness=40
Obs.: a linha swapness é opcional. Ela serve para setar o nível de “predisposição” de uso da área swap. Funciona assim: se o sistema está consumindo muita memória RAM, antes que ela se esgote, ele já vai usando a swap. Quanto menor for o valor, mais ele vai esperar para começar a usar a memória swap e mais perto do limite de RAM ele vai chegar. O padrão é 60.
Depois de modificado o arquivo, basta atualizar os parâmetros com o comando:
# sysctl -p /etc/sysctl.conf
– Criação do usuário oracle
É necessário a criação do usuário oracle e do grupo dba para a instalação correta do banco de dados.
Utilize os comandos:
# groupadd -g 400 dba # useradd -u 400 -g 400 -d /u01/app/oracle -s /bin/bash oracle # mkdir -p /u01/app/oracle # chown oracle:dba /u01/app/oracle
Obs.: lembrando que, para administrar o banco de dados com o seu próprio usuário (o que eu acho mais fácil), basta adicioná-lo ao recém-criado grupo dba com o comando:
# usermod -G dba -a seu_usuário
Mas, se você prefere utilizar o usuário oracle para administrar o BD, não se esqueça de criar uma senha para ele:
# passwd oracle
Depois, logue-se com o usuário oracle:
# su oracle
E crie os seus arquivos de sessão:
Arquivo ~/.bashrc:
# ~/.bashrc: executed by bash(1) for non-login shells. # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) # for examples # If not running interactively, don't do anything [ -z "$PS1" ] && return # don't put duplicate lines in the history. See bash(1) for more options # don't overwrite GNU Midnight Commander's setting of 'ignorespace'. HISTCONTROL=$HISTCONTROL${HISTCONTROL+:}ignoredups # ... or force ignoredups and ignorespace HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # PS1 and PS2 PS1="[ u@h w ]$ " PS2="" # Oracle if [ -f /etc/profile.d/oracle_env.sh ] ; then . /etc/profile.d/oracle_env.sh fi
E o arquivo ~/.profile:
# ~/.profile: executed by the command interpreter for login shells. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022 # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
Após configurado os arquivos, efetue logoff/logon para que as mudanças façam efeito.
Instalação.
Antes de instalar, cheque estas dependências básicas do Oracle:
- glibc >= 2.3.4
- libaio >= 0.3.104
- make >= 3.80
- binutils >= 2.16.91.0.5
- gcc >= 4.1.2
Se o seu Slackware foi instalado no modo full (todos os pacotes), é praticamente certo que você já tenha todos estes pacotes instalados.
Primeiro, baixe o Oracle XE 11g R2 aqui:
http://www.oracle.com/technetwork/products/express-edition/downloads/index.html
Aceite a licença de uso e selecione a opção: “Oracle Database Express Edition 11g Release 2 for Linux x64”. Ao clicar, você será redirecionado à tela de login do site. Se você já tem uma conta, basta inserir os seus dados que o download começará, se não, basta fazer um pequeno cadastro (é grátis ;)).
Com o arquivo ZIP de 315 MB em mãos, vamos à configuração do pacote.
Aqui temos uma novidade: SlackBuilds!
Sim! Agora você pode instalar o Oracle XE com um autêntico pacote tgz.
Há um SlackBuild do Oracle XE desenvolvido por Andrew Clemons que está disponível no GitHub:
Baixe os cinco arquivos disponíveis e salve-os em uma pasta (aqui chamei-a de “oracle-xe-11g”).
Agora, vamos mover o arquivo ZIP do Oracle para dentro da pasta do SlackBuilds (criada anteriormente):
Obs.: lembrando que, a partir daqui, você pode optar por usar o seu usuário normal. Você não precisa estar necessariamente logado como usuário oracle para realizar a instalação.
$ mv oracle-xe-11.2.0-1.0.x86_64.rpm.zip oracle-xe-11g/
Por fim, entre na pasta do SlackBuilds, logue-se como root e execute o script:
$ cd oracle-xe-11g/ $ su # chmod +x oracle-xe-11g.SlackBuild # ./oracle-xe-11g.SlackBuild
Se tudo der certo, instale o pacote criado:
# upgradepkg --install-new /tmp/oracle-xe-11g-11.2.0-x86_64-1_acl.tgz
Pronto! O Oracle já está instalado.
Agora, para que as variáveis de ambiente façam efeito, e para que o Slackware possa atualizar alguns caches/libs do sistema, vamos reiniciar:
# reboot
Configuração.
OK. Sistema reiniciado. Antes de configurar, vamos editar dois arquivos:
Edite o arquivo: /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Aqui, ele está assim:
# listener.ora Network Configuration File: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = %hostname%)(PORT = %port%)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
Deixei ele assim:
# listener.ora Network Configuration File: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXT_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = %port%)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
Eu basicamente alterei a variável HOST de %hostname% para localhost e a variável KEY = EXTPROC_FOR_XE para KEY = EXT_XE.
E, depois, edite este outro arquivo: /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora
Aqui, ele está assim:
# tnsnames.ora Network Configuration File: XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = %hostname%)(PORT = %port%)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
Eu o deixei assim:
# tnsnames.ora Network Configuration File: XE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = %port%)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XE) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXT_XE)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )
Novamente, apenas alterei as variáveis HOST e KEY.
Esta configuração corrige um erro de inicialização do listener (antes mesmo dele aparecer, rs). Sem ele, o seu banco ficaria inacessível externamente (incluindo o acesso via aplicações).
Assim, se você checar a instância (mesmo com ela executando), apareceria o seguinte erro:
Estabelecendo conexão com (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
TNS-12541: TNS:não há listener
TNS-12560: TNS:erro de adaptador de protocolo
TNS-00511: Não há listener
Linux Error: 111: Connection refused
Estabelecendo conexão com (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=Slackware..)(PORT=1521)))
TNS-12541: TNS:não há listener
TNS-12560: TNS:erro de adaptador de protocolo
TNS-00511: Não há listener
Linux Error: 111: Connection refused
Agora sim, com tudo certo, vamos configurar:
# /etc/rc.d/rc.oracle-xe configure
Aparecerá as opções:
- HTTP port: 8080 – A porta padrão é a 8080, mas como já tenho um outro programa usando esta porta, eu uso a 8090.
- Listener port: 1521 – Não se esqueça desta porta!
- Senha do usuário SYS/SYSTEM – Não se esqueça desta senha!
- Execução automática: Não – Iremos configurar depois.
Se tudo der certo, a instância já estará configurada e iniciada. Para conferir o status dela, execute:
# /etc/rc.d/rc.oracle-xe status
Deve retornar algo como:
LSNRCTL for Linux: Version 11.2.0.2.0 – Production on 25-JUN-2013 18:39:45
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Estabelecendo conexão com (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXT_XE)))
STATUS do LISTENER
————————
Apelido LISTENER
Versão TNSLSNR for Linux: Version 11.2.0.2.0 – Production
Data Inicial 25-JUN-2013 18:35:45
Funcionamento 0 dias 0 hr. 4 min. 3 seg
Nível de Análise off
Segurança ON: Local OS Authentication
SNMP OFF
Serviço Default XE
Arq. Parâm. Listn. /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Arq. Log Listener /u01/app/oracle/diag/tnslsnr/Slackware/listener/alert/log.xml
Resumo de Atendimento…
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXT_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Slackware..)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Slackware..)(PORT=8090))(Presentation=HTTP)(Session=RAW))
Resumo de Serviços…
O serviço “PLSExtProc” tem 1 instância(s).
Instância “PLSExtProc”, status UNKNOWN, tem 1 handler(s) para este serviço…
O serviço “XE” tem 1 instância(s).
Instância “XE”, status READY, tem 1 handler(s) para este serviço…
O serviço “XEXDB” tem 1 instância(s).
Instância “XE”, status READY, tem 1 handler(s) para este serviço…
O comando foi executado com êxito
Testando a conexão HTTP.
Teste a conexão com o apex, acessando:
No meu caso, como defini a porta HTTP como 8090, ficaria:
Se tudo der certo, você estará na tela de login:
Para efetuar login, digite:
- Workspace: internal
- Login: admin
- Senha: a senha definida na configuração
A primeira tela pedirá para alterar a senha. Lembrando que esta senha só valerá para o apex, com o usuário admin. Ou seja, a senha do usuário SYS/SYSTEM permanecerá inalterada.
Criando usuário teste.
Acesse o SQL*PlUS com o usuário system:
Obs.: execute o comando abaixo logado como o usuário oracle. Ou com um usuário pertencente ao grupo dba.
$ sqlplus system
Crie o usuário Teste com a senha x123:
SQL> create user teste identified by x123; SQL> grant connect, resource to teste; SQL> disconnect; SQL> quit
Testando acesso externo.
Eu criei uma pequena aplicação Java (bem simples), que testa a conexão com o banco (através do listener).
Baixe o arquivo JAR aqui.
Depois, execute:
$ java -jar OraJavaTest.jar
A primeira tela será:
Digite os valores:
- Host :: IP ou hostname do servidor. Se ele está na mesma máquina, pode deixar como localhost, 127.0.0.1 ou até mesmo em branco.
- Porta :: Porta de conexão do listener. Atenção: não confunda a porta do listener (1521, no nosso caso) com a do apex (HTTP 8090, usada neste tutorial). Em vários tutoriais da internet a porta utilizada é a 8080 o que pode confundir muita gente (eu confundi!).
- Banco :: O nome da instância. Por padrão, o Oracle Express possui o nome de XE, mas você pode checar com um simples select (como usuário system):
SQL> SELECT NAME FROM V$DATABASE;
- Login :: Coloque o usuário que acabamos de criar: teste
- Senha :: A senha do usuário criado: x123
Por fim, clique em OK. Se der tudo certo, ele exibirá a mensagem:
Experimente trocar de usuário:
P.S.: para quem se interessou no programa, o código fonte está disponível aqui:
Ou, se quiserem experimentar algo mais completo:
Dicas avulsas.
– Iniciando automaticamente no boot:
Para iniciar a instância e o listener durante o boot, basta acrescentar as linhas no fim do arquivo /etc/rc.d/rc.local:
# Start Oracle Database 11g Express Edition Intance if [ -x /etc/rc.d/rc.oracle-xe ] ; then /etc/rc.d/rc.oracle-xe start & fi
Assim, o Oracle vai sempre iniciar (em segundo plano) durante o boot.
– Trocando o terminal do SQL*Plus.
Por padrão, o SQL*Plus irá utilizar o xterm como terminal (se chamado via menu de aplicativos). Para alterar, edite o arquivo: /u01/app/oracle/product/11.2.0/xe/config/scripts/runsqlplus.sh
Ele estará assim:
#!/bin/bash if [ -f /usr/bin/gnome-terminal ] then /usr/bin/gnome-terminal -t "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" elif [ -f /usr/bin/konsole ] then /usr/bin/konsole -T "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" elif [ -f /usr/bin/xterm ] then /usr/bin/xterm -T "SQL*Plus" -n "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" fi
Basta trocar o gnome-terminal pelo seu emulador de terminal favorito (ele tem que ficar antes do xterm):
#!/bin/bash if [ -f /usr/bin/lxterminal ] then /usr/bin/lxterminal -t "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" elif [ -f /usr/bin/konsole ] then /usr/bin/konsole -T "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" elif [ -f /usr/bin/xterm ] then /usr/bin/xterm -T "SQL*Plus" -n "SQL*Plus" -e "/u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh" fi
Obs.1: eu estou utilizando o LXTerminal. Troque pelo seu favorito.
Obs.2: lembre-se de testar o comando antes de inseri-lo aqui. Pois os parâmetros -t “Título da janela” e -e “script” podem variar de terminal para terminal.
– Habilitar histórico de comandos
Por padrão (e apenas no GNU/Linux), o SQL*Plus (e outras ferramentas de linha de comando do Oracle) não possui o histórico de comandos, acessível com as setas pra cima|pra baixo do teclado, e nem é possível editar um comando com as setas esquerda|direita.
Para habilitar, instale o pacote rlwrap. Ele está disponível via SlackBuilds:
E, edite o seu .bashrc (não se esqueça de também editar o .bashrc do usuário oracle) com o comando:
$ echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bashrc
Para tornar esta modificação válida também quando você chama o SQL*Plus via menu, edite o arquivo: /u01/app/oracle/product/11.2.0/xe/config/scripts/sqlplus.sh
E deixe-o assim:
#!/bin/bash # # svaggu 09/28/05 - Creation # export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe export ORACLE_SID=XE export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh` export PATH=$ORACLE_HOME/bin:$PATH /usr/bin/rlwrap sqlplus /nolog @$ORACLE_HOME/config/scripts/conmsg.sql
Ou seja, apenas adicionei “/usr/bin/rlwrap” antes do sqlplus.
Você também pode habilitar este recurso em outras ferramentas do Oracle:
lsnrctl (listener):
$ echo "alias lsnrctl='rlwrap lsnrctl'" >> ~/.bashrc
rman (backup):
$ echo "alias rman='rlwrap rman'" >> ~/.bashrc
Conclusão.
Bom, é isso. Dúvidas e sugestões é só comentar.
Até a próxima!
Referências:
https://github.com/aclemons
http://huahsin68.blogspot.com.br/2012/01/starting-up-oracle-db-listener.html
http://www.vivaolinux.com.br/artigo/Redimencionando-SWAP-sem-reinstalar-o-Linux
http://oraculodosul.blogspot.com.br/2012/06/habilitando-as-setas-no-sqlplus-para.html
https://kr.forums.oracle.com/forums/thread.jspa?threadID=1033440
Rapaz que trabalhão hein?
Se parece até eu hoje, brocado de saúde postei uma penca de coisas! rs
nice work!
CurtirCurtir
Thanks!
Esse tutorial estava engavetado desde abril. Só esta semana que pude finalizá-lo, rs.
CurtirCurtir
Parabens pelo post. Sera que a instalacao do oracle xe no debian muda mto? Vou tentar aqui hj vlw.
CurtirCurtir
Muda bastante.
Pelos métodos “tradicionais”, há um meio de instalar a versão 10 (32 bits) no Debian via repos: http://www.oracle.com/technetwork/topics/linux/xe-on-kubuntu-087822.html
Tanto que foi deste modo que instalei no meu Debian.
Se bem que dá pra adaptar o pacote da versão 11.2 no Debian. Vou testar aqui.
Abraço e obrigado.
CurtirCurtir
estou iniciando minha vida no Slackware, e por conta de um trabalho de Facul preciso instalar o oracle no sistema.
fiz os passos deste tutorial por varias vezes e,
# /etc/init.d/oracle-xe configure
aqui da erro “no such file or directory”
não consigo resolver, se alguem puder me ajudar.
PS: o Slack está instalado em uma VM
CurtirCurtir
Olá, Danilo.
A razão desse erro é que o novo SlackBuilds alterou a localização deste arquivo. Agora ele está em: /etc/rc.d/rc.oracle-xe.
Eu atualizei o post com as mudanças (lá no VOL também).
Um abraço e obrigado pelo aviso.
T+!
CurtirCurtir
Leandro muito obrigado pela resposta rapida! agora só tem mais um problema e uma pergunta!
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Slackware..)(PORT=8090))(Presentation=HTTP)(Session=RAW))
esta linha não pareceu, e meu apex não carrega, o que pode ser?
a pegunta, vc sabe como configurar ODBC para conexão remota em outra maquina para que o oracle acesse os dados de outra base via DATABASE LINK?
CurtirCurtir
Aparece alguma mensagem se você tentar acessar via navegador? A porta configurada foi a 8090 ou a 8080 (padrão)? Veja se não há um outro serviço utilizando esta porta.
Sobre a pergunta, infelizmente eu não sei configurá-lo dessa forma.
*Desculpe a demora na resposta.
CurtirCurtir
Apenas pagina não encontrada, o oracle foi instalado em uma VM, alem do oracle existe apenas a instalação full do Slack!
CurtirCurtir
Uma pergunta: você está tentando acessar o apex direto da VM (no localhost), correto?
Tente checar também duas coisas:
– Se há algum firewall ativo que possa estar bloqueando o acesso.
– Os arquivos de log que ficam no diretório: /u01/app/oracle/product/11.2.0/xe/log/
CurtirCurtir