Série de artigos sobre Instalação do Oracle RAC:

Instalação do Oracle RAC 10g Release 2 – Parte 1: Pré-requisitos

Instalação do Oracle RAC 10g Release 2 – Parte 2: Criação da VM

Instalação do Oracle RAC 10g Release 2 – Parte 3: Instalação do Linux

Instalação do Oracle RAC 10g Release 2 – Parte 4: Configuração do Linux

Instalação do Oracle RAC 10g Release 2 – Parte 5: Clonagem da VM

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

Olá pessoal!

Falta pouco para que iniciemos a instalação dos softwares Oracle que criarão o nosso ambiente Oracle RAC!

Neste artigo de hoje, veremos os seguintes itens:

  • Criação de equivalência de usuários para acesso SSH;
  • Particionamento dos discos do storage;
  • Marcação das partições dos discos do storage como discos ASM;
  • Criação de raw devices;
  • Criação de block devices.

Vamos lá!

Existem duas formas de se instalar o Oracle Clusterware e o Oracle Database num ambiente clusterizado:

  • Instalação dos binários (Oracle Home’s) em file system clusterizado;
  • Instalação dos binários (Oracle Home’s) em file system local.

Eu particularmente não gosto de instalar os Oracle Home’s em file system clusterizado. Isso porque para a aplicação de patches, incidência de bugs no produto de clusterização de file systems, ou qualquer problema que fuja às mãos do DBA, afeterá TODOS os nós do cluster, já que o Oracle Home enxergado por um nó será o mesmo enxergado pelos outros. Isso acontece porque fisicamente só há um Oracle Home, armazenado num file system clusterizado onde é permitido montar esse mesmo file system em diversos nós com estado de read/write.

Eu sempre faço a instalação dos Oracle Home’s em file systems locais. Motivo: a aplicação de patches se torna individualizada, se o patch for do tipo “rolling”, apenas um nó será interrompido na aplicação do patch, ou seja, o ambiente de banco de dados RAC continuará disponível para os usuários através dos outros nós. Mas não é só pela aplicação dos patches que eu escolho a instalação local. O principal motivo é que cada máquina terá sua cópia de Oracle Home, desta forma, se uma máquina sofrer algum tipo de problema de hardware ou software, o cluster continuará ativo com outros nós. Já que cada nó enxergará o seu Oracle Home.

Pois bem, no entanto, como é feita a instalação dos produtos em file systems locais?

É simples! A instalação dos produtos Oracle serão disparadas a partir de um único nó. O Oracle Universal Installer (OUI) criará o Oracle Home com seus arquivos e subdiretórios necessários, após o “relink” dos binários, o próprio OUI disparará uma cópia desse Oracle Home para os outros nós. Para que isso aconteça, é necessário que o usuário oracle do primeiro servidor, consiga copiar os arquivos para o segundo servidor sem a necessidade de informar senha (já que isso é feito automaticamente). Para que isso seja realizado, criamos o que chamamos de “equivalência de usuário”, onde, o usuário oracle do servidor mvrac1 poderá copiar qualquer arquivo para o servidor mvrac2, considerando que o usuário oracle no servidor mvrac2 tenha os privilégios necessários nos diretórios de destino da cópia, e vice-versa. Quando a equivalência de usuários está criada, qualquer ação de cópia ou login remoto, é feita sem a solicitação de senha pelo sistema operacional.

Bom, a equivalência de usuário poderá ocorrer através de duas maneiras:

  • rsh/rcp;
  • ssh/scp.

A configuração por rsh/rcp é mais simples de ser feita, no entanto, não é a recomendada, já que não é segura. Já no ssh/scp, os dados são enviados pela rede de forma criptografada, o que aumenta a segurança. Inclusive, em muitas empresas, as portas utilizadas em rsh/rcp nem são liberadas no firewall por motivos de segurança. A configuração do ssh/scp é um pouco mais chata, mas é a que veremos aqui por ser a mais segura.

Para realizar a configuração da equivalência de usuários para acesso via SSH, é necessário criar as chaves SSH de acesso ao usuário. Os passos são esses:

  • Criação das chaves do usuário oracle do servidor mvrac1;
  • Criação das chaves do usuário oracle do servidor mvrac2;
  • Criação de um arquivo de chaves autorizadas a acesso, contendo as chaves dos usuários oracle dos servidores mvrac1 e mvrac2. Esse arquivo será utilizado nos dois servidores;
  • Inclusão dos servidores mvrac1 e mvrac2 num arquivo de hosts conhecidos para não mais confirmar o acesso via SSH e isso ser feito automaticamente.

Então, vamos para o primeiro passo, criar as chaves do usuário oracle dos servidores mvrac1 e mvrac2. Com o usuário oracle a partir do servidor mvrac1:

[oracle@mvrac1 ~]$ cd /home/oracle
[oracle@mvrac1 ~]$ mkdir .ssh
[oracle@mvrac1 ~]$ cd .ssh
[oracle@mvrac1 .ssh]$ ssh-keygen -t dsa

Pressionar [ENTER] até voltar para o shell.

[oracle@mvrac1 .ssh]$ ssh-keygen -t rsa

Pressionar [ENTER] até voltar para o shell.

O mesmo precisa ser feito com o usuário oracle no servidor mvrac2:

[oracle@mvrac2 ~]$ cd /home/oracle
[oracle@mvrac2 ~]$ mkdir .ssh
[oracle@mvrac2 ~]$ cd .ssh
[oracle@mvrac2 .ssh]$ ssh-keygen -t dsa

Pressionar [ENTER] até voltar para o shell.

[oracle@mvrac2 .ssh]$ ssh-keygen -t rsa

Pressionar [ENTER] até voltar para o shell.

Agora vamos criar o arquivo com as chaves SSH autorizadas a acessar os servidores. Dentro desse arquivo, haverá o conteúdo das chaves públicas. Começando com o usuário oracle no servidor mvrac1:

[oracle@mvrac1 .ssh]$ cat *.pub >> authorized_keys
[oracle@mvrac1 .ssh]$ ls -l authorized_keys
-rw-r--r-- 1 oracle oinstall 1036 Feb 20 10:24 authorized_keys

Observem que o arquivo authorized_keys tem 1036 bytes de tamanho, e, por enquanto, só existe no servidor mvrac1. Agora, colocaremos dentro desse mesmo arquivo, o conteúdo das chaves públicas do usuário oracle do servidor mvrac2:

[oracle@mvrac1 .ssh]$ ssh mvrac2 cat /home/oracle/.ssh/*.pub >> authorized_keys
The authenticity of host 'mvrac2 (172.23.10.12)' can't be established.
RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e.
Are you sure you want to continue connecting (yes/no)? yes

Observem que eu tive que confirmar com yes e em seguida, terei que colocar a senha do usuário oracle do servidor mvrac2:

oracle@mvrac2's password:

Vamos verificar o tamanho do arquivo?

[oracle@mvrac1 .ssh]$ ls -l authorized_keys
-rw-r--r-- 1 oracle oinstall 2072 Feb 20 10:26 authorized_keys

Ele agora tem 2072 bytes. Mas, ainda existe somente no servidor mvrac1. Devemos copiá-lo para o servidor mvrac2, nesse mesmo diretório, /home/oracle/.ssh, e, como a equivalência de usuários ainda não existe nos dois servidores (pela falta do arquivo authorized_keys no servidor mvrac2), terei que fornecer a senha do usuário oracle mais uma vez:

[oracle@mvrac1 .ssh]$ scp -p authorized_keys mvrac2:`pwd`
oracle@mvrac2's password:
authorized_keys                                                                                              100% 2072     2.0KB/s   00:00

Bom, como no servidor mvrac1 eu estava no diretório /home/oracle/.ssh. E o arquivo authorized_keys tem que ir para o mesmo diretório no servidor mvrac2, observem que eu usei um comando do Linux dentro do comando scp. O comando foi o pwd. E sempre que quisermos usar um comando dentro de outro comando, deveremos colocá-lo entre crases: `pwd`. Dessa forma, ele executará o comando pwd no servidor mvrac1 e com base na saída do comando (/home/oracle/.ssh), jogará o arquivo dentro desse diretório no outro servidor. Se o diretório não existisse, teríamos um erro.

Vamos testar para ver se a equivalência de usuários está funcionando?

The authenticity of host 'mvrac2.viniciusdba.com.br (172.23.10.12)' can't be established.
RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mvrac2.viniciusdba.com.br' (RSA) to the list of known hosts.
Fri Feb 19 11:37:38 BRST 2010

Observem que eu tive que digitar yes. Mas não precisei mais digitar a senha. Porque?

Não precisei digitar mais a senha porque a equivalência de usuários funcionou. Mas, o host mvrac2.viniciusdba.com.br ainda não é um host conhecido para o SSH. Dessa forma, no servidor mvrac1, com o usuário oracle, deveremos fazer o seguinte:

ssh mvrac1 date
ssh mvrac1-priv date
ssh mvrac1.viniciusdba.com.br date
ssh mvrac1-priv.viniciusdba.com.br date
ssh mvrac2 date
ssh mvrac2-priv date
ssh mvrac2.viniciusdba.com.br date
ssh mvrac2-priv.viniciusdba.com.br date

Em todos as saídas, deveremos sempre confirmar com yes:

Are you sure you want to continue connecting (yes/no)? yes

Vocês viram que mesmo estando no servidor mvrac1, eu preciso fazer o ssh para ele mesmo. Isso é necessário porque quando o Oracle Universal Installer for confirmar se a equivalência de usuário está funcionando, ele fará isso também.

Quando fizer isso em todos os servidores, para confirmar se está tudo OK, basta refazer o comando:

ssh mvrac1 date
ssh mvrac1-priv date
ssh mvrac1.viniciusdba.com.br date
ssh mvrac1-priv.viniciusdba.com.br date
ssh mvrac2 date
ssh mvrac2-priv date
ssh mvrac2.viniciusdba.com.br date
ssh mvrac2-priv.viniciusdba.com.br date

Ele não deverá mais pedir confirmação para nenhum host:

[oracle@mvrac1 .ssh]$ ssh mvrac1 date
Sat Feb 20 11:38:59 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac1-priv date
Sat Feb 20 11:39:00 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac1.viniciusdba.com.br date
Sat Feb 20 11:39:00 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac1-priv.viniciusdba.com.br date
Sat Feb 20 11:39:01 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac2 date
Sat Feb 20 11:39:01 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac2-priv date
Sat Feb 20 11:39:02 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac2.viniciusdba.com.br date
Sat Feb 20 11:39:02 BRST 2010
[oracle@mvrac1 .ssh]$ ssh mvrac2-priv.viniciusdba.com.br date
Sat Feb 20 11:39:03 BRST 2010

Isso criará no servidor mvrac1, dentro do diretório corrente, /home/oracle/.ssh, o arquivo known_hosts (hosts conhecidos):

[oracle@mvrac1 .ssh]$ ls -l known_hosts
-rw-r--r-- 1 oracle oinstall 3246 Feb 20 10:33 known_hosts

Agora basta copiar esse arquivo para o outro servidor:

[oracle@mvrac1 .ssh]$ scp -p known_hosts mvrac2:`pwd`
known_hosts                                                                                                  100% 3246     3.2KB/s   00:00

Pronto! Equivalência de usuários devidamente configurada!

Agora iremos para o particionamento de discos.

Como vocês se lembram, temos 4 discos disponibilizados:

  • 1 disco de 12GB (disco local);
  • 3 discos de 5GB (discos storage).

Não mexeremos nas partições do disco local, pois essas já foram configuradas durante a instalação do Linux.

Temos 3 discos de 5GB. Para instalarmos o Oracle RAC precisamos do seguinte:

  • 3 partições para armazenar Voting Disk;
  • 2 partições para armazenar OCR;
  • 3 partições que serão os discos ASM.

Entrarei em mais detalhes sobre o Voting Disk e o OCR no artigo apropriado.

Até o Red Hat Enterprise Linux 4, geralmente se usava raw devices para o Voting Disk e o OCR. Os raw devices, são dispositivos brutos de caracter e não são buferizados. Porém, no kernel 2.6 o raw device foi depreciado, e no Red Hat Enterprise Linux 5 o serviço rawdevices nem existe mais. Por esse motivo, é necessário que o OCR e o Voting Disk deixem de usar raw devices e passem a usar block devices. Os block devices são dispositivos brutos de nível de acesso a blocos. Além disso, são buferizados. Porém, não há diferenças em desempenho (Metalink Note: 401132.1 – How to install Oracle Clusterware with shared storage on block devices).

Mas, o Oracle Universal Installer do Oracle Clusterware 10.2.0.1 não consegue determinar se os block devices estão compartilhados entre os nós (premissa para que se tenha um ambiente clusterizado), isso acontece porque quando o produto Clusterware 10.2.0.1 foi lançado, ainda não se usava block devices para esse fim. Sendo assim, a instalação precisa ser feita apontando para os dispositivos raw devices, e somente após a aplicação do patchset, que reaponteramos para os block devices. Mas, se eu comentei que os raw devices foram depreciados, como é que instalaremos utilizando esse tipo de dispositivo?

Usaremos um workaround para criar os dispositivos raw devices no RHEL5. Porém, como se trata de um workaround, devemos partir para a solução definitiva o quanto antes, a fim de evitar uma possível incidência de bugs envolvendo a utilização de raw devices. Até mesmo se encontrarmos algum bug envolvendo raw devices, tanto a Oracle quanto a Red Hat citarão que estamos utilizando um cenário que “não é mais certificado”, já que foi anunciada a depreciação desse tipo de dispositivo. Sendo assim, a tabela de partições será a seguinte:

  • 3 partições para armazenar Voting Disk em raw device de 256MB cada;
  • 3 partições para armazenar Voting Disk em block device de 256MB cada;
  • 2 partições para armazenar OCR em raw device de 256MB cada;
  • 2 partições para armazenar OCR em block device de 256MB cada;
  • 3 partições que serão os discos ASM (o restante livre dos discos).

Vamos consultar os discos existentes no servidor mvrac1? Como root:

[root@mvrac1 oracle]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1435    11526606   83  Linux
/dev/sda2            1436        1566     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

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

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

O disco sda é o disco local do servidor mvrac1 (12GB). Já, os discos sdb, sdc e sdd são os discos do storage.

Vamos verificar se esses discos do storage também estão no servidor mvrac2?

[root@mvrac2 oracle]# fdisk -l

Disk /dev/sda: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1435    11526606   83  Linux
/dev/sda2            1436        1566     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

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

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

Como eu preciso criar mais de 4 partições por disco, e no Linux só é possível criar 4 partições primárias, criaremos então uma partição estendida com o tamanho integral do disco, e depois criaremos as partições lógicas para atender as nossas necessidades. Vamos ver como será exatamente a tabela de partições?

Como estamos vendo na tabela de partições acima, os discos sdb e sdc terão 5 partições lógicas e 1 partição extendida. Apenas para manter o padrão de nomenclatura, o disco sdd também terá 1 partição extendida e 3 partições lógicas. Bom, sabendo qual será a tabela de partições, vamos particionar?

Vamos começar pelo disco sdb, como root no servidor mvrac1:

[root@mvrac1 oracle]# fdisk /dev/sdb

Será solicitado o comando: criaremos a partição, então digitaremos a tecla [n] de new partition e depois pressionaremos a tecla [ENTER]:

Command (m for help): n

Em seguida, deveremos especificar se será uma partição estendida [e] ou primária [p]. Nesse caso, criaremos uma partição estendida, portanto, digitaremos a tecla [e] e depois a tecla [ENTER]:

Command action
   e   extended
   p   primary partition (1-4)
e

Deveremos qual partição será (de 1 a 4), nesse caso, escolheremos a partição 1:

Partition number (1-4): 1

Em seguida, deveremos especificar o tamanho da partição, como é a partição estendida, pegará todo o tamanho do disco, basta pressionar [ENTER] para o primeiro cilindro, e [ENTER] para o último cilindro:

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

Maravilha! Agora precisamos criar as partições lógicas, automaticamente, serão atribuídos números a partir de 5. Criar a nova partição, pressionar a tecla [n] e pressionar [ENTER]:

Command (m for help): n

A partição agora será do tipo lógica, basta pressionar a tecla [l] e depois [ENTER]:

Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l

Essa partição terá o tamanho de 256MB, portanto, basta pressionar [ENTER] no primeiro cilindro e no último cilindro, digitar +256M e em seguida pressionar [ENTER]:

First cylinder (1-652, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M

Precisamos criar mais 3 partições de 256MB (colocarei aqui todos os comandos num único bloco):

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (33-652, default 33):
Using default value 33
Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (65-652, default 65):
Using default value 65
Last cylinder or +size or +sizeM or +sizeK (65-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (97-652, default 97):
Using default value 97
Last cylinder or +size or +sizeM or +sizeK (97-652, default 652): +256M

Agora precisamos criar a última partição lógica desse disco, basta pressionar [n], depois [ENTER], na hora de especificar o tamanho, basta pressionar [ENTER] para o cilindro inicial e o cilindro final:

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (129-652, default 129):
Using default value 129
Last cylinder or +size or +sizeM or +sizeK (129-652, default 652):
Using default value 652

Para saber se a tabela de partições está correta, basta pressionar [p] e depois [ENTER]:

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+   5  Extended
/dev/sdb5               1          32      256977   83  Linux
/dev/sdb6              33          64      257008+  83  Linux
/dev/sdb7              65          96      257008+  83  Linux
/dev/sdb8              97         128      257008+  83  Linux
/dev/sdb9             129         652     4208998+  83  Linux

Como está correto, temos que gravar a tabela e partições, basta pressionar [w] e depois [ENTER]:

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

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

Como se trata de um disco compartilhado entre os servidores, vamos ver se ele foi também particionado no servidor mvrac2? Como root no servidor mvrac2:

[root@mvrac2 oracle]# fdisk -l /dev/sdb

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+   5  Extended
/dev/sdb5               1          32      256977   83  Linux
/dev/sdb6              33          64      257008+  83  Linux
/dev/sdb7              65          96      257008+  83  Linux
/dev/sdb8              97         128      257008+  83  Linux
/dev/sdb9             129         652     4208998+  83  Linux

As partições apareceram no servidor mvrac2! Mas, como o comando foi feito a partir do servidor mvrac1, os devices de cada partição ainda não foram criados no servidor mvrac2 (no diretório /dev/). Há duas formas de criarmos esses devices das partições no servidor mvrac2: reiniciando o servidor, ou, como root:

[root@mvrac2 oracle]# fdisk /dev/sdb

E gravar a tabela de partições, pressionando a tecla [w] e depois [ENTER]:

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

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

Pronto! O disco /dev/sdb foi particionado com sucesso nos 2 servidores. O disco /dev/sdc terá a mesma estrutura de partições que o disco /dev/sdb, colocarei o comando num único bloco:

[root@mvrac1 oracle]# fdisk /dev/sdc

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
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): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (33-652, default 33):
Using default value 33
Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (65-652, default 65):
Using default value 65
Last cylinder or +size or +sizeM or +sizeK (65-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (97-652, default 97):
Using default value 97
Last cylinder or +size or +sizeM or +sizeK (97-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (129-652, default 129):
Using default value 129
Last cylinder or +size or +sizeM or +sizeK (129-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+   5  Extended
/dev/sdc5               1          32      256977   83  Linux
/dev/sdc6              33          64      257008+  83  Linux
/dev/sdc7              65          96      257008+  83  Linux
/dev/sdc8              97         128      257008+  83  Linux
/dev/sdc9             129         652     4208998+  83  Linux

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

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

Lembrando que no servidor mvrac2 esse disco precisa ter os devices das partições criadas no diretório /dev:

[root@mvrac2 oracle]# fdisk /dev/sdc

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

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

O disco /dev/sdd terá 1 partição estendida com o tamanho total do disco, 2 partições de 256MB e 1 partição com o restante de espaço disponível no disco (4,5GB):

[root@mvrac1 oracle]# fdisk /dev/sdd

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
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): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1-652, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (33-652, default 33):
Using default value 33
Last cylinder or +size or +sizeM or +sizeK (33-652, default 652): +256M

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (65-652, default 65):
Using default value 65
Last cylinder or +size or +sizeM or +sizeK (65-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+   5  Extended
/dev/sdd5               1          32      256977   83  Linux
/dev/sdd6              33          64      257008+  83  Linux
/dev/sdd7              65         652     4723078+  83  Linux

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

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

No servidor mvrac2 esse disco precisa ter os devices das partições criadas no diretório /dev:

[root@mvrac2 oracle]# fdisk /dev/sdd

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

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

As partições foram criadas!

Agora, marcaremos como discos de ASM, as partições reservadas para o ASM. Lembrando que as partições reservadas para o ASM são:

  • /dev/sdb9: 4GB;
  • /dev/sdc9: 4GB;
  • /dev/sdd7: 4,5GB.

Para marcarmos as partições como discos ASM, basta usarmos a ASMLib. A nomenclatura padrão será: ASMDISKx. Como root, no servidor mvrac1:

[root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdb9
Marking disk "ASMDISK1" as an ASM disk:                    [  OK  ]
[root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK2 /dev/sdc9
Marking disk "ASMDISK2" as an ASM disk:                    [  OK  ]
[root@mvrac1 oracle]# /etc/init.d/oracleasm createdisk ASMDISK3 /dev/sdd7
Marking disk "ASMDISK3" as an ASM disk:                    [  OK  ]

Para verificar se os discos foram criados, ainda no servidor mvrac1:

[root@mvrac1 oracle]# /etc/init.d/oracleasm listdisks
ASMDISK1
ASMDISK2
ASMDISK3

Agora, precisamos verificar se o servidor mvrac2 enxergará os discos de ASM criados. Antes, precisamos fazer um scan dos discos, no momento do scan, a ASMLib lerá o cabeçalho de todas as partições de disco do servidor:

[root@mvrac2 oracle]# /etc/init.d/oracleasm scandisks
Scanning the system for Oracle ASMLib disks:               [  OK  ]

Agora precisamos verificar se os discos foram realmente enxergados:

[root@mvrac2 oracle]# /etc/init.d/oracleasm listdisks
ASMDISK1
ASMDISK2
ASMDISK3

Pronto! Discos do ASM criados!

Agora falta apenas criar os raw e block devices. Usaremos o utilitário chamado UDEV para isso. Para criarmos esses dispositivos, criaremos arquivos com as regras necessárias no diretório /etc/udev/rules.d. O arquivo precisa ter a extensão .rules.

Criaremos primeiro o arquivo que criará os raw devices:

[root@mvrac1 oracle]# cd /etc/udev/rules.d/
[root@mvrac1 oracle]# vi 62-oracle-raw.rules

O conteúdo do arquivo 62-oracle-raw.rules será:

ACTION=="add", KERNEL=="sdb5", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb7", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdc5", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdc7", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sdd5", RUN+="/bin/raw /dev/raw/raw5 %N"
KERNEL=="raw[1-5]*", OWNER="oracle", GROUP="dba", MODE="640"

Agora criaremos o arquivo que criará os block devices:

[root@mvrac1 oracle]# vi 63-oracle-block.rules

O conteúdo do arquivo 63-oracle-block.rules será:

KERNEL=="sdb6", NAME="ocr1", OWNER="root", GROUP="dba", MODE="0640"
KERNEL=="sdb8", NAME="voting1", OWNER="oracle", GROUP="dba", MODE="0640"
KERNEL=="sdc6", NAME="ocr2", OWNER="root", GROUP="dba", MODE="0640"
KERNEL=="sdc8", NAME="voting2", OWNER="oracle", GROUP="dba", MODE="0640"
KERNEL=="sdd6", NAME="voting3",OWNER="oracle",GROUP="dba", MODE="0640"

Após isso, faremos o restart do serviço udev:

[root@mvrac1 rules.d]# start_udev
Starting udev:                                             [  OK  ]

Agora verificaremos se os devices foram criados:

[root@mvrac1 rules.d]# ls -l /dev/ocr* /dev/voting* /dev/raw/raw*
brw-r----- 1 oracle dba   8, 22 Feb 20 17:34 /dev/ocr1
brw-r----- 1 oracle dba   8, 38 Feb 20 17:35 /dev/ocr2
crw-r----- 1 oracle dba 162,  1 Feb 20 17:36 /dev/raw/raw1
crw-r----- 1 oracle dba 162,  2 Feb 20 17:36 /dev/raw/raw2
crw-r----- 1 oracle dba 162,  3 Feb 20 17:36 /dev/raw/raw3
crw-r----- 1 oracle dba 162,  4 Feb 20 17:36 /dev/raw/raw4
crw-r----- 1 oracle dba 162,  5 Feb 20 17:36 /dev/raw/raw5
brw-r----- 1 root   dba   8, 24 Feb 20 17:34 /dev/voting1
brw-r----- 1 root   dba   8, 40 Feb 20 17:35 /dev/voting2
brw-r----- 1 oracle dba   8, 54 Feb 20 17:35 /dev/voting3

Os dispositivos foram criados!

Agora precisamos copiar esses arquivos para o servidor mvrac2:

[root@mvrac1 rules.d]# scp -p *ora*.rules mvrac2:`pwd`
The authenticity of host 'mvrac2 (172.23.10.12)' can't be established.
RSA key fingerprint is ee:df:af:11:67:a9:b5:0a:e0:8f:3d:69:2a:3f:ef:6e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mvrac2,172.23.10.12' (RSA) to the list of known hosts.
root@mvrac2's password:
62-oracle-raw.rules                       100%  386     0.4KB/s   00:00
63-oracle-block.rules                     100%  359     0.4KB/s   00:00

Teremos que confirmar com yes, e depois digitar a senha do usuário root. Isso acontece porque criamos a equivalência de usuário para o usuário oracle. O root não precisa ter a equivalência de usuário criada.

Após copiar os arquivos para o servidor mvrac2, teremos que reiniciar o serviço udev no servidor mvrac2:

[root@mvrac2 rules.d]# start_udev
Starting udev:                                             [  OK  ]

Agora verificaremos se os devices foram criados:

Agora verificaremos se os devices foram criados:

[root@mvrac2 rules.d]# ls -l /dev/ocr* /dev/voting* /dev/raw/raw*
brw-r----- 1 oracle dba   8, 22 Feb 20 17:34 /dev/ocr1
brw-r----- 1 oracle dba   8, 38 Feb 20 17:35 /dev/ocr2
crw-r----- 1 oracle dba 162,  1 Feb 20 17:36 /dev/raw/raw1
crw-r----- 1 oracle dba 162,  2 Feb 20 17:36 /dev/raw/raw2
crw-r----- 1 oracle dba 162,  3 Feb 20 17:36 /dev/raw/raw3
crw-r----- 1 oracle dba 162,  4 Feb 20 17:36 /dev/raw/raw4
crw-r----- 1 oracle dba 162,  5 Feb 20 17:36 /dev/raw/raw5
brw-r----- 1 root   dba   8, 24 Feb 20 17:34 /dev/voting1
brw-r----- 1 root   dba   8, 40 Feb 20 17:35 /dev/voting2
brw-r----- 1 oracle dba   8, 54 Feb 20 17:35 /dev/voting3

Pronto! Devices criados!

Nesse momento estamos prontos para iniciar a instalação dos produtos Oracle!

Nos veremos no próximo post, semana que vem!

Um abraço!

Vinicius

——————————-

PS:

Observação:

Apenas para ficar claro, sobre as partições de discos, num ambiente corporativo eu costumo pedir o seguinte:

  • 1 disco (LUN) de 2GB para utilizar as partições raw devices (esse disco posteriormente será eliminado);
  • 2 discos (LUN’s) de 512MB para utilizar as partições block devices;
  • 1 disco (LUN) de 256MB para utilizar a partição block device;
  • Quantidade “X de discos para ASM, aí vai depender do tamanho do banco de dados.