Oracle XE 11.2 – Instalação e configuração em um Slackware 14.0 64 bits


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:

oracle_slack_apex

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á:

oracle_slack_OracleJavaTest_1

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:

oracle_slack_OracleJavaTest_2

Experimente trocar de usuário:

oracle_slack_OracleJavaTest_3

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

Oracle XE 11.2 – Instalação e configuração em um Slackware 14.0 64 bits

10 comentários sobre “Oracle XE 11.2 – Instalação e configuração em um Slackware 14.0 64 bits

  1. Danilo Bolzan disse:

    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

    Curtir

    1. Leandro Nkz disse:

      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+!

      Curtir

  2. Danilo Bolzan disse:

    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?

    Curtir

    1. Leandro Nkz disse:

      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.

      Curtir

      1. Leandro Nkz disse:

        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/

        Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s