Oracle Grid - Instalação e configuração do zero

1 INSTALAÇÃO E CONFIGURAÇÃO - AMBIENTE ORIGEM
1.1 CONFIGURAÇÕES INICIAIS
1.1.1 Criação de usuários e grupos
# groupadd -g 1001 oinstall
# groupadd -g 1002 dbaoper
# groupadd -g 1003 dba
# useradd -u 101 -g oinstall -G dba,dbaoper oracle
# groupadd -g 1004 asmadmin
# groupadd -g 1005 asmoper
# groupadd -g 1006 asmdba
# usermod -g oinstall -G dba,dbaoper,asmadmin,asmdba,asmoper oracle
1.1.2 Instalação de ferramentas
# yum install net-tools rsync bc wget vim traceroute unzip mlocate telnet tuned openssh-clients policycoreutils-python-utils -y
1.1.3 Instalar profile do Tuned - Otimização de kernel
# yum install tuned-profiles-oracle -y
# tuned-adm profile oracle
# tuned-adm active
1.1.4 Instalar repositório EPEL
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
1.1.5 Instalar pré-requisitos e ferramentas adicionais
# yum install procps screen rlwrap terminator dos2unix oracle-database-preinstall-19c.x86_64 p7zip -y
1.1.6 Desabilitando selinux
# sed -i 's/enforcing/permissive/g' /etc/selinux/config ; setenforce 0
1.1.7 Liberando Firewall para porta do Oracle
# firewall-cmd --permanent --zone=public --list-ports
# firewall-cmd --permanent --zone=public --add-port=1521/tcp
# firewall-cmd --reload
# firewall-cmd --permanent --zone=public --list-ports
1.1.8 Alterando hostname
# hostnamectl set-hostname dbfocus02.localdomain
1.1.9 * Uso na OCI
/etc/oci-hostname.conf PRESERVE_HOSTINFO=3
1.1.10 Acertar arquivo hosts
# hostnamectl set-hostname oracle-dg02.localdomain
# echo "192.168.3.48 oracle-dg02.localdomain dg02" >> /etc/hosts
1.2 CONFIGURANDO PARTIÇÃO /U01
1.2.1 Listar discos e partições
# fdisk -l | grep sd
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
Disk /dev/sde: 50 GiB, 53687091200 bytes, 104857600 sectors
Disk /dev/sdf: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdg: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdc: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdd: 12 GiB, 12884901888 bytes, 25165824 sectors
Disk /dev/sdh: 20 GiB, 21474836480 bytes, 41943040 sectors
- Pegar o disco de 50G que não tenha partição
1.2.2 Criando o Physical Volume
# pvcreate /dev/sde
1.2.3 Criando Volume Group
# vgcreate VG00 /dev/sde
1.2.4 Criando o Logical Volume
# lvcreate -l +100%free -n LVU01 VG00
1.2.5 Formatando o Logical Volume
# mkfs.xfs /dev/mapper/VG00-LVU01
1.2.6 Criando diretório do ponto de montagem
# mkdir /u01
1.2.7 Pegando UUID da partição
# blkid | grep LVU01
/dev/mapper/VG00-LVU01: UUID="3d7b5f0f-5db3-49cf-9ed1-e10e39f602bd" BLOCK_SIZE="512" TYPE="xfs"
1.2.8 Configurando montagem da partição automática
# vim /etc/fstab
Copiar linha do /boot (yy e depois p) e trocar o UUID e ponto de montagem
UUID=3d7b5f0f-5db3-49cf-9ed1-e10e39f602bd /u01 xfs defaults 0 0
1.2.9 Montando partição
# mount -a
# systemctl daemon-reload
1.2.10 Verificando partição montada
# df -h
1.3 PERMISSÕES PARA O USUÁRIO ORACLE NAS PARTIÇÕES
# chown -R oracle:oinstall /u01
1.4 MOVENDO INSTALADORES PARA A HOME DO ORACLE
# mv /root/*.zip /home/oracle
1.5 AJUSTANDO PERMISSÕES NOS ARQUIVOS ZIP
# chown oracle:oinstall /home/oracle/*.zip
1.6 ALTERANDO SENHA DO ORACLE (COLOCAR Dbafocus2024)
# passwd oracle
1.7 ACERTANDO BASH_PROFILE
# sudo su - oracle
$ vim /home/oracle/.bash_profile
# Alias
alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'
alias start_oratop='$ORACLE_HOME/suptools/oratop/oratop -f -i3 / AS SYSDBA'
alias start_oratop_novo='$ORACLE_HOME/suptools/oratop/oratop_19.21 -f -i3 / AS SYSDBA'
# Oracle Variaveis 19c
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1
export GRID_HOME=/u01/app/19c/grid
export CRS_HOME=$GRID_HOME
export ORACLE_SID=PROD
export ORACLE_UNQNAME=PROD_A
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_TERM=xterm
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH
1.8 CARREGANDO BASH_PROFILE
$ source /home/oracle/.bash_profile
1.9 CRIAR OS DIRETÓRIOS HOME
$ mkdir -p $GRID_HOME
$ mkdir -p $ORACLE_HOME
1.10 INSTALAÇÃO DO GRID
1.10.1 Descompactar o zip
$ unzip -q -d $GRID_HOME LINUX.X64_193000_grid_home.zip
1.10.2 Renomear o diretório Opatch
$ mv $GRID_HOME/OPatch $GRID_HOME/OPatch_old
1.10.3 Descompactar o OPatch atual
$ unzip -q -d $GRID_HOME Opatch_p6880880_190000_Linux-x86-64-12.2.0.1.42-Abr2024.zip
1.10.4 Verificar suporte para kernel atual
$ uname -r
5.4.17-2136.307.3.1.el8uek.x86_64
1.10.5 Matriz de certificação do ASM Filter Driver
ACFS and AFD Support On OS Platforms (Certification Matrix). (Doc ID 1369107.1)
1.10.6 Descompactar o patch 19.21
$ unzip -q p35642822_190000_19.21.0.0.0_Grid_Linux-x86-64.zip
1.10.7 Instalar componentes e marcar os discos para ASM Filter
1.10.8 Logar com usuário root (sem o - )
$ su
1.10.9 Instalar cvudisk
# rpm -ivh $GRID_HOME/cv/rpm/cvuqdisk-1.0.10-1.rpm
O RPM cvuqdisk é um pacote de software que fornece informações sobre os discos do sistema para o Cluster Verification Utility (CVU) da Oracle.
1.10.10 Ajustar discos para o ASM Filter
Confirmar discos que serão usados no DiskGroup DATA - Validar o tamanho dos discos e pegar os dispositivos correspondentes
** Pegar os discos de 15G **
# fdisk -l | grep sd
Disk /dev/sdh: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdf: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdg: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdd: 12 GiB, 12884901888 bytes, 25165824 sectors
Disk /dev/sdc: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
Disk /dev/sde: 50 GiB, 53687091200 bytes, 104857600 sectors
##### CASO NECESSÁRIO - FORMATAR DISCOS
dd if=/dev/zero of=/dev/sdb bs=1M count=100
dd if=/dev/zero of=/dev/sdc bs=1M count=100
1.10.11 Alterar permissão dos discos
# chown oracle:asmadmin /dev/sdb /dev/sdc
1.10.12 Marcar discos para o ASM
-- Crie o arquivo oracleafd.conf com a string do disco e quantidade que será utilizada
# echo -e "afd_diskstring='/dev/sd*'\nafd_dev_count=2" > /etc/oracleafd.conf
# export ORACLE_HOME=$GRID_HOME
# $ORACLE_HOME/bin/asmcmd afd_refresh
# $ORACLE_HOME/bin/asmcmd afd_scan
# $ORACLE_HOME/bin/asmcmd afd_state
# $ORACLE_HOME/bin/asmcmd afd_label DATA01 /dev/sdb --init
# $ORACLE_HOME/bin/asmcmd afd_label DATA02 /dev/sdc --init
# $ORACLE_HOME/bin/asmcmd afd_lslbl
# rm -rf /u01/app/oracle/diag/
# exit
1.10.13 Copiar o arquivo de resposta para a home do oracle
$ cp $GRID_HOME/install/response/gridsetup.rsp /home/oracle
Adicionar as linhas personalizadas necessárias no arquivo de resposta - OBS: Parâmetros que precisam ser personalizados estão em vermelho. Porque podem ter discos diferentes e senha também. Parâmetros que precisam ser mudados se estiver seguindo outro padrão de diretórios e grupos estão em azul.
$ cat >> /home/oracle/gridsetup.rsp << EOF
#### CONFIG PERSONALIZADA
INVENTORY_LOCATION=/u01/app/oraInventory
oracle.install.option=HA_CONFIG
ORACLE_BASE=/u01/app/oracle
oracle.install.asm.OSDBA=asmdba
oracle.install.asm.OSOPER=asmoper
oracle.install.asm.OSASM=asmadmin
oracle.install.crs.config.scanType=LOCAL_SCAN
oracle.install.crs.config.ClusterConfiguration=STANDALONE
oracle.install.crs.config.configureAsExtendedCluster=false
oracle.install.crs.config.gpnp.configureGNS=false
oracle.install.crs.config.autoConfigureClusterNodeVIP=false
oracle.install.crs.config.gpnp.gnsOption=CREATE_NEW_GNS
oracle.install.crs.config.clusterNodes=$(hostname):
oracle.install.crs.configureGIMR=false
oracle.install.asm.configureGIMRDataDG=false
oracle.install.crs.config.useIPMI=false
oracle.install.asm.diskGroup.name=DATA
oracle.install.asm.diskGroup.redundancy=EXTERNAL
oracle.install.asm.diskGroup.AUSize=4
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/sd*
oracle.install.asm.gimrDG.AUSize=1
oracle.install.asm.configureAFD=true
oracle.install.crs.configureRHPS=false
oracle.install.crs.config.ignoreDownNodes=false
oracle.install.config.managementOption=NONE
oracle.install.config.omsPort=0
oracle.install.crs.rootconfig.executeRootScript=false
### Parametros que precisam ser editados
oracle.install.asm.diskGroup.disksWithFailureGroupNames=/dev/sdb,,/dev/sdc, ##alterar
oracle.install.asm.diskGroup.disks=/dev/sdb,/dev/sdc ## alterar
oracle.install.asm.SYSASMPassword=password ## alterar
oracle.install.asm.monitorPassword=password ## alterar
EOF
1.10.14 Acessar o diretório de instalação
$ cd $GRID_HOME
1.10.15 Instalação em modo gráfico - APENAS EXEMPLO













1.10.16 Instalação em modo texto
$ ./gridSetup.sh -silent -responseFile /home/oracle/gridsetup.rsp -applyRU /home/oracle/35642822
1.10.17 Executar scripts com usuário root
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/19c/grid/root.sh
1.10.18 Finalizar a configuração Grid com o usuário ORACLE
$ /u01/app/19c/grid/gridSetup.sh -executeConfigTools -responseFile /home/oracle/gridsetup.rsp -silent
1.11 Ajustando dependências do ASM - Caso estiver usando “scsi”
1.11.1 Logar com usuário root
[oracle@dbafocus ~]$ su -
1.11.2 Realizar um backup do script original
[root@dbafocus ~]# cp -p /etc/init.d/afd /root/afd.org-backup
1.11.3 Alterar linhas no script
# sed -i '/\# Required-Start/ s~\:.*$~\: \$network \$syslog \$remote_fs~' /etc/init.d/afd
# sed -i '/\# Should-Start/ s~\:.*$~\: open_iscsi~' /etc/init.d/afd
# sed -i '/\# Required-Stop/ s~\:.*$~\: \$network \$syslog \$remote_fs~' /etc/init.d/afd
# sed -i '/\# Should-Stop/ s~\:.*$~\: open_iscsi ohasd~' /etc/init.d/afd
Atividade acima é realizada para alterar a ordem de início dos serviços, evitando que o ASM suba primeiro que a rede e não encontre os discos iscsi prevenindo o erro de diskgroup not found.
1.11.4 Validar as diferenças implementadas
# diff /root/afd.org-backup /etc/init.d/afd
1.12 VOLTAR PARA A HOME DO ORACLE
$ cd
1.13 CRIAR LINKS SIMBÓLICOS DOS ALERT.LOGS
1.13.1 Alert.log do ASM
$ ln -s /u01/app/oracle/diag/asm/+asm/+ASM/trace/alert_+ASM.log /home/oracle
1.13.2 Alert.log do CRS
$ ln -s /u01/app/oracle/diag/crs/oracle-dg01/crs/trace/alert.log /home/oracle
1.14 Ajustar Glogin.sql
$ vim $GRID_HOME/sqlplus/admin/glogin.sql
SET PAGESIZE 1000
SET LINESIZE 220
SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED
DEFINE _EDITOR = /usr/bin/vim
COLUMN segment_name FORMAT A30 WORD_WRAP
COLUMN object_name FORMAT A30 WORD_WRAP
SET TIMING ON
SET TIME ON
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > "
COL DISK_GROUP_NAME FORMAT A30
COL DISK_FILE_PATH FORMAT A30
COL DISK_FILE_NAME FORMAT A30
COL DISK_FILE_FAIL_GROUP FORMAT A30
COL DATAFILE FORMAT A70;
COL USERNAME FORMAT A10;
COL MACHINE FORMAT A20;
COL OSUSER FORMAT A15;
COL SPID FORMAT A8;
COL PROGRAM FORMAT A15;
col job_name format a20;
Col STATE format a10;
col start_date format a40;
col NEXT_RUN_DATE format a40;
1.15 REMOVER SENHAS DO ARQUIVO DE RESPOSTA
$ sed -i '/SYSASMPassword/d' /home/oracle/gridsetup.rsp
$ sed -i '/monitorPassword/d' /home/oracle/gridsetup.rsp
1.16 CRIAR O DISK GROUP RECO
1.16.1 Carregar as variáveis de ambiente
$ . oraenv
+ASM
1.16.2 Logar com usuário root (sem o - )
# su
Confirmar discos que serão usados no Disk group RECO - Validar o tamanho dos discos e pegar os dispositivos correspondentes
** Pegar o disco de 12G **
# fdisk -l | grep sd
Disk /dev/sdh: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdf: 2 GiB, 2147483648 bytes, 4194304 sectors
Disk /dev/sdg: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sdd: 12 GiB, 12884901888 bytes, 25165824 sectors
Disk /dev/sdc: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 104857599 102758400 49G 8e Linux LVM
Disk /dev/sde: 50 GiB, 53687091200 bytes, 104857600 sectors
##### CASO NECESSÁRIO - FORMATAR DISCOS
dd if=/dev/zero of=/dev/sdd bs=1M count=100
1.16.3 Alterar permissão dos discos
# chown oracle:asmadmin /dev/sdd
1.16.4 Marcar discos para o ASM
# export ORACLE_HOME=$GRID_HOME
# $ORACLE_HOME/bin/asmcmd afd_label RECO01 /dev/sdd
# $ORACLE_HOME/bin/asmcmd afd_lslbl
# exit
1.16.5 Criar discos no ASM
$ rlwrap sqlplus / as sysasm
SELECT NAME, TOTAL_MB, FREE_MB, USABLE_FILE_MB FROM V$ASM_DISKGROUP;
CREATE DISKGROUP RECO EXTERNAL REDUNDANCY DISK 'AFD:RECO01';
SELECT NAME, TOTAL_MB, FREE_MB, USABLE_FILE_MB FROM V$ASM_DISKGROUP;
1.17 INSTALAR O ORACLE
1.17.1 Regarregar o bash_profile
$ source /home/oracle/.bash_profile
1.17.2 Descompactar o zip
$ unzip -q -d $ORACLE_HOME LINUX.X64_193000_db_home.zip
1.17.3 Renomear o diretório Opatch
$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_old
1.17.4 Descompactar o OPatch atual
$ unzip -q -d $ORACLE_HOME Opatch_p6880880_190000_Linux-x86-64-12.2.0.1.42-Abr2024.zip
1.17.5 Copiar o arquivo de resposta para a home do oracle
$ cp $ORACLE_HOME/install/response/db_install.rsp /home/oracle
1.17.6 Adicionar linhas personalizadas no arquivo de resposta
$ cat >> /home/oracle/db_install.rsp << EOF
#### CONFIG PERSONALIZADA
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19c/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
EOF
1.17.7 Acessar o diretório home do Oracle
$ cd $ORACLE_HOME
1.17.8 Instalar o ORACLE
$ export CV_ASSUME_DISTID=OEL7.8
$ ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -applyRU /home/oracle/35642822
1.17.9 Executar script de root
# /u01/app/oracle/product/19c/db_1/root.sh
1.17.10 Voltar para a home do Oracle
$ cd
1.17.11 Ajustar Glogin.sql
$ vim $ORACLE_HOME/sqlplus/admin/glogin.sql
Copiar o conteúdo abaixo substituindo o conteúdo atual do arquivo:
SET PAGESIZE 1000
SET LINESIZE 220
SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WRAPPED
DEFINE _EDITOR = /usr/bin/vim
COLUMN segment_name FORMAT A30 WORD_WRAP
COLUMN object_name FORMAT A30 WORD_WRAP
SET TIMING ON
SET TIME ON
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > "
COL DISK_GROUP_NAME FORMAT A30
COL DISK_FILE_PATH FORMAT A30
COL DISK_FILE_NAME FORMAT A30
COL DISK_FILE_FAIL_GROUP FORMAT A30
COL DATAFILE FORMAT A70;
COL USERNAME FORMAT A10;
COL MACHINE FORMAT A20;
COL OSUSER FORMAT A15;
COL SPID FORMAT A8;
COL PROGRAM FORMAT A15;
col job_name format a20;
Col STATE format a10;
col start_date format a40;
col NEXT_RUN_DATE format a40;
1.17.12 Criar instância - Alterar parâmetros em destaque
1.17.12.1 Criando a instância de Produção
$ time dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbName PROD \
-sid PROD \
-sysPassword password \
-systemPassword password \
-storageType ASM \
-recoveryAreaDestination +RECO \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbAdminPassword password \
-pdbName ORCL \
-characterSet WE8MSWIN1252 \
-automaticMemoryManagement false \
-redoLogFileSize 256 \
-useOMF true \
-datafileDestination +DATA \
-initParams 'db_unique_name=PROD_A,sga_target=1600MB,pga_aggregate_target=767MB,db_recovery_file_dest_size=11400MB'
1.17.13 Criando link simbólico do alert.log
$ ln -s /u01/app/oracle/diag/rdbms/prod_a/PROD/trace/alert_PROD.log /home/oracle
1.17.14 Colocar instância de produção em archivelog
$ . oraenv
PROD
$ rlwrap sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> SELECT LOG_MODE FROM V$DATABASE;
1.17.15 Realizar um backup full
$ rlwrap rman target /
RMAN> BACKUP DATABASE;