Oracle RAC 18c - nervinformatica.com.brnervinformatica.com.br/Downloads/Materiais/ORAC-18c.pdf · 2...

Post on 24-Sep-2018

253 views 1 download

Transcript of Oracle RAC 18c - nervinformatica.com.brnervinformatica.com.br/Downloads/Materiais/ORAC-18c.pdf · 2...

Ricardo Portilho Proniricardo@nervinformatica.com.br

Esta obra está licenciada sob a licençaCreative Commons Atribuição-SemDerivados 3.0 Brasil.Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nd/3.0/br/.

Oracle RAC 18cEm Oracle Enterprise Linux 7.5

Inclui CDB Architecture

2

Comandos no Treinamento

Comando com o usuário root:# ls -lh

Comando com um usuário oracle:$ ls -lh

Adicionar texto a um arquivo:$ vi initORCL.ora...db_cache_size=500M...

Comando no Oracle:SQL> SELECT STATUS FROM V$INSTANCE;

Algo deve ser alterado de acordo com sua máquina:Hostname: nerv01.localdomain

Quando algo dá errado propositalmente:O que aconteceu?

Coloque todas as senhas (root, oracle, SYS, SYSTEM) como Nerv2018.

3

● Instalação (1o dia)● Troubleshooting (2o dia)● Administração (2o dia)● Tuning (3o dia)● Load Balance (3o dia)● Failover (3o dia)● Add Node (3o dia)● Migração de Storage (3o dia)● ACFS (3o dia)

3

Agenda

4

● Disponibilidade● Escalabilidade● Custo Total de Propriedade (TCO)

4

Por que usar o RAC?

5

● Custo de Equipamentos● Custo de Licenças● Custo de Conhecimento● Complexidade● Escalabilidade

5

Por que não usar o RAC?

66

Arquitetura

7

● 1 Database x N Instances• + Background Processes• + daemons• OCR• Voting Disk• VIPs e SCAN

7

Oracle RAC x Single Instance

8

Lab 1.1: Instalação OEL 7

9

Lab 1.2: Instalação OEL 7

10

Lab 1.3: Instalação OEL 7

11

Lab 1.4: Instalação OEL 7

12

Lab 1.5: Instalação OEL 7

13

Lab 1.6: Instalação OEL 7

14

Lab 1.7: Instalação OEL 7

15

Lab 1.8: Instalação OEL 7

16

Lab 1.9: Instalação OEL 7

17

Lab 1.10: Instalação OEL 7

18

Lab 1.11: Instalação OEL 7

19

Lab 1.12: Instalação OEL 7

20

Lab 1.13: Instalação OEL 7

21

Lab 1.14: Instalação OEL 7

22

Lab 1.15: Instalação OEL 7

23

Lab 1.16: Instalação OEL 7

24

Lab 1.17: Instalação OEL 7

25

Lab 1.18: Instalação OEL 7

26

Lab 1.19: Instalação OEL 7

27

Lab 1.20: Instalação OEL 7

28

Lab 1.21: Instalação OEL 7

29

Lab 1.22: Instalação OEL 7

30

Lab 1.23: Instalação OEL 7

31

Lab 1.24: Instalação OEL 7

32

Lab 1.25: Instalação OEL 7

33

Lab 1.26: Instalação OEL 7

34

Lab 1.27: Instalação OEL 7

35

Lab 1.28: Instalação OEL 7

36

Lab 1.29: Instalação OEL 7

37

Lab 1.30: Instalação OEL 7

38

Lab 1.31: Instalação OEL 7

39

Lab 1.32: Instalação OEL 7

40

Lab 1.33: Instalação OEL 7

41

Lab 1.34: Instalação OEL 7

42

Lab 1.35: Instalação OEL 7

43

Lab 1.36: Instalação OEL 7

44

Lab 1.37: Instalação OEL 7

45

Lab 1.38: Instalação OEL 7

46

Lab 1.39: Instalação OEL 7

47

Lab 1.40: Instalação OEL 7

48

Lab 1.41: Instalação OEL 7

49

Lab 1.42: Instalação OEL 7

50

Lab 1.43: Instalação OEL 7

51

Lab 1.44: Instalação OEL 7

52

Lab 1.45: Instalação OEL 7

53

Lab 1.46: Instalação OEL 7

54

Lab 1.47: Instalação OEL 7

55

Nas máquinas nerv01 e nerv02, atualize o sistema operacional e execute a instalação dos pré-requisitos.# yum -y update# yum -y install oracle-database-preinstall-18c.x86_64# yum -y install unzip wget iscsi-initiator-utils java-1.8.0-openjdk screen

# yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm# yum -y update# yum -y install rlwrap

$ rlwrap sqlplus / AS SYSDBA$ rlwrap rman TARGET /

55

Lab 2.1: Configuração OEL 7

56

Nas máquinas nerv01 e nerv02, remova o DNS 8.8.8.8 da placa de rede Pública.# nmtui

56

Lab 2.2: Configuração OEL 7

57

Lab 2.3: Configuração OEL 7

5858

Lab 2.4: Configuração OEL 7

59

Nas máquinas nerv01 e nerv02, ACRESCENTAR AO FINAL do arquivo /etc/hosts:# Public192.168.15.101 nerv01.localdomain nerv01192.168.15.102 nerv02.localdomain nerv02# Private192.168.1.101 nerv01-priv.localdomain nerv01-priv192.168.1.102 nerv02-priv.localdomain nerv02-priv# Virtual192.168.15.111 nerv01-vip.localdomain nerv01-vip192.168.15.112 nerv02-vip.localdomain nerv02-vip

Nas máquinas nerv01 e nerv02, executar os comandos abaixo.# groupadd asmadmin# groupadd asmdba# groupadd asmoper# usermod -g oinstall -G dba,oper,asmadmin,asmdba,asmoper oracle# mkdir -p /u01/app/oracle# mkdir -p /u01/app/18.3.0.0/grid# chown -R oracle:oinstall /u01/# chmod -R 775 /u01

59

Lab 2.5: Configuração OEL 7

60

Nas máquinas nerv01 e nerv02, desabilite o firewall, o avahi e o chronyd.# systemctl disable firewalld# systemctl disable avahi-daemon# systemctl enable chronyd

Nas máquinas nerv01 e nerv02, altere as seguintes linhas no arquivo /etc/chrony.conf....# server 0.rhel.pool.ntp.org iburst# server 1.rhel.pool.ntp.org iburst# server 2.rhel.pool.ntp.org iburst# server 3.rhel.pool.ntp.org iburstserver 192.168.15.4 iburst...

Nas máquinas nerv01 e nerv02, altere o SELinux para o modo permissive.# vi /etc/selinux/config...SELINUX=permissive...

Reinicie as máquinas nerv01 e nerv02 para validar todas as configurações.# reboot

Lab 2.6: Configuração OEL 7

61

Nas máquinas nerv01 e nerv02 , com o usuário oracle, ACRESCENTAR NO FINAL do arquivo /home/oracle/.bash_profile as linhas abaixo.export TMP=/tmpexport TMPDIR=$TMPexport ORACLE_HOSTNAME=nerv01.localdomainexport ORACLE_UNQNAME=ORCLexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/18.3.0.0/db_1export GRID_HOME=/u01/app/18.3.0.0/gridexport CRS_HOME=$GRID_HOMEexport ORACLE_SID=ORCL1export ORACLE_TERM=xtermexport PATH=/usr/sbin:$PATHexport PATH=$ORACLE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/libexport CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlibif [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fifi

Lab 2.7: Configuração OEL 7

62

Opções de Shared Storage

6363

Lab 3.1: Configuração Discos

Nas máquinas nerv01 e nerv02, ative o pacote iSCSI Initiator.# systemctl enable iscsid# systemctl start iscsid

Nas máquinas nerv01 e nerv02, verifique os Discos exportados no Storage.# iscsiadm -m discovery -t sendtargets -p 192.168.15.201 -l

Nas máquinas nerv01 e nerv02 verifique se os discos foram configurados localmente.# fdisk -l | grep sd

64

Lab 3.2: Configuração Discos

Na máquina nerv01, prepare a instalação.$ cp LINUX.X64_180000_grid_home.zip $GRID_HOME$ cd $GRID_HOME$ unzip -q LINUX.X64_180000_grid_home.zip$ rm LINUX.X64_180000_grid_home.zip$ su

# rpm -ivh /u01/app/18.3.0.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm# scp /u01/app/18.3.0.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm nerv02:/root/[root@nerv02 ~]# rpm -ivh /root/cvuqdisk-1.0.10-1.rpm

Na máquina nerv01, configure o disco com o AFD (ASM Filter Driver).# 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 CONFIG01 /dev/sdb --init# $ORACLE_HOME/bin/asmcmd afd_lslbl /dev/sdb# rm -rf /u01/app/oracle/diag/

65

Na máquina nerv01, com o usuário oracle, inicie a instalação do Grid Infrastructure.$ cd $GRID_HOME$ ./gridSetup.sh

Lab 4.1: Instalação Grid Infrastructure

66

Lab 4.2: Instalação Grid Infrastructure

67

Lab 4.3: Instalação Grid Infrastructure

68

Lab 4.4: Instalação Grid Infrastructure

69

Lab 4.5: Instalação Grid Infrastructure

70

Lab 4.6: Instalação Grid Infrastructure

71

Lab 4.7: Instalação Grid Infrastructure

72

Lab 4.8: Instalação Grid Infrastructure

73

Lab 4.9: Instalação Grid Infrastructure

74

Lab 4.10: Instalação Grid Infrastructure

75

Lab 4.11: Instalação Grid Infrastructure

76

Lab 4.12: Instalação Grid Infrastructure

77

Lab 4.13: Instalação Grid Infrastructure

78

Lab 4.14: Instalação Grid Infrastructure

79

Lab 4.15: Instalação Grid Infrastructure

80

Lab 4.16: Instalação Grid Infrastructure

81

Lab 4.17: Instalação Grid Infrastructure

82

Lab 4.18: Instalação Grid Infrastructure

83

Lab 4.19: Instalação Grid Infrastructure

84

Lab 4.20: Instalação Grid Infrastructure

85

Lab 4.21: Instalação Grid Infrastructure

86

Lab 4.22: Instalação Grid Infrastructure

87

Lab 4.23: Instalação Grid Infrastructure

88

Lab 4.24: Instalação Grid Infrastructure

89

Lab 4.25: Instalação Grid Infrastructure

90

Oracle 6.0.35: VAX / VMSOracle 7: PCMOracle 8i: Cache Fusion IOracle 9i: Cache Fusion II, Oracle Cluster Management ServicesOracle 10gR1:• Oracle Cluster Management Services => Cluster Ready Services (CRS)• ASM - Automatic Storage management• FAN - Fast Application Notification• Integração com Database Services• AWR, ADDM, ASH, Scheduler, Enterprise ManagerOracle 10gR2: CRS => Oracle Clusterware. New Features incluem: cluvfy, asmcmd.Oracle 11gR1: Apenas 7 New Features.Oracle 11gR2: CRS => Grid Infrastrucutre. 32 New Features.Oracle 12cR1: 33 New Features.Oracle 12cR2: 32 New Features.Oracle 18c: 14 New Features.

90

Evolução Oracle RAC

91

● Enhanced Oracle RAC Monitoring and Diagnostics in Enterprise Manager● Enhanced Oracle Real Application Clusters Configuration Assistants● OCI Runtime Connection Load Balancing● Parallel Execution for Oracle Real Application Clusters● Support for Distributed Transactions in an Oracle RAC Environment● Enhanced Oracle RAC Switchover Support for Logical Standby Databases● Enhanced Oracle RAC Monitoring and Diagnostics in Enterprise Manager

91

RAC 11gR1 New Features

92

● Configuration Assistants Support New Oracle RAC Features● Enhanced Cluster Verification Utility● Integration of Cluster Verification Utility and Oracle Universal Installer● Cluster Time Service● Oracle Cluster Registry (OCR) Enhancements● Grid Plug and Play (GPnP)● Oracle Restart● Policy-Based Cluster and Capacity Management● Improved Clusterware Resource Modeling● Role-Separated Management● Agent Development Framework● Zero Downtime Patching for Oracle Clusterware and Oracle RAC● Enterprise Manager-Based Clusterware Resource Management● Enterprise Manager Provisioning for Oracle Clusterware and Oracle Real Application Clusters● Enterprise Manager Support for Grid Plug and Play● Enterprise Manager Support for Oracle Restart● Configuration Assistant Support for Removing Oracle RAC Installations

92

RAC 11gR2 New Features – Parte 1

93

● Oracle Universal Installer Support for Removing Oracle RAC Installations● Improved Deinstallation Support With Oracle Universal Installer● Downgrading Database Configured With DBControl● Oracle Restart Integration with Oracle Universal Installer● Out-of-Place Oracle Clusterware Upgrade● OUI Support for Out-of-Place Oracle Clusterware Upgrade● Server Control (SRVCTL) Enhancements● Server Control (SRVCTL) Enhancements to Support Grid Plug and Play● SRVCTL Support for Single-Instance Database in a Cluster● Universal Connection Pool (UCP) Integration with Oracle Data Guard● UCP Integration With Oracle Real Application Clusters● Universal Connection Pool (UCP) for JDBC● Java API for Oracle RAC FAN High Availability Events● EMCA Supports New Oracle RAC Configuration for Enterprise Manager● Global Oracle RAC ASH Report + ADDM Backwards Compatibility

93

RAC 11gR2 New Features – Parte 2

9494

RAC 12cR1 New Features – Parte 1

● Oracle Flex Cluster● SRVCTL Support for Oracle Flex Cluster Implementations● Policy-Based Cluster Management and Administration● What-If Command Evaluation● Shared Grid Naming Service (GNS)● Online Resource Attribute Modification● Grid Infrastructure Script Automation for Installation and Upgrade● Multipurpose Cluster Installation Support● Support for IPv6 Based IP Addresses for Oracle RAC Client Connectivity● Message Forwarding on Oracle RAC● Sharded Queues for Performance and Scalability● Oracle Grid Infrastructure Rolling Migration for One-Off Patches

9595

Flex Cluster

9696

RAC 12cR1 New Features – Parte 2

● Oracle Flex ASM● Oracle ASM Shared Password File in a Disk Group● Oracle ASM Rebalance Enhancements● Oracle ASM Disk Resync Enhancements● Oracle ASM chown, chgrp, chmod and Open Files Support● Oracle ASM Support ALTER DISKGROUP REPLACE USER● Oracle ASM File Access Control on Windows● Oracle ASM Disk Scrubbing● Oracle Cluster Registry Backup in ASM Disk Group Support● Enterprise Manager Support for Oracle ASM Features● Oracle ACFS Support for All Oracle Database Files● Oracle ACFS and Highly Available NFS● Oracle ACFS Snapshots Enhancements● Oracle ACFS Replication Integration with Oracle ACFS Security and Encryption● Oracle ACFS Security and Encryption Features● Oracle ACFS File Tags for Grid Homes● Oracle ACFS Plug-in APIs● Oracle ACFS Replication and Tagging on AIX● Oracle ACFS Replication and Tagging on Solaris● Oracle Audit Vault Support for Oracle ACFS Security and Encryption● Enterprise Manager Support for Oracle ACFS New Features

9797

Flex ASM

9898

RAC 12cR2 New Features – Parte 1

● Oracle Flex ASM Disk Group Quota Management● Prioritized Rebalancing● Extending Oracle Real Application Clusters (Oracle RAC) Configuration Support● I/O Server● Cluster Resource Activity Log● Cluster Verification Utility - Second Generation Command Line Output● Switch Service Enhancement● VM Manager Agent for GI● Shared Grid Naming Service High Availability● Oracle Clusterware Resource Groups● Reasoned What-If Command Evaluation (Why-If)● Server Weight-Based Node Eviction● Load-Aware Resource Placement● Oracle Clusterware Application Clusters● Oracle Grid Infrastructure Installation Support for Application Cluster Installation Type

9999

RAC 12cR2 New Features – Parte 2

● Oracle Automatic Storage Management Cluster File System (Oracle ACFS) Snapshot Enhancements● Oracle ACFS System Defragger● 4K Sectors and Metadata Enhancements for Oracle ACFS● Oracle ACFS Metadata Collection Enhancements● Oracle ACFS Plug-ins for File Content● Oracle ACFS Loopback Device● Oracle ACFS API Access for Snapshots, File Tags, Plug-in Metrics● Oracle ACFS Compression Enhancements● Oracle Snapshot-Based Replication Enhancements● Oracle ACFS Auto-Resize Enhancements● Oracle ACFS Sparse Files Enhancements● Oracle ACFS Metadata Acceleration● Oracle ACFS NAS Maximum Availability eXtensions● Rapid Home Provisioning● Support for IPv6 Based IP Addresses for the Oracle Cluster Interconnect● Oracle Real Application Clusters (Oracle RAC) Reader Nodes● Service-Oriented Buffer Cache Access Optimization

100100

RAC 18c New Features

● ASM Data Reliability Enhancements● ASM Database Cloning● Dropping Oracle ASM File Groups With a Cascade Option● Converting Normal or High Redundancy Disk Groups to Flex Disk Groups without Restricted Mount● Oracle ACFS Remote Service for Member Clusters● Cluster Health Advisor Cross Database Analysis Support● Cluster Health Advisor Cross Cluster Analysis Support● Shared Single Client Access Names● NodeVIP-Less Cluster● Cluster Domain Proxies● gridSetup-based Management● Reader Nodes Performance Isolation● UCP Support for RAC Affinity Sharding● Transparent Application Continuity (TAC)

101

Na máquina nerv01 e nerv02 com o usuário oracle, crie o diretório do ORACLE_HOME.$ source /home/oracle/.bash_profile$ mkdir -p $ORACLE_HOME

Na máquina nerv01, com o usuário oracle, descompacte e execute o instalador do Oracle Database Software.$ cd /home/oracle$ cp LINUX.X64_180000_db_home.zip $ORACLE_HOME$ cd $ORACLE_HOME$ unzip -q LINUX.X64_180000_db_home.zip$ rm LINUX.X64_180000_db_home.zip$ ./runInstaller

Lab 5.1: Instalação Oracle Database Software

102

Lab 5.2: Instalação Oracle Database Software

103

Lab 5.3: Instalação Oracle Database Software

104

Lab 5.4: Instalação Oracle Database Software

105

Lab 5.5: Instalação Oracle Database Software

106

Lab 5.6: Instalação Oracle Database Software

107

Lab 5.7: Instalação Oracle Database Software

108

Lab 5.8: Instalação Oracle Database Software

109

Lab 5.9: Instalação Oracle Database Software

110

Lab 5.10: Instalação Oracle Database Software

111

Lab 5.11: Instalação Oracle Database Software

# /u01/app/oracle/product/18.3.0.0/db_1/root.sh...Enter the full pathname of the local bin directory: [/usr/local/bin]: <ENTER>...#

112

Lab 5.12: Instalação Oracle Database Software

113

Lab 6.1: Criação Banco de Dados

Nas máquinas nerv01 e nerv02, verifique os Discos exportados no Storage.# iscsiadm -m discovery -t sendtargets -p 192.168.15.201 -l

Nas máquinas nerv01 e nerv02 verifique se os discos foram configurados localmente.# fdisk -l | grep sd

114

Lab 6.2: Criação Banco de Dados

Na máquina nerv01, crie os novos Discos no ASM Filter Driver.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ export PATH=$ORACLE_HOME/bin:$PATH$ su# asmcmd afd_lslbl# fdisk -l | grep sd# asmcmd afd_label DATA01 /dev/sdc ### Disco de 20GB.# asmcmd afd_label FRA01 /dev/sdd ### Disco de 10GB.# asmcmd afd_label VD01 /dev/sde ### Disco de 1GB.# asmcmd afd_label VD02 /dev/sdf ### Disco de 1GB.# asmcmd afd_label VD03 /dev/sdg ### Disco de 1GB.# asmcmd afd_label OCR01 /dev/sdh ### Disco de 2GB.# asmcmd afd_label OCR02 /dev/sdi ### Disco de 2GB.# asmcmd afd_lslbl

Na máquina nerv02, detecte os discos do ASM Filter Driver.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM2$ export PATH=$ORACLE_HOME/bin:$PATH$ su# asmcmd afd_scan# asmcmd afd_lslbl

115

Lab 6.3: Criação Banco de Dados

Na máquina nerv01, crie os novos Disk Groups.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ rlwrap sqlplus / AS SYSASMSQL> CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK 'AFD:DATA01' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='8M';

SQL> CREATE DISKGROUP FRA EXTERNAL REDUNDANCY DISK 'AFD:FRA01' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='8M';

SQL> CREATE DISKGROUP VD NORMAL REDUNDANCY DISK 'AFD:VD01','AFD:VD02','AFD:VD03' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='1M';

SQL> CREATE DISKGROUP OCR NORMAL REDUNDANCY DISK 'AFD:OCR01','AFD:OCR02' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='1M';

SQL> SET PAGESIZE 1000SQL> SELECT GROUP_NUMBER, NAME, STRIPE, REDUNDANCY FROM V$ASM_TEMPLATE ORDER BY GROUP_NUMBER, NAME;

$ srvctl enable diskgroup -g DATA -n nerv02$ srvctl start diskgroup -g DATA -n nerv02$ srvctl enable diskgroup -g FRA -n nerv02$ srvctl start diskgroup -g FRA -n nerv02$ srvctl enable diskgroup -g VD -n nerv02$ srvctl start diskgroup -g VD -n nerv02$ srvctl enable diskgroup -g OCR -n nerv02$ srvctl start diskgroup -g OCR -n nerv02

116

ASM Mirroring

117

ASM Stripping: Fine x Coarse

118

Lab 6.4: Criação Banco de Dados

Execute o DBCA para criar o banco de dados.$ source /home/oracle/.bash_profile$ dbca

119

Lab 6.5: Criação Banco de Dados

120

Lab 6.6: Criação Banco de Dados

121

Lab 6.7: Criação Banco de Dados

122

Lab 6.8: Criação Banco de Dados

123

Lab 6.9: Criação Banco de Dados

124

Lab 6.10: Criação Banco de Dados

125

Lab 6.11: Criação Banco de Dados

126

Lab 6.12: Criação Banco de Dados

127

Lab 6.13: Criação Banco de Dados

128

Lab 6.14: Criação Banco de Dados

129

Lab 6.16: Criação Banco de Dados

130

Lab 6.17: Criação Banco de Dados

131

Lab 6.18: Criação Banco de Dados

132

Lab 6.19: Criação Banco de Dados

133

Lab 6.20: Criação Banco de Dados

134

✔ Background Process• ACMS: Atomic Controlfile to Memory Service• GTX0-j: Global Transaction Process• LMON: Global Enqueue Service Monitor• LMD: Global Enqueue Service Daemon• LMS: Global Cache Service Process• LCK0: Instance Enqueue Process• RMSn: Oracle RAC Management Processes• RSMN: Remote Slave Monitor

✔ PFILE / SPFILE (1x) (ALTER SYSTEM … SID=’*” ou ALTER SYSTEM ... SID=’ORCL1’)✔ DATAFILEs (1x) ✔ CONTROL FILEs (1x)✔ Online REDO LOG Threads (x Nodes)✔ UNDO TABLESPACE (x Nodes)

RAC Database

135

Lab 6.21: Criação Banco de Dados

Na máquina nerv01, para efetuar logon na Instance ASM1, use o SQLPlus.$ export ORACLE_SID=+ASM1$ sqlplus / as SYSDBAPor que não funcionou?

Verifique os discos existentes, e espaço disponível.SQL> SELECT NAME, TOTAL_MB, FREE_MB FROM V$ASM_DISK;SQL> SELECT NAME, TOTAL_MB, FREE_MB FROM V$ASM_DISKGROUP;$ asmcmd -pASMCMD [+] > lsdg

Pelo asmcmd, copie um DATAFILE do ASM para o /home/oracle de uma máquina do RAC.

Na instância do banco, crie uma TABLESPACE.SQL> CREATE PLUGGABLE DATABASE PROD ADMIN USER RICARDO IDENTIFIED BY Nerv2018;SQL> ALTER PLUGGABLE DATABASE PROD OPEN READ WRITE;SQL> ALTER PLUGGABLE DATABASE PROD SAVE STATE;SQL> ALTER SESSION SET CONTAINER = PROD;SQL> CREATE TABLESPACE SOE;SQL> ALTER TABLESPACE SOE ADD DATAFILE;SQL> ALTER TABLESPACE SOE ADD DATAFILE ‘+DATA’;

Na máquina nerv02, abra o PDB em Read Write.SQL> ALTER PLUGGABLE DATABASE PROD OPEN READ WRITE;SQL> ALTER PLUGGABLE DATABASE PROD SAVE STATE;

136

CDB Architecture

137

Deprecation of Non-CDB Architecture

Documentação 12cR1:

Documentação 12cR2:

Documentação 18c:

138

12cR2 CDB New Features

✔ Subset Standby✔ Data Guard Broker PDB Migration or Failover✔ Cross-Platform Import of a Pluggable Database into a Multitenant Container Database✔ I/O Rate Limits for PDBs✔ Heat Map and Automatic Data Optimization Support for CDBs✔ PDB Character Set✔ PDB Refresh✔ Hints in CONTAINERS Query✔ Parallel PDB Creation Clause✔ PDB Archive Files (.pdb Files)✔ Default Tablespace Clause✔ Cloning a PDB✔ Near Zero Downtime PDB Relocation✔ Logical Standby Database to Support CDBs with PDBs with Different Character Sets✔ LogMiner to Support CDBs with PDBs with Different Character Sets✔ Support for PDBs with Different Character Sets, Time Zone File Versions, and Database Time Zones in a

CDB✔ Memory Resource Management✔ Per-Process PGA Limits✔ Performance Profiles and Mandatory PDB Profiles✔ CDB-Level PDB Lockdown

139

12cR2 CDB New Features

✔ Application Root✔ Proxy PDB✔ Forwarding Connections to A New Address Based on Service✔ Service-Level ACLs for TCP Protocol✔ Flashback Pluggable Database✔ Upgrading a CDB With One or More PDBs in a Single Operation✔ Support for Thousands of Pluggable Databases for Each Multitenant Container Database✔ Pluggable Database Lockdown Profiles Enhancements✔ Pluggable Database Operating System Credentials✔ Oracle Enterprise Manager Database Express (EM Express) Resource Manager Support✔ EM Express: Simplifying Configuration for Multitenant Through Single Port Access✔ EM Express: Performance Hub Enhancements✔ Automatic Workload Repository (AWR) Support for a Pluggable Database (PDB)✔ Selective PDB Upgrades✔ AWR_PDB_AUTOFLUSH_ENABLED Initialization Parameter✔ ENABLE_AUTOMATIC_MAINTENANCE_PDB Initialization Parameter✔ AUTOTASK_MAX_ACTIVE_PDBS Initialization Parameter✔ Global and Shared Connection Pool for Oracle Cloud and Multitenant Oracle Databases✔ Prioritized Rebalancing✔ Oracle Database Vault Common Realms and Command Rules for Oracle Multitenant

140

18c CDB New Features

✔ Server Draining ahead of relocating or stopping services or PDB✔ Duplicate PDBs between encrypted and non-encrypted CDBs✔ PDB backups usable after plugging in to a new CDB✔ Backups from non-CDBs are usable after migration to CDB✔ RMAN duplicate PDB into existing CDB✔ Copying a PDB in an Oracle Data Guard Environment✔ DBCA PDB Clone✔ PDB Lockdown Profile Enhancements✔ Refreshable PDB Switchover✔ CDB Fleet Management✔ PDB Snapshot Carousel✔ ASM Database Cloning✔ Ability to Create a Keystore for Each Pluggable Database

141

Option Multitenant

142

Multitenant - EE

143

Singletenant - SE2

144

Esse banco utiliza CDB Arquitecture?

145

Que Containers / PDBs este banco tem?

146

Em que Container estou conectado?

147

Como conectar em um PDB? SET CONTAINER

148

Como conectar em um PDB?

$ lsnrctl status...Services Summary...Service "5397376af7702ac5e0536a00a8c0505d" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service...Service "ORCL" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service...Service "ORCLXDB" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service...Service "prod" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service...The command completed successfully$

149

Como conectar em um PDB? tnsnames.ora

$ cat $ORACLE_HOME/network/admin/tnsnames.ora...ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = nerv06.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) )

PROD = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = nerv06.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = PROD) ) )

...$

150

Como conectar em um PDB? tnsnames.ora

151

Como conectar em um PDB? Easy Connect

152

E agora, qual o nome da Instância? E do Banco?

153

E agora, qual o nome da Instância? E do Banco?

154

CDB e PDBs: STARTUP

155

CDB e PDBs: STARTUP

156

Alert Log

157

ArquiteturaArquitetura

158

DATAFILEs

159

DATAFILEs

160

Dicionário de Dados

161

VIEWs

162

VIEWs

163

Parâmetros

164

Parâmetros

165

TABLESPACEs

166

USERs

167

USERs

168

USERs

169

USERs

170

SELECT em outros Containers

171

Criando (Clonando) um PDB

172

Criando (Clonando) um PDB

173

Criando (Clonando) um PDB

174

Criando (Clonando) um PDB

175

Criando (Clonando) um PDB

176

Unplug / Plug

177

Unplug / Plug

178

DROP

179

Backup

CDB e PDBsRMAN> BACKUP DATABASE;RMAN> BACKUP DATAFILE 1;RMAN> BACKUP DATAFILE 1,3;

CDBRMAN> BACKUP DATABASE ROOT;RMAN> BACKUP TABLESPACE SYSTEM;RMAN> BACKUP TABLESPACE SYSTEM,SYSAUX;

PDBsRMAN> BACKUP PLUGGABLE DATABASE DEV1;RMAN> BACKUP PLUGGABLE DATABASE DEV1,DEV2;RMAN> BACKUP TABLESPACE DEV1:SYSTEM;

180

Restore / Recover

CDB e PDBsRMAN> RESTORE DATABASE;RMAN> RECOVER DATABASE;RMAN> RESTORE DATAFILE 1;RMAN> RECOVER DATAFILE 1;

CDBRMAN> RESTORE DATABASE ROOT;RMAN> RECOVER DATABASE ROOT;RMAN> RESTORE TABLESPACE SYSTEM;RMAN> RECOVER TABLESPACE SYSTEM;

PDBsRMAN> RESTORE PLUGGABLE DATABASE DEV1;RMAN> RECOVER PLUGGABLE DATABASE DEV1;RMAN> RESTORE TABLESPACE DEV1:USERS;RMAN> RECOVER TABLESPACE DEV1:USERS;

181

Administração

182

Comandos depreciados (>= 11gR2)

183

Comandos depreciados (>= 11gR2)

184

Comandos depreciados (>= 11gR2)

185

- ASM- Listener- VIPs e SCAN- OCR: Oracle Cluster Registry- VD: Voting Disk (Quorum Disk)- GIMR: Grid Infrastructure Management Repository (-MGMTDB)- Utilitários principais: crsctl, srvctl- Daemons: ohasd, crsd, evmd, ons, evmlogger, ologgerd, cssdmonitor, cssdagent, ocssd, octssd, osysmond, mdnsd, gpnpd, gipcd, orarootagent, oraagent, scriptagent.

Componentes Grid Infrastructure

186

Dificuldades

● Comandos depreciados● oracle X root● $GRID_HOME x $ORACLE_HOME

187

Programas do GRID_HOME

Usar um usuário separado para o Grid.

OU

Adicionar $GRID_HOME/bin no $PATH, no .bash_profile$ crsctl status res -t

OU

$ . oraenv (Deprecated)ORACLE_SID = [ORCL1] ? +ASM1 <enter>

OU

$ cd /u01/app/18.3.0.0/grid/bin/./crsctl status res -t

OU

$ /u01/app/18.3.0.0/grid/bin/crsctl status res -t

188

Daemons

189

Daemons

190

Oracle RAC Startup

191

11gR2$GRID_HOME/log/<node>/$GRID_HOME/log/<node>/alert<node>.log

12cR1 / 12cR2 / 18c$ORACLE_BASE/diag/crs/<node>/crs$ORACLE_BASE/diag/crs/<node>/crs/trace/alert.log

Logs

192

Acompanhe a execução dos daemons via top.

Desligue a máquina nerv01.Veja o que acontece no Alert Log do nerv02 enquanto o nerv01 é desligado.$ tail -f /u01/app/oracle/diag/crs/nerv02/crs/trace/alert.log

Ligue a máquina nerv01.Veja o que acontece no Alert Log do nerv02 enquanto o nerv01 é ligado.$ tail -f /u01/app/oracle/diag/crs/nerv02/crs/trace/alert.log

Familiarize-se com o diretório de Logs.

Verifique o estado dos recursos.$ /u01/app/18.3.0.0/grid/bin/crsctl status res -t

Lab 7.1: Daemons

193

Continue acompanhando os Alert Logs das duas máquinas.

Desconecte o cabo da rede do Interconnect, apenas de um nó.O que aconteceu?

Desconecte o cabo da rede do Storage, apenas de um nó.O que aconteceu?

Verifique e altere parâmetros de timeout para o mínimo possível, e execute novamente os testes.# /u01/app/18.3.0.0/grid/bin/crsctl get css reboottime# /u01/app/18.3.0.0/grid/bin/crsctl get css misscount# /u01/app/18.3.0.0/grid/bin/crsctl get css disktimeout# /u01/app/18.3.0.0/grid/bin/crsctl set css reboottime 1# /u01/app/18.3.0.0/grid/bin/crsctl set css misscount 2# /u01/app/18.3.0.0/grid/bin/crsctl set css disktimeout 3

Verifique o estado dos recursos.$ /u01/app/18.3.0.0/grid/bin/crsctl status res -t

Lab 7.2: Daemons

194

Copie o swingbench para a máquina nerv01, como usuário oracle.

Descompacte o swingbench.zip.$ cd /home/oracle$ unzip -q swingbench261046.zip$ cd swingbench/bin

Execute a criação do SCHEMA do teste de carga:$ ./oewizard

Execute o teste de carga:$ ./charbench -cs //rac01-scan/PROD -uc 10 -c ../configs/SOE_Server_Side_V2.xml

Lab 8.1: Teste de Carga

195

● A partir de qualquer Node, controla todos.● Deve ser utilizado com o usuário oracle ou com o owner do GRID_HOME.● Deve ser utilizado o srvctl do GRID_HOME.● Comando preferencial para iniciar e parar recursos do RAC.● Administra Database, Instances, ASM, Listeners e Services.● Um recurso pode ser iniciado, parado, habilitado, ou desabilitado.

srvctl

196

Estudando o help do srvctl, execute a sequência de operações abaixo:$ srvctl -h$ srvctl stop -h$ srvctl stop listener -h

● Verifique as configurações do Listener.● Verifique as configurações do SCAN.● Verifique as configurações do Banco de Dados.

● Verifique o estado dos listeners, pare o Listener de apenas um Node, e verifique novamente.● Verificar o estado das Instances, pare a Instance de apenas um Node, e verifique novamente.● Inicie novamente o Listener que está parado.● Inicie novamente a Instance que está parada.● Pare o Database, e o inicie novamente.● Pare uma Intance com a opção ABORT.● Inicie uma Instance com a opção MOUNT.● Deixa uma instância desabilitada, confira, e habilite novamente.

● Mate uma Instance (kill no pmon) de um dos Nodes.

Lab 9.1: srvctl

197

Coloque o banco em modo ARCHIVELOG e execute um backup.

$ srvctl stop database -d ORCL$ srvctl start instance -d ORCL -i ORCL1 -o mountSQL> ALTER DATABASE ARCHIVELOG;SQL> ALTER SYSTEM SET db_recovery_file_dest='+FRA';SQL> ALTER SYSTEM SET db_recovery_file_dest_size=10G;SQL> ALTER DATABASE OPEN;$ srvctl start instance -d ORCL -i ORCL2

RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO COMPRESSED BACKUPSET;RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '+FRA';RMAN> BACKUP DATABASE;

Lab 9.2: srvctl

198

● A partir de qualquer Node, controla todos.● Alguns comandos podem ser executados com usuário oracle, outros com o usuário root.● Este programa só existe no GRID_HOME.● Principal comando de administração do Grid.● Necessário para verificação e alteração de parâmetros.● Necessário para Troubleshooting e Debug.

crsctl

199

Verifique as opções do crsctl, digitando “crsctl”, sem opções.

Verifique o status dos Daemons:# /u01/app/18.3.0.0/grid/bin/crsctl check css# /u01/app/18.3.0.0/grid/bin/crsctl check evm# /u01/app/18.3.0.0/grid/bin/crsctl check crs# /u01/app/18.3.0.0/grid/bin/crsctl check ctss# /u01/app/18.3.0.0/grid/bin/crsctl check cluster# /u01/app/18.3.0.0/grid/bin/crsctl check cluster -all# /u01/app/18.3.0.0/grid/bin/crsctl status res -t -init# /u01/app/18.3.0.0/grid/bin/crsctl status res -dependency

Verifique a versão instalada e ativa.# /u01/app/18.3.0.0/grid/bin/crsctl query crs activeversion# /u01/app/18.3.0.0/grid/bin/crsctl query crs softwareversion# /u01/app/18.3.0.0/grid/bin/crsctl query crs releasepatch# /u01/app/18.3.0.0/grid/bin/crsctl query crs softwarepatch

Verifique os detalhes dos recursos do Oracle RAC.# /u01/app/18.3.0.0/grid/bin/crsctl status res ora.orcl.db# /u01/app/18.3.0.0/grid/bin/crsctl status res ora.orcl.db -t# /u01/app/18.3.0.0/grid/bin/crsctl status res ora.orcl.db -f

Verifique os comandos What-If e Why-If.# /u01/app/18.3.0.0/grid/bin/crsctl eval | grep eval# /u01/app/18.3.0.0/grid/bin/crsctl eval | grep explain

Lab 10.1: crsctl

200

Liste os módulos do Cluster.# /u01/app/18.3.0.0/grid/bin/crsctl lsmodules crs# /u01/app/18.3.0.0/grid/bin/crsctl lsmodules css# /u01/app/18.3.0.0/grid/bin/crsctl lsmodules evm

Coloque um dos módulos informados pelo comando anterior (lsmodules), e coloque ele em modo Debug.# tail -f /u01/app/oracle/diag/crs/nerv01/crs/trace/ocssd.trc# /u01/app/18.3.0.0/grid/bin/crsctl set log css “CSSD:5” # /u01/app/18.3.0.0/grid/bin/crsctl set log css “CSSD:2”

Pare todo o Node.# /u01/app/18.3.0.0/grid/bin/crsctl stop cluster

Pare o outro Node.# /u01/app/18.3.0.0/grid/bin/crsctl stop cluster -n nerv02

Inicie todo o Cluster.# /u01/app/18.3.0.0/grid/bin/crsctl start cluster -all

Lab 10.2: crsctl

201

● É o centro do “ping” dos Nodes.● Pode ter N mirrors.● Pode ser alterado de qualquer Node.● Backups do Voting Disk são manuais (<11gR2).● Deve ser feito backup após Adição ou Remoção de Nodes (<11gR2).● Todas operações do Voting Disk devem ser executadas como root.● Com base nas informações nele, o Clusterware decide que Node faz parte do Cluster (Election / Eviction / Split Brain).

Voting Disk

202

Verifique o status do VOTING DISK.# /u01/app/18.3.0.0/grid/bin/crsctl query css votedisk

Adicione um MIRROR ao VOTING DISK.# /u01/app/18.3.0.0/grid/bin/crsctl add css votedisk +FRA# /u01/app/18.3.0.0/grid/bin/crsctl query css votediskO que aconteceu?

# /u01/app/18.3.0.0/grid/bin/crsctl replace votedisk +FRA# /u01/app/18.3.0.0/grid/bin/crsctl query css votediskO que aconteceu?

# /u01/app/18.3.0.0/grid/bin/crsctl replace votedisk +OCR# /u01/app/18.3.0.0/grid/bin/crsctl query css votediskO que aconteceu?

Altere a localização do VOTING DISK.# /u01/app/18.3.0.0/grid/bin/crsctl replace votedisk +VD# /u01/app/18.3.0.0/grid/bin/crsctl query css votedisk

Lab 11.1: Voting Disk

203

Na máquina nerv09, simule uma falha nos discos dos VOTING DISKs.# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000O que aconteceu?

Nas máquinas nerv01 e nerv02, verifique o estado do Cluster.# /u01/app/18.3.0.0/grid/bin/crsctl status res -t# /u01/app/18.3.0.0/grid/bin/crsctl check cluster -all# tail -f /u01/app/oracle/diag/crs/nerv01/crs/trace/alert.log

Nas máquinas nerv01 e nerv02, desabilite o início automático do CRS, e reinicie.# /u01/app/18.3.0.0/grid/bin/crsctl disable crs# reboot

Na máquina nerv01, inicie o CRS em modo exclusivo, e altere o VOTING DISK.# /u01/app/18.3.0.0/grid/bin/crsctl start crs -excl -nocrs# /u01/app/18.3.0.0/grid/bin/crsctl replace votedisk +CONFIG

Nas máquinas nerv01 e nerv02, habilite o início automático do CRS, e reinicie.# /u01/app/18.3.0.0/grid/bin/crsctl enable crs# reboot

Lab 11.2: Voting Disk

204

Na máquina nerv01, crie novamente os discos dos VOTING DISKs.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ export PATH=$ORACLE_HOME/bin:$PATH$ su# fdisk -l | grep sd ### Os discos do VD são os de 1GB.# asmcmd afd_label VD01 /dev/sd?# asmcmd afd_label VD02 /dev/sd?# asmcmd afd_label VD03 /dev/sd?# asmcmd afd_lslbl

Na máquina nerv02, detecte novamente os discos dos VOTING DISKs.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM2$ su# asmcmd afd_scan# asmcmd afd_lslbl

Lab 11.3: Voting Disk

205

Na máquina nerv01, crie novamente os discos dos DISK GROUPs.SQL> CREATE DISKGROUP VD NORMAL REDUNDANCY DISK 'AFD:VD01','AFD:VD02','AFD:VD03' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='1M';

$ srvctl start diskgroup -g VD -n nerv02

Na máquina nerv01, altere a localização do VOTING DISK.# /u01/app/18.3.0.0/grid/bin/crsctl query css votedisk# /u01/app/18.3.0.0/grid/bin/crsctl replace votedisk +VD# /u01/app/18.3.0.0/grid/bin/crsctl query css votedisk

Lab 11.4: Voting Disk

206

● É o centro das informações do RAC.● Deve estar em Storage compartilhado por todos Nodes.● Pode ter até 4 mirrors.● Ferramentas do OCR: ocrconfig, ocrcheck, ocrdump.● Ferramentas do OCR devem ser utilizadas como root.● Pode ser alterado de qualquer Node.● Backups do OCR são executados automaticamente.● Backups armazenados: 1 semanal, 1 diário, e 1 a cada 4 horas.● Podem ser executados backups físicos e lógicos.

OCR – Oracle Cluster Registry

207

Execute o ocrdump, e analise o conteúdo do dump (OCRDUMPFILE).# /u01/app/18.3.0.0/grid/bin/ocrdump# file OCRDUMPFILE# grep orcl OCRDUMPFILE# grep 192.168 OCRDUMPFILE

Execute o ocrcheck, e verifique o resultado.# /u01/app/18.3.0.0/grid/bin/ocrcheck# ls -lh /u01/app/oracle/diag/crs/nerv01/crs/trace/ocrcheck*

Verifique o OCR pelo Cluster Verification Utility.# /u01/app/18.3.0.0/grid/bin/cluvfy comp ocr -n nerv01,nerv02O que aconteceu?

Lab 12.1: OCR

208

Na máquina nerv01, altere a localização dos OCRs.# /u01/app/18.3.0.0/grid/bin/ocrconfig -add +CONFIG# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -add +DATA# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -add +FRA# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -delete +DATA# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -delete +FRA# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -delete +CONFIGO que aconteceu?

# /u01/app/18.3.0.0/grid/bin/ocrconfig -add +OCR# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -delete +CONFIG# /u01/app/18.3.0.0/grid/bin/ocrcheck

Lab 12.2: OCR

209

Na máquina nerv01, verifique os backups físicos existentes do OCR.# /u01/app/18.3.0.0/grid/bin/ocrconfig -showbackup# /u01/app/18.3.0.0/grid/bin/ocrconfig -manualbackup# /u01/app/18.3.0.0/grid/bin/ocrconfig -showbackup

Na máquina nerv01, altere a localização dos backups físicos do OCR.# /u01/app/18.3.0.0/grid/bin/ocrconfig -backuploc +FRA# /u01/app/18.3.0.0/grid/bin/ocrconfig -manualbackup# /u01/app/18.3.0.0/grid/bin/ocrconfig -showbackup

Na máquina nerv01, faça um backup lógico do OCR.# /u01/app/18.3.0.0/grid/bin/ocrconfig -export /home/oracle/OCR.bkp# file /home/oracle/OCR.bkp

Lab 12.3: OCR

210

Na máquina nerv09, simule uma falha nos discos do OCR.# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000# dd if=/dev/zero of=/dev/sda? bs=512 count=1000000O que aconteceu?

Nas máquinas nerv01 e nerv02, verifique o estado do Cluster.# tail -f /u01/app/oracle/diag/crs/nerv01/crs/trace/alert.log# /u01/app/18.3.0.0/grid/bin/crsctl check cluster -all# /u01/app/18.3.0.0/grid/bin/crsctl status res -t# /u01/app/18.3.0.0/grid/bin/ocrcheck# /u01/app/18.3.0.0/grid/bin/ocrconfig -manualbackup

Nas máquinas nerv01 e nerv02, desabilite o início automático do CRS, e reinicie.# /u01/app/18.3.0.0/grid/bin/crsctl disable crs# reboot

Na máquina nerv01, inicie o CRS em modo exclusivo.# /u01/app/18.3.0.0/grid/bin/crsctl start crs -excl -nocrs

Lab 12.4: OCR

211

Na máquina nerv01, crie novamente os discos dos VOTING DISKs.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ export PATH=$ORACLE_HOME/bin:$PATH$ su# fdisk -l | grep sd ### Os discos do OCR são os de 2GB.# asmcmd afd_label OCR01 /dev/sd?# asmcmd afd_label OCR02 /dev/sd?# asmcmd afd_lslbl

Na máquina nerv02, detecte novamente os discos dos VOTING DISKs.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM2$ su# asmcmd afd_scan# asmcmd afd_lslbl

Lab 12.5: OCR

212

Na máquina nerv01, crie novamente os discos dos DISK GROUPs.SQL> CREATE DISKGROUP OCR NORMAL REDUNDANCY DISK 'AFD:OCR01','AFD:OCR02' ATTRIBUTE 'compatible.asm'='18.0', 'compatible.rdbms'='18.0', 'au_size'='1M';

Na máquina nerv01, restaure o OCR.# /u01/app/18.3.0.0/grid/bin/ocrconfig -restore ...

Nas máquinas nerv01 e nerv02, habilite o CRS e reinicie.# /u01/app/18.3.0.0/grid/bin/crsctl enable crs# reboot

Lab 12.6: OCR

213

● A partir de qualquer Node, controla todos.● Deve ser utilizado com o usuário root.● Ferramenta para alteração dos IPs Público e Interconnect.

oifcfg

214

Execute um backup do OCR (manualbackup).

Verifique as Interfaces atuais, nos dois Nodes. Guarde o resultado.# /u01/app/18.3.0.0/grid/bin/oifcfg getif# /u01/app/18.3.0.0/grid/bin/oifcfg setif -global enp2s0/192.168.3.0:cluster_interconnect,asm# /u01/app/18.3.0.0/grid/bin/oifcfg getif$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ srvctl config listener -asmlistener$ srvctl config asm$ srvctl add listener -asmlistener -l ASMNEWLSNR_ASM -subnet 192.168.3.0$ srvctl update listener -listener ASMNET1LSNR_ASM -asm -remove -force$ srvctl config listener -asmlistener$ srvctl config asm

Pare o Cluster nos dois Nodes.# /u01/app/18.3.0.0/grid/bin/crsctl stop cluster -all

Nas máquinas nerv01 e nerv02, alterar o IP do Interconnect, desativar e ativar a placa de rede.Nas máquinas nerv01 e nerv02, alterar /etc/hosts para os novos IPs.

Lab 13.1: oifcfg

215

Inicie o Cluster nos dois Nodes.# /u01/app/18.3.0.0/grid/bin/crsctl start cluster -all

Em apenas um Node, remova a antiga Interface, após o CRS iniciar.# /u01/app/18.3.0.0/grid/bin/oifcfg getif# /u01/app/18.3.0.0/grid/bin/oifcfg delif -global enp2s0/192.168.1.0# /u01/app/18.3.0.0/grid/bin/oifcfg getif

Execute um backup do OCR (manualbackup).

Lab 13.2: oifcfg

216

● Permite aplicação de Patches com baixa indisponibilidade.● Aplica-se o Patch em um Node, depois em outro Node.● O Patch precisa suportar o Rolling Upgrade.● Não pode ser utilizado com HOMEs compartilhados.● Não pode ser utilizado para Patchsets.● Sempre leia o README antes.

Rolling Patch

217

Nas máquinas nerv01 e nerv02, atualize o Opatch.# rm -rf /u01/app/18.3.0.0/grid/OPatch/# mkdir /u01/app/18.3.0.0/grid/OPatch/# chown -R oracle:oinstall /u01/app/18.3.0.0/grid/OPatch/

# rm -rf /u01/app/oracle/product/18.3.0.0/db_1/OPatch/# mkdir /u01/app/oracle/product/18.3.0.0/db_1/OPatch/# chown -R oracle:oinstall /u01/app/oracle/product/18.3.0.0/db_1/OPatch/

$ unzip -q p6880880_180000_Linux-x86-64.zip$ cp -rf OPatch/* /u01/app/18.3.0.0/grid/OPatch/$ cp -rf OPatch/* /u01/app/oracle/product/18.3.0.0/db_1/OPatch/

Lab 14.1: Rolling Patch

218

Na máquina nerv01, aplique o Patch.$ unzip -q p28096386_180000_Linux-x86-64.zip$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ su# export PATH=$PATH:$GRID_HOME/OPatch# $GRID_HOME/OPatch/opatchauto apply /home/oracle/28096386/

Na máquina nerv02, aplique o Patch.$ unzip -q p28096386_180000_Linux-x86-64.zip$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM2$ su# export PATH=$PATH:$GRID_HOME/OPatch# $GRID_HOME/OPatch/opatchauto apply /home/oracle/28096386/

Na máquinas nerv01, execute os procedimentos de Pós Instalação.$ $ORACLE_HOME/OPatch/opatch lsinventory$ $GRID_HOME/OPatch/opatch lsinventory# /u01/app/18.3.0.0/grid/bin/crsctl query crs activeversion# /u01/app/18.3.0.0/grid/bin/crsctl query crs softwareversion# /u01/app/18.3.0.0/grid/bin/crsctl query crs releasepatch# /u01/app/18.3.0.0/grid/bin/crsctl query crs softwarepatchSQL> EXEC DBMS_QOPATCH.GET_SQLPATCH_STATUS;

Lab 14.2: Rolling Patch

219

● Concorrência● Sequences / Sequences Artificiais● Data Dictionary● Reverse Key Indexes● Job x Scheduler● V$ x GV$● UTL_FILE / Directories / External Tables / Data Pump● Partitionamento lógico da aplicação

Desempenho e Funcionalidade: Single Instance x RAC

220

Analise e execute o script create_sequence.sql na máquina nerv01.

Analise e execute o script insert_sequence_lenta.sql na máquina nerv01.

Analise e execute o script insert_sequence_rapida.sql na máquina nerv01.

Repita os scripts de insert algumas vezes e veja se o resultado continua similar, mas desta vez nas duas máquinas ao mesmo tempo.Qual a diferença de tempo?Quais os Wait Events que ocorreram?

Lab 15.1: Escalabilidade

221

ORCL = (DESCRIPTION= (LOAD_BALANCE=ON) →→→ Escolha Aleatória (FAILOVER=ON) →→→ Tenta acessar o 1o, depois o 2o (ADDRESS=(PROTOCOL=TCP)(HOST=nerv01-vip)(PORT=1521)) →→→ VIP (ADDRESS=(PROTOCOL=TCP)(HOST=nerv02-vip)(PORT=1521)) →→→ VIP (CONNECT_DATA= (SERVICE_NAME=ORCL) (FAILOVER_MODE= (TYPE=SELECT) →→→ SESSION ou SELECT (METHOD=BASIC) →→→ BASIC ou PRECONNECT (RETRIES=10) →→→ 10 tentativas de conexão (DELAY=1) →→→ 1 segundo para cada tentativa ) ) )

Load Balance Client (<= 11gR1)

222

Load Balance Server (>= 11gR2)

223

Client tnsnames.ora:ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = rac01-scan)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORCL)))

Parâmetro LOCAL_LISTENER dos Nodes:(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.15.112)(PORT=1521))

Parâmetro REMOTE_LISTENER dos Nodes:rac01-scan.localdomain:1521

Load Balance Server

224

Services GoalGOAL_NONEGOAL_SERVICE_TIME →→→ Bom para OLTPGOAL_THROUGHPUT →→→ Bom para Batch / OLAP / DBA

Services Connection Load Balance GoalCLB_GOAL_SHORT →→→ Bom para OLTPCLB_GOAL_LONG →→→ Bom para Batch / OLAP / DBA ou OLTP Persistente

Load Balance Server

225

BEGIN DBMS_SCHEDULER.CREATE_JOB_CLASS ( JOB_CLASS_NAME => 'DBA_JOB_CLASS', SERVICE => 'DBA_SERVICE');END;/

BEGIN DBMS_SCHEDULER.CREATE_JOB ( JOB_NAME => 'SYS.DBA_JOB_TEST', JOB_TYPE => 'PLSQL_BLOCK', JOB_ACTION => 'BEGIN EXEC DBMS_STATS.GATHER_DATABASE_STATS; END;', START_DATE => SYSTIMESTAMP, REPEAT_INTERVAL => 'FREQ=DAILY;', JOB_CLASS => 'SYS.DBA_JOB_CLASS', END_DATE => NULL, ENABLED => TRUE, COMMENTS => 'JOB LINKED TO THE DBA_JOB_CLASS.');

END;/

Load Balance Server - SCHEDULER

226

srvctl add servicesrvctl remove servicesrvctl modify servicesrvctl relocate servicesrvctl status servicesrvctl start servicesrvctl stop servicesrvctl enable servicesrvctl disable service

Load Balance Server

227

Crie os SERVICES como abaixo.$ srvctl add service -db ORCL -pdb PROD -service OLTP -preferred ORCL1,ORCL2 -policy AUTOMATIC -failovertype SELECT -failovermethod BASIC -failoverdelay 1 -failoverretry 10 -clbgoal SHORT -rlbgoal SERVICE_TIME -notification TRUE

$ srvctl add service -db ORCL -pdb PROD -service BI -preferred ORCL2 -available ORCL1 -tafpolicy PRECONNECT -policy AUTOMATIC -failovertype SELECT -failovermethod BASIC -failoverdelay 1 -failoverretry 10 -clbgoal SHORT -rlbgoal SERVICE_TIME -notification TRUE

$ srvctl add service -db ORCL -pdb PROD -service DBA -preferred ORCL1 -available ORCL2 -tafpolicy PRECONNECT -policy AUTOMATIC -failovertype SELECT -failovermethod BASIC -failoverdelay 1 -failoverretry 10 -clbgoal SHORT -rlbgoal SERVICE_TIME -notification TRUE

Como ver os Services de um banco?Como ver detalhes de um Service já configurado?

Lab 16.1: Load Balance Server

228

Altere o tnsnames.ora para utilizar os novos Services de outro RAC, e crie um usuário para testar o Failover.$ rlwrap sqlplus / AS SYSDBAALTER SESSION SET CONTAINER = PROD;CREATE TABLESPACE USERS;ALTER USER RICARDO QUOTA UNLIMITED ON USERS;GRANT CREATE SESSION, CONNECT, RESOURCE, SELECT ANY DICTIONARY TO RICARDO;CREATE TABLE RICARDO.T TABLESPACE USERS AS SELECT * FROM ALL_OBJECTS;INSERT INTO RICARDO.T SELECT * FROM RICARDO.T;INSERT INTO RICARDO.T SELECT * FROM RICARDO.T;INSERT INTO RICARDO.T SELECT * FROM RICARDO.T;INSERT INTO RICARDO.T SELECT * FROM RICARDO.T;INSERT INTO RICARDO.T SELECT * FROM RICARDO.T;COMMIT;

Teste o Failover com SELECT e com DML.SQL> CONN RICARDO/Nerv2018@OLTPSQL> SELECT * FROM T;SQL> DELETE FROM T WHERE ROWNUM = 1;

Qual a diferença de FAILOVER entre SELECT e DELETE?Qual a diferença de FAILOVER dos Services criados e do Service ORCL?

Lab 16.2: Load Balance Server

229

Sequência para adicionar Node:● Instalar Hardware;● Instalar e configurar Sistema Operacional;● Configurar acesso ao Storage;● Configurar ssh sem senha com os Nodes já existentes;● Instalar Grid Infraestruture a partir de um Node existente;● Instalar Oracle a partir de um Node existente;● Adicionar Instances.

Sequência para remover Node:● Remover Instance;● Remover Oracle;● Remover Grid Infraestruture.

Adicionar e Remover Nodes

230

Pare e remova todos os Services criados.$ srvctl stop service -d ORCL -s OLTP$ srvctl stop service -d ORCL -s BI$ srvctl stop service -d ORCL -s DBA$ srvctl remove service -d ORCL -s OLTP$ srvctl remove service -d ORCL -s BI$ srvctl remove service -d ORCL -s DBA

Manter apenas 2 RACs ativos na sala.No restante das máquinas, refazer os Labs 1, 2, e 3.1.

Para todas as máquinas, configurar SSH sem senha para o usuário oracle.$ cd /u01/app/18.3.0.0/grid/oui/prov/resources/scripts/$ ./sshUserSetup.sh -user oracle -hosts "nerv01 nerv02 nerv03 nerv04" -advanced -exverify -confirm -noPromptPassphrase

Instalar Grid Infraestruture nas outras máquinas, a partir de um Node existente:$ cd $GRID_HOME/addnode$ ./addnode.sh -silent “CLUSTER_NEW_NODES={nerv03}” “CLUSTER_NEW_VIRTUAL_HOSTNAMES={nerv03-vip}” CLUSTER_NEW_NODE_ROLES={HUB}

Nas outras máquinas, com o usuário root, execute os seguintes scripts.# /u01/app/oraInventory/orainstRoot.sh# /u01/app/18.3.0.0/grid/root.sh

Lab 17.1: Adicionar Nodes

231

Instalar Oracle Database nas outras máquinas, a partir de um Node existente:$ cd $ORACLE_HOME/addnode$ ./addnode.sh -silent "CLUSTER_NEW_NODES={nerv03}"

Nas outras máquinas, com o usuário root, execute o script abaixo.# /u01/app/oracle/product/18.3.0.0/db_1/root.sh

Na máquina nerv01, execute a adição da instância.$ $GRID_HOME/bin/srvctl add instance -d ORCL -i ORCL3 -n nerv03

Na máquina nerv01, conclua a adição do nó.SQL> ALTER SYSTEM SET INSTANCE_NUMBER=3 SID='ORCL3' SCOPE=SPFILE;SQL> ALTER SYSTEM SET THREAD=3 SID='ORCL3' SCOPE=SPFILE;SQL> ALTER DATABASE ADD LOGFILE THREAD 3;SQL> ALTER DATABASE ADD LOGFILE THREAD 3;SQL> ALTER DATABASE ENABLE PUBLIC THREAD 3;SQL> CREATE UNDO TABLESPACE UNDOTBS3;SQL> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS3 SID='ORCL3' SCOPE=SPFILE;

$ $GRID_HOME/bin/srvctl start instance -d ORCL -i ORCL3

Nas novas máquinas do RAC, abra o PDB.SQL> ALTER PLUGGABLE DATABASE PROD OPEN READ WRITE;SQL> ALTER PLUGGABLE DATABASE PROD SAVE STATE;

Lab 17.2: Adicionar Nodes

232

Flex ASM

233

Na máquina nerv01, verifique a configuração atual do Cluster.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ $GRID_HOME/bin/asmcmd showclustermode$ $GRID_HOME/bin/srvctl config asm$ $GRID_HOME/bin/srvctl status asm$ $GRID_HOME/bin/srvctl modify asm -count 2$ $GRID_HOME/bin/srvctl status asm

Simule um erro (kill -9 no pmon) em uma instância ASM, e acompanhe o Alert Log do banco de dados.

Lab 18.1: Flex ASM

234

Lab 19.1: Migração Storage

Nas máquinas nerv01, nerv02, nerv03 e nerv04, verifique os Discos exportados no Storage.# iscsiadm -m discovery -t sendtargets -p 192.168.15.202 -l

Na máquina nerv01, crie os novos Discos no ASM Filter Driver.$ export ORACLE_HOME=$GRID_HOME$ export PATH=$ORACLE_HOME/bin:$PATH$ su# asmcmd afd_lslbl# fdisk -l | grep sd# asmcmd afd_label NEWFRA01 /dev/sd? ### Disco de 200GB.# asmcmd afd_lslbl

Nas máquina nerv02, nerv03 e nerv04, detecte os discos do ASM Filter Driver.$ export ORACLE_HOME=$GRID_HOME$ export PATH=$ORACLE_HOME/bin:$PATH$ su# asmcmd afd_scan# asmcmd afd_lslbl

235

Lab 19.2: Migração Storage

Na máquina nerv01, adicione o novo disco no Disk Group FRA, e acompanhe o Rebalance.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ rlwrap sqlplus / AS SYSASMSQL> SET PAGESIZE 1000SQL> SET LINESIZE 200SQL> COLUMN PATH FORMAT A50SQL> SELECT NAME, PATH FROM V$ASM_DISK;

SQL> SELECT G.NAME, D.NAME, D.TOTAL_MB, D.FREE_MB FROM V$ASM_DISK D, V$ASM_DISKGROUP G WHERE G.GROUP_NUMBER = D.GROUP_NUMBER ORDER BY G.NAME, D.NAME;

SQL> ALTER DISKGROUP FRA ADD DISK ‘AFD:NEWFRA01’ NAME NEWFRA01;SQL> SELECT * FROM V$ASM_OPERATION;SQL> ALTER DISKGROUP FRA SCRUB POWER LOW;SQL> SELECT * FROM V$ASM_OPERATION;

Na máquina nerv01, remova o antigo disco do Disk Group FRA, e acompanhe o Rebalance.SQL> SELECT G.NAME, D.NAME, D.TOTAL_MB, D.FREE_MB FROM V$ASM_DISK D, V$ASM_DISKGROUP G WHERE G.GROUP_NUMBER = D.GROUP_NUMBER ORDER BY G.NAME, D.NAME;SQL> ALTER DISKGROUP FRA DROP DISK FRA01;SQL> SELECT * FROM V$ASM_OPERATION;

236

ACFS (ASM Cluster File System)

237

Lab 20.1: ACFS

Na máquina nerv01, crie o volume para o ACFS.$ export ORACLE_HOME=$GRID_HOME$ export ORACLE_SID=+ASM1$ export PATH=$ORACLE_HOME/bin:$PATH$ rlwrap sqlplus / AS SYSASMSQL> ALTER DISKGROUP FRA ADD VOLUME ACFSVOL1 SIZE 50G;

Nas máquinas nerv01, nerv02, nerv03 e nerv04, crie um diretório para montar o Volume ACFS.# mkdir -p /u01/app/oracle/acfsvol1# chown -R oracle:oinstall /u01/app/oracle/acfsvol1

Na máquina nerv01, formate o Volume ACFS.$ /sbin/mkfs.acfs /dev/asm/acfsvol1-? -n "ASMVOL1"

Nas máquinas nerv01, nerv02, nerv03 e nerv04, crie um diretório para montar o Volume ACFS.# /bin/mount -t acfs /dev/asm/acfsvol1-? /u01/app/oracle/acfsvol1/# chown -R oracle:oinstall /u01/app/oracle/acfsvol1

Na máquina nerv01, crie um Directory e execute um Dump no Volume ACFS.SQL> CREATE OR REPLACE DIRECTORY ACFSVOL1 AS '/u01/app/oracle/acfsvol1';$ expdp full=Y DIRECTORY=ACFSVOL1

238

- RAC de dois nós possui diversas limitações. - O ORAC é UMA das soluções de Alta Disponibilidade da Oracle. - Elimine os POF: NICs, Switch, Storage, etc. - O Switch do Interconnect deve ser físico e exclusivo. - Compartilhe com o cliente sobre o funcionamento do Failover e Load Balance. - Verifique o documento Oracle RAC Best Practices do MOS. - Veja se o Fabricante de seu Servidor / Storage possui documentação (Best Practices) sobre Oracle RAC. - Utilize ASM. É a direção da Oracle. - Utilize ACFS. É a direção da Oracle. - Utilize /etc/hosts, além do DNS. - No ASM, utilize DGs separados para DATA, FRA, OCR e VD. - Centralize os backups do OCR, em outro local. - Utilize DATA e FRA com redundância no Storage ou ASM. - Utilize OCR e VD com redundância no Storage e ASM. - Use HOMEs locais, para GRID_HOME e ORACLE_HOME. - Logs (todos) devem ser centralizados. De nada vale um log que não existe. - Observe também os Logs do Sistema Operacional. - Utilize Jumbo Frames no Interconnect. - Utilize Huge Pages, e não utilize AMM. - O RAC torna aplicações boas em ótimas, e ruins em péssimas. - Esqueça SIDs. Aprenda Services. - Particione sua aplicação em Services. Sem Services, o RAC não é nada.

Melhores Práticas

239

Lab Auxiliar 1: Configuração DNS

Na máquina nerv09, instale os pacotes necessários para o DNS.# yum -y install bind bind-utils

Na máquina nerv09, deixe APENAS as seguintes linhas no arquivo /etc/named.conf.options { listen-on port 53 { 127.0.0.1; 192.168.15.201; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; // query-source address * port 53;};

zone "." in {type hint;file "/dev/null";};

zone "localdomain." IN { type master; file "localdomain.zone"; allow-update { none; };};

240

Lab Auxiliar 1: Configuração DNS

Nas máquinas nerv09, deixe APENAS as seguintes linhas no arquivo /var/named/localdomain.zone.

$TTL 86400@ IN SOA localhost root.localhost ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS localhostlocalhost IN A 127.0.0.1nerv01 IN A 192.168.15.101nerv02 IN A 192.168.15.102nerv01-vip IN A 192.168.15.111nerv02-vip IN A 192.168.15.112rac01-scan IN A 192.168.15.151rac01-scan IN A 192.168.15.152rac01-scan IN A 192.168.15.153

241

Lab Auxiliar 1: Configuração DNS

Na máquina nerv09, deixe APENAS as seguintes linhas no arquivo /var/named/15.168.192.in-addr.arpa.

$ORIGIN 15.168.192.in-addr.arpa.$TTL 1H@ IN SOA nerv09.localdomain. root.nerv09.localdomain. (

2 3H 1H 1W 1H )15.168.192.in-addr.arpa. IN NS nerv09.localdomain.

101 IN PTR nerv01.localdomain.102 IN PTR nerv02.localdomain.111 IN PTR nerv01-vip.localdomain.112 IN PTR nerv02-vip.localdomain.151 IN PTR rac01-scan.localdomain.152 IN PTR rac01-scan.localdomain.153 IN PTR rac01-scan.localdomain.

242

Lab Auxiliar 1: Configuração DNS

Na máquina nerv09, inicie o DNS Server, e o habilite para o início automático.# service named start# chkconfig named on

Na máquina nerv09, pare o firewall, e o desabilite para o início automático.# service iptables stop# service ip6tables stop# chkconfig iptables off# chkconfig ip6tables off

243

Lab Auxiliar 2: Configuração Storage

Na máquinas nerv09, crie 1 partição de 50GB (CONFIG), e 1 de 20GB (DATA), 1 de 10GB (FRA), 3 de 1GB (VD), e 2 de 2GB (OCR).

Na máquina nerv09, configure o iSCSI server.# yum -y install scsi-target-utils# cat /etc/tgt/targets.conf<target iqn.2010-10.com.nervinformatica:storage.asm01-01> backing-store /dev/sda5 initiator-address 192.168.15.101 initiator-address 192.168.15.102</target><target iqn.2010-10.com.nervinformatica:storage.asm01-02> backing-store /dev/sda6 initiator-address 192.168.15.101 initiator-address 192.168.15.102</target>...

# service tgtd start# chkconfig tgtd on

244

Perguntas?

Ricardo Portilho Proniricardo@nervinformatica.com.br

Esta obra está licenciada sob a licençaCreative Commons Atribuição-SemDerivados 3.0 Brasil.Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nd/3.0/br/.