Instalando Oracle 9i no CentOS 4 x86_64

O objetivo deste post é mostrar como fazer uma instalação do Oracle 9i no Linux, com a distribuição CentOS 4.x.

A distribuição CentOS foi escolhida devido a sua similaridade com as versões Enterprise do Red Hat (na verdade, segundo me consta, o CentOS utiliza os fontes disponibilizados pela Red Hat e tem por objetivo ser 100% compatível)

A versão atual do CentOS é a 5.1, no entanto “dizem” que o Oracle 9i não é suportado nesta versão, depois de algumas tentativas sem sucesso eu resolvi fazer na versão 4.6. Eu baixeis os ISOs dos 4 cds para x86_64.

O hardware usado nesta instalação é um servidor Dell PowerEdge T300 (2 HDs SAS 73GB – raid 1, 6GB ram). Vale a pena ressaltar que o a arquitetura é 64bits e por isso ambas as versões do CentOS e do Oracle são para processadores x86_64.

A versão do oracle utilizada é a 9.2.0.4  versão 64 bits, baixada do endereço http://www.oracle.com/technology/software/products/oracle9i/index.html. É necessário baixar 3 arquivos (que serão gravos em 3 cds). Os arquivos estão no formato gzip, para gravar os cds é necessário descompactar os arquivos utilizando os seguinte comandos:

# gzip amd64_db_9204_Disk1.cpio.gz

# cpio -idmv < amd64_db_9204_Disk1.cpio

Será criado um diretório com o nome “Disk2″ e dentro dele um diretório “stage”, é este diretório que deve ficar no root do CD.

Dica: Você pode também instalar sem gravar CDs, basta informar o diretório quando for solicitado o CD.

Instalando o CentOS

Quanto a instalação do sistema operacional apenas vou sugerir um esquema de particionamento e dar algumas dicas de pacotes a instalar (essa segunda parte é opcional e pode ser feita depois).

Particionamento

Existem muitas “teorias” sobre as melhores formas de particionamento para rodar o Oracle mas uma coisa é certa, se você pretende investir em Oracle compre um bom hardware com no mínimo 2 HDs e configure um espelhamento de discos (RAID 1), isso já é um bom começo.

Como estou usando RAID 1 não vou me preocupar em criar partições separadas para o Oracle, vou apenas separar uma para boot, uma para swap e o resto para o sistema operacional. Exemplo:

/boot – (100MB)

swap  – (12GB – 2xram)

/ – ( o resto do disco)

Em situações onde não temos como fazer um RAID 1 o recomendado é criar partições separadas para a instalação do oracle (executáveis) e para as bases de dados. Exemplo:

/boot – (100MB)

swap (12GB)

/- ext3 (10GB)

/u01 – ext3 – (5GB – para a instalação do oracle)

/u02 – ext3 – (varios GB – para as bases de dados – o tamanho mínimo depende da sua base)

Pacotes

Durante a instalação na seleção dos pacotes marque o checkbox “Seleção manual de pacotes”. Abaixo uma sugestão de pacotes a instalar (eu não vou instalar um ambiente gráfico, apenas o X para poder instalar o Oracle)

  • Editors
  • Text-based Internet
  • Development Libraries
  • Development Tools
  • Legacy Software Development
  • Server Configuration Tools
  • Administration Tools
  • Base
  • Legacy Software Support
  • System Tools
  • X Window System

Instalação dos pacotes necessários

Eu sempre faço uma atualização do sistema via yum após a instalação, mas não é obrigatório.

Agora vamos instalar todos os pacotes que são requisitos para a instalação do Oracle. Como os pacotes ficam espalhados nos 4 CDs eu preferi fazer a instalação baixando da Internet, via yum.

# yum install compat-db \
compat-gcc-32 \
compat-gcc-32-c++ \
compat-libgcc-296 \
compat-libstdc++-296 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
libaio-devel \
libaio \
make \
openmotif21 \
xorg-x11-deprecated-libs-devel \
xorg-x11-deprecated-libs

Pacotes de compatibilidade específicos do Oracle

É necessário instalar dois pacotes específicos para o Oracle. Eles podem ser baixados gratuitamente do link http://oss.oracle.com/projects/compat-oracle/files/RedHat/. Os arquivos a serem baixados são:

compat-libcwait-2.1-1.i386.rpm

compat-oracle-rhel4-1.0-5.i386.rpm

Após baixar, instale-os:

# rpm -Uvh compat-libcwait-2.1-1.i386.rpm compat-oracle-rhel4-1.0-5.i386.rpm

Vamos verificar se está tudo instalado mesmo. Execute o comando abaixo:

# rpm -q make \
compat-db \
compat-gcc-32 \
compat-gcc-32-c++ \
compat-oracle-rhel4 \
compat-libcwait \
compat-libgcc-296 \
compat-libstdc++-296 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
libaio-devel \
libaio \
openmotif21 \
xorg-x11-deprecated-libs-devel \
xorg-x11-deprecated-libs

Não deve aparecer nenhuma linha com os dizeres: “o pacote XXXX não está instalado”.

Configuração do Sistema

Uma vez instalado o sistema vamos preparar o ambiente para a instalação do Oracle.

Para o correto funcionamento é necessário alterar alguns parâmetros do kernel. Como root, edite o arquivo /etc/sysctl.conf e adicione/altere as seguinte linhas:

#Oracle params
kernel.sem = 250 32000 100 128
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.msgmni = 2878
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

Obs: Execute “sysctl -p” ou reinicie o sistema para aplicar as configurações acima.

Agora edite o arquivo /etc/security/limits.conf e adicione as seguinte linhas:

# Oracle params
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

Durante o primeiro boot do CentOS podemos escolher a configuração do SELinux, por padrão ele fica como Restritivo/Forçando, podemos deixá-lo como Permissivo.

TESTAR

Criação de usuários e grupos

Serão criados dois grupos (dba e oinstall) e um usuário (oracle).

# groupadd dba
# groupadd oinstall
# useradd -g oinstall -G dba oracle

# passwd oracle

Agora vamos criar os diretórios que serão usados para a instalação do Oracle. Eu vou utilizar os diretórios /u01 para os executáveis do oracle e /u02 para as bases de dados.

O oracle vai ser instalado em:

# mkdir -p /u01/app/oracle/product/9.2.0/

As bases de dados vão ficar em:

$ mkdir -p /u02/oradata

Agora vamos definir as permissões para estes diretórios:

# chown -R oracle:oinstall /u01 /u02
# chmod -R 775 /u01 /u02

Variáveis de Ambiente

O usuário “oracle” vai ser o dono do processo de execução do oracle, assim sendo temos que definir algumas variáveis de ambiente para este usuário.

Mude para o usuário oracle

# su – oracle

Edite o arquivo /home/oracle/.bash_profile e adicione as seguinte linhas:

# Parametros para o usuario Oracle
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/9.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=prod
export ORACLE_TERM=vt100

#Sem a opcao abaixo a instalacao para nos 17% e nao vai mais

export LD_ASSUME_KERNEL=2.4.19

#As duas opcoes abaixo nao fizeram diferenca durante a instalacao
#export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
#export LD_LIBRARY_PATH_32=$ORACLE_HOME/lib32:$LD_LIBRARY_PATH_32
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
export PATH=$PATH:$ORACLE_HOME/bin
umask 022

O programa de instalação do Oracle utilizar algumas destas variáveis para definir valores padrão nas telas da instalação.

A chamada a “umask” serve para definir que todos os arquivos criados pelo usuário oracle possam ser lidos e executados pelos grupos do oracle.

Instalando o Oracle

Antes de iniciar a instalação temos que substituir alguns arquivos. Como root execute:

# cd /usr/bin

# mv gcc gcc.original
# mv g++ g++.original
# ln -s gcc32 gcc
# ln -s g++32 g++

Os comandos acima forçam a utilização do gcc 32bits, utilizando a versão original ocorrerão erros de segmentação ao tentar executar os comandos do oracle como sqlplus e lstnctl, por exemplo.

O primeiro passo para instalar e inserir o CD 1 no drive e montar a unidade:

# mkdir /mnt/cdrom #criação do ponto de montagem do cd

# mount -t auto /dev/cdrom /mnt/cdrom

A instalação do Oracle ocorre em modo gráfico, caso tenha instalado os conjuntos de pacotes sugeridos no início, ao iniciar o sistema estará disponível um ambiente gráfico básico com um console, logue-se como o usuário oracle e digite:

# /mnt/cdrom/runInstaller

Nota: deve-se executar a instalação com o usuário oracle.

O comando acima só vai funcionar se você executá-lo através de uma sessão gráfica, por padrão a instalação do CentOS vai instalar um servidor X e você pode simplesmente abrir um “terminal de segurança” a partir do X, que é iniciado automaticamente ao iniciar o computador.

Instalação Remota

É possível instalar a partir de uma estação remota (outro linux na rede), para isso siga os seguinte passos:

No computador remoto (não o que você está instalando o oracle) execute os seguinte comandos:

# xhost +

Este comando habilita o acesso via X para outras estações.

Verifique no arquivo /etc/ssh/sshd_config se existe a seguinte linha:

X11Forwarding yes

Esta linha habilita o redirecionamento do X através do SSH.

Agora basta acessar o computador onde será instalado o oracle via ssh utilizando a opção -X para habilitar o “X11 forwarding”. Exemplo:

# ssh -X -l oracle servidor_oracle

Defina a variável DISPLAY para o IP da estação de onde está acessando:

oracle@servidor_oracle:~$ export DISPLAY=192.168.0.1:0.0

Inicie a instalação:

oracle@servidor_oracle:~$ /mnt/cdrom/runInstaller

Durante a instalação será necessário executar manualmente alguns scripts gerados pelo instalador então tenha outra sessão SSH aberta para o servidor.

Os screenshots das telas de instalação no ambiente gráfico podem ser visualizadas no link abaixo:

http://www.oracle-base.com/articles/9i/Oracle9iInstallationOnRedHatAS3.php#Installation

O resumo das telas é o seguinte:

  • Localização do Inventário -> /u01/app/oracle/oraInventory (padrão)
  • Nome do grupo Unix -> oinstall (foi o grupo que criamos)
  • Executar o script /tmp/orainstRoot.sh (como root)
  • Localização dos Arquivos -> Caminho: /u01/app/oracle/product/9.2.0 (padrão)
  • Produtos Disponíveis -> Oracle 9i Database 9.2.0.4.0 (primeira opção)
  • Tipos de Instalação -> Enterprise Edition (primeira opção)
  • Database Configuration -> General Purpose (primeira opção)
  • Database Identification -> Global database name: prod.seudominio.com.br, SID: prod
  • Database File Location -> /u02/oradata (padrão)
  • Database Character Set -> User default (primeira opção)
  • Resumo -> Instalar (Quando solicitar alteração do CD, desmonte a unidade, troque o CD e monte novamente, como root)
    • eject /mnt/cdrom
    • mount -t auto /dev/cdrom /mnt/cdrom

Instalando o patch para o Oracle – 9.2.0.8

A versão do Oracle instalada foi a 9.2.0.4, existe um patch disponível no site metalink da Oracle para atualizar para a versão 9.2.0.8, que é o último release da versão 9.

Para acessar o site Metalink é necessário ter um contrato de suporte com a Oracle, desta forma é possível cadastrar um usuário para acessar os patches e diversas outras informações.

O patch é o 4547809 e o arquivo tem 464MB. Eu não sei se esse patch está disponível fora do site Metalink.

A instalação é simples, extraia o conteúdo do arquivo zip e execute o instalador como usuário oracle.

# unzip -d patch-oracle p4547809_92080_Linux-x86-64.zip

# patch-oracle/Disk1/runInstaller

Na tela  “Selecionar Produto para Instalar” escolha a segunda opção – “Oracle 9iR2 Path Set 9.2.0.8″ e siga as instruções na tela.

Iniciando e Parando o Oracle

Agora vamos automatizar a inicialização e encerramento do oracle através de alguns scripts.

O oracle pode ser iniciado/parado via sqlplus diretamente ou através dos programas dbstart e dbshut.

Para utilizar o dbstart e dbshut temos que alterar o arquivo /etc/oratab

# vi /etc/oratab

#prod:/u01/app/oracle/product/9.2.0:N

prod:/u01/app/oracle/product/9.2.0:Y

Temos que alterar a última letra “N” para “Y”, isso indica ao dbstart/dbshut que aquela instância do oracle deve ser iniciada. O arquivo /etc/oratab é como o fstab do sistema operacional, ele indica para o dbstart quais as bases devem ser iniciadas.

Para inicializar manualmente via sqlplus o procedimento é o seguinte:

# sqlplus /nolog
SQL> connect / as sysdba
SQL> startup
SQL> exit

O programa dbstart, na verdade faz a mesma coisa que os comandos acima.

OK, agora o banco de dados foi iniciado (independente de qual opção você usou), além disso temos que iniciar o processo “listener”, isso permite que o oracle aceite conexões externas. Para isso executamos o comando abaixo:

# lsnrctl start

Com isto temos o oracle rodando e aceitando conexões.

Para parar o banco de dados temos que parar o “listener” e depois parar o banco.

# lsnrctl stop

Agora paramos o banco:

# dbshut

ou via sqlplus:

# sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
SQL> exit

Em resumo temos que executar dois processos, vamos facilitar ainda mais criando um script de inicialização para usar no init do sistema operacional. Como root crie o arquivo abaixo:

# vi /etc/init.d/oracle

#!/bin/bash
#
#       /etc/rc.d/init.d/oracle
#
# Starts the at daemon
#
# chkconfig: 2345 98 1
# description: Inicializa o oracle
# processname: oracle

# Source function library.
. /etc/init.d/functions

oracleuser=oracle
oraclestart=/home/oracle/scripts/start_oracle.sh
oraclestop=/home/oracle/scripts/stop_oracle.sh

#
#       See how we were called.
#

start() {
    # Check if oracle already running
    if [ ! -f /var/lock/subsys/oracle ]; then
        echo -n $"Starting Oracle Database: "
        su -s /bin/bash - $oracleuser  -c $oraclestart
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/oracle
        echo
    fi
    return $RETVAL
}

stop() {
    echo -n $"Stopping Oracle Database: "
    su -s /bin/bash - $oracleuser  -c $oraclestop
    RETVAL=$?
    rm -f /var/lock/subsys/oracle
    echo
    return $RETVAL
}

restart() {
    stop
    start
}

reload() {
    restart
}

case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload|restart)
        restart
        ;;
*)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac

exit $RETVAL

Dê permissão para execução do script:

# chmod a+x /etc/init.d/oracle

O arquivo criado acima é um script padrão para inicializar serviços no sistema operacional, vamos adicioná-lo ao registro dos serviços disponíveis (para que ele aparece nos utilitários de configuração de serviços como o system-config-services)

# chkconfig –add oracle #Adiciona o novo serviço

# chkconfig oracle on # Configura o serviço para iniciar durante o boot

O script acima utiliza dois outros scripts para iniciar e parar o banco, vamos criar estes com o usuário oracle:

# su – oracle

# mkdir /home/oracle/scripts

# vi /home/oracle/scripts/start_oracle.sh

#!/bin/bash
# ativa banco de dados Oracle
sqlplus /nolog <<EOF
connect / as sysdba
startup
exit
EOF
# ativa processo Listener
lsnrctl start

# vi /home/oracle/scripts/stop_oracle.sh

#!/bin/bash
# desativa processo Listener
lsnrctl stop
# desativa banco de dados Oracle
sqlplus /nolog <<EOF
connect / as sysdba
shutdown immediate
exit
EOF

# chmod a+x /home/oracle/scripts/*.sh

Agora podemos iniciar o oracle da seguinte forma (como root) :

# service oracle start

E podemos parar com:

# service oracle stop

Migrando bases de dados existentes 32 bits – 64 bits

Em certa ocasião eu tive que fazer uma migração de uma base oracle que estava em um servidor de 32bits (SO e Oracle) para um novo servidor 64bits (SO e Oracle).

A instalação como foi descrita acima funcionou perfeitamente, depois disso eu apenas configurei os parâmetros do banco, control_files especialmente, para ficar igual à outra instalação. O oracle iniciava normalmente mas quando eu acessava o sqlplus ou quando tentava executar functions, triggers ou alterar alguma meta informação de tabelas ou qualquer coisa que usasse Pl?SQL um erro interno era gerado.

ERROR:
ORA-06553: PLS-801: internal error [56319]

Esse erro ocorre porque os módulos PL/SQL devem ser recompilados devido a mudança de arquitetura, lembrando que eu apenas copiei os arquivos da base oracle do servidor 32bit para o 64bit.

Para resolver esse problema devemos rodar um script que recompila todos os módulos PL/SQL. Este script encontra-se em $ORACLE_HOME/rdbms/admin/utlirp.sql. Com o usuário oracle execute os comandos abaixo:

# cd $ORACLE_HOME/rdbms/admin/

# sqlplus /nolog

sql>connect / as sysdba
sql>shutdown immediate;
sql>startup migrate;
sql> @utlirp.sql
sql>shutdown immediate;
sql> startup
sql>
sql> @utlrp.sql
sql> connect system/password

Note que os scripts são executados com o Oracle em modo “migração” (startup migrate).  Depois disso tudo funcionou perfeitamente.

Referências

http://download-uk.oracle.com/docs/html/A96167_01/plan.htm

http://imasters.uol.com.br/artigo/8256/oracle/instalacao_oracle_database_11g_em_linux_rhel_4/

http://www.linuxcaipira.com.br/post.cfm/instalando-o-oracle-no-centos

http://www.oracle-base.com/articles/9i/Oracle9iInstallationOnRedHatAS3.php

http://www.oracle-base.com/articles/9i/Oracle9iInstallationOnRedHatAS4AndCentos4.php

http://www.puschitz.com/InstallingOracle9i.shtml

Erro de segmentação:

http://forums.oracle.com/forums/thread.jspa?messageID=2389069

Erro ORA-06553

http://alexzaballa.blogspot.com/2007/07/connect-and-ora-06553-pls-801-internal.html

Deixe uma resposta