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.
# 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
Social