O banco de dados Oracle 10g R2 (32 bit) standalone funciona perfeitamente com versões homologadas dos Sistemas Operacionais Linux nas Versões SLES-10, Red Hat Enterprise ES 4 e Asianux 3.0 para plataformas x86 (32 bit) conforme site da oracle (https://metalink.oracle.com). Todo o artigo é baseado nas documentações oficiais e levará ao leitor ter uma idéia de uma configuração necessária que funcione bem nestes sistemas operacionais.
O Ambiente:
Neste artigo, utilizei um Oracle Database 10g R2 (32 bit) standalone em um sistema operacional Linux Suse ES 10 rodando numa máquina Pentium III CPU 800MHz, 1 Giga de RAM, SCSI host adapter (Ultra SCSI 160), HD SCSI 120 Giga com distribuição de filesystem (1 x 9GB + 3 x 36GB) e placa de rede Ethernet 100Base-T
Espero que as informações descritas aqui seja de grande utilidade para DBAs, caso algum leitor queira fazer algum comentário, sugestão ou dúvida enviar e-mail para jjuniorlopes@gmail.com
1-Checar o suporte do Kernel.
A versão do Oracle 10r2 é homologada para rodar em versões específicas do Kernel, pois já foram testadas pela Oracle. Antes de instalar devemos verificar a versão do Kernel que esta instalado o linux, usando o comando "uname –r" ou "uname -a" (nota 1). O kernel é o centro do sistema operacional e é a parte do sistema responsável pelo gerenciamento do hardware e software, muito importante para o funcionamento de um SGBD (Sistema Gerenciamento de Banco de Dados). É importante ver qual versão esta instalada do Linux e verificar se é compatível o que a Oracle recomenda (Ver nota 2)
"NOTA1"
# uname –r
2.6.5-7.244-smp
# uname -a
Linux ssafdidb1 2.6.5-7.244-smp #1 SMP Mon Dec 12 18:32:25 UTC 2005 i686 i686 i386 GNU/Linux
"NOTA2"
Distribuição Linux |
Versão |
RHEL 3 AS/ES ( RHEL3 ) (Update 4 or later) |
2.4.21-27.EL ou superior |
RHEL 4 AS/ES ( RHEL4 ) and Oracle Enterprise Linux 4 ( OEL4 ) |
2.6.9-5.0.5.EL ou superior |
RHEL 5 AS/ES ( RHEL5 ) and Oracle Enterprise Linux 5 ( OEL5 ) |
2.6.9-5.0.5.EL ou superior |
SuSE SLES9 |
2.6.5-7.201 ou superior |
SuSE SLES10 |
2.6.5-7.244 ou superior |
2-Espaço em disco.
Na instalação do Software Oracle, o requisito mínimo é ter no mínimo de 1.2G para arquivos de Banco de Dados e 1.5 a 3.5G para instalação (pode variar de acordo com o tipo de instalação). Para verificar o espaço em disco disponivel pelo Linux você pode usar o comando "df –lh" que mostra as partições com o total de espaço ocupado (nota 3).
"NOTA3"
ssafdidb1:/ # df -lh
Sist. Arq. Tam Usad Disp Uso% Montado em
/dev/sda2 8,9G 1,8G 6,7G 21% /
tmpfs 1013M 12K 1013M 1% /dev/shm
/dev/sda1 99M 6,3M 88M 7% /boot
/dev/sda5 9,9G 4,3G 5,1G 46% /u01
/dev/sda6 20G 6,0G 13G 32% /u02
/dev/sda7 119G 36G 78G 32% /u03
/dev/sda8 119G 33G 80G 29% /u04
/dev/sda9 126G 18G 103G 15% /u05
3-Mémoria (RAM) e SWAP.
- Se a memória for igual a 1024 Mb a 2048 Mb, então multiplicar 1,5 pelo tamanho da RAM para obter o total de Swap a ser utilizado.
Exemplo: RAM = 1024 Mb
SWAP = 1024 * 1,5 = 1536 Mb
- Se a RAM for entre 2048 Mb e 8192 Mb Usar o tamanho do Swap igual o da RAM
Exemplo: RAM = 3072 Mb
SWAP = 3072 Mb
- Se a RAM for maior que 8192 multiplicar 0,75 pelo tamanho da RAM para obter a Swap.
Verificar o tamanho total de memória disponível usando o comando "free"(nota 4). Para instalação do Oracle 10r2 você precisará no mínimo 1G de RAM. No uso de Swap (Memória virtual) você precisa fazer o seguinte calculo:
Regra:
Exemplo: RAM = 9216 Mb
SWAP = 9216 * 0,75 = 6912 Mb
"NOTA 4"
ssafdidb1:/ # free
total used free shared buffers cached
Mem: 2074588 2016148 58440 0 240348 1511960
-/+ buffers/cache: 263840 1810748
Swap: 3148732 50192 3098540
4-Verificar pacotes instalados
Existem pacotes mínimos obrigatórios no Linux para que a instalação do Oracle possa ser efetuada sem problemas. Você poderá instalar este pacotes antes ou depois da instalação do Linux, se optar antes da instalação, você poderá customizar os pacotes durante a instalação. Para verificar os pacotes instalado você poderá utilizar o comando "rpm –qa <NOME_DO_PACOTE>"(nota 5).
Pacotes relacionados de acordo com a versão do Oracle e Linux:
Red Hat,Oracle Enterprise Linux 3.0
gcc-3.2.3-34
glibc-2.3.2-95.20
make-3.79.1
openmotif21-2.1.30-8
compat-db-4.0.14.5
compat-gcc-7.3-2.96.128
compat-gcc-c++-7.3-2.96.128
compat-libstdc++-7.3-2.96.128
compat-libstdc++=devel-7.3-2.96.128
setarch-1.3-1
XFree86 (Spatial only)
XFree86-devel (Spatial only)
Red Hat,Oracle Enterprise Linux 4.0
binutils-2.15.92.0.2-10.EL4
compat-db-4.1.25-9
compat-libstdc++-296-2.96-132.7.2
compat-libstdc++-33-3.2.3-47.3
control-center-2.8.0-12
gcc-3.4.3-9.EL4
gcc-c++-3.4.3-9.EL4
glibc-2.3.4-2
glibc-common-2.3.4-2
gnome-libs-1.4.1.2.90-44.1
libstdc++-3.4.3-9.EL4
libstdc++-devel-3.4.3-9.EL4
make-3.80-5
pdksh-5.2.14-30
sysstat-5.0.5-1
xscreensaver-4.18-5.rhel4.2
openmotif21-2.1.30-11.RHEL4.2 (required to install Oracle demos)
libaio-0.3.102-1
Red Hat,Oracle Enterprise Linux 5.0
gcc-c++-4.1.1-52.el5.i386.rpm and all its dependent packages.
The dependent packages are:
gcc-4.1.1-52.el5.i386.rpm
libstdc++-devel-4.1.1-52.el5.i386.rpm
glibc-devel-2.5-12.i386.rpm
glibc-headers-2.5-12.i386.rpm
libgomp-4.1.1-52.el5.i386.rpm
libXp-1.0.0-8.i386.rpm
compat-gcc-34-3.4.6-4.i386rpm
compat-gcc-c++-34-3.4.6-4.i386rpm
compat-libstdc++-33-3.2.3-61.i386.rpm
sysstat-5.0.5-1.i386.rpm (OEL5 only)
SuSE SLES9:
glibc-devel-2.3.3-98.47.i586.rpm
gcc-3.3.3-43.34.i586.rpm.
libstdc++-devel-3.3.3-43.34.i586.rpm
gcc-c++-3.3.3-43.34.i586.rpm
db1-1.85-85.1.i586.rpm
orbit-0.5.17-330.1.i586.rpm
gnome-libs-1.4.1.7-671.1.i586.rpm.
plotutils-2.4.1-575.1.i586.rpm
gnuplot-3.7.3-256.1.i586.rpm
sysstat-5.0.1-35.4.i586.rpm.
SLES10:
glibc-devel-2.4-31.2.i586.rpm
gcc-4.1.0-28.4.i586.rpm
libstdc++-devel-4.1.0-28.4.i586.rpm
gcc-c++-4.1.0-28.4.i586.rpm
libaio-devel-0.3.104-14.2.i586.rpm
"NOTA 5"
# rpm -qa --queryformat "%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n" | grep gcc
gcc-java-3.3.3-43.24 (i586)
libgcc-3.3.3-43.24 (i586)
gcc-info-3.3.3-43.24 (i586)
gcc-3.3.3-43.24 (i586)
gcc-c++-3.3.3-43.24 (i586)
gcc-g77-3.3.3-43.24 (i586)
gcc-objc-3.3.3-43.24 (i586)
Obs: Para instalar algum pacote que falte utilize o comando "rpm -ivh "
5-Configurando parâmetros do Kernel
O Oracle trabalha muito bem com o Linux, ao contrário de outro sistemas, ele permite modificar a maioria dos parâmetros de seu Kernel enquanto o sistema esta sendo utilizado e não há nenhuma necessidade para reinicializar depois que efetuar a mudança. Nos Banco de Dados Oracle 10g necessita de modificações conforme a relação abaixo de acordo com a distribuição do Linux.
SuSE SLES9:
SEMMSL 250
SEMMNS 32000
SEMMNI 128
SEMOPM 100
SHMMAX RAM multiplicar por 0,5mas não pdoe ser superior a 4Gb
SHMMNI 4096
SHMALL = SHMMAX/pagesize
FILE-MAX 65536
IP_LOCAL_PORT_RANGE 1024 65000
RMEM_DEFAULT 1048576
RMEM_MAX 1048576
WMEM_DEFAULT 262144
WMEM_MAX 262144
NET.IPV4.TCP_RMEM 4194304 4194304 4194304
NET.IPV4.TCP_WMEM 262144 262144 262144
Demais Linux:
SEMMSL 250
SEMMNS 32000
SEMMNI 128
SEMOPM 100
SHMMAX RAM multiplicar por 0,5mas não pdoe ser superior a 4Gb
SHMMNI 4096
SHMALL = SHMMAX/pagesize
FILE-MAX 65536
IP_LOCAL_PORT_RANGE 1024 65000
RMEM_DEFAULT 262144
RMEM_MAX 262144
WMEM_DEFAULT 262144
WMEM_MAX 262144
NET.IPV4.TCP_RMEM 4194304 4194304 4194304
NET.IPV4.TCP_WMEM 262144 262144 262144
Para modificar estes parâmetros você tem que logar como root e editar o arquivo "/etc/sysctl.conf" e fazer as mudanças necessárias. Após a modificação executar o comando "sysctl -p" para efetuar as mudanças no kernel. Se você não tem certeza de que os valores acima estão certos, você poderá lista-los pelo comando "/sbin/sysctl -a | grep <NOME_DO_PARAMETRO>" (nota 6)
"NOTA 6"
# /sbin/sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shm-use-bigpages = 0
# /sbin/sysctl -a | grep sem
kernel.sem = 250 32000 100 128
# /sbin/sysctl -a | grep file-max
fs.file-max = 65536
# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
# /sbin/sysctl -a | grep rmem_default
net.core.rmem_default = 262144
# /sbin/sysctl -a | grep rmem_max
net.core.rmem_max = 262144
# /sbin/sysctl -a | grep wmem_default
net.core.wmem_default = 262144
# /sbin/sysctl -a | grep wmem_max
net.core.wmem_max = 262144
Para versões Novell SUSE Linux, usar o seguinte comando "/sbin/chkconfig boot.sysctl on" para que as leituras do sistema possa ser utilizada no proximo boot.
6-Fixar limites no Shell para usuário do Linux que administrará o Oracle
A Oracle recomenda fixar limites no número de processos e arquivos abertos para cada conta do Linux. Para fazer estas mudanças entre como root e edite o arquivo limits.conf("vi /etc/security/limits.conf") ou execute os seguintes passos no prompt do linux:
cat >> /etc/security/limits.conf <EOF>
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
No Profile do usuário voce pode também configurar:
cat >> /etc/profile <EOF>
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
cat >> /etc/csh.login <EOF>
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
EOF
Profile SLES 9:
cat >> /etc/profile.local <EOF>
if [ \$USER = "oracle" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
cat >> /etc/csh.login.local <EOF>
if ( \$USER == "oracle" ) then
limit maxproc 16384
limit descriptors 65536
umask 022
endif
EOF
Obs: O SuSe 9 e 10 possui um pacote "orarun" que configura um arquivo de profile assim que instala o sistema operacional (/etc/profile.d/oracle.sh).
7-Criando usuário e grupos exigidos pelo sistema operacional para a instalação
Para instalar o Oracle, o sistema operacional Linux precisará instalar uma conta de usuário para instalar o Software e pelo menos dois grupos de usuários (ver NOTA 7). No Suse existe um pacote que já cria o grupo e usuário de instalação do Oracle chamado "orarun". Caso não exista usuário e grupo, criar de acordo com o exemplo abaixo:
# groupadd oinstall# groupadd dba
# useradd -g oinstall -G dba oracle # passwd oracle # id oracle
uid=102(ora10r2) gid=103(oinstall) grupos=103(oinstall),104(dba),6(disk),1000(oper)
"NOTA 7"
Grupo (dba)
Identifica contas de usuário de sistema operacional que tem privilégios no Banco de Dados como sysdba.
Grupo Oracle Inventory (oinstall)
Você tem que criar este grupo na primeira vez você instala software. O nome escolhido para este grupo é oinstall. Este grupo possui o inventário, que é um catálogo de todo o software de Oracle instalado no sistemaUsuário do Software do Oracle (Padrão Oracle)
Usuário do Software do Oracle (Padrão Oracle)
Este usuário possui tudo do software instalado durante a instalação. Este usuário tem que ter o grupo "oinstall" como seu grupo primário. Também tem que existir o grupo "dba" como grupo secundário
8-Diretórios do Software exigidos
- Diretório Base do Oracle
- mount_point é um diretório de ponta de montagem para o sistema de arquivo que conterá o software Oracle. Normalmente usa /u01 para o diretório de ponto de montagem. Porém, você pode escolher outro ponto de montagem , como /oracle ou /opt/oracle.
- oracle_sw_owner é o nome de usuário de sistema operacional do dono de software, por exemplo oracle.
- Diretório Oracle Inventory
- Diretório Oracle Home
O diretório base do Oracle é um diretório para instalações do software. É análogo ao diretório de C:\Oracle usado para instalações de software em sistemas Microsoft Windows. Em sistemas de Linux recomendam que você use um caminho semelhante para o seguinte diretório:
"/mount_point/app/oracle_sw_owner"
Exemplo:
Para criar o diretório base usar o seguinte comando:
# mkdir -p /u01/app/oracle
# chown -R oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/app/oracle
O diretório de Inventário do Oracle (oraInventory) compartilha todas as instalações de software de Oracle em um único sistema. A primeira vez você instala software de Oracle em um sistema, o instalador especifica o caminho a este diretório. então Oracle recomenda que você escolha o caminho seguinte:
"/u01/app/oracle/oraInventory"
É o diretório para instalar o software para um produto especifico. Como queremos instalar o Oracle 10r2, pode criar um diretório ORACLE HOME seguinte:
# mkdir -p /u01/app/oracle/product/10.2.0/db1
# chown -R oracle:oinstall /u01/app/oracle/product/10.2.0/db1
# chmod -R 775 /u01/app/oracle/product/10.2.0/db1
Obs. Outros diretório são criados para receberem os arquivos de criação do banco de dados, mas que não citaremos neste artigo.
9-Configurando o profile do usuário
- O arquivo oracle.sh onde estão todas as variaveis de ambiente do Oracle, você pode editar este arquivo usando por exemplo o "vi".
Configurar o profile da conta do usuário Oracle para que as variaveis de ambientes estejam configuradas. No Linux Suse o pacote "orarun" já cria o ambiente de variáveis para que se possa instalar o software Oracle. Existe dois arquivos (/etc/sysconfig/oracle e /etc/profile.d/oracle.sh) e que você pode editar e modificar os caminhos que foram criados.
# vi /etc/profile.d/oracle.sh (nota 8)
"NOTA 8"
#
# Set your ORACLE environment variable here
# ORACLE_HOME - Used here and in /etc/init.d/oracle (ora_environment())
# ORACLE_SID - Your Oracle System Identifier
#
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/
# ORACLE_HOME=$ORACLE_BASE/product/10gR2/db
ORACLE_SID=fdi
ORACLE_HOSTNAME=ssafdidb3.embasa.intranet
export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_HOSTNAME
# For RAC
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
export ORA_ASM_HOME=$ORACLE_BASE/product/10.2.0/asm
#
# Login environment variable settings for Oracle
# The code below is done ONLY if the user is "oracle":
#
if [ `id -un` == "ora10r2" ]; then
# Get settings, if file(s) exist(s). If not, we simply use defaults.
if test -f /etc/sysconfig/oracle; then
# new location as of SL 8.0 is directory /etc/sysconfig/
. /etc/sysconfig/oracle
else
if test -f /etc/rc.config.d/oracle.rc.config; then
# location is directory /etc/rc.config.d/
. /etc/rc.config.d/oracle.rc.config
else
if test -f /etc/rc.config; then
# old SuSE location was to have everything in one file
. /etc/rc.config
fi
fi
fi
# Grid Control Agent Home
AGENT_HOME=$ORACLE_BASE/product/10.2.0/agent
TNS_ADMIN=$ORACLE_HOME/network/admin
# Set ORA_NLSxx depending on 9i or 10g
test -d $ORACLE_HOME/ocommon/nls/admin/data && export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
test -d $ORACLE_HOME/nls/data && export ORA_NLS10=$ORACLE_HOME/nls/data
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export AGENT_HOME PATH LD_LIBRARY_PATH CLASSPATH TNS_ADMIN
# ORACLE_TERM=xterm; export ORACLE_TERM
# NLS_LANG=AMERICAN_AMERICA.UTF8; export NLS_LANG
#
# This requires the limits to have been increased by root
# e.g. at boot time by the /etc/rc.d/oracle script, both
# ulimit and kernel parameters.
#
# RAC (cluster) component GSD commands don't run when this is
# set - which it is if a SuSE Java package is installed.
unset JAVA_BINDIR JAVA_HOME
# Set ulimits:
#
# We suppress any warning messages, so if the hard limits have not been
# increased by root and the commands don't work we keep silent...
# This is because the only one who needs it is the shell that starts
# the DB server processes, and the number of warning messages created
# here is potentially way too much and confusing
# core dump file size
ulimit -c ${MAX_CORE_FILE_SIZE_SHELL:-0} 2>/dev/null
# max number of processes for user
ulimit -u ${PROCESSES_MAX_SHELL:-16384} 2>/dev/null
# max number of open files for user
ulimit -n ${FILE_MAX_SHELL:-65536} 2>/dev/null
# For x86/9iR2 (Not required for Oracle 10gR1 or 10gR2)
# Add package "gcc_old" gcc 2.95.3 to path - FIRST
if test -x /opt/gcc295/bin/gcc; then
export PATH=/opt/gcc295/bin:$PATH
fi
# SLES9 specific (Not required for SLES10)
# Set LD_ASSUME_KERNEL (uncomment for SLES9)
# export LD_ASSUME_KERNEL=2.4.21
# arquivo Limits.conf
if [ $USER = "ora10r2" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
# This is needed for Oracle 9iR2 Installer.
test -f /usr/lib/libInternalSymbols.so && export LD_PRELOAD=/usr/lib/libInternalSymbols.so
fi
Obs: Verificar as variáveis que existem no arquivo /etc/sysconfig/oracle
No Linux Red Hat, basta editar o arquivo .bash_profile que fica na pasta home do usuário.
# vi /home/oracle/.bash_profile (nota 9)
"NOTA 9"
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
ORACLE_BASE=/nti01/app/oracle ; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/9.2.0 ; export ORACLE_HOME
ORACLE_TERM=xterm ; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$PATH; export PATH
ORACLE_OWNER=ora920 ; export ORACLE_OWNER
ORACLE_SID=INFO ; export ORACLE_SID
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1; export NLS_LANG
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH
# ORACLE_OEM_JAVARUNTIME=/usr/java/jdk1.3.1_09; export ORACLE_OEM_JAVARUNTIME
LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
PATH=$PATH:$HOME/bin:$ORACLE_HOME/OPatch
export PATH
unset USERNAME
10-Conclusão
Espero ter ajudado àqueles que têm interesse no assunto, ou que sentem dificuldades em instalar o Oracle 10g em ambiente Linux. Para aqueles que queiram saber das outras etapas que devem ser executadas quando executar o comando de instalação podem acessar o site da Oracle http://download.oracle.com/docs/cd/B19306_01/install.102/b15660/toc.htm. Caso tenham dúvida ou sugestões enviar email para jjuniorlopes@gmail.com.