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.

       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:

    1. 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

    2. 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

    3. Se a RAM for maior que 8192 multiplicar 0,75 pelo tamanho da RAM para obter a Swap.

    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:

    Profile no RHEL 4:

    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

      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:

    • 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.

    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

    • Diretório Oracle Inventory

      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"

    • Diretório Oracle Home

       É 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

    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.

    • O arquivo oracle.sh onde estão todas as variaveis de ambiente do Oracle, você pode editar este arquivo usando por exemplo o "vi".

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