Ambiente de Desenvolvimento com Oracle 11g Express Edition no OEL 5x
Autor: Emerson | Publicado: 2015-03-07T19:38:00-08:00

Olá !

Dessa vez irei demonstrar como criar uma ambiente para DEV utilizando o Oracle Express Edition no Oracle Linux 5.8.

O objetivo foi criar um servidor com Linux onde os meus alunos da faculdade pudessem resolver os exercícios das Disciplinas Banco de Dados e Projetos de Banco de Dados e puderem administrar esse ambiente de uma forma básica com as features disponíveis nessa versão de avaliação.

Não irei abordar a instalação do Oracle Linux 5.8 pois partimos de um ambiente ja instalado, mas você pode visualizar um exemplo&nbsp;aqui.

Pre-requisitos

A swap do Oracle Linux deverá ser no minimo 2G;
Instalar as bibliotecas libaio, bc e flex&nbsp;ou atualizalas.

[root@devoracle ~]# yum install libaio bc flex

Você deve efetuar o download do Oracle XE aqui.E descompacta-lo

[root@devoracle ~]# unzip -q oracle-xe-11.2.0-1.0.x86_64.rpm.zip

Após a descompactação o Oracle irá criar um diretório conforme abaixo:

[root@devoracle ~]# cd Disk1 
[root@devoracle Disk1]# ls 
oracle-xe-11.2.0-1.0.x86_64.rpm &nbsp;response &nbsp;upgrade

Passo 2:&nbsp;Instale o arquivo RPM usando os comandos abaixo:

rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm

[root@devoracle Disk1]# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm 
Preparing... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;########################################### [100%] 
&nbsp; &nbsp;1:oracle-xe &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;########################################### [100%] 
Executing post-install steps... 
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database. 

[root@devoracle Disk1]# 


Passo 2: Configurar &nbsp;11g XE Database and Options

Execute o seguinte comando /etc/init.d/oracle-xe configure &nbsp;.



[root@devoracle Disk1]# /etc/init.d/oracle-xe configure 

Oracle Database 11g Express Edition Configuration 
------------------------------------------------- 
This will configure on-boot properties of Oracle Database 11g Express 
Edition. &nbsp;The following questions will determine whether the database should 
be starting upon system boot, the ports it will use, and the passwords that 
will be used for database accounts. &nbsp;Press &lt;enter&gt; to accept the defaults. 
Ctrl-C will abort. 

Specify the HTTP port that will be used for Oracle Application Express [8080]: 

Specify a port that will be used for the database listener [1521]: 

Specify a password to be used for database accounts. &nbsp;Note that the same 
password will be used for SYS and SYSTEM. &nbsp;Oracle recommends the use of 
different passwords for each database account. &nbsp;This can be done after 
initial configuration: 
Confirm the password: 

Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:y 

Starting Oracle Net Listener...Done 
Configuring database...Done 
Starting Oracle Database 11g Express Edition instance...Done 
Installation completed successfully.&lt;/enter&gt;

A instalaçao foi criada no diretório .

Passo 3: Setar as variáveis de ambiente.

Para setar as variáveis de ambiente no Oracle , utilize o script oracle_env.sh incluso no diretorio de instalação

/u01/app/oracle/product/11.2.0/xe/bin

[root@devoracle Disk1]# cd /u01/app/oracle/product/11.2.0/xe/bin

Para setar execute os comando abaixo.'. ./oracle_env.sh':

[root@devoracle bin]# . ./oracle_env.sh

Para setar permanentemente para os usuários, adicione as variáveis nos arquivos .bashrc ou .bash_profile dos usuarios que irao acessar.

. /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

Agora acesso o SQL *Plus

Passo 4 - Permitir Acesso Remoto ao Orace 11g XE.

SQL&gt; EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE); 

PL/SQL procedure successfully completed. 


Passo 5 - Mover a Flash Recovery Area (Fast Recovery Area)

Para proteger uma possível falha de disco, você deve mover a Flash Recovery Area para um disco separado;

Por default a Fast Recovery Area pode estar localizada em /u01/ap/oracle/fast_recovery_area

SQL&gt; show parameter DB_RECOVERY_FILE_DEST; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
db_recovery_file_dest &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string &nbsp; &nbsp; &nbsp;/u01/app/oracle/fast_recovery_area 
db_recovery_file_dest_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; big integer 10G 
SQL&gt; 


Então, para poder mover deverá ser criado uma pasta previa.

[root@devoracle ~]# mkdir /opt/fra 
[root@devoracle ~]# chown oracle:dba /opt/fra

SQL&gt; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/opt/fra'; 

System altered. 

SQL&gt; 

Para mover os arquivos use o script movelog.sql:

SQL&gt; @?/sqlplus/admin/movelogs 
SQL&gt; SET FEEDBACK 1 
SQL&gt; SET NUMWIDTH 10 
SQL&gt; SET LINESIZE 80 
SQL&gt; SET TRIMSPOOL ON 
SQL&gt; SET TAB OFF 
SQL&gt; SET PAGESIZE 100 
SQL&gt; declare 
&nbsp; 2 &nbsp; &nbsp; cursor rlc is 
&nbsp; 3 &nbsp; &nbsp; &nbsp; &nbsp;select group# grp, thread# thr, bytes/1024 bytes_k 
&nbsp; 4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from v$log 
&nbsp; 5 &nbsp; &nbsp; &nbsp; &nbsp;order by 1; 
&nbsp; 6 &nbsp; &nbsp; stmt &nbsp; &nbsp; varchar2(2048); 
&nbsp; 7 &nbsp; &nbsp; swtstmt &nbsp;varchar2(1024) := 'alter system switch logfile'; 
&nbsp; 8 &nbsp; &nbsp; ckpstmt &nbsp;varchar2(1024) := 'alter system checkpoint global'; 
&nbsp; 9 &nbsp;begin 
&nbsp;10 &nbsp; &nbsp; for rlcRec in rlc loop 
&nbsp;11 &nbsp; &nbsp;stmt := 'alter database add logfile thread ' || 
&nbsp;12 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rlcRec.thr || ' size ' || 
&nbsp;13 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rlcRec.bytes_k || 'K'; 
&nbsp;14 &nbsp; &nbsp; &nbsp; &nbsp;execute immediate stmt; 
&nbsp;15 &nbsp; &nbsp; &nbsp; &nbsp;begin 
&nbsp;16 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stmt := 'alter database drop logfile group ' || rlcRec.grp; 
&nbsp;17 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; execute immediate stmt; 
&nbsp;18 &nbsp; &nbsp; &nbsp; &nbsp;exception 
&nbsp;19 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; when others then 
&nbsp;20 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;execute immediate swtstmt; 
&nbsp;21 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;execute immediate ckpstmt; 
&nbsp;22 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;execute immediate stmt; 
&nbsp;23 &nbsp; &nbsp; &nbsp; &nbsp;end; 
&nbsp;24 &nbsp; &nbsp; &nbsp; &nbsp;execute immediate swtstmt; 
&nbsp;25 &nbsp; &nbsp; end loop; 
&nbsp;26 &nbsp;end; 
&nbsp;27 &nbsp;/ 

PL/SQL procedure successfully completed. 

SQL&gt; 
SQL&gt; 

Agora, defina um tamanho adequado para a Área de recuperação rápida.
Utilize df -h para garantir que há um amplo espaço.

SQL&gt; ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 20G; 

System altered.


Verifique a nova localização e tamanho.

SQL&gt; show parameter DB_RECOVERY_FILE_DEST; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
db_recovery_file_dest &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;string &nbsp; &nbsp; &nbsp;/opt/fra 
db_recovery_file_dest_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; big integer 20G 
SQL&gt; 

Passo 6: Adicionar membros para grupos de &nbsp;Redo Log.

Você deve ter pelo menos dois Grupos Redo e cada grupo deve ter pelo menos dois membros.Além disso, os membros devem ser distribuídos em discos (ou pelo menos diretórios)

Na instalação padrão apenas um membro é criado por grupo.

Você pode visualizar os arquivos de log redo usando

SQL&gt; SELECT * FROM V $ LOGFILE;

Uma vez que o local padrão para os dois membros é da Área de Recuperação Flash, os dois membros existentes foram movidos para o nosso novo FRA.

Agora você deve adicionar mais um membro para cada grupo sob /u01/app/oracle/oradata/XE

SQL&gt; ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/XE/log1b.LOG' TO GROUP 1; 

Database altered. 

SQL&gt; ALTER DATABASE ADD LOGFILE MEMBER '/u01/app/oracle/oradata/XE/log2b.LOG' TO GROUP 2; 

Database altered. 

SQL&gt; 


Passo 7: Definir os parâmetros sessões e processos

SQL&gt; show parameters sessions; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
java_max_sessionspace_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
java_soft_sessionspace_limit &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
license_max_sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
license_sessions_warning &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 172 
shared_server_sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer 

SQL&gt; show parameters processes; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
aq_tm_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 0 
db_writer_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 1 
gcs_server_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
global_txn_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 1 
job_queue_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 4 
log_archive_max_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 4 
processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 100

Após cada alteração, será necessário reiniciar o banco de dados pois os parâmetros no são dinâmicos

Aumente as sessões e, em seguida efetuar shutdown no banco de dados.


SQL&gt; alter system set sessions=250 scope=spfile; 

System altered. 

SQL&gt; shutdown immediate 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL&gt; startup 
ORACLE instance started. 

Total System Global Area 1068937216 bytes 
Fixed Size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2233344 bytes 
Variable Size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 780143616 bytes 
Database Buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;281018368 bytes 
Redo Buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5541888 bytes 
Database mounted. 
Database opened. 

Verifique mudança de parâmetro de sessões:

SQL&gt; show parameters sessions; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
java_max_sessionspace_size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
java_soft_sessionspace_limit &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
license_max_sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
license_sessions_warning &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 252 
shared_server_sessions &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer 


SQL&gt; &nbsp;show parameters processes; 

NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TYPE &nbsp; &nbsp; &nbsp; &nbsp;VALUE 
------------------------------------ ----------- ------------------------------ 
aq_tm_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 0 
db_writer_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 1 
gcs_server_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 0 
global_txn_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; integer &nbsp; &nbsp; 1 
job_queue_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 4 
log_archive_max_processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 4 
processes &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;integer &nbsp; &nbsp; 200 
SQL&gt; 

Passo 8: Ativar o modo ARCHIVELOG

Para habilitar backups on-line ou "quentes", o Modo Archivelog deve ser ativado.

Além disso, se você não permitir que o modo ARCHIVELOG e use apenas offline ou backups "frios", se você precisar restaurar o banco de dados só será capaz de restaurar o último backup

Para ativar o modo ARCHIVELOG, efetue o shutdown do banco de dados e, em seguida, startup mount:

SQL&gt; shutdown immediate 
Database closed. 
Database dismounted. 
ORACLE instance shut down. 
SQL&gt; startup mount 
ORACLE instance started. 

Total System Global Area 1068937216 bytes 
Fixed Size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2233344 bytes 
Variable Size &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 763366400 bytes 
Database Buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;297795584 bytes 
Redo Buffers &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5541888 bytes 
Database mounted. 

SQL&gt; alter database archivelog; 

Database altered. 

Abra o banco de dados e verifique se o Modo de Arquivamento foi habilitado.

SQL&gt; alter database open; 

Database altered. 

SQL&gt; 

SQL&gt; SELECT LOG_MODE FROM SYS.V$DATABASE; 

LOG_MODE 
------------ 
ARCHIVELOG 

SQL&gt; 



Etapa 9: Criar Script de Backup Online&nbsp;


Para criar backups automatizados, você pode modificar o backup.sh incluídos em
/u01/app/oracle/product/11.2.0/xe/config/scripts

[root@devoracle ~]# mkdir /opt/ora_backup 

Alterar o proprietário para oracle e que o grupo dba

[root@devoracle ~]# chown oracle:dba /opt/ora_backup 

Copie o script backup.sh de /u01/app/oracle/product/11.2.0/xe/config/scripts para o diretório criado acima.

[root@devoracle ~]# cp &nbsp;/u01/app/oracle/product/11.2.0/xe/config/scripts/backup.sh /opt/ora_backup/backup.sh 

Abra o script backup.sh em um editor de texto ou vi. A última seção será parecido com este:

else 
&nbsp; &nbsp;echo Backup of the database succeeded. 
&nbsp; &nbsp;echo Log file is at $rman_backup_current. 
fi 

#Wait for user to press any key 
echo -n "Press ENTER key to exit" 
read userinp &nbsp;


Altere para :

else 
&nbsp; &nbsp;echo Backup of the database succeeded. 
&nbsp; &nbsp;echo Log file is at $rman_backup_current. 
&nbsp; &nbsp;mail -s 'Oracle Backup Completed' 'professorbdemerson@gmail.com' &lt; /u01/app/oracle/oxe_backup_current.log 
fi 

#Wait for user to press any key 
#echo -n "Press ENTER key to exit" 
#read userinp &nbsp;



A linha de nós adicionamos acima, -s mail 'a Oracle backup concluído' 'professorbdemerson@gmail.com' &lt;/u01/app/oracle/oxe_backup_current.log, vai enviar uma notificação por e-mail que o backup foi concluído, bem como um log dos enventos &nbsp;cópia de segurança log para o corpo da mensagem.

Note que também comentei as duas últimas linhas do roteiro (o prompt).

Crie um job no cron para executar o script com o usuário oracle

Você deve executá-lo pelo menos uma vez por dia. Com o Modo Archivelog habilitado, é importante que os backups ser verificados regularmente para impedir a Flash Recovery Area de encher.

Etapa 10: Criar usuário para criação dos objetos

[root@devoracle ~]# sqlplus sys as sysdba


SQL*Plus: Release 11.2.0.2.0 Production on Qui Mar 5 14:39:43 2015


Copyright (c) 1982, 2011, Oracle.&nbsp; All rights reserved.


Informe a senha:


Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production



SQL&gt;&nbsp;

SQL&gt; create user emerson identified by oracle;


Usuário criado.


SQL&gt; grant connect,resource,dba to emerson;


Concessão bem-sucedida.


SQL&gt; exit
Desconectado de Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
[root@localhost ~]# sqlplus emerson/oracle


SQL*Plus: Release 11.2.0.2.0 Production on Qui Mar 5 14:37:48 2015


Copyright (c) 1982, 2011, Oracle.&nbsp; All rights reserved.




Conectado a:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production


SQL&gt; select * from v$instance;


INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION  &nbsp; STARTUP_ STATUS PAR&nbsp; &nbsp; THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- -------- ------------ --- ---------- ------- ---------------
LOGINS  &nbsp; SHU DATABASE_STATUS  INSTANCE_ROLE &nbsp; &nbsp; ACTIVE_ST BLO EDITION
---------- --- ----------------- ------------------ --------- --- -------
 &nbsp; &nbsp; &nbsp; 1 XE
localhost.localdomain
11.2.0.2.0 &nbsp; 05/03/15 OPEN  NO  &nbsp; &nbsp; 1 STARTED
ALLOWED&nbsp; &nbsp; NO&nbsp; ACTIVE   PRIMARY_INSTANCE &nbsp; NORMAL&nbsp; &nbsp; NO&nbsp; XE





SQL&gt; exit


Estar pronto nosso Oracle XE ambiente de desenvolvimento.





No próximos post irei demonstrar como efetuar backup do banco de dados, instalar ferramentas adicionais como por exemplo o &nbsp;SQL Developer 4.0.3 e efetuar conexão com o Banco de Dados.

Até lá !!

Emerson Martins


Referencias:

http://docs.oracle.com/cd/E17781_01/install.112/e18802/toc.htm