Instalando Oracle 11g R2 Standalone com ASM Grid Infrastructure no Linux 6.6

Para os desavisados de plantão, apartir do Oracle 11gR2, a utilização do ASM no banco de dados Oracle, é necessário instalar o Grid Infrastructure, não sendo mais possível com os binários do Oracle 11g.

No Oracle 11g R2 o ASM (Automatic Storage Management) e o software de Clusterware para uso de banco de dados em RAC (Real Application Clusters) tiveram suas instalações unificadas em um único setup na qual foi chamado de Oracle Grid Infrastructure.

Automatic Storage Management (ASM) é um recurso fornecido pela Oracle no banco de dados Oracle 10g release 1 em diante. ASM tem como objetivo simplificar o gerenciamento de arquivos de banco de dados. Para isso, fornece ferramentas para gerenciar file systems e volumes diretamente do banco de dados, permitindo que os DBAs, possam controlar volumes e discos com instruções de SQL. Assim, os DBAs não precisam de ter habilidades extras em file systems específico ou gerenciadores de volume (que normalmente operam no nível do sistema operacional).

O intuito deste post é mostra a instalação do Grid Infrastructure do Oracle, em um ambiente Linux com um banco de dados Standalone, utilizando o virtualbox o principal motivo é criar um ambiente onde se possa estudar melhor os recursos do ASM sem a necessidade de criar um RAC. Mais nada impede que você possa encontrar um ambiente de produção Standalone com ASM.

Software usado:

  • Oracle Virtual Box – 64 bit
  • Oracle Enterprise Linux 6.6 – 64 bit
  • Oracle Database 11G Release 2(11.2.0.3) – 64 bit for Linux

 

Binarios

versão 11.2.0.3    – 64bits
O binário utilizado 11.2.0.3 somente está disponível para quem tem acesso no metalink da oracle, caso você não possua acesso pode utilizar a versão 11.2.0.1

p10404530_112030_Linux-x86-64_1of7.zip – database software
p10404530_112030_Linux-x86-64_2of7.zip – database software
p10404530_112030_Linux-x86-64_3of7.zip – grid software

versão 11.2.0.1 – 64bits

Página da oracle para baixar os arquivos clique aqui.

linux.x64_11gR2_database_1of2.zip – database software
linux.x64_11gR2_database_2of2.zip – database software
linux.x64_11gR2_grid.zip – grid software

 

Bibliotecas do ASM:

Página da oracle para baixar os arquivos clique aqui.

Obs: Toda instalação ASMLib requer os pacotes oraclesamlib e oracleasm-support
apropriados para a máquina onde vai ser instalado.

 

O pacote oracleasm-support pode ser baixado do   Unbreakable Linux Network (ULN) se você tem um contrato de suporte ativo,ou do http://public-yum.oracle.com se você não tem.

O oracleasm kernel driver é construido dentro do  Unbreakable Enterprise Kernel para Oracle Linux 6 e não precisa ser instalado manualmente.

The oracleasm kernel driver for the 64-bit (x86_64) Red Hat Compatible Kernel for Oracle Linux 6 can be installed manually from ULN or http://public-yum.oracle.com using the yum tool:

# yum install kmod-oracleasm

This kernel driver is not version-specific and does not need to be upgraded when the kernel is upgraded.

 

Arquivo necessários para ASM

oracleasmlib-2.0.12-1.el6.x86_64.rpm

oracleasm-support-2.1.8-1.el6.x86_64.rpm

 

Dados do Host:

hostame – oraclegrid
ip – 192.168.0.18

  • 30G disco local
  • 3G memoria ram

Abaixo alguns posts para ajuda-lo na instalação do virtualbox e do linux.

Instalação do VirtualBox

Instalação do Linux 6.6

Uma vez o Oracle Linux 6.6 instalado podemos criar os discos na máquina virtual que será utilizando pelo ASM, devemos dar um shutdown no linux e ir na configuração da máquina virtual para adicionar os novos discos.

Discos adicionados:

CRSDISK1 – 500MB
CRSDISK2 – 500MB

– for CRSVOL1 disk where Cluster Ready Services (CRS) files will be stored. CRS provides many system management services and interacts with the vendor clusterware to coordinate cluster membership information.

AMSDISK1 – 5GB
ASMDISK2 – 5GB

– disk for DATAVOL1 disk. Here database will keep all datafiles, control files, log files…

FRADISK1 – 2GB
FRADISK2 – 2GB
FRADISK3 – 2GB

– disk for FRAVOL1 disk for database Fast Recovery Area (FRA) files. For example: database backup files, copy of database control files.

 

No virtualbox selecione a máquina virtual que você vai trabalhar e vá em configurações, vai em armazenamento, clique em adiciona disco rígido e vá adicionando os discos conforme abaixo, repetido o processo para cada disco e configurando seu tamanho.

Adicionar_Hd1Adicionar_Hd4Adicionar_Hd5Adicionar_Hd3Adicionar_Hd2

Ficará da seguinte forma:

Adicionar_Hd6

 

Com o discos adicionados na máquina virtual, já podemos começar o processo de configuração e instalação do Oracle grid.

 

1 – Configurando o usuário do ASM (Grid) e do Oracle

Para uma instancia ASM é recomendado  usar um usuário separado do usuário Oracle

Criar um usuário “grid”,  criando um diretório ASM_HOME para o software do clusterware.

# Criando um usuário oracle

[root@oraclegrid:~]#

groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
useradd -m -u 501 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c “Oracle Software Owner” oracle

[root@oraclegrid:~]# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)

 

# Crie um password para o usuário oracle

[root@oraclegrid:~]# passwd oracle

Changing password for user oracle.

New password: xxxxxxxxxxx

Retype new password: xxxxxxxxxxx

passwd: all authentication tokens updated successfully.

 

 

# Criando os diretórios para o usuário oracle

[root@oraclegrid ~]#

mkdir -p /u01/app/oracle

chown oracle:oinstall /u01/app/oracle

chmod -R 775 /u01

 

# Criando um usuário para o grid

[root@oraclegrid ~]#
groupadd -g 1200 asmadmin 
groupadd -g 1201 asmdba 
groupadd -g 1202 asmoper 
useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid -s 
/bin/bash grid 

[root@oraclegrid ~]# id grid 
uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),
1201(asmdba),1202(asmoper)

# Setando a senha para novo usuário grid

[root@oraclegrid]# passwd grid 
Changing password for user grid. 
New UNIX password: xxxxxxxxxxx
Retype new UNIX password: xxxxxxxxxxx
passwd: all authentication tokens updated successfully.

# Criando diretórios para grid home

[root@oraclegrid ~]#
mkdir -p /u01/app/grid
mkdir -p /u01/app/11.2.0/grid
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
##################################################################################
Caso você não queira criar um usuário separado para o grid você pode seguir os
passos abaixo:

Com a instalação do Grid, ele requer três novos grupos, vamos criar ele e adicionar estes grupos ao usuário Oracle.

groupadd -g 1200 asmadmin 
groupadd -g 1201 asmdba 
groupadd -g 1202 asmoper

usermod -G asmdba,asmoper,asmadmin,dba,oper -g oinstall oracle

Como terá várias instâncias e versões de oracle diferentes no mesmo servidor, aconselho a colocar os dados no .bash_profile e criar scripts no home do oracle. Segue o meu script do asm. Logo em seguida, executo o comando source, para ler as variaveis.

[oracle@oracle11g ~]$ cat oracle_asm.sh
### Variaveis do ASM
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/grid
export ORACLE_SID=+ASM
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin

[oracle@oracle11g ~]$ source oracle_asm

Toda vez que você precisar instalar ou acessar a instancia ASM execute o script 
oracle_asm.sh.
##################################################################################

 

Nota: Nos temos que alinhar o usuário oracle também com o grupo asmdba em ordem para permitir o usuário oracle a descobrir os discos asm durante a criação do database. O grupo oper vai ser usado pelo software oracle.

A solução para que o dbca não veja o ASM disk, isso acontece quando nos usamos contas separadas para gerenciar o ASM com um grid e um conta oracle para gerenciar o database, execute os comandos abaixo.

[root@oraclegrid ~]# usermod -g oinstall -G dba,oper,asmdba oracle

 

[root@oraclegrid app]# id oracle
uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),1201(asmdba)

 

2. Criando login scripts para usuário grid e oracle 

  • Login script para usuário oracle:

Altere o arquivo .bash_profile do usuário oracle com o conteudo abaixo.

[root@oraclegrid ~]# su – oracle
[oracle@oraclegrid ~]$ echo > .bash_profile 
[oracle@oraclegrid ~]$ vi .bash_profile

 

Cole as seguintes linha dentro do arquivo .bash_profile e salve.

# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: oracle
# Marcio Rocha.
# Application: Oracle Database Software Owner
# Version: Oracle 11g Release 2
# ---------------------------------------------------
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID) for
# the Oracle instance running on this node.
ORACLE_SID=TESTEDB1; export ORACLE_SID
# ---------------------------------------------------
# ORACLE_UNQNAME
# ---------------------------------------------------
# In previous releases of Oracle Database, you were
# required to set environment variables for
# ORACLE_HOME and ORACLE_SID to start, stop, and
# check the status of Enterprise Manager. With
# Oracle Database 11g release 2 (11.2) and later, you
# need to set the environment variables ORACLE_HOME
# and ORACLE_UNQNAME to use Enterprise Manager.
# Set ORACLE_UNQNAME equal to the database unique
# name.
# ---------------------------------------------------
ORACLE_UNQNAME=TESTDB1; export ORACLE_UNQNAME
# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME
# ---------------------------------------------------
# ORACLE_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# database software installations.
# ---------------------------------------------------
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
# ---------------------------------------------------
# ORACLE_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Database software.
# ---------------------------------------------------
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_HOME
# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM
# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
#
# NLS_DATE_FORMAT = "MM/DD/YYYY"
#
# ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"
export NLS_DATE_FORMAT
# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $ORACLE_HOME/bin directory.
# ---------------------------------------------------
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
# ---------------------------------------------------
# LD_LIBRARY_PATH
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
# ---------------------------------------------------
# CLASSPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
# ---------------------------------------------------
# THREADS_FLAG
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG
# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp
# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022
  • Login script para usuário grid:

Altere o arquivo .bash_profile do usuário grid com o conteúdo abaixo.

[oracle@test-host ~]$ su – grid
Password:   
[grid@test-host ~]$ echo > .bash_profile 
[grid@test-host ~]$ vi .bash_profile

Cole as seguintes linha dentro do arquivo .bash_profile e salve.

# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: grid
# Marcio Rocha.
# Application: Oracle Grid Infrastructure
# Version: Oracle 11g Release 2
# ---------------------------------------------------
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID)
# for the Automatic Storage Management (ASM)instance
# running on this node.
# ---------------------------------------------------
ORACLE_SID=+ASM; export ORACLE_SID
# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME
# ---------------------------------------------------
# ORACLE_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# installations. The Oracle base directory for the
# grid installation owner is the location where
# diagnostic and administrative logs, and other logs
# associated with Oracle ASM and Oracle Clusterware
# are stored.
# ---------------------------------------------------
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
# ---------------------------------------------------
# ORACLE_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Grid Infrastructure software. For grid
# infrastructure for a cluster installations, the Grid
# home must not be placed under one of the Oracle base
# directories, or under Oracle home directories of
# Oracle Database installation owners, or in the home
# directory of an installation owner. During
# installation, ownership of the path to the Grid
# home is changed to root. This change causes
# permission errors for other installations.
# ---------------------------------------------------
ORACLE_HOME=/u01/app/11.2.0/grid; export ORACLE_HOME
# ---------------------------------------------------
# ORACLE_PATH
# ---------------------------------------------------
# Specifies the search path for files used by Oracle
# applications such as SQL*Plus. If the full path to
# the file is not specified, or if the file is not
# in the current directory, the Oracle application
# uses ORACLE_PATH to locate the file.
# This variable is used by SQL*Plus, Forms and Menu.
# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM
# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
#
# NLS_DATE_FORMAT = "MM/DD/YYYY"
#
# ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $ORACLE_HOME/bin directory.
# ---------------------------------------------------
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/common/oracle/bin
export PATH
# ---------------------------------------------------
# LD_LIBRARY_PATH
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
# ---------------------------------------------------
# CLASSPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
# ---------------------------------------------------
# THREADS_FLAG
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG
# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp
# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022

 

3. Particionado os discos para o ASM

Para localizarmos os discos que nos adicionamos na máquina virtual podemos consultar o diretório /dev/sd*, isso ira nós mostrar os discos que foram adicionados.

[root@oraclegrid ~]# ls -l /dev/sd*
brw-rw—-. 1 root disk 8, 0 Mar 3 10:51 /dev/sda
brw-rw—-. 1 root disk 8, 1 Mar 3 10:51 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Mar 3 10:51 /dev/sda2
brw-rw—-. 1 root disk 8, 16 Mar 3 10:51 /dev/sdb
brw-rw—-. 1 root disk 8, 32 Mar 3 10:51 /dev/sdc
brw-rw—-. 1 root disk 8, 48 Mar 3 10:51 /dev/sdd
brw-rw—-. 1 root disk 8, 64 Mar 3 10:51 /dev/sde
brw-rw—-. 1 root disk 8, 80 Mar 3 10:51 /dev/sdf
brw-rw—-. 1 root disk 8, 96 Mar 3 10:51 /dev/sdg
brw-rw—-. 1 root disk 8, 112 Mar 3 10:51 /dev/sdh

Os discos que ainda não possuem número em sua partição são os possíveis discos que foram adicionados, para confirmarmos podemos executar o comando fdisk -l, onde podemos vê o tamanho que cada disco em relação ao tamanho que criamos.

 

[root@oraclegrid ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00025c04

Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 3917 30944256 8e Linux LVM

Disk /dev/sdb: 524 MB, 524288000 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc: 524 MB, 524288000 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdf: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdg: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdh: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

 

Agora devemos particionar os discos que foram adicionados utilizando o fdisk.

Para cada disco efetuamos o procedimento parecido com o de baixo.

[root@oraclegrid ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x97a76e3a.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won’t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).

Command (m for help): n                                  —- n para uma nova partição
Command action
e extended
p primary partition (1-4)
p                                                                                    — digite p para criar um partição primaria
Partition number (1-4): 1                                      —- digite 1 depois <enter> <enter>                      
First cylinder (1-63, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-63, default 63):
Using default value 63

Command (m for help): w                                       — digite w  para escrever a partição        
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@oraclegrid ~]#

 

Repita este processo para cada disco.

 

# Verificando as partições criadas.

[root@oraclegrid ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00025c04

Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 3917 30944256 8e Linux LVM

Disk /dev/sdb: 524 MB, 524288000 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x97a76e3a

Device Boot Start End Blocks Id System
/dev/sdb1 1 63 505023+ 83 Linux

Disk /dev/sdc: 524 MB, 524288000 bytes
255 heads, 63 sectors/track, 63 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x29b13634

Device Boot Start End Blocks Id System
/dev/sdc1 1 63 506016 83 Linux

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xdce3dd25

Device Boot Start End Blocks Id System
/dev/sdd1 1 652 5237158+ 83 Linux

Disk /dev/sde: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6b11a927

Device Boot Start End Blocks Id System
/dev/sde1 1 261 2096451 83 Linux

Disk /dev/sdf: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x9898c953

Device Boot Start End Blocks Id System
/dev/sdf1 1 261 2096451 83 Linux

Disk /dev/sdg: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6a0d6f17

Device Boot Start End Blocks Id System
/dev/sdg1 1 261 2096451 83 Linux

Disk /dev/sdh: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xaee9de84

Device Boot Start End Blocks Id System
/dev/sdh1 1 652 5237158+ 83 Linux

[root@oraclegrid ~]#

# Consultando o /dev para verificar os discos

[root@oraclegrid ~]# ls -l /dev/sd*
brw-rw—-. 1 root disk 8, 0 Mar 3 10:51 /dev/sda
brw-rw—-. 1 root disk 8, 1 Mar 3 10:51 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Mar 3 10:51 /dev/sda2
brw-rw—-. 1 root disk 8, 16 Mar 3 12:27 /dev/sdb
brw-rw—-. 1 root disk 8, 17 Mar 3 12:27 /dev/sdb1
brw-rw—-. 1 root disk 8, 32 Mar 3 12:33 /dev/sdc
brw-rw—-. 1 root disk 8, 33 Mar 3 12:33 /dev/sdc1
brw-rw—-. 1 root disk 8, 48 Mar 3 12:33 /dev/sdd
brw-rw—-. 1 root disk 8, 49 Mar 3 12:33 /dev/sdd1
brw-rw—-. 1 root disk 8, 64 Mar 3 12:34 /dev/sde
brw-rw—-. 1 root disk 8, 65 Mar 3 12:34 /dev/sde1
brw-rw—-. 1 root disk 8, 80 Mar 3 12:35 /dev/sdf
brw-rw—-. 1 root disk 8, 81 Mar 3 12:34 /dev/sdf1
brw-rw—-. 1 root disk 8, 96 Mar 3 12:35 /dev/sdg
brw-rw—-. 1 root disk 8, 97 Mar 3 12:35 /dev/sdg1
brw-rw—-. 1 root disk 8, 112 Mar 3 12:35 /dev/sdh
brw-rw—-. 1 root disk 8, 113 Mar 3 12:35 /dev/sdh1

 

CRSDISK1  /dev/sdb1    524 MB
CRSDISK2  /dev/sdc1    524 MB
AMSDISK1  /dev/sdd1    5368 MB
ASMDISK2  /dev/sdh1    5368 MB
FRADISK1  /dev/sde1    2147 MB
FRADISK2  /dev/sdf1    2147 MB
FRADISK3  /dev/sdg1    2147 MB

4. Configurando os parâmetros do kernel do linux para o oracle

As configurações dos parâmetros de kernel do oracle  e a instalação de algumas libs necessárias para instalação do oracle você pode fazer manual ou utilizando o script oracle-rdbms-server-11gR2-preinstall no yum.

Antes de iniciar a instalação do Oracle 11g no sistema operacional, você deve preparar o ambiente com todos os pré-requisitos necessários, como por exemplo, pacotes, bibliotecas, parâmetros do kernel, versão do pacote e criação de usuário e grupos (oinstall e dba).
Sabendo desses pré-requisitos, a Oracle criou um pacote chamado oracle-valitated ou oracle-rdbms-server-11gR2-preinstall que faz todo este trabalho “sujo”. O que esta em incluso neste pacote:

– Cria o usuário oracle, os grupos oinstall e dba, que estão serão usados na instalação da database.

– Modifica os parametros do kernel (/etc/sysconfig.conf), mudando configurações de memória, semaforos, etc.

– Configura recursos do sistema tanto os valores soft e hard dentro do /etc/limits.conf, tal como uso espaço de uso de memória, aumenta o número de arquivos abertos e de processos.

– Configura numa=off em kernel`s com rodando x86_64.

 

Como criamos os usuários manualmente o script vai ignorar nesta parte.

 

Estarei utilizando o script oracle-rdbms-server-11gR2-preinstall no yum.

Antes de você executar este script, execute um update no yum para atualizar o SO.

yum update

[root@oraclegrid ~]# yum isntall oracle-rdbms-server-11gR2-preinstall
Loaded plugins: refresh-packagekit, security, ulninfo
No such command: isntall. Please use /usr/bin/yum --help
[root@oraclegrid ~]# yum install oracle-rdbms-server-11gR2-preinstall
Loaded plugins: refresh-packagekit, security, ulninfo
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package oracle-rdbms-server-11gR2-preinstall.x86_64 0:1.0-12.el6 will be 
installed
--> Processing Dependency: gcc-c++ for package: oracle-rdbms-server-11gR2-
preinstall-1.0-12.el6.x86_64
--> Processing Dependency: compat-libcap1 for package: oracle-rdbms-server-11gR2-
preinstall-1.0-12.el6.x86_64
--> Processing Dependency: ksh for package: oracle-rdbms-server-11gR2-preinstall-
1.0-12.el6.x86_64
--> Processing Dependency: libaio-devel for package: oracle-rdbms-server-11gR2-
preinstall-1.0-12.el6.x86_64
--> Processing Dependency: compat-libstdc++-33 for package: oracle-rdbms-server-
11gR2-preinstall-1.0-12.el6.x86_64
--> Processing Dependency: libstdc++-devel for package: oracle-rdbms-server-11gR2
-preinstall-1.0-12.el6.x86_64
--> Running transaction check
---> Package compat-libcap1.x86_64 0:1.10-1 will be installed
---> Package compat-libstdc++-33.x86_64 0:3.2.3-69.el6 will be installed
---> Package gcc-c++.x86_64 0:4.4.7-16.el6 will be installed
---> Package ksh.x86_64 0:20120801-28.el6_7.3 will be installed
---> Package libaio-devel.x86_64 0:0.3.107-10.el6 will be installed
---> Package libstdc++-devel.x86_64 0:4.4.7-16.el6 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
====================================================================================================================================================================================================
 Package Arch Version Repository Size
====================================================================================================================================================================================================
Installing:
 oracle-rdbms-server-11gR2-preinstall x86_64 1.0-12.el6 public_ol6_latest 18 k
Installing for dependencies:
 compat-libcap1 x86_64 1.10-1 public_ol6_latest 17 k
 compat-libstdc++-33 x86_64 3.2.3-69.el6 public_ol6_latest 183 k
 gcc-c++ x86_64 4.4.7-16.el6 public_ol6_latest 4.7 M
 ksh x86_64 20120801-28.el6_7.3 public_ol6_latest 760 k
 libaio-devel x86_64 0.3.107-10.el6 public_ol6_latest 13 k
 libstdc++-devel x86_64 4.4.7-16.el6 public_ol6_latest 1.6 M
 
Transaction Summary
====================================================================================================================================================================================================
Install 7 Package(s)
 
Total download size: 7.3 M
Installed size: 23 M
Is this ok [y/N]: y

Para melhorar a performance do software no sistema linux, você deve aumentar o 
seguinte limite de recurso para o usuário grid do software oracle.

Adicione a seguinte linha no arquivo /etc/security/limits.conf (o seguinte 
exemplo mostra o grid dono da conta do software)

[root@oraclegrid ~]# 

cat >> /etc/security/limits.conf <<EOF 
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
EOF

 

Adicione ou edit a seguinte linha no arquivo /etc/pam.d/login, se não existir.

[root@oraclegrid ~]# 

cat >> /etc/pam.d/login <<EOF  
session required pam_limits.so  
EOF

 

Dependendo do seu ambiente shell, faça a seguinte mudança no arquivo startup do 
shell default, mudar o ulimit setando para todos da instalação oracle ( note que 
esse exemplo mostra os usuários oracle e grid)

Para o shell Bourne, Bash ou Korn, adicione a linha no seguinte arquivo 
/etc/profile file executando o seguinte comando:

[root@oraclegrid ~]# 

cat >> /etc/profile <<EOF
if [ \$USER = "oracle" ] || [ \$USER = "grid" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF

 

5. Ajuste o arquivo hosts

Adicione o ip do seu servidor no arquivo hosts.

[root@oraclegrid ~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.18 oraclegrid.localdomain oraclegrid

 

5. Instalar o pacote do Oracle ASM e criar os discos grupos ASM

 

Utilizando pacotes do DVD ou baixando no site do suporte Linux da Oracle você deverá possuir os seguinte arquivos.
rpm -ivh kmod-oracleasm-2.0.8-4.el6_6.x86_64.rpm
rpm -ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm
rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm

 

Como vou está utilizando o yum para instalar os pacotes seguirei os passos abaixo:

 

Instalação da ASMLib

Utilizando o yum e rpm conforme inicio deste post:

yum install kmod-oracleasm

rpm -ivh oracleasmlib-2.0.12-1.el6.x86_64.rpm

rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm

 

[root@oraclegrid ~]# yum install kmod-oracleasm
Loaded plugins: refresh-packagekit, security, ulninfo
Setting up Install Process
Resolving Dependencies
–> Running transaction check
—> Package kmod-oracleasm.x86_64 0:2.0.8-6.el6_7 will be installed
–> Finished Dependency Resolution

Dependencies Resolved

======================================================================================================================
Package Arch Version Repository Size
======================================================================================================================
Installing:
kmod-oracleasm x86_64 2.0.8-6.el6_7 public_ol6_latest 35 k

Transaction Summary
======================================================================================================================
Install 1 Package(s)

Total download size: 35 k
Installed size: 117 k
Is this ok [y/N]: y
Downloading Packages:
kmod-oracleasm-2.0.8-6.el6_7.x86_64.rpm | 35 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : kmod-oracleasm-2.0.8-6.el6_7.x86_64 1/1
Verifying : kmod-oracleasm-2.0.8-6.el6_7.x86_64 1/1

Installed:
kmod-oracleasm.x86_64 0:2.0.8-6.el6_7

Complete!

 

[root@oraclegrid Library – ASM – linux6.6]# rpm -ivh oracleasmlib-2.0.12-1.el6.x86_64.rpm
Preparing… ########################################### [100%]
1:oracleasmlib ########################################### [100%]

[root@oraclegrid Library – ASM – linux6.6]# rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm
Preparing… ########################################### [100%]
1:oracleasm-support ##################################### [100%]

 

# Configurando e carregando o modulo do kernel ASM (como usuário “root”)

/usr/sbin/oracleasm configure -i

[root@oraclegrid ~]# /usr/sbin/oracleasm configure -i
Configuring the Oracle ASM library driver.
 
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
 
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done


The script completes the following tasks:

  • Creates the /etc/sysconfig/oracleasm configuration file
  • Creates the /dev/oracleasm mount point
  • Mounts the ASMLib driver file system

Enter the following command to load the oracleasm kernel module:

 

[root@oraclegrid]# /usr/sbin/oracleasm init 
Creating /dev/oracleasm mount point: /dev/oracleasm 
Loading module "oracleasm": oracleasm 
Mounting ASMlib driver filesystem: /dev/oracleasm


# Criando os discos ASM

CRSDISK1  /dev/sdb1    524 MB
CRSDISK2  /dev/sdc1    524 MB
AMSDISK1  /dev/sdd1    5368 MB
ASMDISK2  /dev/sdh1    5368 MB
FRADISK1  /dev/sde1    2147 MB
FRADISK2  /dev/sdf1    2147 MB
FRADISK3  /dev/sdg1    2147 MB
 
/usr/sbin/oracleasm createdisk CRSDISK1 /dev/sdb1
/usr/sbin/oracleasm createdisk CRSDISK2 /dev/sdc1
/usr/sbin/oracleasm createdisk ASMDISK1 /dev/sdd1
/usr/sbin/oracleasm createdisk FRADISK1 /dev/sde1
/usr/sbin/oracleasm createdisk FRADISK2 /dev/sdf1
/usr/sbin/oracleasm createdisk FRADISK3 /dev/sdg1
/usr/sbin/oracleasm createdisk ASMDISK2 /dev/sdh1

/usr/sbin/oracleasm listdisks
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk CRSDISK1 /dev/sdb1 
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk CRSDISK2 /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk ASMDISK1 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk FRADISK1 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk FRADISK2 /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk FRADISK3 /dev/sdg1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# /usr/sbin/oracleasm createdisk ASMDISK2 /dev/sdh1
Writing disk header: done
Instantiating disk: done
[root@oraclegrid ~]# 
[root@oraclegrid ~]# 
[root@oraclegrid ~]# /usr/sbin/oracleasm listdisks
ASMDISK1
ASMDISK2
CRSDISK1
CRSDISK2
FRADISK1
FRADISK2
FRADISK3
Test disks discovery (oracle-discovery is being used by the oracle database 
creation assistant (dbca))

[root@oraclegrid ~]# oracleasm-discover
Using ASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASM Library - Generic Linux, version 2.0.12 (KABI_V2)]
Discovered disk: ORCL:ASMDISK1 [10474317 blocks (5362850304 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:ASMDISK2 [10474317 blocks (5362850304 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:CRSDISK1 [1010047 blocks (517144064 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:CRSDISK2 [1012032 blocks (518160384 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:FRADISK1 [4192902 blocks (2146765824 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:FRADISK2 [4192902 blocks (2146765824 bytes), maxio 1024, 
integrity none]
Discovered disk: ORCL:FRADISK3 [4192902 blocks (2146765824 bytes), maxio 1024, 
integrity none]
[root@oraclegrid ~]# 

 

6. Instalação do Oracle Grid

O usuário grid deve possuir permissão para acessar o diretório grid para instalação do binário.

-rw-r–r–. 1 grid oinstall 979195792 Mar 2 21:10 p10404530_112030_Linux-x86-64_3of7.zip

drwxr-xr-x. 8 grid oinstall 4096 Sep 22 2011 grid

cd grid

Já dentro do diretório de instalação do Oracle grid.

drwxr-xr-x. 9 grid oinstall 4096 Sep 22 2011 doc
drwxr-xr-x. 4 grid oinstall 4096 Sep 22 2011 install
-rwxr-xr-x. 1 grid oinstall 28122 Sep 22 2011 readme.html
drwxr-xr-x. 2 grid oinstall 4096 Sep 22 2011 response
drwxr-xr-x. 2 grid oinstall 4096 Sep 22 2011 rpm
-rwxr-xr-x. 1 grid oinstall 4878 Sep 22 2011 runcluvfy.sh
-rwxr-xr-x. 1 grid oinstall 3227 Sep 22 2011 runInstaller
drwxr-xr-x. 2 grid oinstall 4096 Sep 22 2011 sshsetup
drwxr-xr-x. 14 grid oinstall 4096 Sep 22 2011 stage
-rwxr-xr-x. 1 grid oinstall 4326 Sep 2 2011 welcome.html
[grid@oraclegrid grid]$
[grid@oraclegrid grid]$
[grid@oraclegrid grid]$ ./runInstaller

install_grid1

install_grid2

install_grid3

install_grid4

install_grid5install_grid6install_grid7install_grid8install_grid9

install_grid10install_grid11install_grid12install_grid13install_grid14install_grid15

 

[root@oraclegrid ~]# ps -ef | grep grid
root 5319 9579 0 16:01 pts/1 00:00:00 su – grid
grid 5320 5319 0 16:01 pts/1 00:00:00 -bash
grid 8890 1 0 16:28 ? 00:00:04 /u01/app/11.2.0/grid/bin/ohasd.bin reboot
grid 9047 1 0 16:28 ? 00:00:00 /u01/app/11.2.0/grid/bin/oraagent.bin
grid 9061 1 0 16:28 ? 00:00:00 /u01/app/11.2.0/grid/bin/evmd.bin
grid 9101 9061 0 16:28 ? 00:00:00 /u01/app/11.2.0/grid/bin/evmlogger.bin -o /u01/app/11.2.0/grid/evm/log/evmlogger.info -l /u01/app/11.2.0/grid/evm/log/evmlogger.log
grid 9447 1 0 16:32 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid 9640 1 0 16:32 ? 00:00:00 /u01/app/11.2.0/grid/bin/cssdagent
grid 9666 1 0 16:32 ? 00:00:00 /u01/app/11.2.0/grid/bin/ocssd.bin
grid 9854 1 0 16:32 ? 00:00:00 asm_pmon_+ASM
grid 9856 1 0 16:32 ? 00:00:00 asm_psp0_+ASM
grid 9858 1 5 16:32 ? 00:00:09 asm_vktm_+ASM
grid 9862 1 0 16:32 ? 00:00:00 asm_gen0_+ASM
grid 9864 1 0 16:32 ? 00:00:00 asm_diag_+ASM
grid 9866 1 0 16:32 ? 00:00:00 asm_dia0_+ASM
grid 9868 1 0 16:32 ? 00:00:00 asm_mman_+ASM
grid 9870 1 0 16:32 ? 00:00:00 asm_dbw0_+ASM
grid 9872 1 0 16:32 ? 00:00:00 asm_lgwr_+ASM
grid 9874 1 0 16:32 ? 00:00:00 asm_ckpt_+ASM
grid 9876 1 0 16:32 ? 00:00:00 asm_smon_+ASM
grid 9878 1 0 16:32 ? 00:00:00 asm_rbal_+ASM
grid 9880 1 0 16:32 ? 00:00:00 asm_gmon_+ASM
grid 9882 1 0 16:32 ? 00:00:00 asm_mmon_+ASM
grid 9884 1 0 16:32 ? 00:00:00 asm_mmnl_+ASM
grid 9886 1 0 16:32 ? 00:00:00 oracle+ASM (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
root 9923 8569 0 16:36 pts/2 00:00:00 grep grid
[root@oraclegrid ~]#

 

7. Criando o ASM grupo para utilização no Banco de dados

Nos iremos agora configurar o ASM disk group para instalação do Oracle Database (+DATA e +FRA)

Novamente conectado no usuário grid execute asmca (ASM Configuration Assistant)

asmca

asmca1asmca2asmca3asmca4asmca5asmca7

 

8. Instalando o software Oracle database e criar a instancia database escolhendo o ASM disk para armazenamento de dados.

Conectado com o usuário oracle vá na pasta onde conta o binário de instalação, lembrando que o arquivo zip e o diretório descompactado devem está apto para acesso pelo usuário oracle.
-rw-r–r–. 1 oracle oinstall 1358454646 Mar 2 21:04 p10404530_112030_Linux-x86-64_1of7.zip
-rw-r–r–. 1 oracle oinstall 1142195302 Mar 2 21:07 p10404530_112030_Linux-x86-64_2of7.zip

drwxr-xr-x. 8 oracle oinstall       4096 Sep 22  2011 database

cd database

[oracle@oraclegrid database]$
[oracle@oraclegrid database]$ ls -l
total 64
drwxr-xr-x. 12 oracle oinstall 4096 Sep 19 2011 doc
drwxr-xr-x. 4 oracle oinstall 4096 Sep 22 2011 install
-rwxr-xr-x. 1 oracle oinstall 28122 Sep 22 2011 readme.html
drwxr-xr-x. 2 oracle oinstall 4096 Sep 22 2011 response
drwxr-xr-x. 2 oracle oinstall 4096 Sep 22 2011 rpm
-rwxr-xr-x. 1 oracle oinstall 3226 Sep 22 2011 runInstaller
drwxr-xr-x. 2 oracle oinstall 4096 Sep 22 2011 sshsetup
drwxr-xr-x. 14 oracle oinstall 4096 Sep 22 2011 stage
-rwxr-xr-x. 1 oracle oinstall 5466 Aug 23 2011 welcome.html
[oracle@oraclegrid database]$
[oracle@oraclegrid database]$ ./runInstaller

db_install_grid1db_install_grid2db_install_grid3db_install_grid4db_install_grid5db_install_grid6db_install_grid7db_install_grid8db_install_grid9db_install_grid10db_install_grid11db_install_grid12db_install_grid13db_install_grid14db_install_grid15

 

# Criando o Database com dbca

Conectado como usuário oracle execute o dbca

db1db2db3db4db5db6db7db8db8_1db9db10db11db12db13db14db15db16db17db18db19db20db21db22db23

 

 

 

 

Criando um recovery Catalog no RMAN

O primeiro passo para se criar um recovery catalog no Rman é criar um usuário o qual vai residir todos os objetos que compõem o catalog do rman, views, pacotes entres outros…

# Caso não possua uma tablespace já criada para armazenar os dados do usuário crie uma.

create tablespace tbs_catalog datafile ‘/u01/app/oracle/oradata/rman/tbs_catalog.dbf’ size 130M autoextend on next 50M maxsize 1G;

# Criando o usuário:

create user rcat_user identified by rcat_password default tablespace tbs_catalog temporary tablespace temp;

 

# Grants do usuário: (connect / resource / recovery_catalog_owner)

grant connect, resource, recovery_catalog_owner to rcat_user;

grant unlimited tablespace to rcat_user;

 

# Efetuando a criação do catalog no usuário recém criado:

Conecte no usuário recém criado através do executável do rman.

rman catalog rcat_user/rcat_password@dbrman

depois execute create catalog;

 

[oracle@RMAN:~]$ rman catalog rcat_user/rcat_password@dbrman

Recovery Manager: Release 11.2.0.3.0 – Production on Mon Jan 25 11:23:27 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> create catalog;

recovery catalog created
Com o recovery catalog criado já podemos registrar banco de dados no mesmo.

Para registrar o banco de dados no catalog é necessário efetuar um conexão tanto no seu banco target (banco alvo que vai sofre backup) como no seu catalog ( recovery catalog criado)

Ao conectar devemos executar o seguinte comando:   register database;

 

Vou mostrar 2 formas de conectar para efetuar o registro.

Primeiro conectando de um servidor onde consta instalado o banco de dados target, necessário que exista um nome de serviço criado no tnsnames.ora para o banco de dados do rman.

Conectado no banco target:

rman target / catalog rcat_user/rcat_password@dbrman

Segundo é conectando de uma servidor que consta o usuário que possui o catalog, necessário que tenha criado um serviço que a ponta para o banco de dados target.

Conectado no servidor do banco do catalog

rman target sys/senhasys@db11g catalog rcat_user/rcat_password@dbrman

 

Usaremos o primeiro exemplo, estando conectando no servidor do banco de dados db11g.

[oracle@oraclelnx6 ~]$ rman target / catalog rcat_user/rcat_password@dbrman

Recovery Manager: Release 11.2.0.3.0 – Production on Mon Jan 25 11:43:07 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB11G (DBID=340229516)
connected to recovery catalog database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

RMAN>

 

Verificando se o banco está registrado com o comando list incarnation;

 

RMAN> list incarnation;

List of Database Incarnations
DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time
——- ——- ——– —————- — ———- ———-
1       2       DB11G    340229516        CURRENT 1          01-FEB-15

 

ou conectando diretamente no usuário que possui o catalog criado e consultando a view RC_DATABASE.

ex:

[oracle@oraclelnx6 ~]$ sqlplus rcat_user/rcat_password@dbrman

SQL*Plus: Release 11.2.0.3.0 Production on Mon Jan 25 11:49:30 2016

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from RC_DATABASE;

DB_KEY  DBINC_KEY       DBID NAME     RESETLOGS_CHANGE# RESETLOGS
———- ———- ———- ——– —————– ———
1          2  340229516 DB11G                    1 01-FEB-15

 

A partir desse momento já podemos efetuar backup do banco de dados target, utilizando o catalog como repositório de seus metadados.

Importante:

O Banco de Dados target deve está em estado de ARCHIVELOG, senão você vai receber a seguinte mensagem de erro quanto tentar efetuar qualquer tipo de backup utilizando o rman.

RMAN> backup as backupset database archivelog all;

Starting backup at 25-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=23 device type=DISK
specification does not match any archived log in the repository
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 01/25/2016 11:54:55
ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
continuing other job steps, job failed will not be re-run
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 25-JAN-16
channel ORA_DISK_1: finished piece 1 at 25-JAN-16
piece handle=/u01/app/oracle/fast_recovery_area/DB11G/backupset/2016_01_25/o1_mf_ncsnf_TAG20160125T115455_cbdb9kbg_.bkp tag=TAG20160125T115455 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================

RMAN-03009: failure of backup command on ORA_DISK_1 channel at 01/25/2016 11:54:55
ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
 

 

Backup realização com sucesso.

[oracle@RMAN:~]$ rman target sys/oracle@db11g catalog rcat_user/rcat_password@dbrman

Recovery Manager: Release 11.2.0.3.0 – Production on Mon Jan 25 12:02:40 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB11G (DBID=340229516)
connected to recovery catalog database

RMAN> backup as backupset database archivelog all;

Starting backup at 25-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=38 device type=DISK
specification does not match any archived log in the repository
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00003 name=/u01/app/oracle/oradata/DB11G/undotbs01.dbf
input datafile file number=00001 name=/u01/app/oracle/oradata/DB11G/system01.dbf
input datafile file number=00002 name=/u01/app/oracle/oradata/DB11G/sysaux01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/DB11G/users01.dbf
channel ORA_DISK_1: starting piece 1 at 25-JAN-16
channel ORA_DISK_1: finished piece 1 at 25-JAN-16
piece handle=/u01/app/oracle/fast_recovery_area/DB11G/backupset/2016_01_25/o1_mf_nnndf_TAG20160125T120255_cbdbrhx6_.bkp tag=TAG20160125T120255 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 25-JAN-16
channel ORA_DISK_1: finished piece 1 at 25-JAN-16
piece handle=/u01/app/oracle/fast_recovery_area/DB11G/backupset/2016_01_25/o1_mf_ncsnf_TAG20160125T120255_cbdbsy3m_.bkp tag=TAG20160125T120255 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 25-JAN-16

RMAN>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Os números de 2015

Os duendes de estatísticas do WordPress.com prepararam um relatório para o ano de 2015 deste blog.

Aqui está um resumo:

A sala de concertos em Sydney, Opera House tem lugar para 2.700 pessoas. Este blog foi visto por cerca de 9.700 vezes em 2015. Se fosse um show na Opera House, levaria cerca de 4 shows lotados para que muitas pessoas pudessem vê-lo.

Clique aqui para ver o relatório completo

Instalação do Oracle 12c sobre o Oracle Linux 6

Bom, o procedimento de instalação abaixo pode ser aplicado em qualquer update do Oracle Linux 6, a minha versão é Oracle Linux 6.6, como estarei explicando dois tipos de instalação ambas utilizando yum, caso você efetue a instalação através de biblioteca rpm aconselho você buscar estas bibliotecas dentro dentro da mídia de Dvd caso possua uma.

Descrição do Ambiente

Versão SO  =>  Oracle Linux 6.6 64-bit

Hostname  – ora12c

Ip host – 192.168.0.17

Versão Database =>  Oracle 12c 12.1.0.2 64-bit

Este artigo descreve a instalação do Oracle database 12c release 1 (12.1) (64-bit) sobre o Oracle Linux 6.6 (64-bit). O artigo é baseado sobre uma instalação servidora com um miníno de 2G swap, com SELinux setado para permissive e o firewall desabilitado. Os seguintes grupos de pacotes foram incluídos nesta instalação.

Na instalação do SO foi feita a instalação dos seguintes grupos.

  • Base System > Base
  • Base System > Compatibility libraries
  • Base System > Hardware monitoring utilities
  • Base System > Large Systems Performance
  • Base System > Network file system client
  • Base System > Performance Tools
  • Base System > Perl Support
  • Servers > Server Platform
  • Servers > System administration tools
  • Desktops > Desktop
  • Desktops > Desktop Platform
  • Desktops > Fonts
  • Desktops > General Purpose Desktop
  • Desktops > Graphical Administration Tools
  • Desktops > Input Methods
  • Desktops > X Window System
  • Applications > Internet Browser
  • Development > Additional Development
  • Development > Development Tools

Um exemplo desta instalação você pode acompanhar aqui.

Download do Software Oracle

Para baixar os arquivo do database aqui está um link direto para os arquivos clique aqui

Oracle Database 12c Release 1 (12.1.0.2.0) for Linux x86-64

Download linuxamd64_12c_database_1of2.zip (1,673,544,724 bytes) (cksum – 839029806)
Download linuxamd64_12c_database_2of2.zip (1,014,530,602 bytes) (cksum – 1187131466)

Ao baixar os arquivos você deve descompacta-los em um único diretório chamado database, eu aconselho a você somente descompactar o arquivo quando possuir no servidor o usuário oracle, onde o mesmo deve ser dono deste arquivo.

unzip linuxamd64_12102_database_1of2.zip
unzip linuxamd64_12102_database_2of2.zip

Ao descompactar o arquivo vai existir uma pasta chamada database

Tela1

Arquivo Host

O arquivo “/etc/hosts” deve conter o nome completo para o servidor .

<IP-address>  <fully-qualified-machine-name>  <machine-name>

Exemplo.

127.0.0.1       localhost.localdomain  localhost
192.168.0.17    ora12c.localdomain     ora12c

A partir do Oracle 11g podemos utilizar dois tipos de instalação, uma instalação Automática e uma instalação Manual, estarei utilizando a instalação Automática, mais abaixo estarei passando as informações da instalação manual como se estivesse utilizando-a.

Pré-requisito para instalação Oracle

*************************************

Instalação Automática

*************************************

Nesta instalação automática podemos utilizar um novo pacote que a Oracle disponibilizou a partir do Oracle 11g, para versão Oracle 12c este pacote chamasse “oracle-rdbms-server-12cR1-preinstall” , o procedimento que estariamos fazendo manualmente este pacote já faz, ou seja, as configurações do SO para instalarmos o Oracle, lembrando que devemos fazer um pequeno ajuste para o que queremos depois de sua execução, já que o arquivo se baseia nas configurações dele. Um exemplo é o parâmetro shmmax, se eu quero um tamanho o arquivo pode setar outro.

Para mais informações sobre este novo pacote clique aqui.

O Oracle Linux Yum Server já é pré-configurado na sua instalação Linux caso você não tenha configurado no seu SO segue o link para informações dos repositórios http://public-yum.oracle.com/.

Efetuando a instalação do pacote

conectado como root

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

Modificação que efetuei no meu caso após execução da linha acima.

  • dentro do arquivo /etc/sysctl.conf

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

Como estarei reservando para o Oracle 1Gb de memória então modificarei o kernel.shmmax para um 1Gb e pouco

kernel.shmmax = 1444167680

Já o kernel.shmall estava com 4Gb coloquei para 500Mb em muitas instalações você vera para este parâmetro 1Gb pode deixar default se quiser.

kernel.shmall = 536870912

  • Alterar o arquivo /etc/group conforme abaixo

Alterar a linha
oper:x:54323:

para
oper:x:54323:oracle

*****************************************

Na Instalação Manual

*****************************************

O procedimento que foi efetuado na instalação automática agora podemos vê-los passo a passo.

Se você não usou o pacote “oracle-rdbms-server-12cR1-preinstall” para configurar os pré-requisitos, você deverá configurar manualmente os seguintes passos.

1 – Adicionar ou alterar os seguintes parâmetro no arquivo “/etc/sysctl.conf”

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104    ----- você deve alterar conforme ao tamanho que deseja
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

Neste passo devemos ter atenção no parâmetro kernel.shmmax o qual se relaciona ao tamanho da memória que queremos reservar para o Oracle, se eu tenho um servidor com 3Gb de memória e pretendo utilizar no Oracle 1 a 1,5Gb na configuração automática tenho que dar atenção a este parâmetro.

Em seguida execute o seguinte comando para a configuração entrar em vigor no kernel.

/sbin/sysctl -p

2 – Adicione a seguinte linha no arquivo “/etc/security/limits.conf

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768

3 – Instale os seguintes pacotes no SO se eles ainda não está presentes

# From Public Yum or ULN
yum install binutils -y
yum install compat-libcap1 -y
yum install compat-libstdc++-33 -y
yum install compat-libstdc++-33.i686 -y
yum install gcc -y
yum install gcc-c++ -y
yum install glibc -y
yum install glibc.i686 -y
yum install glibc-devel -y
yum install glibc-devel.i686 -y
yum install ksh -y
yum install libgcc -y
yum install libgcc.i686 -y
yum install libstdc++ -y
yum install libstdc++.i686 -y
yum install libstdc++-devel -y
yum install libstdc++-devel.i686 -y
yum install libaio -y
yum install libaio.i686 -y
yum install libaio-devel -y
yum install libaio-devel.i686 -y
yum install libXext -y
yum install libXext.i686 -y
yum install libXtst -y
yum install libXtst.i686 -y
yum install libX11 -y
yum install libX11.i686 -y
yum install libXau -y
yum install libXau.i686 -y
yum install libxcb -y
yum install libxcb.i686 -y
yum install libXi -y
yum install libXi.i686 -y
yum install make -y
yum install sysstat -y
yum install unixODBC -y
yum install unixODBC-devel -y

4 – Crie os novos grupos e o usuários

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
#groupadd -g 54324 backupdba
#groupadd -g 54325 dgdba
#groupadd -g 54326 kmdba
#groupadd -g 54327 asmdba
#groupadd -g 54328 asmoper
#groupadd -g 54329 asmadmin

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

Caso precise dos outros usuários descomente as linhas.

====================================================================

Instalação Adicional que deve ser feita tanto automático como manual

====================================================================

O seguintes procedimentos devem ser feitos tanto na instalação Manual como na Automática.

1 – Setar a senha para o usuário Oracle

passwd oracle

2 – Efetuar a alteração no arquivo “/etc/security/limits.d/90-nproc.conf” conforme abaixo – Veja MOS Note [ID 1487773.1]

# Change this
*          soft    nproc    1024

# To this
* - nproc 16384

3 – Setar o Linux Secure para permissive editando o arquivo “/etc/selinux/config”, certificasse que o parâmetro SELINUX esta setado conforme abaixo.

SELINUX=permissive

Uma vez feita a mudança, restart o servidor e execute o seguinte comando.

# setenforce Permissive

4 – Certifique que o Firewall esteja desabilitado

-- ipv4

# service iptables stop
# chkconfig iptables off

-- ipv6

# service ip6tables stop
# chkconfig ip6tables off

5 – Crie o diretório para instalação do software oracle e altere sua permissão para o usuário oracle

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

Colocar o ponto de montagem abaixo do root “/” é tipicamente um má ideia, é aconselhável criar um ponto de montagem reservado para o software oracle, para um instalação real “/” deve ser reservado para o SO.

Trabalhando de console, ou usando SSH, logue com root e emita o seguinte comando.

xhost +<machine-name>

6 – Adicione a seguinte linha no final do arquivo “/home/oracle/.bash_profile

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

export ORACLE_HOSTNAME=ora12c.localdomain
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.1.0.2/db_1
export ORACLE_SID=cdb1

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

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

************************************************************************************************

Instalação do Oracle e criação da base de dados

*************************************************************************************************

Logue como usuário oracle. Se você está usando um emulador X server então set a variável DISPLAY no ambiente.

DISPLAY=<machine-name>:0.0; export DISPLAY

Caso você não possua uma ferramenta para conectar no servidor e também um emulador X server eu indicaria o MobaXterm que possui os dois na mesma ferramenta, MobaXterm clique aqui.

Se eu estivesse utilizando o MobaXterm bastaria conectar no servidor como oracle e executar o ./runinstaller que a tela de instalação apareceria na minha máquina.

No meu caso eu utilizo na instalação abaixo o F-Secure SSH Client, ele não possui um emulador X Server, então eu faço o seguinte, eu abro o MobaXterm minimizo, conecto no servidor com o F-Secure SSH Client com oracle e seto a variável DISPLAY para o ip da minha máquina.

DISPLAY=<ip-machine-name>:0.0; export DISPLAY

Inicialize o Oracle Universal Installer (OUI) emitindo o seguinte comando dentro do diretório database.

./runInstaller

Tela2

Desmarque a opção I wish to receive security.… porque eu não quero receber updates de segurança via suporte Oracle, o qual deve possuir uma licença paga para o mesmo,  clique em Next

Tela3

Clique em Yes para confirmar

Tela4

Escolha Install database software only, quero somente instalar o software oracle primeiro, clique em Next

Tela5

Escolha a opção Single instance database installation,  clique em Next

As outras opções são para Oracle Rac.

Tela6

Selecione a linguagem, English e clique em Next

Tela7

Escolha a opção Enterprise Edition e clique em Next

Tela8

Caso você tenha configurado corretamente as variáveis no arquivo .bash_profile, vai aparecer conforme abaixo, clique em Next

Tela9

A tela abaixo informa o local onde vai ser criado o arquivo oraInventory do Oracle, clique em Next

Tela10

Será mostrado a relação de cada grupo que será feita a instalação, clique em Next

Tela11

Será feita um check dos pré-requisitos da instalação

Tela12

Abaixo será mostrado um resumo do que vai ser instalado, clique em Install

Tela13

Será feita a instalação aguarde

Tela14

No meio da instalação vai aparecer a tela abaixo,  devemos abrir um novo sessão conectar como root e executar as linhas abaixo.

Tela15 Tela16

Depois de executada as linhas, clique em ok, e depois no close para sair da instalação do software oracle.

O próximo passo, vamos criar a base de dados. Como estou efetuando a criação da base de dados depois da instalação do software oracle e vou querer instalar o Enterprise Manager Database Express é necessário efetuar a criação do LISTENER antes da criação do Banco de dados. Caso eu não instalasse o Database Express eu poderia criar o Listener no final da criação do Banco de dados, conforme estarei efetuando com o tnsnames.ora e sqlnet.ora.

Criação do LISTENER

Conectado como oracle, estarei chamado o netca – network configuration assistent, observe que devemos setar a variável DISPLAY

netca

Tela17

Selecione a opção Listener configuration e clique em Next

Tela18

Add e clique em Next

ATela19

Deixe LISTENER e clique em Next

Tela20

Selecione TCP e clique em Next

Tela21

A porta estaremos utilizando a default 1521 e clique em Next

Tela22

Selecione No e clique em Next

Tela23

Clique em Next novamente para completar

Tela24

Clique em Finish para sair

Tela25

Para criação do banco de dados estarei utilizando a ferramente dbca, database configuration assistent

dbca

Tela26

Escolha a opcção – Create Database e clique em Next

Tela27

Escolha a opção Advanced Mode – Modo avançando, onde estarei passando minha configuração, clique em Next

Tela28

Selecione a opção Custom Database – para customizar o database, clique em Next

Tela29

Estarei utilizando o novo recurso do Oracle, o multitenant – no Global Database Name e SID estarei setando o nome para  CDB1.

Marque a opção Create As Container Database, para utilizar este novo recurso do Oracle. Caso eu quisesse criar um banco de dados normal igual as versões anteriores do 12c eu não marcaria está opção.

Marcando está opção eu estarei criado um super database  CDB1

Também estarei criado dentro do CDB1 um sub database  ( pluggabe database)  – PDB1

Marque a opção Create a Container Database with on or more PDBs.

PS: O multitenant do oracle eu um novo recurso implantado no 12c, onde pode ser utilizado nas versões Enterprise, Standard Edition e Standard Editon one. Só que deve possuir um licença a parte para sua utilização. Sem está licença só podemos utilizar 1 PDB.

Depois da configuração clique em Next

Tela30

Marque a opção Configure Enterprise …. e deixa a porta default 5500 para instalação do Enterprise Manager Database Express – clique em Next

Tela31

Aqui estarei setando uma única senha para todos os usuários, mais é aconselhável colocar senha diferentes para os usuários SYS, SYSTEM E PDBADMIN (relacionado ao pluggable  database)

Clique em Next

Tela32

Como eu havia criado o LISTENER, ele será identificado , clique em Next

Tela33

Configure o local dos arquivos do database e especifique a localização e o tamanho Fast recovery area, estarei deixando o default, clique em Next

Tela34

A próxima tela mostra os componentes que serão instalado com o Enterprise, clique em Next

Tela35

Eu não estarei utilizando o Database Vault e o Label Security, desmarque a opção e clique em Next

Tela36

Configurando o tamanho da memória para 1G, usando o gerenciamento automático de memória, lembrando que está opção utiliza os parâmentros memory_target e memory_max_target, onde a mesma já inclui o gerenciamento automático da PGA.

Tela37

Configurando o tamanho do bloco oracle e o número de processos, deixarei o default

Tela38

Configurando o character set do database e o National character set, deixe o default

Tela39

Configurando o modo de conexão, deixe o default Dedicated server mode

Tela40

Abaixo mostra alguns parâmetros da opção All Initializaion parameters, as opções que serão setadas no arquivo spfile do database.

Na versão 11g foi incluído um parâmetro chamado sec_case_sensitive_logon, onde possibilitava criar senha oracle com diferenciação de maiúscula e minúscula, acho que este parâmetro não fez muito sucesso ele foi excluído do oracle 12c.

Na instalação 11g neste momento eu setava este parâmetro para FALSE.

Clique em close para fechar este tela.

Tela40_1

Nesta tela está marcada somente Create Database, eu gosto de marca as outras para criar um template e também os scripts de criação da base para um instalação manual caso necessário, você não precisa marcar estas opções, somente a opção Create Database e clique em Next

Tela41

Vai ser mostrado um tela de resumo de tudo que vai ser feito na criação do banco de dados, clique em Finish

Tela42

Será feita a criação da base de dados, aguarde

Tela43

Ao termino da criação do banco de dados vai ser mostrado a tela baixo com informações do database. Clique em Finish

Tela44

Caso queria alterar a senha de algum usuário antes de fechar, a opção Password Management permite fazer este procedimento, no meu caso eu deixa como está, e só mostrei a tela abaixo por motivo de informação.

Tela45

Bom, para finalizar vamos agora criar o arquivo de tnsnames.ora e o sqlnet.ora.

Lembrando que devemos setar a variável DISPLAY.

Criando o sqlnet.ora

netca

Tela46

Selecione a opção Naming Methods configuration, clique em Next

Tela47

Selecione a opção Local Naming e Easy Connect Naming e clique em Next

Tela48

Clique em Next para completar a configuração e criação do sqlnet.ora

Tela49

Criando o tnsnames.ora e um serviço

Selecione a opção Local Net Service Name configuration e clique em Next

Tela50

Add e clique em Next

Tela51

Aqui devemos setar o nome do SID do banco de dados, e clique em Next

Tela52

Escolha TCP e clique em Next

Tela53

No Host name, digite o nome do servidor do banco de dados e clique em Next

Tela54

Escolha o opção No, do not test e clique em Next

Tela55

Aqui vamos setar um apelido para o nome de serviço que ficará dentro do tnsnames.ora e clique em Next

Tela56

Selecione No e clique em Next

Tela57

Para completar clique em Next novamente.

Tela58

Clique em Finish para fechara tela.

Tela59

Para efetuar um teste no novo serviço criado dentro do tnsnames.ora podemos utilizar o tnsping.

tnsping dbcdb1 10

Caso não retorne ok , está com problema na configuração do serviço e deve ser corrigido.

Tela60

Conectando na base de dados utilizando o nome do serviço dbcdb1

Tela60_1

Conectando como sysdba

Tela61

Conectando no Enterprise Manager Database Express

Tela62

Tela63

Tudo ok…

Arquitetura Oracle ( Diagrama)

Para efeito de conhecimento e comparação Arquitetura do Oracle

Oracle Database 10g

Oracle_10G_Architecture

 

Oracle Database 11g

Oracle_11g_architecture Oracle_11g_architecture_2

 

Oracle Database 12c

 

Oracle_12c_architecture

Multi-Tenant Architecture Diagram

Error ora-01031 insufficient privileges / erro ora-01031 privilégios insuficientes – (Windows) Como solucionar

Estarei solucionado um tipo de erro comum que em vez em quando ocorre em um Servidor de Banco de Dados sobre uma plataforma Windows, estou falando sobre o erro ora-01031 privilégios insuficiente.

Várias são as formas de esse erro ocorrer, estarei falando sobre um delas.

Quando efetuamos a criação de um Banco de dados Oracle através da ferramenta dbca em um Servidor Windows, o próprio dbca cria um grupo no Windows chamado ora_dba e nele é adicionado o usuário que está criando o Banco de Dados.

Quando efetuamos a criação do Banco de Dados através de um script devemos adicionar o usuário que esta efetuando a criação do Banco de dados neste grupo.

O grupo ora_dba consta os usuário que terão acesso a base de dados com o privilégio sysdba, quando o usuário que está acessando o Banco de dados com a permissão sysdba não consta neste grupo recebe o  erro ora-01031 privilégios insuficiente.

Para exemplificar está ocorrência de erro, vou simular duas formas desse erro ocorrer.

Dados do meu ambiente:

1 – Servidor de Banco de Dados – hostname => WS2008-ORA11 – username: Administrator

1 – Servidor de Domínio – nome do domínio  => MR.local   username: Administrador

Para diferenciar os usuários pode ser visto que um está em inglês e outro em português, ou seja, servidor de banco de dados está instalado em inglês e o servidor de domínio está em português, isso nos ajudara a entender melhor.

Lembrando que o usuário que efetua a criação da base será adicionado no grupo ora_dba automaticamente, após a sua criação utilizando o dbca. Criação da base via script deve ser adicionado manualmente.

# Cenário 1

Neste primeiro cenário eu possuo um Servidor de domínio MR.local já criado e adicionei ao domínio a máquina que vai ser o Servidor de Banco de dados depois criei a base de dados neste servidor.

Primeira ocorrência de erro ora-01031 privilégios insuficientes , estou tentando conectar na base de dados utilizando o usuário local do WS2008-ORA11 – Administator

Conecto no Servidor

Tela00

Tento efetuar um conexão na base de dados como sysdba

tela9

Como pode ser visto acima não consigo conectar, ocorrendo o erro.

Efetuando a correção

Abro o gerenciador de computador, vou em Iniciar (Start), Executar (Run) e digito um atalho => compmgmt.msc

Tela1

Vai ser aberto o gerenciador de computador, vai na opção Local Users and Groups (Usuários locais e Grupos) e na  pasta Groups (Grupos), na tela ao lado podemos encontrar o grupo ora_dba

tela2

Clicando duas vezes neste grupo podemos vê a tela abaixo, observe que o usuário do domínio MR\Administrador consta dentro do grupo, isso porque foi através desse usuário que foi feita a criação da base de dados.

Clique em Add (Adicionar) para adicionar o usuário local

tela3

Vá no Locations (Localização) para localizar o servidor da base

tela4

Necessário passar as credencias do domínio

tela5

Adicionei o servidor WS2008-ORA11 em locations e depois digitei o usuário Administrator abaixo ficando dessa forma

tela6

Dentro do grupo ficou da seguinte forma com o usuário local adicionado. clique ok.

tela7

Efetuando novamente a conexão.

Tela14

Tudo ok agora.

# Cenário 2

Eu tenho um Servidor de Banco de Dados WS2008-ORA11 com uma base já criada  e depois foi adicionado ao Servidor de Domínio.

Neste necessário vou me conectar com o usuário do Domínio MR\Administrador para me conectar na base de dados.

Conectando no Servidor

Tela0

Tentando me conectar na base de dados como sysdba

tela9
Como pode ser visto acima não consigo conectar, ocorrendo o erro.

Efetuando a correção

Abro o gerenciador de computador, vou em Iniciar (Start), Executar (Run) e digito um atalho => compmgmt.msc

Tela1

Vai ser aberto o gerenciador de computador, vai na opção Local Users and Groups (Usuários locais e Grupos) e na  pasta Groups (Grupos), na tela ao lado podemos encontrar o grupo ora_dba

tela2

Clicando duas vezes neste grupo podemos vê a tela abaixo, observe que o usuário local Administrator consta dentro do grupo, isso porque foi através desse usuário que foi feita a criação da base de dados.

Clique em Add (Adicionar) para adicionar o usuário do domínio

Tela11

Como a máquina foi adicionado ao domínio, em location já consta o nome do domínio mr.local

Adicione somente o nome do usuário abaixo e clique  ok

Tela12

O usuário do domínio MR\Administrador foi adicionado conforme pode vê abaixo

Tela13

Efetuamos uma nova tentativa de conexão.

Tela14

A conexão agora está ok.

Obs:  Este tipo de erro ora-01031 privilégios insuficientes  pode ocorrer em diversas situações, eu comentei sobre uma situação que ocorre frequentemente quando precisamos acessar o servidor de banco de dados e não podemos acessar com o usuário de domínio Administrador, neste acaso usamos o usuário local.

Tem cenário que também o usuário que criou a base de dados foi um usuário comum (oracle) que foi adicionado ao grupo administrador do servidor e não um usuário Administrador diretamente.

Um outro cenário que pode ser visto sobre este erro também tenho postado clique aqui.

Promovendo um Servidor a Controlador de Dominio

Para que possamos chegar ao mais próximo de um ambiente corporativo, é muito interessante possuir um servidor com um controlador de domínio instalado. Em meu ambiente possuo o VirtualBox instalado e nele consta várias máquinas criadas onde uma delas será meu servidor de domínio. Além disso também possuo uma máquina Cliente com Windows 7, para que eu possa simular um usuário do dia dia… Cliente / Servidor.

Abaixo segue os passos necessários para promover um Servidor com Windows 2008 R2 instalado, para Controlador de Domínio. Caso queira acompanhar a instalação do Windows 7 clique aquiWindows 2008 R2 clique aqui.

Primeiro devemos configurar o Dns da placa de rede igual ao ip da placa de rede do Servidor Windows 2008, isso porque não possuímos na rede um Servidor Dns, então forçaremos a criação de um, no mesmo servidor do controlador de domínio.

Tela0

Depois vá no menu Iniciar, no meu caso como está inglês Start e vá na opção executar (Run)

Digite dcpromo e clique em Ok

Tela1

Tela2

Aparecerá a seguinte tela de boas-vindas, marque a opção Usar a instalalção em modo avançado e clique em Avançar

Tela3

A próxima tela vai esta falando sobre a compatibilidade entre as versões Windows 2008 e Windows 2008 R2, clique em Avançar

Tela4

Como vamos está criando um domínio pela primeira vez, sem ter um outro existente na rede marque a opção Criar um novo domínio em uma nova floresta e clique em Avançar

Tela5

Na próxima tela é onde vamos está dando nome ao nosso domínio, estarei colocando mr.local e depois Avançar

Tela6

Na tela seguinte vai mostra o nome do Netbios que versões anteriores do Windows vão utilizar para identificar o novo domínio, deixa como está e clique em Avançar

Tela7

A próxima tela setamos o nível de funcionalidade da foresta, escolha a versão do Windows onde está sendo promovido o domínio, Windows Server 2008 R2 e clique em Avançar

Tela8

Tela9

Como esta máquina é o primeiro controlador de domínio a opção Catálogo global já vai está marcada, sem opção de escolha, somente a opção DNS Server tem opção de escolha, deixa-a marcada e clique em Avançar.

Como não temos servidor DNS na rede vai ser criado um DNS Server no próprio Servidor de domínio. Por isso é muito importante na configuração ip da placa de rede, configurar o dns com o mesmo ip do servidor.

Tela10

Clique em sim para confirmar a criação do Dns Server na máquina

Tela11

A próxima tela podemos setar o diretório para conter o database do controlador de domínio, log e SYSVOL deixe como está é clique em Avançar

Tela12

A próxima tela é onde setamos uma senha forte para manutenção e restore do controlador de domínio quando necessário, essa senha é diferente da senha do administrador do domínio, tenha atenção e não esqueça esta senha., clique em Avançar

Tela13

A próxima tela nos passa um resumo de toda configuração, e também nos permite salvar em um arquivo para execução em modo texto caso necessário, clique em Avançar

Tela14

O controlador de domínio será criado, aguarde…

Tela15

Será informado que a criação do Controlador de domínio completou com sucesso, clique em Terminar (Finish).

Tela16

Clique em Reiniciar agora (Restart Now), para reinicializar o Windows e a configuração do controlador de domínio entrar em vigor.

Tela17

Depois de inicializar sua tela de logon vai está da seguinte forma, basta logar que você já possui uma controlador de domínio, bastando criar os usuário e ingressar a máquina cliente para possuir um ambiente de treinamento corporativo.

tela18

Ingressando um computador com Windows 7 no domínio clique aqui.

Entendendo o OFA do Oracle 12c – Optimal Flexible Architecture

Todo DBA deve se familiarizar com a estrutura de diretório do Oracle, esse é um dos princípios básicos que devemos dominar. Uma hora ou outra esqueço de algum diretório e perco um tempinho para me lembrar, até mesmo quando estou num processo de remoção do software para uma nova instalação, visando está orientação, fiz uma pequena documentação sobre o assunto para uma rápida consulta quando necessário.

Apesar da figura abaixo está relacionada a versão 12c do Oracle, boa parte também se aplica a versão 10g e 11g.

OFA 12c

O OFA inclui alguns diretórios que devemos nos familiarizar:

  • Diretório Oracle Inventory
  • Diretório Oracle base (ORACLE_BASE)
  • Diretório Oracle home (ORACLE_HOME)
  • Diretório Oracle Network file  (TNS_ADMIN)
  • Diretório – Automatic Diagnostic Repository ( ADR_HOME)

Esses diretórios são discutidos abaixo:


Oracle Inventory Directory

O Oracle inventory directory armazena o inventário do software Oracle instalado no servidor. Esse diretório é requerido e esta compartilhado em torno de toda instalação do software oracle no servidor. Quando você instala o Oracle, o instalador checa para vê se existe uma estrutura OFA no formato /u[0-9]/app. Se tal diretório existe, então o instalador cria um Oracle inventory directory tal como:

/u01/app/oraInventory

Se a variável ORACLE_BASE está definida para o usuário oracle do sistema operacional, então o instalador cria um diretório para a localização do inventário Oracle.

ORACLE_BASE/../oraInventory

Por exemplo, se ORACLE_BASE está definido como /ora1/app/oracle, então o instalador define a localização do inventário Oracle como:

/ora01/app/oraInventory

Se o instalador não achar a estrutura de diretório OFA ou uma variável ORACLE_BASE, então a localização para o Oracle inventory é criada abaixo do diretório HOME do usuário oracle. Para instance, se o diretório HOME é /home/oracle, então a localização do Oracle inventory é

/home/oracle/oraInventory


Diretório Oracle Base

O diretório Oracle base é o diretório top para instalação do software Oracle. Você pode instalar uma ou mais versões do software Oracle neste diretório. O OFA para o diretório Oracle base é como seguinte:

/<mount_point>/app/<software_owner>

O nome típico para o mount point inclui /u01, /ora01, /oracle, e /oracle01. Você pode nomear o mount point de acordo com seu ambiente. Eu prefiro usar um nome para o mount point tal como /u01, /ora01. É curto, e quanto eu olho o mount point  sobre o servidor database, eu posso imediatamente dizer que está sendo usado por um Oracle database. Também, um mount point curto é mais fácil para usar quando você está consultando o dicionário de dados para reportar sobre aspecto físico do seu banco de dados e até mesmo para navegar entre os diretório no SO fica mais fácil.

O owner do software é tipicamente dado o nome de oracle. Este é o usuário do SO que você usa para instalar o software oracle. Abaixo segue um pequeno exemplo:

/u01/app/oracle


Diretório Oracle Home

O diretório Oracle home define a localização da instalação do software para um produto particular, tal como Oracle Database 12c ou Oracle Database 11g. Você deve instalar produtos diferentes ou releases diferentes de um produto em Oracle homes separados. A OFA recomenda o diretório Oracle home como o seguinte:

ORACLE_BASE/product/<version>/<install_name>

Na linha de código anterior, possíveis versões (version) podem ser 12.1.0.1 e 11.2.0.3>. Possíveis valores para install_name inclui db_1, devdb1, test2 e prod1. Aqui está um exemplo de um Oracle home para um database 12.1.

/u01/app/oracle/product/12.1.0.1/db_1

Alguns DBAs não gostam da string db_1 no final do diretório ORACLE_HOME e vê que não precisa disso. A razão para o db_1 é que você pode ter duas instalações separadas de binários: uma instalação desenvolvimento e uma instalação teste. Se você não precisa desta configuração em seu ambiente, sinta-se livre para deletar a string extra (db_1).


Diretório Oracle Network Files

Alguns utilitários Oracle usam o valor TNS_ADMIN para localizar o arquivo de configuração na rede. Este diretório e definido como ORACLE_HOME/network/admin. Tipicamente contém o tnsnames.ora e listener.ora arquivo Oracle net.


Automatic Diagnostic Repository

Iniciado com Oracle Database 11g, o diretório ADR_HOME especifica a localização dos arquivos de diagnostico relatados ao Oracle. Esses arquivos são cruciais para problemas de troubleshooting com o database Oracle. Esse diretório e definido como ORACLE_BASE/diag/rdbms/lower(db_unique_name)/instance_name. Você pode consultar a view V$PARAMETER para obter os valores de db_unique_name e instance_name.

Por exemplo, na próxima linha, o database unique name é o12c, e o instance name é O12C:

/u01/app/oracle/diag/rdbms/o12c/O12C

Você pode verificar a localização do diretório ADR_HOME via esta query:

select value from V$diag_info where name=’ADR Home’;

Criando uma replicação no Mysql – (Master – Slave)

No Mysql podemos criar vários tipos de replicação, sendo a mais comum a master/slave, onde toda escrita feita no servidor master será replicado para o servidor slave.

A principio estarei descrevendo os passos para a criação de uma replicação Master/Slave em outro post estarei falando sobre replicação Master/Master.

Obs: A Replicação no mysql não é um tipo de backup como alguns pensam, isso porque toda ocorrência que ocorrer no Servidor Master será aplicado no Servidor Slave, ou seja, as bases terão as informações iguais.
Se ocorrer um drop no Master também vai ocorrer no Slave, tenha muito cuidado com isso.
A replicação é muito útil quando se deseja fazer um balanceamento de carga (ex: consulta pesadas podem ser direcionadas para o Slave, relatórios, backups, teste de upgrade de versão, alta disponibilidade, coisas assim…)

Master-Slave_trabalha

Como a replicação trabalha:

No servidor Master devemos habilitar o log binário, onde será registrado todas as alterações no servidor.

1 – O Master grava as mudanças do dados no binary log (log binário) – essas gravações são chamadas binary log events (eventos do log binário)

2 – A replica (Slave) copia os eventos do log binário do Master para o relay log.

3 – A replica (Slave) acessa os eventos no relay log aplicando as mudanças em seus próprios dados.

A Primeira parte do processo é o binário log no master ( Eu vou mostrar como setar isso depois). Antes de cada transação terminar de completar de atualizar os dados no Master, o Master grava as mudanças no log binário ( binary log), o Mysql escreve as transações serialmente no binário log, mesmo se as declarações na transação forem intercaladas durante a execução.
Depois de escrever os eventos no log binário, o Master  diz ao storage engine commitar a transação.

O próximo passo é para a replica (Slave) copiar o log binário do Master em seu próprio hard drive (disco rigido) dentro do chamado relay log. Para iniciar, é startado um trabalho do thread, chamado de I/O slave thread. O I/O thread abri uma conexão cliente com o servidor Master, então inicia um especial processo de dump do log binário ( binlog dump process). Não existe correspondência de comando SQL.

O binlog dump process ler os eventos do log binário do Master. Quando não se tem eventos, este processo dorme (sleep) e espera (wait) por um sinal do Master quando existirem nos eventos. O I/O thread escreve os eventos no relay log da replica (Slave).

O SQL slave thread é a ultima parte do processo. Esse thread lê e reaplica os eventos do relay log, atualizando os dados da replica correlacionado com os dados do Master. Os eventos que o SQL thread executa pode opcionalmente ir dentro do log binário da própria replica, habilitando o binário log da replica e possibilitando replicar de uma replica também. Estarei comentando sobre isso.

Levantamento de informações do Servidores
Faça um levantamento dos servidores envolvidos, neste exemplo estarei fazendo uma replicação com dois servidores, mais nada impede de você criar em um único servidor com dois serviços de mysqld instalado para teste.

Os dois servidores devem possuir o mysql já instalado para a criação da replicação, caso queria saber como instalar o mysql, eu indico a instalação via arquivo binário é a que eu mais gosto, por termos mais controle onde cada arquivo está instalado. Você pode acompanhar no post que escrevi sobre este tipo de instalação aqui.

# Dados Servidor Master
hostame: server1
ip: 192.168.0.5

# Dados Servidor Slave
hostname: server2
ip: 192.168.0.10

Setando a Replicação:

1 – Setando uma conta para replicação

2 – Configurando o Master e o Slave (replica)

3 – Instruindo a replica conectar e replicar do master os eventos.

1 – Criando a conta de usuário para a Replicação

O I/O slave thread que executa na replica, faz um conexão tcp/ip no master. Isso significa que deve criar uma conta de usuário no master dando privilégios apropriados.

Aqui está como criar essa conta de usuário, nos vamos chamar o usuário de repl.

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@’192.168.0.%’ IDENTIFIED BY ‘p4ssword’;

Estarei criando essa conta de usuário em ambos os servidores no Master e no Slave, nota que eu restringi o uso de conta local (localhost) porque a conta de replicação deve ter habilidade de leitura em todas as mudança no servidor.

O usuário de replicação precisa somente do privilégio REPLICATION SLAVE sobre o master e não precisa realmente do privilégio REPLICATION CLIENT, então porque conceder este privilégio em ambos os servidores. Existe duas razões.

* A conta que usamos para monitorar e gerenciar a replicação precisa do privilégio REPLICATION CLIENT é mais fácil usar a mesma conta para ambos os propósitos.
* Se setarmos a conta no Master e depois clonar a replica disso, a replica vai esta setado conforme o master, nesse caso queremos a replica e o master com regras iguais.

2 – Configurando o Master e o Slave (replica)

O próximo passo é habilitar alguns parâmetros no Master, no qual se chama server1. Nós precisamos habilitar o log binário e especificar o  Server id, o id do servidor. Esses parâmetro você deve setar dentro do arquivo de configuração my.cnf.

### Master ###

# — Básico

log_bin = mysql-server1-bin
server_id = 10

# –Avançado

sync_binlog=1

Você deve setar explicitamente um valor para server_id porque o valor 1 é setado como valor default, caso você não configure um. Usando o valor 1 pode causar conflito com servidores que não tem o valor setado explicitamente.
É necessário restart o mysql para que o valor entre em vigor.

— Verificando se o o log binário está ativo
mysql> show master status;
+——————————–+————-+———————-+—————————+—————————–+
| File                            | Position | Binlog_Do_DB  | Binlog_Ignore_DB | Executed_Gtid_Set |
+———————————————–+———————-+—————————+—————————–+
| mysql-server1.000001  |         98 |                        |                            |                              |
+———————————————–+———————–+—————————+—————————-+
1 row in set (0.01 sec)

A replica vai precisar de uma configuração parecida com o do Master sendo também necessário restart o mysql depois.

### Slave ###

# — Básico

log_bin = mysql-server2-bin
server_id = 2
relay_log = /usr/local/mysql/data/mysql-server2-relay-bin

# — Avançado

log_slave_updates = 1
read_only = 1

Alguns parâmetros acima não são muito necessário, mais setei só para esclarecer uma dúvida.

Habilite o read_only somente se você deseja que o slave não aceite escrita, no me caso setei para 1 para não permitir escrita.
Habilite o log_slave_updates somente se o slave será Master de outro servidor.

Normalmente, o slave não loga em seu próprio log binário alguns updates que são recebidos do servidor master. Esta opção diz ao slave logar os updates feitos pelo SQL thread em seu próprio log binário. Para essa opção ter algum efeito, o slave deve também ser inicializado com a opção –log-bin habilitado.

É utilizando quando se deseja fazer a replica ser master de outra replica, conforme a figura abaixo.

Master-Slave_trabalha_replica_da_replica

3 – Instruindo a replica conectar e replicar do master os eventos.
Inicializando a Replica

O próximo passo é dizer a replica como conectar no Master e iniciar o replay do log binário. Você não deve usar o my.cnf para isso, use a declaração CHANGE MASTER TO . Com essa declaração você não vai precisar restart o mysql, esta opção deixa apontar para uma replica diferente no futuro caso desejado, sem a necessidade de parada de banco de dados.

CHANGE MASTER TO MASTER_HOST =’server1′,
MASTER_USER=’repl’,
MASTER_PASSWORD=’p4ssword’,
MASTER_PORT=3306,
MASTER_LOG_FILE=’mysql-server1.000001′,
MASTER_LOG_POS=0;

O parâmetro MASTER_LOG_POS é setado para 0 porque é o início do log. Depois que você executar isso, você poderá inspecionar a saída SHOW SLAVE STATUS e verificar se a replicação está ok.

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: server1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-server1.000001
Read_Master_Log_Pos: 164
Relay_Log_File: mysql-server2-relay-bin.000001
Relay_Log_Pos: 164
Relay_Master_Log_File: mysql-server1.000001
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1149
Relay_Log_Space: 1649
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 0
Master_UUID: 4d44af96-4cf1-11e5-9410-0800275171d0
Master_Info_File: /usr/local/mysql-5.6.26-linux-glibc2.5-x86_64/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

Os parâmetros Slave_IO_State, Slave_IO_Running e Slave_SQL_Running mostram que a replicação não está executando.

Para inicializar a replicação utilizar o comando  START SLAVE;

mysql> start slave;
Query OK, 0 rows affected (0.08 sec)

Verificando o status da replicação novamente:

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: server1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-server1.000002
Read_Master_Log_Pos: 120
Relay_Log_File: mysql-server2-relay-bin.000003
Relay_Log_Pos: 280
Relay_Master_Log_File: mysql-server1.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 618
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 10
Master_UUID: 4d44af96-4cf1-11e5-9410-0800275171d0
Master_Info_File: /usr/local/mysql-5.6.26-linux-glibc2.5-x86_64/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

mysql>

Verificando novamente os parâmetros Slave_IO_StateSlave_IO_Running e Slave_SQL_Running podemos reparar que a replicação agora está funcionado.

Slave_IO_State: Waiting for master to send event     — Está esperando o Master enviar novos eventos.
Slave_IO_Running: Yes                                           — Informa que o thread IO Slave está executando.
Slave_SQL_Running: Yes                                        — Informa que o thread SQL Slave está executando.
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it  —- informa que o thread SQL Slave tem lido todo o relay log, e está esperando o thread I/O slave enviar (atualizar) o relay log com novos eventos, para ser aplicado no banco novamente pelo tread SQL slave.

O parâmetro Seconds_Behind_Master: não está setado mais como NULL.
Caso ocorra algum problema na replicação os campos abaixo informará o tipo de erro

Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:

Slave_IO_Running = Nos diz se a thread de IO está rodando temos que encontrar o status Yes nessa linha
Slave_SQL_Running = Nos diz se a thread de SQL está rodando temos que encontrar o status Yes nessa linha
Seconds_Behind_Master = Nos diz se o nosso slave está atrazado em relação ao master, nesta linha temos que encontrar o numero 0 (Zero) para que o slave esteja atualizado em relação ao master
Last_IO_Error = Caso exista algum erro com a thread de IO nesta linha ele irá informar o que está acontecendo
Last_SQL_Error = Caso exista algum erro com a thread de SQL nesta linha ele irá informar o que está acontecendo

Após inicializar a replicação podemos vê os processos conectados no servidores, através do comando SHOW PROCESSLIST;

server1 – Master

mysql> SHOW PROCESSLIST;
+—-+——+——————-+——+————-+——+———————————————————————–+——————+
| Id | User | Host              | db   | Command     | Time | State                                                                 | Info             |
+—-+——+——————-+——+————-+——+———————————————————————–+——————+
|  1 | repl | server2:57946     | NULL | Binlog Dump | 1404 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL             |
|  2 | root | localhost         | NULL | Query       |    0 | init                                                                  | SHOW PROCESSLIST |
+—-+——+——————-+——+————-+——+———————————————————————–+——————+
2 rows in set (0.00 sec)

server2 – Slave

mysql> SHOW PROCESSLIST;
+—-+————-+———–+——+———+——+—————————————————————————–+——————+
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             |
+—-+————-+———–+——+———+——+—————————————————————————–+——————+
|  2 | root        | localhost | NULL | Query   |    0 | init                                                                        | SHOW PROCESSLIST |
|  3 | system user |           | NULL | Connect | 1304 | Waiting for master to send event                                            | NULL             |
|  4 | system user |           | NULL | Connect | 1303 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
+—-+————-+———–+——+———+——+—————————————————————————–+——————+
3 rows in set (0.00 sec)

Status backup Rman – Quanto tempo vai levar para terminar

Uma das formas para descobrir quanto tempo ainda falta para terminar o backup realizado com RMAN, é consultando a view v$session_longops.

Essa view mostra as vários operações que estão executando por mais de 6 segundos no banco de dados Oracle.

Veja os passos abaixos:

Primeiro vamos relacionar o processo servidor com o channel do RMAN, através do comando SET COMMAND ID

RMAN> run {
2> allocate channel t1 type disk;
3> set command id to ‘rman’;
4> backup datafile 1;
5> release channel t1;
6> }

Agora, basta executar a query, vendo o resultado.

SYS@orcl> SELECT sid, serial#, sofar, totalwork,
2      round(sofar/totalwork*100,2) "% Complete"
3 FROM v$session_longops
4 WHERE opname LIKE 'RMAN:%'
5 AND opname NOT LIKE 'RMAN: aggregate%'
6 AND totalwork != 0;

SID        SERIAL#     SOFAR      TOTALWORK   % Complete
---------- ---------- ---------- ---------- ----------
139          17        13951       62720       22.24

SYS@orcl> /

SID         SERIAL#    SOFAR     TOTALWORK  % Complete
---------- ---------- ---------- ---------- ----------
139          17        24831       62720       39.59

SYS@orcl> /

SID         SERIAL#    SOFAR     TOTALWORK  % Complete
---------- ---------- ---------- ---------- ----------
139          17        62591       62720        99.7