…
Na parte anterior desta série, fizemos a criação do banco que representará o banco de dados primário o seu database de produção, aquele que queremos que os dados sejam protegidos.
Tanto no banco primário como no de contingência, para que o Oracle Data Guard 11g possa ser implementado, as configurações devem se estender em ambos os bancos. Hoje, nesta quinta parte vamos realizar as configurações do banco primário, deixando as configurações do banco standby para o próximo artigo.
Configurando o database primário
1. Habilitando o ARCHIVELOG Mode.
Nosso primeiro passo será configurar o banco de dados primário para archivelog mode. A maioria das features de Oracle HA (High Availability) requer que habilitemos o modo ARCHIVELOG no banco de dados. Ao habilitar esse modo, mudamos o comportamento do redo log para não mais ser sobrescrito e passará a arquivar todos os dados de log gerados pelos arquivos redo log do banco de dados. Você pode obter mais informações aqui:
Para você pode checar o modo de arquivamento do se o seu banco, através da seguinte consulta:
SQL> SELECT LOG_MODE FROM V$DATABASE; LOG_MODE ------------ NOARCHIVELOG
Antes de ativar o arquivamento do banco de dados, vamos certificar o status do nosso listener e do próprio banco de dados.
[oracle@bancodg ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 10-APR-2013 21:41:53
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/bancodg/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bancodg.oracle.com)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bancodg.oracle.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 10-APR-2013 21:41:55
Uptime 0 days 0 hr. 0 min. 20 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/bancodg/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bancodg.oracle.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@bancodg ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 10 21:32:37 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 1853947904 bytes
Fixed Size 2229384 bytes
Variable Size 452987768 bytes
Database Buffers 1392508928 bytes
Redo Buffers 6221824 bytes
Database mounted.
Database opened.
SQL>
Com o database primário iniciado, vamos criar o diretório para onde os archives logs gerados pelo banco será salvo.
SQL> !mkdir -p /u01/app/oracle/archive/orcl
Precisamos agora, definir o formato que será gravado o nosso arquivo de log no disco e a sua localização, temos para isso dois parâmetros: o log_archive_format e log_archive_dest_1. Pode-se definir vários destinos distintos de archives, através dos parâmetros log_archive_dest_2, log_archive_dest_3, log_archive_dest_4 e etc … Por enquanto, vamos apenas definir um único destino, que será o próprio disco local do servidor onde encontra-se o database primário.
SQL> alter system set log_archive_format='orcl_%t_%s_%r.arc' scope=spfile; System altered. SQL> alter system set log_archive_dest_1='LOCATION=/u01/app/oracle/archive/orcl' scope=spfile; System altered.
Com todas as configurações feitas, vamos agora ativar o modo de ARCHIVELOG. Para que isso é necessário baixar e subir a instância do banco Oracle.
SQL> shut immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 1853947904 bytes Fixed Size 2229384 bytes Variable Size 452987768 bytes Database Buffers 1392508928 bytes Redo Buffers 6221824 bytes Database mounted. SQL> alter database archivelog; Database altered. SQL> alter database open; Database altered. SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/app/oracle/archive/orcl Oldest online log sequence 1 Next log sequence to archive 3 Current log sequence 3
2. Habilitando o FORCE LOGGING modo
Quando é habilitado a modo de FORCE LOGGING no banco de dados Oracle, todas as mudanças que ocorrem no banco de dados são gerados logs, exceto para as tabelas e tablespaces temporários. Isso é fundamental para o Oracle Dataguard, pois assegura que toda transação efetivada (commit) pode ser capturada através dos arquivos de log do Oracle (redo ou archive).
Podemos ativar o modo de FORCE LOGGING da seguinte maneira:
SQL> alter database force logging; Database altered. SQL> select force_logging from v$database; FOR --- YES
3. Criando os arquivos de Standby Redo Log.
O Oracle Data Guard pode recuperar e aplicar mais dados do Standby Redo Log do que no convencional Redo Log, por isso a criação de SRL se faz necessária quando estamos montando um Oracle Data Guard.
Com a formula seguinte, é possível determinar o número apropriado dos SRL:
(maximum number of logfiles for each thread + 1) * maximum number of threads
Para o nosso caso: (3 + 1) * 1 = 4
É necessário também que o tamanho do SRL seja exatamente igual ao do Redo Log presente no seu banco, que no nosso ambiente é 50M.
Vamos então adicionar os 4 SRL para o database primário:
SQL> alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/redo_st04.log' size 50M;
Database altered.
SQL> alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/redo_st05.log' size 50M;
Database altered.
SQL> alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/redo_st06.log' size 50M;
Database altered.
SQL> alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/redo_st07.log' size 50M;
Database altered.
SQL> select group#, sequence#, archived, status from v$standby_log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------
4 0 YES UNASSIGNED
5 0 YES UNASSIGNED
6 0 YES UNASSIGNED
7 0 YES UNASSIGNED
Você pode conferir os SRL no seu banco de dados, através da view V$standby_log, como fizemos acima.
4. Modificando os parâmetros de inicialização
Para uma configuração simples de Oracle Data Guard, basicamente precisamos mudar os 8 parâmetros de inicialização abaixo:
SQL> alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,stdby)'; System altered. SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/archive/orcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'; System altered. SQL> alter system set LOG_ARCHIVE_DEST_2='SERVICE=stdby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stdby'; System altered. SQL> alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE; System altered. SQL> alter system set FAL_SERVER=stdby; System altered. SQL> alter system set FAL_CLIENT=orcl; System altered. SQL> alter system set DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/stdby','/u01/app/oracle/oradata/orcl' scope=spfile; System altered. SQL> alter system set LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/stdby','/u01/app/oracle/oradata/orcl' scope=spfile; System altered.
Segue a explicação de cada um deles:
LOG_ARCHIVE_CONFIG: Habita ou desabilita o comportamento de enviar as mensagens do redo log para o destino. Com a opção DG_CONFIG, podemos definir um range de até 9 destinos, definindo através do DB_UNIQUE_NAME de cada um deles.
LOG_ARCHIVE_DEST_1: Especifica o caminho do primeiro destino de archive do banco de dados. No nosso caso ele será gravado no caminho “/u01/app/oracle/archive/orcl” do servidor do banco primário. A opção VALID_FOR define como será gravado os dados, veja mais detalhes aqui: http://docs.oracle.com/cd/B28359_01/server.111/b28294/log_arch_dest_param.htm#i83986
LOG_ARCHIVE_DEST_2: Esse parâmetro, defini o segundo destino de archive. Nesse parâmetro que concentra a mágica do Oracle Dataguard, diferente com o que fizemos no primeiro destino (LOG_ARCHIVE_DEST_1), vamos fazer com que o segundo destino de archive do banco primário seja gravado no primeiro destino de archive do banco standby. Veja que é exatamente o que definimos nesse parâmetro, pedidos para o LGWR escrever os dados de log através do serviço chamado “stdby” para o banco de dados “stdby”
LOG_ARCHIVE_DEST_STATE_1: Com esse parâmetro, apenas definimos que o primeiro destino de archive está habitado. Por enquanto o segundo destino de archive (LOG_ARCHIVE_DEST_STATE_2) que levará os dados de log para o Data Guard, matemos desativado.
FAL_SERVER e FAL_CLIENT: São parâmetros de inicialização usados para o FAL (fetch archive log), ou seja é utilizado para a detecção e resolução dos destinos do Data Guard. Basicamente, o no banco primário o FAL_SERVER será o TNS service name do banco standby e vice-versa.
DB_FILE_NAME_CONVERT: Ele não é mandatório para o Data Guard, na verdade sua função não é nem para o Data Guard, ele é apenas utilizado no momento do recovery. Esse parâmetro como o nome diz converte o nome do datafile e tempfile do primário database para o correspondente caminho no standby database, é utíl muito útil no momento do recover, pois assim podemos renomear os datafiles facilmente. No nosso caso, vamos converter todos os datafiles que estão no caminho “/u01/app/oracle/oradata/orcl” no primário database para o novo caminho “/u01/app/oracle/oradata/stdby” no standby database.
LOG_FILE_NAME_CONVERT: O parâmetro LOG_FILE_NAME_CONVERT faz exatamente o que o DB_FILE_NAME_CONVERT faz, porém apenas com redo logs.
5. Backup do banco primário
Com todas as configurações feitas, precisamos agora realizar um backup do banco primário. O backup será feito através do RMAN no seguinte caminho: “/u01/app/oracle/backup/rman”
Siga os passos abaixo:
[oracle@bancodg ~]$ mkdir -p /u01/app/oracle/backup/rman
[oracle@bancodg ~]$ rman target /
Recovery Manager: Release 11.2.0.3.0 - Production on Wed Apr 10 22:32:36 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1334188681)
RMAN> run {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup database format '/u01/app/oracle/backup/rman/%d_%s_%p_%U.bkp';
5> backup archivelog all format '/u01/app/oracle/backup/rman/ARCH_%d_%s_%p_%U.bkp';
6> backup current controlfile for standby format '/u01/app/oracle/backup/rman/control_%d_%U.bkp';
7> }
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=9 device type=DISK
allocated channel: c2
channel c2: SID=20 device type=DISK
Starting backup at 10-APR-13
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
channel c1: starting piece 1 at 10-APR-13
channel c2: starting full datafile backup set
channel c2: specifying datafile(s) in backup set
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
channel c2: starting piece 1 at 10-APR-13
channel c2: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ORCL_2_1_02o6ou56_1_1.bkp tag=TAG20130410T225222 comment=NONE
channel c2: backup set complete, elapsed time: 00:00:35
channel c2: starting full datafile backup set
channel c2: specifying datafile(s) in backup set
including current control file in backup set
channel c2: starting piece 1 at 10-APR-13
channel c2: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ORCL_3_1_03o6ou69_1_1.bkp tag=TAG20130410T225222 comment=NONE
channel c2: backup set complete, elapsed time: 00:00:03
channel c2: starting full datafile backup set
channel c2: specifying datafile(s) in backup set
including current SPFILE in backup set
channel c2: starting piece 1 at 10-APR-13
channel c2: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ORCL_4_1_04o6ou6g_1_1.bkp tag=TAG20130410T225222 comment=NONE
channel c2: backup set complete, elapsed time: 00:00:03
channel c1: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ORCL_1_1_01o6ou56_1_1.bkp tag=TAG20130410T225222 comment=NONE
channel c1: backup set complete, elapsed time: 00:01:27
Finished backup at 10-APR-13
Starting backup at 10-APR-13
current log archived
channel c1: starting archived log backup set
channel c1: specifying archived log(s) in backup set
input archived log thread=1 sequence=3 RECID=1 STAMP=812411465
input archived log thread=1 sequence=4 RECID=2 STAMP=812412072
channel c1: starting piece 1 at 10-APR-13
channel c2: starting archived log backup set
channel c2: specifying archived log(s) in backup set
input archived log thread=1 sequence=5 RECID=3 STAMP=812415231
channel c2: starting piece 1 at 10-APR-13
channel c1: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ARCH_ORCL_5_1_05o6ou7v_1_1.bkp tag=TAG20130410T225351 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:07
channel c2: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/ARCH_ORCL_6_1_06o6ou7v_1_1.bkp tag=TAG20130410T225351 comment=NONE
channel c2: backup set complete, elapsed time: 00:00:07
Finished backup at 10-APR-13
Starting backup at 10-APR-13
channel c1: starting full datafile backup set
channel c1: specifying datafile(s) in backup set
including standby control file in backup set
channel c1: starting piece 1 at 10-APR-13
channel c1: finished piece 1 at 10-APR-13
piece handle=/u01/app/oracle/backup/rman/control_ORCL_07o6ou86_1_1.bkp tag=TAG20130410T225358 comment=NONE
channel c1: backup set complete, elapsed time: 00:00:01
Finished backup at 10-APR-13
released channel: c1
released channel: c2
RMAN>
6. Criando uma cópia do arquivo de inicialização
Vamos criar uma cópia do arquivo de inicialização do nosso banco primário, a cópia será feita no mesmo caminho do backup que acabamos de fazer, isso porque iremos mover toda essa pasta para o servidor do banco standby. Segue:
[oracle@bancodg ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.3.0 Production on Wed Apr 10 23:02:21 2013 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> create pfile='/u01/app/oracle/backup/rman/initstdby.ora' from spfile; File created.
7. Copia do password file
Será necessário também que uma cópia do passord file do banco primário esteja no servidor contigência com o nome do banco standby.
[oracle@bancodg dbs]$ cd $ORACLE_HOME/dbs [oracle@bancodg dbs]$ scp orapworcl standdg:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwstdby oracle@standdg's password: orapworcl 100% 1536 1.5KB/s 00:00
8. Criando os serviços TNS
O Oracle Data Guard é totalmente configurado para ser executado em cima do Oracle NET. Toda sua comunicação com os bancos de standby é feito através do serviços configurados no TNS.
No nosso caso, assim como foi configurado os parâmetros no passo 4 acima, precisamor ter os serviços “orcl” e “stdby” em ambas as máquinas.
Segue:
[oracle@bancodg ~]$ cd $ORACLE_HOME/network/admin
[oracle@bancodg admin]$ vi tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bancodg.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
STDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = standdg.oracle.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stdby)
)
)
Com a configuração realizada, vamos para um teste simples, primeiro no serviço orcl depois no stdby.
[oracle@bancodg admin]$ tnsping orcl TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 10-APR-2013 23:06:33 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = bancodg.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl))) [oracle@bancodg admin]$ tnsping stdby TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 10-APR-2013 23:06:33 Copyright (c) 1997, 2011, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = standdg.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = stdby)))
Caso você receba o erro TNS-12541: TNS:no listener, você provavelmente esqueceu de subir o listener no servidor standby.
9. Movendo os arquivos para o standby
Temos agora o nosso banco primário todo configurado e pronto para iniciar o standby, precisamos apenas mover o backup e o arquivo de inicialização que estão no nosso servidor primário para o banco standby.
[oracle@bancodg ~]$ cd $ORACLE_BASE/backup/rman [oracle@bancodg rman]$ ls -ltr total 1208568 -rw-r----- 1 oracle oinstall 420593664 Apr 10 22:52 ORCL_2_1_02o6ou56_1_1.bkp -rw-r----- 1 oracle oinstall 9797632 Apr 10 22:53 ORCL_3_1_03o6ou69_1_1.bkp -rw-r----- 1 oracle oinstall 98304 Apr 10 22:53 ORCL_4_1_04o6ou6g_1_1.bkp -rw-r----- 1 oracle oinstall 703807488 Apr 10 22:53 ORCL_1_1_01o6ou56_1_1.bkp -rw-r----- 1 oracle oinstall 59481600 Apr 10 22:53 ARCH_ORCL_5_1_05o6ou7v_1_1.bkp -rw-r----- 1 oracle oinstall 32740864 Apr 10 22:53 ARCH_ORCL_6_1_06o6ou7v_1_1.bkp -rw-r----- 1 oracle oinstall 9797632 Apr 10 22:53 control_ORCL_07o6ou86_1_1.bkp -rw-r--r-- 1 oracle oinstall 1388 Apr 10 23:02 initstdby.ora
Para que a restauração seja mais fácil, sem a necessidade de catalogar os backup, vamos criar o mesmo diretório no servidor standby
[oracle@bancodg rman]$ ssh oracle@standdg mkdir -p /u01/app/oracle/backup/rman oracle@standdg's password:
Com o diretório criado, vamos apenas mover todos os arquivos da pasta /u01/app/oracle/backup/rman para o servidor standby.
[oracle@bancodg rman]$ pwd /u01/app/oracle/backup/rman [oracle@bancodg rman]$ scp * standdg:`pwd` oracle@standdg's password: ARCH_ORCL_5_1_05o6ou7v_1_1.bkp 100% 57MB 28.4MB/s 00:02 ARCH_ORCL_6_1_06o6ou7v_1_1.bkp 100% 31MB 31.2MB/s 00:01 control_ORCL_07o6ou86_1_1.bkp 100% 9568KB 9.3MB/s 00:00 initstdby.ora 100% 1388 1.4KB/s 00:00 ORCL_1_1_01o6ou56_1_1.bkp 100% 671MB 22.4MB/s 00:30 ORCL_2_1_02o6ou56_1_1.bkp 100% 401MB 26.7MB/s 00:15 ORCL_3_1_03o6ou69_1_1.bkp 100% 9568KB 9.3MB/s 00:01 ORCL_4_1_04o6ou6g_1_1.bkp 100% 96KB 96.0KB/s 00:00
Essa parte termina aqui. Na parte 6 (próxima parte), iremos configurar o database standby, terminando assim a criação do Oracle Dataguard 11g.
Até lá …
…
Na parte 2 vimos como configurar e instalar o software do Oracle Database 11g.
Como é necessário duas máquinas virtuais para o nosso teste com Oracle Data Guard 11g, iremos então clonar literalmente a máquina DB Primary para a máquina a nova máquina virtual chamada DB Dataguard. Essa ação é muito fácil de ser feita com o VirtualBox, apenas com alguns cliques temos nossa máquina clonada.
Após a clonagem, teremos os seguintes ambientes para os testes de Dataguard:
Clonando a VM
Para clonar a VM DB Primary, siga os passos abaixos:
Clique na opção Clone … para abrir o assistente de configuração da nova máquina virtual.
Defina o nome como DB Dataguard.
Escolha a opção Full clone para iniciar a clonagem da VM.
Nesse ponto temos duas máquinas virtuais, uma chamada DB Primary que é nosso banco de dados produção e a VM DB Dataguard que é o Oracle Dataguard do banco de dados da máquina DB Primary.
Vamos iniciar a máquina DB Dataguard para iniciarmos as configurações nessa máquina.
Com a máquina ligada, clique em Administration depois Network.
Clique no botão EDIT para a interface eth0.
Defina o IP 20.0.0.20 para o endereço ip da interface.
Confirme a operação.
Agora na aba DNS mude o hostname para standdg.oracle.com
Agora precismos ativar a interface, para isso clique no botão Activate.
Agora, precisamos alterar o arquivo host da máquina, para isso, vamos conectar na máquina de Dataguard e mudar o arquivo de configuração /etc/hosts
FlavioSoares:VirtualBox VMs flaviosoares$ ssh root@20.0.0.20 The authenticity of host '20.0.0.20 (20.0.0.20)' can't be established. RSA key fingerprint is 66:86:82:d1:f4:72:1a:a0:55:c3:b2:65:f8:64:1f:17. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '20.0.0.20' (RSA) to the list of known hosts. root@20.0.0.20's password: Last login: Thu Jan 31 23:37:17 2013 [root@standdg ~]#
[root@standdg ~]# vi /etc/hosts
# Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 20.0.0.10 bancodg.oracle.com bancodg 20.0.0.20 standdg.oracle.com standdg [root@standdg ~]# [root@standdg ~]# hostname standdg.oracle.com [root@standdg ~]# hostname -i 20.0.0.20
Por último, precisamos mudar a variável de ambiente ORACLE_SID, para o banco que será o nosso Dataguard que no nosso caso chama-se stdby para o banco de Dataguard:
[oracle@standdg ~]$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=stdby
export PATH=$ORACLE_HOME/bin:$PATH
Teste de conectividade entre as VMs
Para iniciar os testes de conectividade das máquinas, inicie a VM DB Primary.
Com a máquina DB Primary ligada, conecte e realizar os testes abaixos.
FlavioSoares:VirtualBox VMs flaviosoares$ ssh root@20.0.0.10 root@20.0.0.10's password: Last login: Thu Jan 31 23:59:23 2013 from 20.0.0.1 [root@bancodg ~]# cat /etc/hosts # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 20.0.0.10 bancodg.oracle.com bancodg 20.0.0.20 standdg.oracle.com standdg
[root@bancodg ~]# hostname
bancodg.oracle.com [root@bancodg ~]# ping standdg PING standdg.oracle.com (20.0.0.20) 56(84) bytes of data. 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=1 ttl=64 time=1.30 ms 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=2 ttl=64 time=0.237 ms 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=3 ttl=64 time=0.404 ms 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=4 ttl=64 time=0.358 ms --- standdg.oracle.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3002ms rtt min/avg/max/mdev = 0.237/0.577/1.309/0.427 ms [root@bancodg ~]# ping standdg.oracle.com PING standdg.oracle.com (20.0.0.20) 56(84) bytes of data. 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=1 ttl=64 time=0.247 ms 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=2 ttl=64 time=0.340 ms 64 bytes from standdg.oracle.com (20.0.0.20): icmp_seq=3 ttl=64 time=1.00 ms --- standdg.oracle.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.247/0.529/1.001/0.336 ms
Agora faça o teste inverso, da máquina virtual DB Dataguard faça o seguinte:
[root@standdg ~]# hostname standdg.oracle.com [root@standdg ~]# ping bancodg PING bancodg.oracle.com (20.0.0.10) 56(84) bytes of data. 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=1 ttl=64 time=0.181 ms 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=2 ttl=64 time=0.363 ms 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=3 ttl=64 time=0.278 ms --- bancodg.oracle.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.181/0.274/0.363/0.074 ms [root@standdg ~]# ping bancodg.oracle.com PING bancodg.oracle.com (20.0.0.10) 56(84) bytes of data. 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=1 ttl=64 time=0.134 ms 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=2 ttl=64 time=0.247 ms 64 bytes from bancodg.oracle.com (20.0.0.10): icmp_seq=3 ttl=64 time=0.379 ms --- bancodg.oracle.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1999ms rtt min/avg/max/mdev = 0.134/0.253/0.379/0.100 ms
Criando o LISTENER
Aproveitando que as duas VMs estão ligadas e seus host atualizados, vamos aproveitar e criar o listener nelas. Para isso conecte com o usuário oracle em cada uma das máquina e realize os passos abaixo:
Execute o comando netca
Acima está apenas os passos da máquina DB Primary (bancodg), é necessário realizar os mesmos passos para a máquina DB Dataguard (standdg).
…
Na primeira parte da nossa série, foi criada a máquina virtual chamada de “DB Primary”, ela será nosso Primary Database (está lembrado?). Temos somente o Oracle Linux instalado nessa máquina, precisamos hoje criar as configurações do pré-requisitos e instalarmos o Oracle Database 11g nessa máquina.
Após essa máquina virtual está totalmente configurada e instalada, iremos criar um clone desse disco para a criação do Dataguard Database, mais isso faremos juntos na parte 3.
Hoje nossa missão é realizar os pré requisitos e instalar o Oracle Database 11gR2, para isso tenha em mãos o binário de instalação do Oracle 11g R2. Vou utilizar aqui a versão 11.2.0.3, porém fica a seu critério que release 11g R2 utilizar.
Com a máquina virtual ligada, clique no disco vazio que fica na barra de status da VM (veja o marco em vermelho).
Após ter clicado, irá mostrar os discos ISO disponíveis, provavelmente o Oracle Linux estará, caso não esteja selecione através da opção “Choose a virtual CD/DVD disk file …”
Feito isso, você verá a ISO do Oracle Linux sendo montada como um CDROM na máquina Virtual:
Veja que a ISO está apontando para o diretório /media/Enterprise Linux dvd 20100405.
[root@bancodg ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 19G 3.0G 15G 17% / tmpfs 502M 0 502M 0% /dev/shm /dev/hda 3.4G 3.4G 0 100% /media/Enterprise Linux dvd 20100405
Entre no diretório da ISO.
[root@bancodg ~]# cd /media/Enterprise\ Linux\ dvd\ 20100405/Server/ [root@bancodg Server]#
É necessário agora realizar a instalação dos pacotes rpm Linux. Seja abaixo a instalação de cada um deles.
[root@bancodg Server]# rpm -ivh binutils-2.17.50.0.6-14.el5.x86_64.rpm warning: binutils-2.17.50.0.6-14.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package binutils-2.17.50.0.6-14.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh compat-libstdc++-33-3.2.3-61.x86_64.rpm warning: compat-libstdc++-33-3.2.3-61.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package compat-libstdc++-33-3.2.3-61.x86_64 is already installed [root@bancodg Server]# rpm -ivh compat-libstdc++-33-3.2.3-61.i386.rpm warning: compat-libstdc++-33-3.2.3-61.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package compat-libstdc++-33-3.2.3-61.i386 is already installed [root@bancodg Server]# rpm -ivh elfutils-libelf-0.137-3.el5.x86_64.rpm warning: elfutils-libelf-0.137-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package elfutils-libelf-0.137-3.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh glibc-2.5-49.x86_64.rpm warning: glibc-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-2.5-49.x86_64 is already installed [root@bancodg Server]# rpm -ivh glibc-2.5-49.i686.rpm warning: glibc-2.5-49.i686.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-2.5-49.i686 is already installed [root@bancodg Server]# rpm -ivh glibc-common-2.5-49.x86_64.rpm warning: glibc-common-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-common-2.5-49.x86_64 is already installed [root@bancodg Server]# rpm -ivh ksh-20100202-1.el5.x86_64.rpm warning: ksh-20100202-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package ksh-20100202-1.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libaio-0.3.106-5.x86_64.rpm warning: libaio-0.3.106-5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libaio-0.3.106-5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libaio-0.3.106-5.i386.rpm warning: libaio-0.3.106-5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libaio-0.3.106-5.i386 is already installed [root@bancodg Server]# rpm -ivh libgcc-4.1.2-48.el5.x86_64.rpm warning: libgcc-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libgcc-4.1.2-48.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libgcc-4.1.2-48.el5.i386.rpm warning: libgcc-4.1.2-48.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libgcc-4.1.2-48.el5.i386 is already installed [root@bancodg Server]# rpm -ivh libstdc++-4.1.2-48.el5.x86_64.rpm warning: libstdc++-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libstdc++-4.1.2-48.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libstdc++-4.1.2-48.el5.i386.rpm warning: libstdc++-4.1.2-48.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libstdc++-4.1.2-48.el5.i386 is already installed [root@bancodg Server]# rpm -ivh make-3.81-3.el5.x86_64.rpm warning: make-3.81-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package make-3.81-3.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh unixODBC-2.2.11-7.1.x86_64.rpm warning: unixODBC-2.2.11-7.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:unixODBC ########################################### [100%] [root@bancodg Server]# rpm -ivh unixODBC-2.2.11-7.1.i386.rpm warning: unixODBC-2.2.11-7.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:unixODBC ########################################### [100%] [root@bancodg Server]# rpm -ivh unixODBC-devel-2.2.11-7.1.x86_64.rpm warning: unixODBC-devel-2.2.11-7.1.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:unixODBC-devel ########################################### [100%] [root@bancodg Server]# rpm -ivh unixODBC-devel-2.2.11-7.1.i386.rpm warning: unixODBC-devel-2.2.11-7.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:unixODBC-devel ########################################### [100%] [root@bancodg Server]# rpm -ivh elfutils-libelf-devel-static-0.137-3.el5.x86_64.rpm warning: elfutils-libelf-devel-static-0.137-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package elfutils-libelf-devel-static-0.137-3.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh gcc-4.1.2-48.el5.x86_64.rpm warning: gcc-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package gcc-4.1.2-48.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh gcc-c++-4.1.2-48.el5.x86_64.rpm warning: gcc-c++-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package gcc-c++-4.1.2-48.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh glibc-devel-2.5-49.x86_64.rpm warning: glibc-devel-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-devel-2.5-49.x86_64 is already installed [root@bancodg Server]# rpm -ivh glibc-devel-2.5-49.i386.rpm warning: glibc-devel-2.5-49.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-devel-2.5-49.i386 is already installed [root@bancodg Server]# rpm -ivh glibc-headers-2.5-49.x86_64.rpm warning: glibc-headers-2.5-49.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package glibc-headers-2.5-49.x86_64 is already installed [root@bancodg Server]# rpm -ivh kernel-headers-2.6.18-194.el5.x86_64.rpm warning: kernel-headers-2.6.18-194.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package kernel-headers-2.6.18-194.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libgomp-4.4.0-6.el5.x86_64.rpm warning: libgomp-4.4.0-6.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libgomp-4.4.0-6.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh libstdc++-devel-4.1.2-48.el5.x86_64.rpm warning: libstdc++-devel-4.1.2-48.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package libstdc++-devel-4.1.2-48.el5.x86_64 is already installed [root@bancodg Server]# rpm -ivh sysstat-7.0.2-3.el5.x86_64.rpm warning: sysstat-7.0.2-3.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package sysstat-7.0.2-3.el5.x86_64 is already installed
Com todos os pacotes instalados, vamos as configurações de kernel do sistema operacional. Faça as seguintes operações:
[root@bancodg ~]# vi /etc/sysctl.conf
#Oracle Settings
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
Para ativa-lós execute o sysctl como abaixo:
[root@bancodg ~]# sysctl -p
Hora de configurar os limits do Oracle, para isso adicione as seguintes linhas no arquivo /etc/security/limits.conf
[root@bancodg ~]# vi /etc/security/limits.conf
#Oracle Settings
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
Edite também as limites do arquivo /etc/profile.
[root@bancodg ~]# vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -u 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Configure agora o arquivo /etc/pam.d/login com a linha abaixo:
[root@bancodg ~]# vi /etc/pam.d/login
session required pam_limits.so
Pronto, limites e demais configurações feitas. Vamos a validação do host que é muito importante para um ambiente DataGuard.
[root@bancodg ~]# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
20.0.0.10 bancodg.oracle.com bancodg
Checando o hostname:
[root@bancodg ~]# hostname bancodg.oracle.com [root@bancodg ~]# hostname -i 20.0.0.10
Com as configurações acima, vamos agora criar o usuário oracle:
[root@bancodg ~]# groupadd oinstall [root@bancodg ~]# groupadd dba [root@bancodg ~]# useradd -g oinstall -G dba oracle
Altere a senha do usuário também:
[root@bancodg ~]# passwd oracle Changing password for user oracle. New UNIX password: oracle BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: oracle passwd: all authentication tokens updated successfully.
Vamos agora a criação do diretório. Faça os seguintes comandos:
[root@bancodg ~]# mkdir -p /u01/app/oracle [root@bancodg ~]# chown -R oracle:oinstall /u01/
Pronto! As configurações todas ok.
Precisamos agora transferir o binário do Oracle para a máquina virtual. Caso você estiver em um ambiente windows, você pode utilizar o winscp. No meu caso vou utilizar o utilitário scp.
$ scp p10404530_112030_Linux-x86-64_1of7.zip p10404530_112030_Linux-x86-64_2of7.zip oracle@20.0.0.10:/u01/app/oracle/. oracle@20.0.0.10's password: *********** p10404530_112030_Linux-x86-64_1of7.zip 100% 01:28 ETA p10404530_112030_Linux-x86-64_2of7.zip 100% 01:45 ETA
Antes de instalar, precisamos é claro, descompactar os arquivos de instalação na máquina virtual.
Acesse novamente a VM do VirtualBox, e entre no caminho /u01/app/oracle (ou onde você deixou os binários) e utilize o unzip para descompactar os arquivos. Faça primeiro no arquivo 1 depois no arquivo 2, como abaixo:
[oracle@bancodg ~]$ cd /u01/app/oracle/ [oracle@bancodg oracle]$ ll total 2444440 -rwxr-xr-x 1 oracle oinstall 1358454646 Jan 16 22:44 p10404530_112030_Linux-x86-64_1of7.zip -rwxr-xr-x 1 oracle oinstall 1142195302 Jan 16 22:45 p10404530_112030_Linux-x86-64_2of7.zip [oracle@bancodg oracle]$ unzip p10404530_112030_Linux-x86-64_1of7.zip ... inflating: database/stage/properties/oracle.server_PE.properties inflating: database/stage/properties/sshConnectivity-usage.txt inflating: database/stage/properties/oracle.server_Custom.properties inflating: database/stage/properties/sPaths.properties inflating: database/stage/properties/ssh_system.properties inflating: database/stage/properties/oracle.server_SE.properties inflating: database/stage/properties/userPaths.properties inflating: database/welcome.html inflating: database/readme.html [oracle@bancodg oracle]$ unzip p10404530_112030_Linux-x86-64_2of7.zip ... inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup10.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup11.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup7.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup5.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup3.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup1.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup13.jar inflating: database/stage/Components/oracle.sysman.console.db/11.2.0.3.0/1/DataFiles/filegroup2.jar
Feito os passos acima, uma pasta chamada “database” será criada no atual diretório. Ela contém os binários de instalação do software Oracle Database 11gR2.
Vamos então para esse diretório, que no meu caso é o /u01/app/oracle/database:
LEMBRE-SE VOCÊ DEVE ESTAR COM O USUÁRIO ORACLE CONECTADO NA MÁQUINA VIRTUAL
Dispare o runInstaller, como na Imagem acima.
O runInstaller irá abrir uma janela de utilitário de passo a passo de instalação do software. Seguiremos os passos:
Primeiro, desmarque a opção de receber updates via My Oracle Support.
Um aviso será mostrado, pode ignora-ló e continue.
Por ser um ambiente totalmente feito para teste, vamos novamente ignorar os updates. Para isso clique em Skip software updates
Aqui, temos que selecionar o tipo da instalação. Vamos por enquanto somente instalar somente o software Oracle Database 11gR2.
Selecione opção Enterprise. Lembrando para usar o Oracle Dataguard, é obrigatório e imprescindível que a versão seja Enterprise Edition. Por isso ATENÇÃO, selecione a versão ENTERPRISE EDITION para essa instalação.
Define aqui a localização das variáveis ORACLE BASE e ORACLE_HOME.
Nesse momento é realizado um checklist completo do ambiente Oracle sobre as possíveis falhas de pré requisitos. No nosso caso, ele informou somente a falta de memória. Por ser um ambiente criado somente com a finalidade de estudo, podemos deixar a memória da máquina baixa (por motivos óbvios), porém em ambientes de produção nunca ignore tais erros.
Aqui é informado um resume de todas as configurações selecionadas.
Início da instalação …
É informado agora, para rodarmos dois scripts com o usuário root. Simplesmente assim: conecte como root e execute os dois.
[root@bancodg ~]# whoami root [root@bancodg ~]# /u01/app/oraInventory/orainstRoot.sh Changing permissions of /u01/app/oraInventory. Adding read,write permissions for group. Removing read,write,execute permissions for world. Changing groupname of /u01/app/oraInventory to oinstall. The execution of the script is complete.
Agora o segundo
[root@bancodg ~]# whoami
root
[root@bancodg ~]# /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
Performing root user operation for Oracle 11g
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/11.2.0/dbhome_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
Fim da instalação
Com a conclusão da parte 2, temos a máquina virtual criada com o Oracle Database e todos os pré-requisitos feitos.
Vamos somente agora, adicionar as variáveis de ambiente da máquina DB Primary. Com o usuário oracle conectado, edite o arquivo ˜/.bash_profile e adicione as seguintes linhas:
[oracle@bancodg ~]$ vi ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH [oracle@bancodg ~]$
Agora ative as variáveis com o comando:
[oracle@bancodg ~]$ . ~/bash_profile
Na próxima parte, estarei realizando a cópia dessa VM ponta, para poder criar a máquina em um outro projeto.
…
Esse é o primeiro post de uma série inteira que está por vir, explicando passo a passo a instalação e configuração do Oracle Data Guard 11g utilizando o VirtualBox.
O Oracle Data Guard faz parte do Oracle Database High Availability, ou seja, estamos falando de alta disponibilidade (HA). Diferentemente do Oracle RAC o Data Guard trabalha exclusivamente com os dados do seu banco, dados esses que são o bem mais crítico do negócio de uma empresa. O Data Guard é uma solução de proteção a dados como também, a disponibilidade deles, que cria e mantém um ou mais bancos de contingência (standby) sendo possível assim, recuperar de um completo desastre.
Não gosto de chamar o Oracle Dataguard simplesmente de um banco de standby, por que ele vai além disso as opções de configuração e otimização levam ele a um grau muito acima do que um simples banco de contingência. (veja mais sobre ele aqui)
Em uma configuração Data Guard, sempre terá o banco de dados primário e um ou mais bancos de standby, este por sua vez só será ativo quando houver problemas no banco primário, ou por qualquer outro motivo que precisamos utiliza-ló, como por exemplo uma manutenção no servidor onde o banco de dados primário encontra-se.
Sempre que um banco standby for ativado (switchover) ele é automáticamente “transformado” no banco primário e o banco primário passa a ser o standby. Podemos também realizar a volta (switchback) em que o banco standby atual (antigo primário) volta a ser o banco de dados produção e o atual primário (antigo standby) torna a ser o o banco de contigencia novamente.
Seja o modelo de uma configuração básica do Dataguard.
A partir do 11g, existe três tipos de Data Guard:
- Physical database : É a cópia física perfeitamente identica do seu banco primário. Realmente é um clone feito bloco a bloco mantendo toda a estrutura de diretório, schemas, objetos e etc … Ele é mantido sincronizado através do Redo Apply.
- Logical database: Ele contém a mesma estrutura lógica (tabelas, objetos, indexes etc …) porém a sua organização física e estrutural pode ser diferente. Ele é mantido sincronizado através do SQL Apply.
- Snapshot database: Ele é um banco de contingência que é possível realizar qualquer movimentação de dados e ainda assim ele se mantém sincronizado, ou seja ele permite que qualquer sessão altere qualquer informação no banco enquanto ele se mantém sincronizado. Na verdade, enquanto o banco está aberto para utilização, ele represa os archives que são aplicados assim que voltamos o banco no modo standby.
Pré-Requisitos:
Vou começar esse artigo passando desde a criação da máquina virtual, então você que não está familiarizado com a instalação do Oracle no Linux, fique despreocupado que vamos ver tudo aqui.
Para poder acompanhar vamos precisar:
- Virtual Box instalado na máquina
- Software Oracle 11g R2 (não é preciso o release 11.2.0.3).
- ISO do Oracle Linux 5.x (ou similares). Você pode fazer o download gratuito aqui, basta apenas se cadastrar
Configurando o VirtualBox
Criação da máquina Virtual (DB Primary).
Com as configurações necessárias feitas, vamos agora a criação da VM onde será o nosso Database Primary. Com o VirtualBox aberto clique no botão New.
Como a versão da minha ISO do Oracle Linux é x86-64, a versão minha selecionada foi o Oracle Linux 64bits. Caso a versão da sua ISO for x86 selecione a opção 32bits.
Selecione a quantidade de memória desejada.
Aqui temos nossa VM criada, vamos a algumas configurações necessárias. Por isso, selecione a VM DB Primary e clique na opção Settings.
Na aba System, remova o Floppy disk no Boot:
Clique na opção Processor, e caso você deseje, adicione mais um processador a máquina virtual.
Vá a Aba Storage, para adicionarmos a ISO de instalação do Oracle Linux.
Selecione o disco vázio na Controladora IDE, remova clicando no icone “-”.
Clique no icone +, e selecione a ISO do Oracle Linux.
Agora a última configuração, vá a aba Network e defina o adaptador como Host-only Adapter e selecione o adaptador vboxnet1.
Instalação do Oracle Linux
Agora sim, vamos a instalação do Linux. Inicie a máquina virtual.
Vamos cancelar essa etapa de checagem dos discos. Selecione o Skip e continue.
Aqui será mostrado uma mensagem de que estaremos iniciando a configuração de disco. Selecione em Yes e continue.
Selecione a opção Create custom layout, e continue.
Vamos agora, definir o layout do disco. Como o disco foi criado com 20G, estarei configurando da seguinte maneira:
- Swap: 1G
- Partição / com 19G.
Fique a vontade para configurar da maneira que desejar. Clique no botão New.
Defina o Swap.
Clique no botão New novamente e defina a partição / como ext3 e clique na opção Fill to maximum allowable size.
Na próxima tela, apenas continue.
Vamos agora a configuração da rede. Selecione o adaptador eth0 e clique no botão Edit.
Aqui estarei definindo o IP: 20.0.0.10 com o Netmask: 255.255.0.0
Com o adaptador configurado, vamos definir um hostname para o Linux instalado. Após deixar como a figura abaixo clique em Next.
Selecione o TimeZone de SP:
Defina agora a senha do usuário root, que aqui vou colocar como oracle.
Vamos agora uma das partes mais importantes, a definição dos pacotes. Selecione a opção Customize now e clique em Next.
Em Desktop Enviroments, deixe as opções como está. Clique em no item Applications.
Deixe as opções como na imagem abaixo:
Agora em Development, deixe as opções novamente iguais. Clique no item X Software Development e clique em Optional packages.
Selecione o pacote libxp-devel para ser instalado e clique em Close.
Agora vamos para o Server, e deixe iguais as opções de instalação.
Vá para a opção Base System agora e deixa como as opções da figura abaixo. Depois de feito, selecione a opção System Tools e clique na opção Optional packages e selecione o pacote sysstat para ser instalado.
Depois de feito, clique em Next.
Iniciando a instalação.
Com a instalação concluida, vamos reiniciar a máquina.
Desabilite as opções de Firewall.
Não vamos criar nenhum usuário agora, clique em Next e depois em Continue.
Instalação do Guest Additions VirtualBox
Com o nosso Linux instalado, vamos instalar o Guest Additions do VirtualBox que nada mais é que um otimizador da VM. Com a VM ligada vamos logar na máquina com o usuário root.
Após de logado, clique no item Install Guest Additions.
Um disco será criado e adicionado na máquina Virtual como mostra a figura abaixo.
Abra um terminal e vá para o diretório /media/VBOXADDITIONS … e execute o script VBoxLinuxAdditions.run
Temos agora a máquina virtual necessária para instalarmos o Oracle Database 11g. Na nossa próxima parte dessa série estaremos então instalando o Oracle Database 11g.
Um abraço, espero que tenham gostado da idéia e continuem acompanhando. Qualquer dúvida post um comentário ..
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
…
Enfim a última parte da nossa serie de instalações do Oracle RAC 10g. Nesse último post estaremos vendo a criação do banco de dados dbtst em modo cluster.
Conectado na máquina rac1 do cluster, execute o comando dbca.
[oracle@rac2 ~]$ dbca
Irá abrir o Database Configuration Assistant (DBCA), veja que ele automaticamente identifica um cluster instalado na máquina e nos fornece a opção de criar um banco de dados em modo cluster. Como nosso objeto aqui é criar o banco de dados em modo cluster, estaremos selecionando a primeira opção. Veja abaixo:
Selecione Create a Database para iniciarmos a criação de um novo banco de dados.
Além de identificar que existe uma instalação em modo cluster, o DBCA ainda identifica as instâncias relacionadas a ela e nos pergunta qual das delas vamos estar criando o nosso banco de dados. Selecione as duas instâncias (rac1 e rac2).
Aqui é o momento de fornecer o nome do novo banco de dados que no nosso será o dbtst. Fique a vontade a questão da escolha de qualquer outro nome.
Por hora, não estaremos instalando com o Enterprise Manager.
Defina uma senha para o banco de dados, aqui defini a senha oracle.
É nos dado a opção de armazenamento do nosso banco de dados em que é possível utilizar até três tipos. O Cluster File System geralmente ocfs2 ou qualquer outro cluster file system vendor suportador pela Oracle, o ASM (nosso caso) e com a opção de Raw Devices.
Como no artigo anterior fizemos toda a instalação do ASM e temos nosso ambiente pronto para a instalação em ASM, estaremos utilizando essa opção. Após clique em Next e o DBUA pedi para informarmos a senha do usuário sys do ASM, que no nosso caso é oracle.
Veja abaixo os Diskgroups ORADATA1 e ORADATA2 criados no artigo anterior. Vamos estar utilizando os dois DG, por isso selecione os dois.
Aqui, selecione o DG +ORADATA1 para o OMF.
Agora é a hora da configuração da Flash Recovery Area e do Archived Log Mode. Siga os passos abaixos:
Clique em Browser
Selecione o DG ORADATA2.
Deverá ficar assim:
Habilite agora o Archived.
No final a sua tela do DBCA deverá estar como abaixo:
Aqui é fornecido a opção de criação de Services. Nesse momento não vamos estar criando nenhum serviço, apenas clique em Next.
Reveja os dados do banco de dados e caso tudo esteja correto clique em Next.
Após finalizada a instalação, execute o comando crs_stat -t e veja que agora o banco de dados dbtst aparece no cluster. Veja que as instâncias do dbtst estão em execução na máquina rac1 e rac2.
[oracle@rac1 ~]$ crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora.dbtst.db application ONLINE ONLINE rac1 ora....t1.inst application ONLINE ONLINE rac1 ora....t2.inst application ONLINE ONLINE rac2 ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2
Veja abaixo as instâncias ASM1 e dbtst1 sendo executadas na máquina rac1.
[oracle@rac1 ~]$ ps -ef | grep pmon | grep -v grep | awk -F"_" '{print$3}'
+ASM1
dbtst1
Abaixo mostra que o banco dbtst está funcionando normalmente. Conecte na instâncias dbtst1:
[oracle@rac1 ~]$ echo $ORACLE_SID
dbtst1
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Wed Oct 12 17:31:49 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> select count(*) from dba_tables;
COUNT(*)
----------
1523
Esse é o fim da nossa série, estarei preparando a mesma série só que agora em 11g R2.
Qualquer dúvida, sugestão que queira apresentar será muito bem vinda.
Um grande abraço a todos.
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
…
Até agora em nossa série de post sobre instalação Oracle RAC 10g em Oracle Linux 5, já criamos nosso cluster a aplicamos os patch 10.2.0.5 tanto no Oracle Clusterware como no binário do banco de dados.
Para verificar a status do seu cluster execute o seguinte comando:
[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
Hoje vamos a configuração do LISTENER e ASM em modo cluster, antes vamos a algumas poucas configurações de variáveis de ambiente, que vão nos facilitar muito na administração do ambiente. Aqui vou somente demostrar o procedimento na máquina 1 do cluster (rac1) mais deve ser feita para a máquina 2, alterando apenas a variável ORACLE_SID para dbtst2.
[oracle@rac1 ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
export ORACLE_BASE=/u01/app/oracle
export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=dbtst1
PATH=$ORA_CRS_HOME/bin:$ORACLE_HOME/bin:$PATH
Com o arquivo .bash_profile configurado, vamos executa-lo e assim ativar as variáveis criadas acimas.
[oracle@rac1 ~]$ . .bash_profile
Para verificar se elas estão ativas na sua sessão verifique através do comando env, as variáveis devem aparecer quando você executar.
Criação do Listerner
Para criar o listener em modo cluster é através do utilitário netca, assim como é feito em um ambiente não RAC.
Aqui é onde especificamos se o LISTENER será em CLUSTER ou SINGLE. Selecione o modo “Cluster Configuration” e clique em Next.
O netca é capaz de identificar os nós configurados no cluster e apresentar para você. Selecione os dois nós, como na imagem abaixo e clique em Next.
Escolha a opção de adicionar um novo listener.
Use a porta DEFAULT, 1521.
Para finalizar clique em Finish.
Com essas configurações acimas feitas, o LISTENER já deve estar criado e habilitado nos dois nós do cluster . Para verificar execute o comando abaixo e observe o recurso com o final .lsnr:
[oracle@rac1 ~]$ /u01/app/oracle/product/10.2.0/crs/bin/crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2
Criação do ASM
Para iniciar com a configuração do ASM, execute o dbca como na imagem abaixo:
Escolha a opção Configura Automatic Storage Management e clique em Next:
O DBCA irá identificar que os nós do cluster, selecione as duas instâncias para instalar o ASM e Next.
Define uma senha padrão, no meu caso oracle
Com a instância ASM já criada, vamos já criar os diskgroup do ASM ORADATA1 e ORADATA2. Observe que discos DISK1,DISK2,DISK3 e DISK4 criados com o ASMLib, automáticamente aparecem no momento da criação do DISKGROUP.
Crie o diskgroup ORADATA1, com os discos DISK1 e DISK2, como mostra a imagem abaixo:
Agora, crie o diskgroup ORADATA2 com os discos DISK3 e DISK4.
Com os dois diskgroup criados, podemos sair do instalador.

Com a instância ASM configurada, ao executar novamente o crs_stat, observe que os recursos abaixo com o final .asm são nossas instâncias ASM criadas acimas.
[oracle@rac1 ~]$ /u01/app/oracle/product/10.2.0/crs/bin/crs_stat -t Name Type Target State Host ------------------------------------------------------------ ora....SM1.asm application ONLINE ONLINE rac1 ora....C1.lsnr application ONLINE ONLINE rac1 ora.rac1.gsd application ONLINE ONLINE rac1 ora.rac1.ons application ONLINE ONLINE rac1 ora.rac1.vip application ONLINE ONLINE rac1 ora....SM2.asm application ONLINE ONLINE rac2 ora....C2.lsnr application ONLINE ONLINE rac2 ora.rac2.gsd application ONLINE ONLINE rac2 ora.rac2.ons application ONLINE ONLINE rac2 ora.rac2.vip application ONLINE ONLINE rac2
Agora sim, estamos pronto para a criação do banco de dados que será feita no próximo e último post da série.
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
…
Muito bom começar mais um post da série com vocês! Após aprendermos como realizar a aplicação do patch 10.2.0.5 no Oracle Clusterware, hoje vamos realizar a instalação do Oracle Database 10g em modo “Clusterizado”. Siga os passos a baixos demonstrados e caso fique alguma dúvida, post um comentário que terei prazer em poder ajudar.
Instalação Oracle Database 10g
O binário de instalação do Oracle Database 10g é o mesmo para Single Instance e Oracle RAC.O Download pode ser feito na seguinte página: http://www.oracle.com/technetwork/database/10201linuxsoft-097986.html. Já baixado você deve descompactar o arquivo, assim como foi feito na Instalação do Oracle Clusterware na parte 8.
unzip 10201_database_linux32.zip
Com a descompactação feita, uma pasta database será criada, entre nela e execute o runInstaller, como imagem abaixo:
Nesse momento, o instalador irá questionar para qual versão será instalada o banco, Enterprise ou Standard Edition, fica a seu critério de escolha. O Oracle RAC funciona perfeitamente na versão Standard Edition, porém afim de testar todos os recursos do banco aqui nesse ambiente teste que estamos construindo, vamos instalar a versão Enterprise.
Define aqui, a localização do Oracle Home do banco de dados que será instalado:
O instalador já reconhece que existe um Oracle Clusterware instalado e inicia a instalação em modo Cluster Installation. Ele também detecta os nodes e pergunta quais deles será instalado o banco … no nosso caso os dois.
Como iniciamos a instalação através do runInstaller com a opção -ignoreSysPreReqs várias mensagens será mostrada aqui dizendo que não está de acordo, pode ignorar essas mensagens sem problema e continuar com a instalação. Essas mensagens de erro acontecem porque quando o instalador do Oracle 10g saiu, a versão Red Hat 5 (que estamos usando) ainda não estava liberada. De acordo com a própria Oracle esse comportamento é esperado.
Por hora, vamos somente realizar a instalação do banco, por isso selecione a opção Install database Software only.
Hora de executar o tão conhecido root.sh. Lembre-se de sempre executar o script como root e sempre um de cada vez. Abaixo a imagem eu mostro a execução desses arquivos:
RAC 1 – Executando os scripts no PRIMEIRO nó
[root@rac1 ~]# /u01/app/oracle/product/10.2.0/db_1/root.sh
Running Oracle10 root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/10.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
RAC 2 – Executando os scripts no SEGUNDO nó
[root@rac2 ~]# /u01/app/oracle/product/10.2.0/db_1/root.sh
Running Oracle10 root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/10.2.0/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Banco instalado!
Para o próximo parte, vamos realizar a aplicação do patch 10.2.0.5 para o database. Até lá …
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.
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
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



































































































































































































































