Instalação Oracle RAC 10g com VirtualBox – Parte 9
October 25, 2011

Parte 1 – Introdução
Parte 2 – Criação e configuração da VM
Parte 3 – Criação do Oracle Linux
Parte 4 – Configuração do Oracle Linux I
Parte 5 – Configuração do Oracle Linux II
Parte 6 – Clonagem da VM e criação dos disk image
Parte 7 – Configuração dos discos ASM e OCFS2
Parte 8 – Instalação do Oracle Clusterware
Parte 9 – Aplicação do Patch 10.2.0.5 no Oracle Clusterware
Parte 10 – Instalação Oracle Database 10g
Parte 11 – Aplicação do Patch 10.2.0.5 no Oracle Database
Parte 12 – Criação do Listener e ASM em modo cluster
Parte 13 – Criação do banco de dados

A parte 8 da nossa série de artigos, foi mostrado a instalação do Oracle Clusterware 10g. Hoje veremos como evoluirmos a versão do produto instalado de 10.2.0.1 para 10.2.0.5, que é feito através de uma aplicação de patch, este que é disponibilizado pela Oracle. Para baixar o patch é necessário uma conta (usuário/senha) de acesso ao suporte da Oracle no endereço: https://support.oracle.com,

Caso você não tenha CSI para conectar e assim baixar o patch não se preocupe, você poderá utilizar normalmente o seu Oracle RAC na versão 10.2.0.1, ou sejá sem a aplicação do patch 10.2.0.5, apenas pule as essa parte. Quando ainda não era um profissional na área, aprendi muito utilizando apenas a versão 10.2.0.1, não faça dessa uma desculpa para não estudar :)

O Patch ID do patch 10.2.0.5 é o 8202632, você será capaz de encontrar o patch na sessão Patchs and Updates apenas digitando o número do patch no campo de pesquisa. Lembre-se de baixar para Linux x86 (versão utilizada no tutorial).

p8202632_10205_Linux-x86.zip

 

Pré-requisitos do Patch 10.2.0.5

Será necessário a alteração de dois parâmetros de kernel para conseguirmos que a aplicação do patch seja feita. Esses parâmetros já foram alterados na parte 4 em que alteramos o arquivos /etc/sysctl.conf. Veja abaixo que os parâmetros em azul é os necessário a mudança, deixei conforme abaixo:

[root@rac1 ~]# vi /etc/sysctl.conf
kernel.sem = 250 32000 100 128
fs.file-max = 524288
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 1048576
net.core.rmem_max = 2097152
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

Para ativar a mudança:

[root@rac1 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
kernel.sem = 250 32000 100 128
fs.file-max = 524288
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 1048576
net.core.rmem_max = 2097152
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

 

Aplicação do Patch 10.2.0.5 no Oracle Clusterware

Abaixo eu mostro a aplicação do Patch passo-a-passo:

Descompactando o patch 10.2.0.5, o meu arquivo está localizado na minha ORACLE_BASE.

 

Após descompactado o zip do patch, ele irá criar uma pasta chamada Disk1, entre nessa pasta e execute o arquivo runInstaller como oracle:

[oracle@rac1 Disk1]$ ./runInstaller

Selecione o HOME do Oracle Clusterware instalado, que no nosso casso é o OraCrs10g_home

 

O instalador irá reclamar sobre a falta de memória existente na nossa VM (512MB), não tem problema para o nosso ambiente de teste, ignore a mensagem como abaixo:

 

Aqui será pedido para que execute o arquivo root102.sh no Oracle Clusterware instalado. O procedimento deve ser feito primeiro na máquina 1 e depois na máquina 2, uma de cada vez. Faça o passo 1 depois o passo 2.



RAC 1 – Executando os scripts no PRIMEIRO nó.

[root@rac1 ~]# /u01/app/oracle/product/10.2.0/crs/bin/crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.

[root@rac1 ~]# /u01/app/oracle/product/10.2.0/crs/install/root102.sh
Creating pre-patch directory for saving pre-patch clusterware files
Completed patching clusterware files to /u01/app/oracle/product/10.2.0/crs
Relinking some shared libraries.
Relinking of patched files is complete.
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
Preparing to recopy patched init and RC scripts.
Recopying init and RC scripts.
Startup will be queued to init within 30 seconds.
Starting up the CRS daemons.
Waiting for the patched CRS daemons to start.
  This may take a while on some systems.
.
10205 patch successfully applied.
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
Successfully deleted 1 values from OCR.
Successfully deleted 1 keys from OCR.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node : 

node 1: rac1 rac1-priv rac1
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
clscfg -upgrade completed successfully
Creating '/u01/app/oracle/product/10.2.0/crs/install/paramfile.crs' with data used for CRS configuration
Setting CRS configuration values in /u01/app/oracle/product/10.2.0/crs/install/paramfile.crs

RAC 2 – Executando os scripts no SEGUNDO nó.

[root@rac2 ~]# /u01/app/oracle/product/10.2.0/crs/bin/crsctl stop crs
Stopping resources.
Successfully stopped CRS resources
Stopping CSSD.
Shutting down CSS daemon.
Shutdown request successfully issued.
[root@rac2 ~]# /u01/app/oracle/product/10.2.0/crs/install/root102.sh
Creating pre-patch directory for saving pre-patch clusterware files
Completed patching clusterware files to /u01/app/oracle/product/10.2.0/crs
Relinking some shared libraries.
Relinking of patched files is complete.
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
Preparing to recopy patched init and RC scripts.
Recopying init and RC scripts.
Startup will be queued to init within 30 seconds.
Starting up the CRS daemons.
Waiting for the patched CRS daemons to start.
  This may take a while on some systems.
.
10205 patch successfully applied.
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
Successfully deleted 1 values from OCR.
Successfully deleted 1 keys from OCR.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node : 

node 2: rac2 rac2-priv rac2
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
clscfg -upgrade completed successfully
Creating '/u01/app/oracle/product/10.2.0/crs/install/paramfile.crs' with data used for CRS configuration
Setting CRS configuration values in /u01/app/oracle/product/10.2.0/crs/install/paramfile.crs

Com todos os scripts executados como acima, voltamos a tela de instalação e concluímos a instalação do Patch.


Instalação Oracle RAC 10g com VirtualBox – Parte 8
October 13, 2011

Parte 1 – Introdução
Parte 2 – Criação e configuração da VM
Parte 3 – Criação do Oracle Linux
Parte 4 – Configuração do Oracle Linux I
Parte 5 – Configuração do Oracle Linux II
Parte 6 – Clonagem da VM e criação dos disk image
Parte 7 – Configuração dos discos ASM e OCFS2
Parte 8 – Instalação do Oracle Clusterware
Parte 9 – Aplicação do Patch 10.2.0.5 no Oracle Clusterware
Parte 10 – Instalação Oracle Database 10g
Parte 11 – Aplicação do Patch 10.2.0.5 no Oracle Database
Parte 12 – Criação do Listener e ASM em modo cluster
Parte 13 – Criação do banco de dados

Relação de confiança

Essa é a última configuração e uma das mais importantes, é a relação de confiança das máquinas. A relação de confiança permite que um usuário se conecte via ssh em outro servidor sem precisar digitar senha alguma.

O primeiro passo é criar a chave de segurança ssh da sua máquina. O procedimento é bem simples, ele é feito com o comando ssh-keygen -t rsa, e deve ser executado com o usuário oracle. Execute o comando e pressione a tecla ENTER até o final. Veja abaixo:

[oracle@rac1 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
ef:e2:d9:ae:db:be:19:10:47:4a:96:ea:64:49:75:59 oracle@rac1.localdomain

Feito na máquina rac1, agora é hora de fazer o mesmo procedimento na máquina rac2:

[oracle@rac2 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_rsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_rsa.
Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.
The key fingerprint is:
64:fa:ae:eb:85:41:71:d4:04:dd:48:0e:15:5f:e4:18 oracle@rac2.localdomain

Pronto, nossas máquinas estão com suas chaves de segurança ssh feito, agora é hora de criar a relação de confiança. Primeiro vou realizar na máquina rac1 e depois na máquina rac2, observe:

[oracle@rac1 ~]$ cat /home/oracle/.ssh/id_rsa.pub | ssh oracle@rac2 'cat >> /home/oracle/.ssh/authorized_keys'
The authenticity of host 'rac1 (10.0.0.10)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac1,10.0.0.20' (RSA) to the list of known hosts.
oracle@rac2's password:

[oracle@rac1 ~]$ cat /home/oracle/.ssh/id_rsa.pub | ssh oracle@rac1 'cat >> /home/oracle/.ssh/authorized_keys'
The authenticity of host 'rac1 (10.0.0.10)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac1,10.0.0.10' (RSA) to the list of known hosts.
oracle@rac1's password:
[oracle@rac1 ~]$

Agora na máquina 2:

[oracle@rac2 ~]$ cat /home/oracle/.ssh/id_rsa.pub | ssh oracle@rac1 'cat >> /home/oracle/.ssh/authorized_keys'
The authenticity of host 'rac1 (10.0.0.10)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac1,10.0.0.10' (RSA) to the list of known hosts.
oracle@rac1's password: 

[oracle@rac2 ~]$ cat /home/oracle/.ssh/id_rsa.pub | ssh oracle@rac2 'cat >> /home/oracle/.ssh/authorized_keys'
The authenticity of host 'rac2 (10.0.0.20)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac2,10.0.0.20' (RSA) to the list of known hosts.
oracle@rac2's password:
[oracle@rac2 ~]$

Testando … observe que conectado na máquina rac1 não vai mais pedir qualquer senha para conectar na máquina rac2, ou vice-versa.

[oracle@rac1 ~]$ ssh rac2 date
Mon Oct  3 21:28:48 BRT 2011

É necessário agora executar essa sequencia de comandos abaixos na máquina rac1:

ssh rac1 date
ssh rac2 date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1.localdomain date
ssh rac2.localdomain date
ssh rac1-priv.localdomain date
ssh rac2-priv.localdomain date

E onde aparecer Are you sure you want to continue connecting (yes/no)?, confirme com um yes. Como mostrado abaixo:

[oracle@rac1 ~]$ ssh rac1-priv date
The authenticity of host 'rac1-priv (192.168.1.10)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac1-priv,192.168.1.10' (RSA) to the list of known hosts.
Mon Oct  3 21:32:55 BRT 2011

Quando todos os comandos acima forem executados na máquina rac1 transfira o arquivo known_hosts dentro da pasta /home/oracle/.ssh para máquina rac2 assim não será necessário executar a sequencia acima para a máquina rac2.

[oracle@rac1 .ssh]$ pwd
/home/oracle/.ssh
[oracle@rac1 .ssh]$ scp known_hosts rac2:`pwd`
known_hosts                               100% 1196     1.2KB/s   00:00
[oracle@rac1 .ssh]$

Instalação do Oracle Clusterware 10g

O download do Oracle RAC Clusterware 10g Release 2, assim como a do banco Oracle Database 10g Release 2 para Linux x86 pode ser feito no endereço do link abaixo:

http://www.oracle.com/technetwork/database/10201linuxsoft-097986.html

Após realizado o download, vamos definir inicialmente a variável de ambiente ORACLE_BASE do banco e logo após a descompactação do instalador clusterware 10201_clusterware_linux32.zip. Observe já que vou definir a variável de ambiente ORACLE_BASE dentro do arquivo .bash_profile que se encontra na pasta HOME do usuário, no nosso caso o /home/oracle. Sempre quando algum logon do usuário oracle ocorrer esse arquivo vai ser executado, com isso todas as variáveis de ambiente dentro dele será exportada. Veja as imagens abaixo:

 

Para ativar as configurações de dentro do arquivo .bash_profile execute o comando . .bash_profile.

 

Como deixei meu arquivo de instalação do clusterware (10201_clusterware_linux32.zip) dentro da pasta /u01/app/oracle vou até o diretório (cd $ORACLE_BASE) e depois realizo a descompactação através do comando unzip.

 

Com o binário do clusterware descompactado, entre na pasta clusterware e execute o comando ./runInstaller -ignoreSysPreReqs, como mostro abaixo. Estamos instalando o Oracle Linux 5 (quase cópia do RedHat 5) e quando saiu a versão do Oracle RAC 10g a versão 5 do RedHat  não tinha sido lançado, com isso o runInstaller não reconhece como uma versão Linux válida para instalação, por isso é necessário utilizar a opção -ignoreSysPreReqs.

 

Iniciando a instalação do Oracle Clusterware.

 

Escolha a localização do oraInventory.

 

Defina a localização do HOME do Oracle Clusterware.

 

Alguns erros serão disparados mais não se preocupe, é normal. Isso porque, como explicado anteriormente estamos utilizando a opção ignoreSysPreReqs para executar o runInstaller.

 

Aqui é momento de definir o nome do cluster e os nós presentes a eles. Aqui nesse artigo estarei colocando o nome de crs_vm, fique a vontade para colocar o que deseja. Com a alteração feita vamos clicar no botão Add para adicionar o nó rac2 já que o nó rac1 o instalador já reconheceu.

 

Agora sim, os dois nós presentes.

 

Aqui o instalador identifica que existem duas placas de redes nos dois nós do cluster e também pedi para que informemos a ele qual dessas interfaces será a interface PUBLICA e a PRIVADA. Clique em cima da interface eth0 e clique no botão Edit e defina como PUBLIC.

 

Deverá ficar dessa maneira.

 

Agora é hora de definirmos a localização do OCR e do VOTING. Vamos utilizar a partição /ocr e /voting montada na parte 7 dessa série de artigo para definirmos a localização do ocr e do voting do cluster.

 

Tudo pronto, que inicie a instalação:

 

Nesse momento é hora de rodar os scripts solicitado pelo instalador. Esses scripts devem ser executado como root um de cada vez.

Vamos primeiro executar o script /u01/app/oracle/oraInventory/orainstRoot.sh primeiro na máquina 1 e depois na máquina 2.

[root@rac1 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oracle/oraInventory to 770.
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
The execution of the script is complete
[root@rac2 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oracle/oraInventory to 770.
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
The execution of the script is complete

Chegou a vez do /u01/app/oracle/product/10.2.0/crs/root.sh, primeiro na máquina 1

[root@rac1 ~]# /u01/app/oracle/product/10.2.0/crs/root.sh
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
assigning default hostname rac1 for node 1.
assigning default hostname rac2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node :
node 1: rac1 rac1-priv rac1
node 2: rac2 rac2-priv rac2
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Now formatting voting device: /voting/vot1.dat
Now formatting voting device: /voting/vot2.dat
Now formatting voting device: /voting/vot3.dat
Format of 3 voting devices complete.
Startup will be queued to init within 90 seconds.

Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
	rac1
CSS is inactive on these nodes.
	rac2
Local node checking complete.
Run root.sh on remaining nodes to start CRS daemons.
[root@rac1 ~]#

Agora sim na máquina 2.

[root@rac2 ~]# /u01/app/oracle/product/10.2.0/crs/root.sh
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
WARNING: directory '/u01/app/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/app/oracle/product' is not owned by root
WARNING: directory '/u01/app/oracle' is not owned by root
WARNING: directory '/u01/app' is not owned by root
WARNING: directory '/u01' is not owned by root
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
assigning default hostname rac1 for node 1.
assigning default hostname rac2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node :
node 1: rac1 rac1-priv rac1
node 2: rac2 rac2-priv rac2
clscfg: Arguments check out successfully.

NO KEYS WERE WRITTEN. Supply -force parameter to override.
-force is destructive and will destroy any previous cluster
configuration.
Oracle Cluster Registry for cluster has already been initialized
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
	rac1
	rac2
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
/u01/app/oracle/product/10.2.0/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

Observem o erro acima, por incrível que pareça esse é um erro esperado quando utilizado Red Hat Linux 5 (ou versões derivadas, que é o nosso caso)  é descrito pelo note 414163.1 do support Oracle. De acordo com o documento para corrigir o problema é necessário editar dois arquivos presentes na pasta bin do home do Oracle Clusterware que no nosso caso é o diretório /u01/app/oracle/product/10.2.0/crs.

Vá até o diretório /u01/app/oracle/product/10.2.0/crs/bin e edite o arquivo vipca. Perto da linha 121 terá um código parecido com esse:

#Remove this workaround when the bug 3937317 is fixed
arch=`uname -m`
if [ "$arch" = "i686" -o "$arch" = "ia64" ]
    then
            LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
    fi
#End workaround

Apenas adicione o código unset LD_ASSUME_KERNEL abaixo da linha em que mostra o export LD_ASSUME_KERNEL ficando dessa maneira

[oracle@rac1 bin]$ pwd
/u01/app/oracle/product/10.2.0/crs/bin
[oracle@rac1 bin]$ vi vipca
#Remove this workaround when the bug 3937317 is fixed
arch=`uname -m`
if [ "$arch" = "i686" -o "$arch" = "ia64" ]
    then
            LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
            unset LD_ASSUME_KERNEL
    fi
#End workaround

Agora é hora de editar o arquivo srvctl da mesma maneira. O código devesse se parecer com esse perto da linha 166

[oracle@rac1 bin]$ vi srvctl
#Remove this workaround when the bug 3937317 is fixed
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL

Apenas adicione o código unset LD_ASSUME_KERNEL abaixo da linha em que mostra o export LD_ASSUME_KERNEL ficando dessa maneira

[oracle@rac1 bin]$ vi srvctl
#Remove this workaround when the bug 3937317 is fixed
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
unset LD_ASSUME_KERNEL

Como realizamos o procedimento na máquina 1 (rac1) é necessário que seja feito a mesma coisa só que na máquina 2. Para facilitar o trabalho somente transfira os arquivos vipca e srvctl para a máquina 2.

[oracle@rac1 bin]$ scp -rp vipca rac2:`pwd`
vipca                              100% 5038     4.9KB/s   00:00
[oracle@rac1 bin]$ scp -rp srvctl rac2:`pwd`
srvctl                             100% 5577     5.5KB/s   00:00

 

Feito todos esses procedimentos clique no botão OK na tela de execução dos scripts:

 

Ao clicar em OK uma verificação do cluster instalado vai ser feita, devido o erro aparecido no momento da execução do root.sh na máquina 2 os IP´s virtuais não foram criados corretamente por isso é exibida a mensagem abaixo:

 

Será necessário então criar os IPs virtuais do cluster manualmente para que a verificação do cluster não seja afetada, vamos cria-los através do utilitário vipca que deve ser executada como root.

 

Ao executar uma tela como essa será aberta:

 

Selecione a interface de rede e clique em Next

 

Aqui será exibida uma tabela com os IP´s virtuais que deverão ser criados, apenas adicione o nome rac1-vip e rac2-vip na coluna IP Alias Name e veja se os IPs que mostram no IP address combinam com o que definimos no arquivo /etc/hosts. Veja abaixo como fica:

 

Feito isso é somente instalar:

 

Com os IP´s virtuais criado voltamos a tela de instalação do Oracle Clusterware 10g e clicamos em Retry para que a verificação do cluster faça novamente. Veja que agora a mensagem de alerta não é exibida e a instalação é feita sem qualquer problema.

 

Pronto instalação do Oracle Clusterware realizada. Quer conferir se os processos do cluster estão ativos, execute o comando abaixo, ele deverá mostrar todos os processos ONLINE.

[oracle@rac1 ~]$ /u01/app/oracle/product/10.2.0/crs/bin/crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora.rac1.gsd   application    ONLINE    ONLINE    rac1
ora.rac1.ons   application    ONLINE    ONLINE    rac1
ora.rac1.vip   application    ONLINE    ONLINE    rac1
ora.rac2.gsd   application    ONLINE    ONLINE    rac2
ora.rac2.ons   application    ONLINE    ONLINE    rac2
ora.rac2.vip   application    ONLINE    ONLINE    rac2
Restore Datafile de um Image Copy
October 3, 2011

Um backup Image copy é mais rápido para o restore e para o DBA tempo é tudo.

Quando um datafile é restaurado de um image copy a estrutura do datafile já existe, é o famoso backup/restore bit-a-bit. O Oracle tem o dever de pegar o bit do backup e colocar no disco, diferente de um backupset que ele tem que montar a estrutura física no disco.

Aqui eu mostro o processo na prática de um backup e restore, de um datafile. Não preciso nem dizer para não realizar esse teste em um ambiente de produção né :)

Prmeiro vamos ao backup do datafile example01.dbf

$ rman target /

Recovery Manager: Release 11.2.0.2.0 - Production on Mon Oct 3 20:43:20 2011

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

connected to target database: DBTST (DBID=2973952248)

RMAN> report schema;

using target database control file instead of recovery catalog
Report of database schema for database with db_unique_name DBTST

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    700      SYSTEM               ***     /u01/app/oracle/oradata/dbtst/system01.dbf
2    600      SYSAUX               ***     /u01/app/oracle/oradata/dbtst/sysaux01.dbf
3    200      UNDOTBS1             ***     /u01/app/oracle/oradata/dbtst/undotbs01.dbf
4    2203     USERS                ***     /u01/app/oracle/oradata/dbtst/users01.dbf
5    1024     EXAMPLE              ***     /u01/app/oracle/oradata/dbtst/example01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    34       TEMP                 32767       /u01/app/oracle/oradata/dbtst/temp01.dbf

RMAN> backup as copy datafile 5 format '/u01/app/oracle/backup/dbtst/example01.bkp';

Starting backup at 03-OCT-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=32 device type=DISK
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/dbtst/example01.dbf
output file name=/u01/app/oracle/backup/dbtst/example01.bkp tag=TAG20111003T204407 RECID=1 STAMP=763591516
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:15
Finished backup at 03-OCT-11

Vamos agora remover o datafile example01.dbf do disco:

$ rm /u01/app/oracle/oradata/dbtst/example01.dbf

Novamente ao RMAN, vamos aproveitar o image copy e realizar o switch para ele:

RMAN> list copy of datafile 5;

using target database control file instead of recovery catalog
List of Datafile Copies
=======================

Key     File S Completion Time Ckp SCN    Ckp Time       
------- ---- - --------------- ---------- ---------------
1       5    A 03-OCT-11       348805     03-OCT-11      
        Name: /u01/app/oracle/backup/dbtst/example01.bkp
        Tag: TAG20111003T204407

RMAN> sql 'alter database datafile 5 offline';

sql statement: alter database datafile 5 offline

RMAN> switch datafile 5 to copy;

datafile 5 switched to datafile copy "/u01/app/oracle/backup/dbtst/example01.bkp"

RMAN>  recover datafile 5;

Starting recover at 03-OCT-11
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=33 device type=DISK

starting media recovery
media recovery complete, elapsed time: 00:00:01

Finished recover at 03-OCT-11

RMAN>  sql 'alter database datafile 5 online';

sql statement: alter database datafile 5 online
$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 3 20:52:48 2011

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

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select name from v$dbfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/dbtst/system01.dbf
/u01/app/oracle/oradata/dbtst/sysaux01.dbf
/u01/app/oracle/oradata/dbtst/undotbs01.dbf
/u01/app/oracle/oradata/dbtst/users01.dbf
/u01/app/oracle/backup/dbtst/example01.bkp
Instalação Oracle RAC 10g com VirtualBox – Parte 7
October 1, 2011

Parte 1 – Introdução
Parte 2 – Criação e configuração da VM
Parte 3 – Criação do Oracle Linux
Parte 4 – Configuração do Oracle Linux I
Parte 5 – Configuração do Oracle Linux II
Parte 6 – Clonagem da VM e criação dos disk image
Parte 7 – Configuração dos discos ASM e OCFS2
Parte 8 – Instalação do Oracle Clusterware
Parte 9 – Aplicação do Patch 10.2.0.5 no Oracle Clusterware
Parte 10 – Instalação Oracle Database 10g
Parte 11 – Aplicação do Patch 10.2.0.5 no Oracle Database
Parte 12 – Criação do Listener e ASM em modo cluster
Parte 13 – Criação do banco de dados

Na parte 7 do nosso artigo, vamos  aprender como configurar os discos apresentados para as VM 1 e 2 no post anterior.

Criando as partições

Ao todo foram 5 discos criados, sendo 4 de 5G que será para o ASM e 1 disco de 1G para o OCFS2. Através do comando fdisk -l podemos ver os discos apresentados em cada uma das máquinas. Lembre-se que esse comando deve ser executado como root, observe que a verificação é feita na máquina 1 (rac1) e depois na máquina 2 (rac2).

[root@rac1 ~]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1827    14675346   83  Linux
/dev/sda2            1828        1958     1052257+  82  Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdc doesn't contain a valid partition table

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdd doesn't contain a valid partition table

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sde doesn't contain a valid partition table

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdf doesn't contain a valid partition table

[root@rac1 ~]# ssh rac2
The authenticity of host 'rac2 (10.0.0.20)' can't be established.
RSA key fingerprint is 86:5a:97:20:00:13:34:97:16:95:f1:4d:b5:ec:49:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'rac2,10.0.0.20' (RSA) to the list of known hosts.
root@rac2's password:
Last login: Tue Sep 27 20:42:23 2011 from shadowy.lan

[root@rac2 ~]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1827    14675346   83  Linux
/dev/sda2            1828        1958     1052257+  82  Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdc doesn't contain a valid partition table

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdd doesn't contain a valid partition table

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sde doesn't contain a valid partition table

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdf doesn't contain a valid partition table

Caso esteja tudo igual de uma máquina como na outra, vamos a criação das partições de cada um dos discos. O procedimento é muito simples e também é realizado com o comando fdisk executado como root. Vamos primeiro fazer na máquina 1:

 

Disco “/dev/sdb”

[root@rac1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. 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)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):
Using default value 652

Command (m for help): p

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

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

 

Disco “/dev/sdc”

[root@rac1 ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. 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)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):
Using default value 652

Command (m for help): p

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

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

 

Disco “/dev/sdd”

[root@rac1 ~]# fdisk /dev/sdd
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. 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)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):
Using default value 652

Command (m for help): p

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

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

 

Disco “/dev/sde”

[root@rac1 ~]# fdisk /dev/sde
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. 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)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652):
Using default value 652

Command (m for help): p

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

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

Feito o disco /dev/sde, temos os 4 discos do ASM criado a partição, agora é hora do disco do OCFS2 de 1G. O procedimento é o mesmo, só que agora vamos criar 2 partições, não 1 como estava sendo feito:

 

Disco “/dev/sdf”

[root@rac1 ~]# fdisk /dev/sdf

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-130, default 130): +512M

Command (m for help): p

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (64-130, default 64):
Using default value 64
Last cylinder or +size or +sizeM or +sizeK (64-130, default 130):
Using default value 130

Command (m for help): p

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1          63      506016   83  Linux
/dev/sdf2              64         130      538177+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

Vamos conferir o resultado:

[root@rac1 ~]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1827    14675346   83  Linux
/dev/sda2            1828        1958     1052257+  82  Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1          63      506016   83  Linux
/dev/sdf2              64         130      538177+  83  Linux
[root@rac1 ~]# ll /dev/sd*
brw-r----- 1 root disk 8,  0 Sep 27 20:37 /dev/sda
brw-r----- 1 root disk 8,  1 Sep 27 20:37 /dev/sda1
brw-r----- 1 root disk 8,  2 Sep 27 20:37 /dev/sda2
brw-r----- 1 root disk 8, 16 Sep 27 21:00 /dev/sdb
brw-r----- 1 root disk 8, 17 Sep 27 21:00 /dev/sdb1
brw-r----- 1 root disk 8, 32 Sep 27 21:01 /dev/sdc
brw-r----- 1 root disk 8, 33 Sep 27 21:01 /dev/sdc1
brw-r----- 1 root disk 8, 48 Sep 27 21:01 /dev/sdd
brw-r----- 1 root disk 8, 49 Sep 27 21:01 /dev/sdd1
brw-r----- 1 root disk 8, 64 Sep 27 21:01 /dev/sde
brw-r----- 1 root disk 8, 65 Sep 27 21:01 /dev/sde1
brw-r----- 1 root disk 8, 80 Sep 27 21:02 /dev/sdf
brw-r----- 1 root disk 8, 81 Sep 27 21:02 /dev/sdf1
brw-r----- 1 root disk 8, 82 Sep 27 21:02 /dev/sdf2

Com as partições criadas dos discos na VM 1, vamos fazer o procedimento parecido só que agora na máquina 2:

 

Disco “/dev/sdb”

[root@rac2 ~]# hostname
rac2.localdomain
[root@rac2 ~]#
[root@rac2 ~]# fdisk /dev/sdb

Command (m for help): p

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@rac2 ~]#

 

Disco “/dev/sdc”

[root@rac2 ~]# fdisk /dev/sdc

Command (m for help): p

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

Disco “/dev/sdd”

[root@rac2 ~]# fdisk /dev/sdd

Command (m for help): p

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

 

Disco “/dev/sde”

[root@rac2 ~]# fdisk /dev/sde

Command (m for help): p

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

Disco “/dev/sdf”

[root@rac2 ~]# fdisk /dev/sdf

Command (m for help): p

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1          63      506016   83  Linux
/dev/sdf2              64         130      538177+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

Conferindo na máquina 2:

[root@rac2 ~]# fdisk -l

Disk /dev/sda: 16.1 GB, 16106127360 bytes
255 heads, 63 sectors/track, 1958 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1827    14675346   83  Linux
/dev/sda2            1828        1958     1052257+  82  Linux swap / Solaris

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdc: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdd: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sde: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

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

Disk /dev/sdf: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdf1               1          63      506016   83  Linux
/dev/sdf2              64         130      538177+  83  Linux

[root@rac2 ~]# ll /dev/sd*
brw-r----- 1 root disk 8,  0 Sep 27 20:37 /dev/sda
brw-r----- 1 root disk 8,  1 Sep 27 20:37 /dev/sda1
brw-r----- 1 root disk 8,  2 Sep 27 20:37 /dev/sda2
brw-r----- 1 root disk 8, 16 Sep 27 20:37 /dev/sdb
brw-r----- 1 root disk 8, 17 Sep 27 21:13 /dev/sdb1
brw-r----- 1 root disk 8, 32 Sep 27 20:37 /dev/sdc
brw-r----- 1 root disk 8, 33 Sep 27 21:13 /dev/sdc1
brw-r----- 1 root disk 8, 48 Sep 27 20:37 /dev/sdd
brw-r----- 1 root disk 8, 49 Sep 27 21:13 /dev/sdd1
brw-r----- 1 root disk 8, 64 Sep 27 20:37 /dev/sde
brw-r----- 1 root disk 8, 65 Sep 27 21:14 /dev/sde1
brw-r----- 1 root disk 8, 80 Sep 27 20:37 /dev/sdf
brw-r----- 1 root disk 8, 81 Sep 27 21:14 /dev/sdf1
brw-r----- 1 root disk 8, 82 Sep 27 21:14 /dev/sdf2

Discos ASM

As partições:

/dev/sdb1
/dev/sdc1
/dev/sdd1
/dev/sde1

Serão as partições que serão apresentadas ao ASM. Na parte 5 dessa séria de artigos foi instalado e configurado o ASMLib, agora é hora de aprender como utilizamos. O ASMLib nada mais é do que uma biblioteca que é capaz de pegar as partições brutas disponíveis no Linux a apresentar ao ASM. Vamos agora ver, como isso é feito:

[root@rac1 ~]# /etc/init.d/oracleasm createdisk DISK1 /dev/sdb1 
Marking disk "DISK1" as an ASM disk:                       [  OK  ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk DISK2 /dev/sdc1 
Marking disk "DISK2" as an ASM disk:                       [  OK  ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk DISK3 /dev/sdd1 
Marking disk "DISK3" as an ASM disk:                       [  OK  ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk DISK4 /dev/sde1 
Marking disk "DISK4" as an ASM disk:                       [  OK  ]

Vamos agora conferir, vamos listar os discos presentes no ASMLib:

[root@rac1 ~]# /etc/init.d/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4

Na máquina 2 não é necessário criar os discos como foi feito na máquina 1. Veja como é feito na máquina 2:

[root@rac2 ~]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks:               [  OK  ]
[root@rac2 ~]# /etc/init.d/oracleasm listdisks
DISK1
DISK2
DISK3
DISK4

Discos OCFS2

O primeiro passo aqui, é formatarmos as partições /dev/sdf1 e /dev/sdf2 para OCFS2. Vamos realizar essa operação na máquina 1.

[root@rac1 ~]# mkfs.ocfs2 -L ocr_disk /dev/sdf1
mkfs.ocfs2 1.4.3
Cluster stack: classic o2cb
Filesystem label=ocr_disk
Block size=1024 (bits=10)
Cluster size=4096 (bits=12)
Volume size=518160384 (126504 clusters) (506016 blocks)
17 cluster groups (tail covers 3624 clusters, rest cover 7680 clusters)
Journal size=16777216
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Formatting slot map: done
Writing lost+found: done
mkfs.ocfs2 successful

[root@rac1 ~]# mkfs.ocfs2 -L vote_disk /dev/sdf2
mkfs.ocfs2 1.4.3
Cluster stack: classic o2cb
Filesystem label=vote_disk
Block size=2048 (bits=11)
Cluster size=4096 (bits=12)
Volume size=551092224 (134544 clusters) (269088 blocks)
9 cluster groups (tail covers 7568 clusters, rest cover 15872 clusters)
Journal size=33554432
Initial number of node slots: 2
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 0 block(s)
Formatting Journals: done
Formatting slot map: done
Writing lost+found: done
mkfs.ocfs2 successful

Como esse será um ambiente OCFS2 clusterizado, em que a máquina 1 e a máquina 2 estará escrevendo e lendo o mesmo disco OCFS montado, será necessário configurarmos o OCFS2 para poder operar em modo cluster. Para isso crie o arquivo /etc/ocfs2/cluster.conf e adicione as seguintes linhas abaixos, como demonstro na máquina 1. O procedimento deve ser feito também na máquina 2.

[root@rac1 ~]# mkdir /etc/ocfs2
[root@rac1 ~]# vi /etc/ocfs2/cluster.conf
cluster:
     node_count = 2
     name = ocfs2

node:
     ip_port = 7777
     ip_address = 10.0.0.10
     number = 1
     name = rac1
     cluster = ocfs2

node:
     ip_port = 7777
     ip_address = 10.0.0.20
     number = 2
     name = rac2
     cluster = ocfs2

Feitos os passos acimas vamos as configurações finais do OCFS2. Aqui vou demonstrar somente da máquina rac1 porém deve ser feito também na máquina rac2.

[root@rac1 ~]# /etc/init.d/o2cb configure
Configuring the O2CB driver.

This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot.  The current values will be shown in brackets ('[]').  Hitting
 without typing an answer will keep that current value.  Ctrl-C
will abort.

Load O2CB driver on boot (y/n) [y]: y
Cluster stack backing O2CB [o2cb]:
Cluster to start on boot (Enter "none" to clear) [ocfs2]:
Specify heartbeat dead threshold (>=7) [31]:
Specify network idle timeout in ms (>=5000) [30000]:
Specify network keepalive delay in ms (>=1000) [2000]:
Specify network reconnect delay in ms (>=2000) [2000]:
Writing O2CB configuration: OK
Starting O2CB cluster ocfs2: OK
[root@rac1 ~]# /etc/init.d/o2cb load
[root@rac1 ~]# /etc/init.d/o2cb online

Para que as partições OCR e VOTING  sejam montadas automaticamente quando a máquina iniciar, coloque as duas linhas abaixo no final do arquivo /etc/fstab, isso nas máquinas 1 e 2.

LABEL=ocr_disk          /ocr                         ocfs2   _netdev,datavolume,nointr       0 0
LABEL=vote_disk         /voting                      ocfs2   _netdev,datavolume,nointr       0 0

Também crie os arquivos /ocr e /voting como mostrado a abaixo, lembrando que o procedimento deve ser feito também na máquina 2.

[root@rac1 ~]# mkdir /ocr
[root@rac1 ~]# mkdir /voting

Após feitos os passos acima sem qualquer problema podemos montar as nossas duas partições de OCFS2 onde irá comportar o OCR e o VOTING.

[root@rac1 ~]# mount -a

Repita na máquina 2

[root@rac2 ~]# mount -a

Agora sim nossa partição está montada:

[root@rac1 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              14G  2.1G   11G  16% /
tmpfs                 252M     0  252M   0% /dev/shm
/dev/sdf1             495M   35M  460M   7% /ocr
/dev/sdf2             526M   73M  453M  14% /voting
[root@rac1 ~]# mount |grep ocfs2
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sdf1 on /ocr type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)
/dev/sdf2 on /voting type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

[root@rac2 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              14G  2.1G   11G  16% /
tmpfs                 252M     0  252M   0% /dev/shm
/dev/sdf1             495M   35M  460M   7% /ocr
/dev/sdf2             526M   73M  453M  14% /voting
[root@rac2 ~]# mount |grep ocfs2
ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw)
/dev/sdf1 on /ocr type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)
/dev/sdf2 on /voting type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

Para finalizar vamos já definir as permissões necessárias para o OCR e o VOTING, aqui demonstro somente da máquina 1 porém deve ser executado também na máquina 2.

[root@rac1 ~]# chown oracle:oinstall /ocr
[root@rac1 ~]# chown oracle:oinstall /voting
[root@rac1 ~]# chmod 775 /ocr
[root@rac1 ~]# chmod 775 /voting