Instalando e Configurando o Oracle Database 12c no Oracle Linux 6

Precisamos dos seguintes arquivos:

  • linuxamd64_12c_database_1of2.zip
  • linuxamd64_12c_database_2of2.zip

O que vamos utilizar:

  • SELinux desabilitado
  • 2 discos para um para o SO com 50 GB e um de 100 GB para o banco de dados que vai ficar em /u01:
  • Usuário para o banco: oracle
  • Grupos para o banco:
    • oinstall
    • dba
    • oper

Vou levar em consideração que o Oracle Linux 6 está instalado e com o ambiente gráfico.

Informações da máquina:

  • IP: 192.168.1.50/24
  • Nome: ol6
  • Domínio: douglasqsantos.com.br
  • RAM: 2048 MB
  • SWAP: 4096 MB
  • Disco1: 50 GB
  • Disco2: 100 GB

Vamos ajustar o nome da máquina

vim /etc/hosts
127.0.0.1   ol6.douglasqsantos.com.br ol6 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.1.50 ol6.douglasqsantos.com.br ol6

Vamos atualizar o sistema

yum update -y

Vamos desabilitar o Firewall ipv4

/etc/init.d/iptables stop
chkconfig --del iptables

Vamos desabilitar o Firewall ipv6

/etc/init.d/ip6tables stop
chkconfig --del ip6tables

Agora vamos ajustar o selinux

vim /etc/selinux/config
[...]
SELINUX=permissive

O Oracle Linux 6 já vem com o repositório public-yum-ol6.repo caso você não tenha pode obter em http://public-yum.oracle.com

Vamos instalar as depêndências do Oracle 12c

yum install oracle-rdbms-server-12cR1-preinstall -y

Agora vamos ajustar o sysctl.conf geralmente com a instalação do oracle-rdbms a variável kernel.shmall vem com valor errado dai temos que ajustar ela para 1073741824, as variáveis que precisamos ajustar estão abaixo.

vim /etc/sysctl.conf
[...]
# Controls the default maxmimum size of a mesage queue
kernel.msgmnb = 65536

# Controls the maximum size of a message, in bytes
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 1073741824

# oracle-rdbms-server-12cR1-preinstall setting for fs.file-max is 6815744
fs.file-max = 6815744

# oracle-rdbms-server-12cR1-preinstall setting for kernel.sem is '250 32000 100 128'
kernel.sem = 250 32000 100 128

# oracle-rdbms-server-12cR1-preinstall setting for kernel.shmmni is 4096
kernel.shmmni = 4096

# oracle-rdbms-server-12cR1-preinstall setting for kernel.shmall is 1073741824 on x86_64

# oracle-rdbms-server-12cR1-preinstall setting for kernel.shmmax is 4398046511104 on x86_64
kernel.shmmax = 4398046511104

# oracle-rdbms-server-12cR1-preinstall setting for net.core.rmem_default is 262144
net.core.rmem_default = 262144

# oracle-rdbms-server-12cR1-preinstall setting for net.core.rmem_max is 4194304
net.core.rmem_max = 4194304

# oracle-rdbms-server-12cR1-preinstall setting for net.core.wmem_default is 262144
net.core.wmem_default = 262144

# oracle-rdbms-server-12cR1-preinstall setting for net.core.wmem_max is 1048576
net.core.wmem_max = 1048576

# oracle-rdbms-server-12cR1-preinstall setting for fs.aio-max-nr is 1048576
fs.aio-max-nr = 1048576

# oracle-rdbms-server-12cR1-preinstall setting for net.ipv4.ip_local_port_range is 9000 65500
net.ipv4.ip_local_port_range = 9000 65500

Agora vamos ajustar o limits.conf

vim /etc/security/limits.conf
[...]
#Inserir no final do arquivo
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    2047
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768

Agora vamos adicionar um ultimo grupo que é um pre-requisito opcional do oracle

groupadd -g 54323 oper

Agora vamos ajustar o oracle

usermod -u 54321 -g oinstall -G dba,oper oracle

Agora vamos definir uma senha para o nosso usuário oracle

passwd oracle

Agora vamos editar mais um arquivo de controle

vim /etc/security/limits.d/90-nproc.conf
[...]
#*          soft    nproc     1024
*            -        nproc     16384
root       soft    nproc     unlimited

Agora vamos criar o diretório base do oracle e vamos ajustar as permissões

mkdir -p /u01/app/oracle/product/12.1.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

Agora vamos instalar um facilitador de linha de comando o rlwrap

rpm -Uvh http://wiki.douglasqsantos.com.br/Downloads/Oracle/rlwrap-0.37-1.el6.x86_64.rpm

Agora vamos ajustar o .bash_profile do usuário oracle

vim /home/oracle/.bash_profile
# .bash_profile

    PS1='\[\033[01;31m\][\[\033[01;37m\]\t\[\033[01;31m\]] \[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$ '
 
    alias ls='ls --color=auto'
    alias dir='dir --color=auto'
    alias vdir='vdir --color=auto'
 
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
    alias sqlplus='rlwrap sqlplus'
    alias rman='rlwrap rman'
 
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
 
export EDITOR=vim
export HISTTIMEFORMAT="%h/%d - %H:%M:%S "
 
 
# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
 
mesg y

# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP

export ORACLE_HOSTNAME=ol6.douglasqsantos.com.br
export ORACLE_UNQNAME=douglas
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/db_1
export ORACLE_SID=douglas

export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

Agora vamos acertar as permissões do diretório que esta armazenando os arquivos do oracle, eu estou levando em consideração que os arquivos estão em /u01/stage

chown -R oracle:oinstall /u01/stage

Agora vamos desempacotar os arquivos

unzip linuxamd64_12c_database_1of2.zip
unzip linuxamd64_12c_database_2of2.zip

Agora vamos ajustar as permissões dos arquivos considerando que os arquivos fontes estão em /stage

chown -R oracle:oinstall /u01/stage

Agora vamos reiniciar o servidor para ele reconher as novas configurações

reboot

Agora logue novamente no servidor com o usuário oracle.

Caso esteja utilizando uma sessão via SSH de outra máquina Linux com ambiente gráfico mande exportar habilitar o XForward da seguinte forma

ssh -X oracle@192.168.1.50

Agora vamos chamar o instalador do Oracle.

/u01/stage/database/runInstaller

Aqui na primeira tela da instalação vamos ser questionados se queremos receber notificações sobre atualizações não vamos selecionar nada e vamos selecionar Next

Agora vamos ser alertados que não vamos receber as notificações de segurança selecine yes para continuar.

Aqui nesta próxima tela vamos deixar marcado skip software updates e vamos selecionar Next

Agora precisamos especificar o tipo da nossa instalação vamos selecionar Install database software only pois vamos criar o banco de dados depois e selecione Next

Agora vamos ser questionados sobre como que vai ser a nossa instalação, como vamos fazer uma instalação simples sem RAC vamos deixar seleciona a primeira opção e vamos selecionar Next

Agora podemos selecionar os idiomas suportados pelo Oracle, eu vou deixar somente o English mais caso tenha clientes que utilizem o padrão português é bom adicionar o idioma português e selecione Next.

Agora podemos selecionar qual a versão do banco de dados que queremos instalar note que os tamanhos são bem diferentes da versão 11G que era 4.29GB a Enterprise e 4.22GB a Standard e selecione Next.

Como setamos as variáveis de ambiente o oracle já conseguiu mapear a localização do Oracle base e já mapeou a instalação que é o ORACLE_HOME e selecione Next

Agora vamos ter a questão da instalação dos metadados do oracle vamos deixar o padrão e vamos selecionar Next.

Agora o oracle vai fazer o mapeamento dos grupos necessários para ele trabalhar, como já criamos todos como pré-requisitos agora vamos selecionar Next

O oracle vai fazer a checagem dos pré-requisitos se nada der errado vamos ter a tela abaixo, caso tenha algum problema com por exemplo quantidade de swap corrija o problema ou selecione Ignore All para ignorar os pré-requisitos porém isso não é uma boa prática e pode comprometer a estabilidade do sistema.

Agora precisamos somente selecionar Install

Agora o sistema vai efetar a instalação dos arquivos necessários, isso pode demorar um pouco em uma VM, e mais ainda dependendo da velocidade do disco, em ambientes de produção tente sempre utilizar storage com discos no mínimo de 15K para não ter lentidão no I/O do Banco.

Assim que acabar a copia dos dados vamos ter um aviso para executar 2 scripts

Agora abra uma sessão no servidor com o usuário root e vamos mandar executar o primeiro script

/u01/app/oraInventory/orainstRoot.sh 
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.

Agora vamos executar o segundo script

/u01/app/oracle/product/12.1.0/db_1/root.sh 
Performing root user operation for Oracle 12c 

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/12.1.0/db_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: #ENTER
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.

Agora podemos selecionar OK na tela de aviso dos scripts

Se tudo correu bem agora temos a seguinte tela, aqui precisamos somente selecionar Close

Agora vamos criar um banco de dados.

Logando com o usuário oracle execute

dbca

Quando ele carregar vamos ter a seguinte tela aqui vamos deixar selecionado Create database e vamos selecionar Next

Agora vamos informar o nome para o nosso banco de dados ex: douglas, precisamos informar a senha para o sys do banco e o pluggable Database Name que é um novo recurso do Oracle para consolidação de multiplos bancos em um único banco e depois selecione Next

Se tudo ocorreu bem vamos ter a seguinte tela aqui precisamos somente selecionar Finish para ser efetuada a criação do banco

Agora nos vamos ter a criação do banco este processo é meio demorado comparado ao 11G

Agora vamos ter uma tela com as informações sobre SID, localização do spfile e o global database name e o endereço do Enterprise Manager, aqui vamos selecionar Exit

Agora que acabou a instalação vamos selecionar Close

Agora vamos consultar o listener

lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 07-NOV-2013 21:42:54

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused

Como podemos notar ele esta down, vamos inicializar ele

lsnrctl start

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 07-NOV-2013 21:44:01

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/12.1.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Log messages written to /u01/app/oracle/diag/tnslsnr/ol6/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol6.douglasqsantos.com.br)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                07-NOV-2013 21:44:01
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol6/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol6.douglasqsantos.com.br)(PORT=1521)))
The listener supports no services
The command completed successfully

Agora vamos consultar o nosso listener

lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 07-NOV-2013 21:44:49

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                07-NOV-2013 21:44:01
Uptime                    0 days 0 hr. 0 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol6/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol6.douglasqsantos.com.br)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ol6.douglasqsantos.com.br)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/douglas/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "douglas" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
Service "douglasXDB" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
Service "pdouglas" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
The command completed successfully

Agora o nosso listener está escutando ok

Agora vamos subir o nosso banco

Agora vamos acessar o Enterprise Manager em https://ol6.douglasqsantos.com.br:5500/em ou pelo endereço ip https://192.168.1.50:5500/em vamos ter algo como abaixo aqui podemos logar com o sys e marcar as sysdba e informar a senha que definimos na criação do banco de dados.

Depois de logar vamos ter uma tela como a seguinte.

Na parte superior temos Configuration, Storage, Security e Performance do lado superior direito podemos selecionar o tempo do nosso auto refresh.

Em Configuration selecione Initialization Parameters vamos ter a seguinte tela, temos todos os parametros de inicialização do banco e podemos editar tudo via EM.

Na aba SPFile temos as opções do arquivo SPFile como abaixo.

Agora em Configuration selecione Memory e vamos ter a seguinte tela, ficou muito melhor do que a versão 11g

Agora se selecionarmos configure memory podemos editar os parametros de memória.

Na aba SPFile temos a configuração da memória do SPFile

Em Configuration selecione Database Feature usage, como não temos nada ainda no banco essas informações estão vazias.

Na guia High Water Marks ainda não temos dados tambem

Em configution selecione Current Database Properties aqui vamos ter os valores setados para o nosso banco.

Em Storage selecione Undo Management Details, aqui vamos ter informações sobre a Undo

Em Storage selecione Redo Log Groups, aqui vamos ter informações sobre o Redo

Em Storage selecione Archive logs, como o banco não esta em modo de archive log não temos dados aqui ainda.

Em storage selecione Control file, aqui vamos ter informações sobre o nosso control file.

Agora em Security selecione Users, aqui vamos ter todos os usuários criados no sistema, porém nem todos estão habilitados.

Agora em Security selecione Roles, aqui vamos ter a opção da criação de roles para o controle dos usuários.

Agora em Performance selecione Performance Hub vamos ter a seguinte tela com vários tipos de gráficos sobre o sistema

Se selecionar a aba atividade vamos ter algo como abaixo.

Se selecionar a aba workload vamos ter algo como abaixo.

Se selecionar a aba Monitored SQL vamos ter algo como abaixo, no meu caso vazio pois não tenho nada rodando.

Se selecionar a aba ADDM vamos ter algo como abaixo, no meu caso sem dados.

Se selecionar a aba Current ADDM Findings vamos ter algo como abaixo, no meu caso sem muitos dados.

Agora selecione Performance e SQL Tuning Advisor vamos ter algo como abaixo no meu caso sem muitos dados.

Se selecionar a aba Manual vamos ter algo como abaixo.

Esse é EM galera, agora vamos criar o script para colocar o nosso banco na inicialização do sistema.

vim /etc/init.d/dbora
#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the 
# Oracle database in ORA_HOME.

ORA_HOME=/u01/app/oracle/product/12.1.0/db_1
ORA_OWNER=oracle
export ORACLE_UNQNAME=douglas

if [ ! -f $ORA_HOME/bin/dbstart ]
then
    echo "Oracle startup: cannot start"
    exit
fi

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        # Remove "&" if you don't want startup as a background process.
        su $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
        rm -f /var/lock/subsys/dbora
        ;;
esac

Agora vamos dar permissão para o nosso script

chmod 750 /etc/init.d/dbora

Agora vamos inserir ele na inicialização

chkconfig --add dbora

Agora vamos habilitar o nosso banco, aqui temos que mudar o N no final do caminho do nosso banco para Y como abaixo

vim /etc/oratab 
#



# This file is used by ORACLE utilities.  It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.

# A colon, ':', is used as the field terminator.  A new line terminates
# the entry.  Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively.  The third field indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
douglas:/u01/app/oracle/product/12.1.0/db_1:Y

Agora vamos reiniciar o servidor para testar a inicialização junto com o sistema

reboot

Após logar novamente no sistema vamos consultar o listener

lsnrctl status

LSNRCTL for Linux: Version 12.1.0.1.0 - Production on 07-NOV-2013 22:41:00

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.1.0 - Production
Start Date                07-NOV-2013 22:40:40
Uptime                    0 days 0 hr. 0 min. 20 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/ol6/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ol6.douglasqsantos.com.br)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=ol6.douglasqsantos.com.br)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/product/12.1.0/db_1/admin/douglas/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "douglas" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
Service "douglasXDB" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
Service "pdouglas" has 1 instance(s).
  Instance "douglas", status READY, has 1 handler(s) for this service...
The command completed successfully

Que coisa mais linda ta tudo funcionando.

Referências