Você está na página 1de 231

DBA Júnior

Ricardo Portilho Proni


ricardo@nervinformatica.com.br
Esta obra está licenciada sob a licença
Creative 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/.
Comandos no Treinamento
Comando com o usuário root:
# ls -lh

Comando com um usuário normal:


$ ls -lh

Adicionar texto a um arquivo:


# vi /etc/my.cnf
...
log-bin=mysql-bin
...

Comando no MySQL:
mysql> show databases;

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

Quando algo dá errado propositalmente:


O que aconteceu?

2
Agenda
● Mercado de Trabalho
● Linux - Sistema Operacional, Virtualização, Redes, Storage

● MySQL

● Oracle

3 3
Produtos utilizados no Treinamento
● Oracle Enterprise Linux x64 6.10
● Oracle VirtualBox x64 6.1.2

● Windows Server 2008 x32

● MySQL Community Server x64 5.7

● Oracle Database Enterprise Edition x64 12cR2

4
Por que é difícil tornar-se DBA?

5
DBA Júnior, Pleno, e Sênior

● Não é apenas uma questão de tempo.


● Concurso Público? Empresa? DataCenter? Consultoria?
● Tenho X anos, posso começar agora?

6
Tarefas do DBA Júnior
● Extração simples de dados (SELECT).
● Manipulação simples de dados (INSERT, UPDATE, DELETE)

● Instalação do SGBD (mas não Upgrade).

● Criação de Bancos de Dados.

● Verificação e alteração de parâmetros (mas não a decisão a respeito).

● Execução de scripts.

● Manutenção de usuários e permissões.

● Manutenção de objetos (Tabelas, Índices, etc.).

● Manutenção de espaço.

● Execução de Backup físico e lógico (mas não Restore).

● Transporte de objetos entre servidores.

● Verificação de disponibilidade.

● Início de verificação de problemas (Troubleshooting).

● Início de análise de desempenho (Tuning).

7
Formação DBAs: CVs
● Gradução / Pós-graduação / etc.
● Treinamentos.

● Experiência.

● Conhecimentos

● Certificação.

● Inglês.

● Múltiplos Bancos de Dados.

● Alguma linguagem de script: Shell, Perl, BAT, VBScript, Powershell.

● Linguagem SQL.

● Linguagem SQL proprietária (PL/SQL, T-SQL, etc.)

● Outra linguagem de programação (pode ser uma porta de entrada).

● Certificações de tecnologias acessórias.

Me envie seu CV.

8
Planejamento: Quero ser um DBA
- Ter um ambiente de estudo
- Ter uma rotina de estudo
- Prosseguir com Formação (Graduação, Pós, MBA, etc)
- Fazer um Treinamento Oficial (mais teoria)
- Fazer um Treinamento não Oficial (mais prática)
- Aperfeiçoar Inglês (Leitura)
- Ler, ler, ler.
- Participar de Grupos de Discussão
- Acompanhar Blogs
- Ir a Eventos (Networking)
- Estudar e tirar primeiro nível de Certificação
- Se candidatar a vagas de DBA Júnior
- Se candidatar a vagas de Infraestrutura
- Se candidatar a vagas de Programação

9
Planejamento: Já sou um DBA
- Ter um ambiente de estudo
- Ter uma rotina de estudo
- Prosseguir com Formação (Graduação, Pós, MBA, etc)
- Fazer um Treinamento Oficial (mais teoria)
- Fazer um Treinamento não Oficial (mais prática)
- Aperfeiçoar Inglês (Escrita e Conversação)
- Ler, ler, ler.
- Participar de Grupos de Discussão
- Acompanhar Blogs
- Ir a Eventos (Networking)
- Estudar e tirar segundo nível de Certificação

- Espere um ano pelo menos...


- E então se candidatar a vagas com maior possibilidade de crescimento.

10
Livros: Oracle

11
Livros: Oracle

12
Comunidades
List Yahoo Oracle Br
https://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
GPO
https://www.profissionaloracle.com.br
Glufke
http://glufke.net/
GUOB
http://www.guob.com.br/
Database Cast
http://databasecast.com.br/wp/
Certificação BD
http://certificacaobd.com.br/
DBA Brasil
https://dbabrasil.net.br/

13
Treinamentos Oficiais
Oracle Database Administration Workshop

14
Treinamentos Nerv
Quero ser um DBA
Treinamento DBA Júnior
Treinamento DBA Júnior II
Treinamento Oracle Backup e Recovery
Já trabalho como DBA e enfrento problemas de desempenho:
Treinamento Oracle Performance Diagnostic e Tuning
Treinamento Oracle Performance Tuning – SQL
Já sou um DBA, e usamos RAC:
Treinamento Oracle RAC
Já sou um DBA, e usamos Data Guard:
Treinamento Oracle Data Guard
Já sou um DBA, e usamos MySQL:
Treinamento MySQL

15
Certificação

16
16
Certificação

- Suas Certificações devem seguir sua carreira.


- Não passar na prova faz parte do jogo.
17
Certificações 1o Nível
Bancos de Dados
Oracle: Oracle Database Administrator Certified Associate
SQL Server: Microsoft Certified Solutions Associate
MySQL: Oracle Certified Associate, MySQL 5

Infraestrutura
Linux: LPIC-1
Linux: Red Hat Certified System Administrator
AIX: IBM Certified Operator
Virtualização: VMware Certified Associate
Virtualização: Hyper-V: MCITP: Virtualization Administrator
Windows Server: Microsoft Certified Solutions Associate
CISCO: CCENT Cisco Certified Entry Networking Technician
Storage: IBM Certified Specialist - High Volume Storage Fundamentals
Storage: NetApp Certified Data Management Administrator

Gerenciamento
ITIL

18
Brain Dumps

19
Múltiplos Bancos de Dados

20
Múltiplos Bancos de Dados

21
Linux
Sistema Operacional, Virtualização, Redes, Storage

22
Alta x Baixa plataforma

23
Plataformas e Arquiteturas
• Alpha (64 bits)
• ARM 32 (32 bits)
• ARM 64 (64 bits)
• AVR32 (32 bits)
• Blackfin (32 bits)
• DLX (32 bits)
• ESi-RISC (16/32 bits)
• Itanium (IA-64) (64 bits)
• M32R (32 bits)
• m68k (16/32 bits)
• Mico32 (32 bits)
• MIPS (64 bits)
• MMIX (64 bits)
• PA-RISC (64 bits)
• PowerPC (32/64 bits)
• S+core (16/32 bits)
• Series 32000 (32 bits)
• SPARC (64 bits)
• SuperH (32 bits)
• System/360 / System/370 / z/Architecture (64 bits)
• VAX (32 bits)
• x86 (32 bits)
• x86-64 (64 bits)

24
História do Unix

25
25
Distribuições, Edições, Versões

https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
http://upload.wikimedia.org/wikipedia/commons/e/ed/LinuxDistroTimeline.png

26
Distribuições, Edições, Versões

27
Linux Homologados para Oracle Database 12cR2

28
Download OEL 6

29
Download OEL 6

30
Download OEL 6

31
Download OEL 6

32
Instalação OEL 6

33
Instalação OEL 6

34
Instalação OEL 6

35
Instalação OEL 6

36
Instalação OEL 6

37
Instalação OEL 6

38
Instalação OEL 6

39
Instalação OEL 6

40
Instalação OEL 6

41
Instalação OEL 6

42
Instalação OEL 6

43
Instalação OEL 6

44
Instalação OEL 6

45
Instalação OEL 6

46
Instalação OEL 6

47
Instalação OEL 6

48
Instalação OEL 6

49
49
Instalação OEL 6

50
Instalação OEL 6

51
Instalação OEL 6

52
Instalação OEL 6

53
Instalação OEL 6

54
Diretórios Linux

55
Instalação OEL 6

56
Instalação OEL 6

57
Instalação OEL 6

58
Instalação OEL 6

59
Instalação OEL 6

60
Instalação OEL 6

61
Instalação OEL 6

62
Instalação OEL 6

63
Instalação OEL 6

64
Instalação OEL 6

65
Instalação OEL 6

66
Instalação OEL 6

67
Manipulação de Arquivos
Execute logon como root.
Habilite a rede (Clique com o botão esquerdo no ícone de rede, e em eth0).
Abra um terminal (Clique com o botão direito no Desktop, e então em “Open In Terminal”.)
# yum -y update

Abra outro terminal, e verifique os arquivos existentes no diretório:


# ls
# ls -l
# pwd
# cd ..
# pwd
# ls
# ls -l
# ls -lh
# ls -lA
# ls -lh *.log
# cd ..
# pwd
# ls -lh
# man ls

68
Manipulação de Arquivos
# cd
# pwd
Em que diretório você está?

# ls -lh
# file Desktop
# file install.log
# cat install.log
# head install.log
# tail install.log

# cp install.log install.log.backup
# mv install.log install.log.new
# rm install.log.backup
# touch install.log
# mkdir teste
# cp install.log teste
# ls -lh teste
O que estes comandos fizeram?

69
Manipulação de Arquivos
# cat install.log
# cat install.log.new > install.log
# cat install.log
# grep xorg install.log
# grep xorg install.log | grep fonts
# grep xorg install.log | grep -v fonts
# grep -E 'fonts|gedit' install.log

# watch ls -lh

# vi install.log
ESC e depois i --- insere texto.
ESC e depois x --- remove uma letra.
ESC e depois dd --- remove uma linha.
ESC e depois :w --- salva as alterações.
ESC e depois :q --- sai do vi.
ESC e depois :wq --- salva as alterações, e sai do vi.
ESC e depois :q! --- sai do vi sem salvar as alterações.

# clear
O que a seta para cima faz?
# cat .bash_history

70
Gerenciamento de Pacotes
Coloque o DVD. Verifique se o DVD já está montado.
# df -h

Vá até o diretório onde estão os pacotes no DVD.


# cd /media/<...>/Packages

Tente instalar o gcc.


# rpm -ivh gcc-c++*

O que aconteceu?
# yum install gcc-c++

71
Particionamento e Sistema de Arquivos
Crie uma partição com o espaço livre.
# findmnt
# findmnt -l
# fdisk -l
# fdisk /dev/sda
Digite: p <Enter>
Digite: n <Enter>
<Enter>
<Enter>
Digite: p <Enter>
Digite: w <Enter>

# fdisk -l

Formate esta partição com o Sistema de Arquivos ext4.


# mkfs.ext4 /dev/sda8

O que aconteceu?

72
Particionamento e Sistema de Arquivos
Crie um diretório, e monte o dispositivo nele.
# mkdir /u01
# mount /dev/sda8 /u01

Faça este sistema de arquivos ser montado automaticamente.


# vi /etc/fstab
...
/dev/sda8 /u01 ext4 defaults 1 2
...

Teste se o arquivo /etc/fstab está correto.


# umount /u01
# mount /u01

73
Services
Verifique se o Apache está configurado para iniciar automaticamente.
# chkconfig
# chkconfig | grep httpd
# chkconfig --level 35 httpd on
# chkconfig | grep httpd

Inicie e teste o serviço do Apache.


# service httpd status
# firefox localhost
# service httpd start
# service httpd status
# firefox localhost

74
Usuários, Grupos, Permissões
Verifique qual é o seu usuário, e que permissões ele tem.
# whoami
# id
# ls -lh /root/
# cat /etc/passwd
# cat /etc/group

Adicione grupos e o usuário oracle.


# groupadd -g 1000 oinstall
# groupadd -g 1200 dba
# groupadd -g 1300 oper
# useradd -u 1100 -g oinstall -G dba,oper oracle
# passwd oracle
# id oracle
# cat /etc/passwd
# cat /etc/group

75
Usuários, Grupos, Permissões
Torne-se o usuário oracle, e verifique suas permissões.
# su – oracle
$ whoami
$ id
$ pwd
$ ls -lh /root/
O que aconteceu?

Dê permissão para um arquivo ao usuário oracle, e teste.


$ exit
# chown oracle:dba /root/install.log
# su – oracle
$ ls -lh /root/
$ ls -lh /root/install.log
O que aconteceu?

76
Shell
Com o usuário oracle, crie um script Bash.
$ vi teste.sh
...
#!/bin/bash
date
echo “Teste”
...

Execute-o:
$ teste.sh
O que aconteceu?

$ sh teste.sh
$ /home/oracle/teste.sh
$ ./teste.sh
O que aconteceu?

$ chmod +x /home/oracle/teste.sh
$ /home/oracle/teste.sh
$ ./teste.sh

77
Shell
Execute-o diretamente desta vez.
$ teste.sh
$ echo $PATH
$ export PATH=/home/oracle/:$PATH
$ echo $PATH
$ teste.sh
O que aconteceu?

78
crontab
Agende o script na crontab.
$ crontab -l
$ crontab -e
...
* * * * * /home/oracle/teste.sh >> /home/oracle/teste.log
...

$ crontab -l

$ tail /home/oracle/teste.log
$ tail -f /home/oracle/teste.log

79
Processos
Verifique os processos em execução.
$ ps
$ ps a
$ ps aux
$ ps aux | grep gnome
$ pstree
Qual a diferença entre estes comandos?

Finalize o seu processo bash.


$ ps a
$ kill 2120
$ kill -9 2120
O que aconteceu?

80
Desempenho

81
Desempenho
$ free

$ vmstat
$ vmstat -w
$ vmstat 2
$ vmstat -w 2
$ vmstat -w 5

$ iostat -xd
$ iostat -xd 2
$ iostat -xd 5

$ top

82
Logs
Verifique os logs mais atuais, e que informação eles têm.
$ ls -lh /var/log
$ cat /var/log/messages
$ su -
# ls -lh /var/log
# ls -lhtr /var/log
# cat /var/log/messages

83
Virtualização Hard x Soft

84
Produtos de Virtualização Oracle

85
VMs e Containers

86
Produtos de Virtualização Oracle

87
Instalação Oracle VirtualBox
# ls -lh /root/
# rpm -ivh /root/VirtualBox*

88
Criação VMs

89
Criação VMs

90
Criação VMs

91
Criação VMs

92
Criação VMs

93
Criação VMs

94
Criação VMs

95
Configuração VMs

96
Configuração VMs

97
Configuração VMs

98
Configuração VMs

99
Configuração VMs

100
Configuração VMs

101
Configuração VMs

102
Configuração VMs

103
Configuração VMs

104
Configuração VMs

105
Configuração VMs

106
Configuração VMs

107
Configuração VMs

108
Configuração VMs

109
Configuração VMs

110
Configuração VMs

111
Configuração VMs

112
Configuração VMs

113
Pause VMs

114
Clone VMs

115
Clone VMs

116
Clone VMs

117
Clone VMs

118
Snapshot VMs

119
Snapshot VMs

120
Snapshot VMs

121
Export / Import Appliance

122
Export / Import Appliance

123
Export / Import Appliance

124
Export / Import Appliance

125
Export / Import Appliance

126
Redes TCP/IP
● IP / Mask / Gateway / DNS – ifconfig / route / /etc/resolv.conf
● DHCP

● WAN / LAN / VLAN

● Routing / Firewall / Proxy / IDS / IPS

Qual seu IP / Mask / Gateway / DNS?

127
Configuração de Rede
Configure as placas de rede.

128
ssh / scp / ftp
Execute logon remoto no computador do seu vizinho.
# ssh root@192.168.0.102
# exit

Copie um arquivo do computador do seu vizinho para o seu.


# scp root@192.168.0.102:/root/install.log /tmp/
# scp root@192.168.0.102:/root/install.log /tmp/install.log
# scp root@192.168.0.102:/root/install.log /tmp/install.tmp
# scp root@192.168.0.102:/root/install.log .

Copie um arquivo de seu computador para o do seu vizinho.


# scp /root/install.log root@192.168.0.102:/root/Desktop/install.log

Copie um arquivo de seu vizinho para outro vizinho.


# scp root@nerv02:/root/install.log root@nerv03:/tmp/install.new

129
mstsc / rdesktop
Execute logon remoto no Windows Server de sua VM.
# rdesktop IpDaVMWindows
Por que não funciona?

130
VNC / Xserver
Execute logon remoto gráfico no computador do seu vizinho.
# vncviewer 192.168.0.102:1
Por que não funciona?

E’xecute logon remoto no computador do seu vizinho.


# ssh -CX root@192.168.0.102
# firefox

131
Windows Share
Crie um compartilhamento no Windows Server, em sua VM.
Crie uma pasta (sem espaços no nome) no C:\.
Clique com o botão direito em uma pasta -> Share -> Share → Yes -> Done.

Instale a compatibilidade com Samba em seu computador.


# yum -y install samba-client samba-common cifs-utils

Monte este compartilhamento em seu computador.


# mkdir /mnt/windows
# mount -t cifs //192.168.0.99/temp -o username=Administrator,password=Nerv2021
/mnt/windows

132
Tecnologias Storage
- IDE, ATA, SATA, SCSI
- SSD, Cache
- RAID (próxima página)
- SAN (Storage Area Network), NAS (Network Attached Storage)
- Cluster Filesystems
- LUN

Protocolos
- iSCSI
- Fiber Channel (FC)
- ATA-over-Ethernet (AoE)
- Fibre Channel over Ethernet (FCoE)
- Fibre Channel over IP (FCIP)
- HyperSCSI SCSI over Ethernet frames instead of IP (as iSCSI is)
- ISCSI Extensions for RDMA (iSER)
- Internet Fibre Channel Protocol (iFCP)
- Internet Storage Name Service (iSNS)
- The SCST Linux SCSI target software stack
- Linux LIO Unified Target software stack
- Service Location Protocol

133
RAID

134
NFS Server
Crie um diretório para o NFS Server.
# yum install nfs-utils

Crie um diretório para o NFS Server.


# mkdir /shared_data

Adicionar no arquivo /etc/exports a linha abaixo.


/shared_data *(rw,sync,no_wdelay,insecure_locks,no_root_squash)

Inicie o serviço NFS Server.


# chkconfig nfs on
# service nfs restart

135
NFS Client
Adicionar no arquivo /etc/fstab a linha abaixo.
# vi /etc/fstab

...
192.168.0.201:/shared_data /u01/oradata nfs
rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0
0 0
...

Monte o Filesystem NFS.


# mkdir /u01/oradata
# mount /u01/oradata
# touch /u01/oradata/teste-nerv01.txt

O vizinho consegue vizualizar seu arquivo?


O vizinho consegue alterar seu arquivo?

136
iSCSI Initiator
Instale e ative o pacote iSCSI Initiator.
# yum -y install iscsi-initiator-utils
# service iscsi start
# chkconfig iscsi on

Verifique os Discos exportados no Storage.


# iscsiadm -m discovery -t sendtargets -p 192.168.0.201 -l

Verifique se o disco foi configurado localmente.


# fdisk -l

137
iSCSI Initiator
Particione o novo disco.
# fdisk /dev/sdb
Digite: n <Enter>
Digite: p <Enter>
Digite: 1 <Enter>
<Enter>
<Enter>
Digite: w <Enter>

Formate, crie o ponto de montagem /u02, e monte a partição deste novo disco.

138
MySQL

139
Por que MySQL?

140
Evolução MySQL

141
Edições - Community

142
Edições - Enterprise

143
Instalação
[root@Melquior ~]# yum -y install mysql-server
...
[root@Melquior ~]# rpm -qa | grep mysql
mysql-server-5.1.73-3.el6_5.x86_64
mysql-libs-5.1.73-3.el6_5.x86_64
mysql-5.1.73-3.el6_5.x86_64
[root@Melquior ~]#

144
Instalação

145
Instalação

146
Instalação
Instale o MySQL.
# yum -y install
https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
# yum install mysql-server
# chkconfig mysqld on
# service mysqld start

# grep password /var/log/mysqld.log

# /usr/bin/mysqladmin -p -u root password 'Nerv2021.'


# mysql -u root -pNerv2021.

147
Verificação
Acesse o MySQL.
# mysql -u root -pNerv2021.
mysql> exit;

Verifique se o MySQL está ativo.


# mysqladmin -u root -pNerv2021. status

Verifique o Log do MySQL.


# tail /var/log/mysqld.log

148
Programas Cliente
# mysql -u root -pNerv2021.
mysql> SHOW STATUS;
mysql> EXIT;

# mysql -u root -pNerv2021. -e "SHOW STATUS"

# mysql -u root -pNerv2021. -e "SHOW STATUS" > status.txt


# cat status.txt
# mysql -t -u root -pNerv2021. -e "SHOW STATUS" > status.txt
# cat status.txt
# mysql -E -u root -pNerv2021. -e "SHOW STATUS" > status.txt
# cat status.txt

# echo "SHOW STATUS" >> script.sql


# cat script.sql
# mysql -t -u root -pNerv2021. < script.sql
# mysql -t -u root -pNerv2021. < script.sql > status.txt
# cat status.txt

149
Engines
● MyISAM
● InnoDB

● Memory

● Archive

● CSV

● Merge

● Federated

● NDB

● Blackhole

● Example

● MariaDB / Aria

● Percona XtraDB

● Percona XtraDB Cluster

● Percona TokuDB

mysql> CREATE DATABASE test;


mysql> USE test;
mysql> CREATE TABLE teste (coluna1 int) Engine=InnoDB;
mysql> CREATE TABLE teste2 (coluna1 int) Engine=MyISAM;

150
Processos e Threads
Execute um teste de carga no MySQL.
# yum -y install mysql-test
# mysqlslap --user=root --password=Nerv2021. --auto-generate-sql --
concurrency=10 --iterations=10 --number-char-cols=10 --number-int-
cols=5 --engine=innodb

Durante a execução do teste, acompanhe no Linux, via top.

Durante a execução do teste, acompanhe no MySQL, via mysqladmin.


# mysqladmin -u root -pNerv2021. status

# mysql -u root -pNerv2021.


mysql> SHOW PROCESSLIST;
mysql> SHOW FULL PROCESSLIST;

http://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html
151
Parâmetros de otimização
Altere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.
# vi /etc/my.cnf
...
[mysqld]
max_connections = 800
thread_cache_size = 100

innodb_buffer_pool_size = 512M
key_buffer_size = 128M

read_buffer_size = 2M
read_rnd_buffer_size = 2M
short_bufer_size = 2M
join_bufer_size = 2M

152
Parâmetros de recuperação
Altere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.
tmp_table_size = 8M
tmpdir = /tmp/

slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 5

innodb_log_file_size = 32M
innodb_log_files_in_group = 7
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_comit = 1

Verificar parâmetros:
mysql> SHOW VARIABLES LIKE 'read%buffer_size';
153
Bancos de Dados
Crie um novo banco de dados.
# mysql -u root -pNerv2021.
mysql> show databases;
mysql> create database nerv;
mysql> show databases;
mysql> use nerv;
mysql> show tables;

154
Estruturas físicas
# ls -lh /var/lib/mysql/
total 29M
-rw-rw----. 1 mysql mysql 18M Jan 24 14:45 ibdata1
-rw-rw----. 1 mysql mysql 5.0M Jan 24 14:45 ib_logfile0
-rw-rw----. 1 mysql mysql 5.0M Jan 24 14:45 ib_logfile1
drwx--x--x. 2 mysql mysql 4.0K Jan 24 14:43 mysql
srwxrwxrwx. 1 mysql mysql 0 Jan 24 14:45 mysql.sock
drwx------. 2 mysql mysql 4.0K Jan 24 15:12 nerv
drwx------. 2 mysql mysql 4.0K Jan 24 14:43 performance_schema
-rw-rw----. 1 mysql mysql 6 Jan 24 14:45 Proni-PC.localdomain.pid
-rw-r--r--. 1 root root 112 Jan 24 14:43 RPM_UPGRADE_HISTORY
-rw-r--r--. 1 mysql mysql 112 Jan 24 14:43 RPM_UPGRADE_MARKER-LAST
drwxr-xr-x. 2 mysql mysql 4.0K Jan 24 14:43 test

# ls -lh /var/lib/mysql/nerv/
total 4.0K
-rw-rw----. 1 mysql mysql 65 Jan 24 15:12 db.opt

155
Tabelas
mysql> use nerv;
mysql> CREATE TABLE teste (coluna1 int, coluna2 char(50),
coluna3 varchar(255)) Engine=InnoDB;
mysql> show tables;
O que a criação desta tabela alterou nas estruturas físicas?

mysql> CREATE TABLE teste2 (coluna1 int, coluna2 char(50),


coluna3 varchar(255)) Engine=MyISAM;
mysql> show tables;
O que a criação desta tabela alterou nas estruturas físicas?

156
Transações e Isolamento
Execute INSERT de 10 registros na tabela teste.
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste VALUES (1, 'A', 'AAAAAAAAAA');
mysql> INSERT INTO teste2 SELECT * from teste;
mysql> SELECT * FROM teste;
mysql> SELECT * FROM teste2;

Execute um UPDATE em todos os registros da teste.

Abra outra sessão, e execute SELECT em todos os dados da tabela.


O que aconteceu?

Repita a operação, mas antes do UPDATE, coloque como abaixo.


mysql> START TRANSACTION;
mysql> UPDATE ...
O que aconteceu?

157
Importação e Exportação
Exemplos
mysql> SELECT * FROM t1 INTO OUTFILE '/var/lib/mysql-files/t1.txt';
mysql> LOAD DATA INFILE '/var/lib/mysql-files/t1.txt' INTO TABLE t1;

Execute este procedimento para as tabelas que você criou.

158
Bin Logs
Adicione no /etc/my.cnf a linha abaixo, e reinicie o mysql.
server-id=1
log-bin=mysql-bin
expire_logs_days=7

O que aconteceu no diretório de dados?

159
mysqldump
Execute um backup via mysqldump.
# mysqldump -u root -pNerv2021. nerv > nerv.sql
# mysqldump -u root -pNerv2021. --all-databases > nerv01.sql

# mysqldump -u root -pNerv2021. --single-transaction --


master-data=2 --all-databases > nerv01.sql

Edite o arquivo gerado.


O que ele contém?
Como utilizar este backup?
Quais suas desvantagens?

160
Alta Disponibilidade
MySQL Replication

161
Alta Disponibilidade
DRBD / Pacemaker / Corosync

162
Alta Disponibilidade
Windows Server Failover Clustering

163
Alta Disponibilidade
MySQL Cluster

164
Alta Disponibilidade
InnoDB Cluster

165
Oracle

166
Versões e Edições
● Oracle Database Express Edition
● Oracle Database Personal Edition

● Oracle Database Standard Edition One (<= 11gR2)

● Oracle Database Standard Edition (<= 11gR2)

● Oracle Database Standard Edition 2

● Oracle Database Enterprise Edition

167
Versões e Edições

168
Instalação Oracle

169
Instalação Oracle
Com o usuário oracle, acrescenter ao final do arquivo /home/oracle/.bash_profile as
linhas abaixo.
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=nerv01.localdomain
export ORACLE_UNQNAME=ORCL
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1/db_1
export ORACLE_SID=ORCL
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/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

ulimit -u 16384 -n 65536

170
Instalação Oracle
Com o usuário root, execute os pré-requisitos de instalação.
# yum -y install oracle-database-server-12cR2-preinstall
# mkdir -p /u01/app/oracle/product/12.2.0.1/db_1
# chown -R oracle:oinstall /u01
# chmod -R 775 /u01

Com o usuário oracle, descompacte e execute o instalador do Oracle Database Software.


$ cd /home/oracle
$ unzip -q linuxx64_12201_database.zip
$ cd database
$ ./runInstaller

171
Instalação Oracle

172
Instalação Oracle

173
Instalação Oracle

174
Instalação Oracle

175
Instalação Oracle

176
Instalação Oracle

177
Instalação Oracle

178
Instalação Oracle

179
Instalação Oracle

180
Instalação Oracle

# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/oracle/product/12.2.0.1/db_1/root.sh
Enter the full pathname of the local bin directory: [/usr/local/bin]:
<ENTER>
...
Do you want to setup Oracle Trace File Analyzer (TFA) now ? yes|[no] :
yes
...
181
Instalação Oracle

182
Configuração Listener - netca

183
Configuração Listener

184
Configuração Listener

185
Configuração Listener

186
Configuração Listener

187
Configuração Listener

188
Configuração Listener

189
Configuração Listener

190
Criação do Banco de Dados - dbca

191
Criação do Banco de Dados

192
Criação do Banco de Dados

193
Criação do Banco de Dados

194
Criação do Banco de Dados

195
Criação do Banco de Dados

/u01/oradata/nerv01/FRA/{DB_UNIQUE_NAME}
196
Criação do Banco de Dados

197
Criação do Banco de Dados

198
Criação do Banco de Dados

199
Criação do Banco de Dados

200
Criação do Banco de Dados

201
Criação do Banco de Dados

202
Criação do Banco de Dados

203
Criação do Banco de Dados

204
Criação do Banco de Dados

205
Criação do Banco de Dados

206
Criação do Banco de Dados

207
Criação do Banco de Dados

208
SQL*Plus
Verifique o LISTENER.
$ lsnrctl status
$ lsnrctl stop
$ lsnrctl status
$ lsnrctl start
$ lsnrctl status

Execute logon no SQL*Plus via Sistema Operacional.


$ sqlplus / AS SYSDBA
Por que isto funcionou?

Execute logon no SQL*Plus via SQL*Net.


$ sqlplus SYSTEM/Nerv2021@ORCL
Por que isto funcionou?
Como executar logon no computador do vizinho?

Crie uma entrada no arquivo tnsnames.ora para executar logon no computador do


vizinho.
$ vi $ORACLE_HOME/network/admin/tnsnames.ora

209
SQL*Plus
Verifique o status da instância.
SQL> SELECT STATUS FROM V$INSTANCE;
SQL> SELECT HOST_NAME FROM V$INSTANCE;
SQL> /
SQL> LIST

Salve o SQL de verificação da instância em um arquivo.


SQL> DEFINE _EDITOR=vi
SQL> EDIT
...
SELECT STATUS, HOST_NAME FROM V$INSTANCE
/
...

Execute o arquivo no SQL*Plus.


SQL> HOST OU SQL> !
SQL> HOST vi verifica_host.sql OU SQL> !vi verifica_host.sql
...
SELECT STATUS, HOST_NAME FROM V$INSTANCE;
...

SQL> START verifica_host.sql OU SQL> @verifica_host.sql

210
SQL*Plus
Execute o SQL abaixo:
SQL> SELECT FILE_ID, FILE_NAME FROM DBA_DATA_FILES;

Crie o arquivo abaixo, com os seguintes comandos.


$ORACLE_HOME/sqlplus/admin/glogin.sql

SET LINESIZE 300


SET PAGESIZE 1000
COLUMN FILE_NAME FORMAT A40
SET TIMING ON
SET TIME ON
SET SQLPROMPT '&_user@&_connect_identifier> '
DEFINE _EDITOR=vi

Execute logon no SQL*Plus, e verifique o que mudou.

211
Alert Log
Verifique o Alert Log.
$ tail -f /u01/app/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

$ORACLE_BASE/diag/rdbms/<BancoEmMinúsculo>/<Instância>/trace/alert_<Instância>.log

212
Parâmetros de memória
Verificando parâmetros:
SQL> SHOW PARAMETER SGA

Alterando parâmetro dinâmico:


SQL> ALTER SYSTEM SET SGA_TARGET=3G;

Alterando parâmetro estático:


SQL> ALTER SYSTEM SET SGA_MAX_SIZE=5G;
SQL> ALTER SYSTEM SET SGA_MAX_SIZE=5G SCOPE=SPFILE;
SQL> SHOW PARAMETER SGA

213
STARTUP / SHUTDOWN
Estados da Instância
SHUTDOWN
STARTUP
MOUNT
OPEN

Comandos START
SQL> STARTUP;
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN;
SQL> STARTUP RESTRICT;
SQL> STARTUP FORCE;

Comandos SHUTDOWN
SQL> SHUTDOWN NORMAL;
SQL> SHUTDOWN TRANSACTIONAL;
SQL> SHUTDOWN IMMEDIATE;
SQL> SHUTDOWN ABORT;

214
Modo ARCHIVELOG
Altere o Banco de Dados para o modo NOARCHIVELOG.
SQL> SELECT LOG_MODE FROM V$DATABASE;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE NOARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> SELECT LOG_MODE FROM V$DATABASE

Altere o Banco de Dados para o modo ARCHIVELOG.


SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
SQL> SELECT LOG_MODE FROM V$DATABASE;

215
Estruturas Físicas e Lógicas

216
Estruturas lógicas e físicas
TABLESPACE DATAFILE
SEGMENTS
EXTENTS
DATA BLOCKS

217
Estruturas lógicas e físicas

218
Tablespaces e Datafiles
Verifique o Espaço Físico.
SQL> SELECT TABLESPACE_NAME, FILE_NAME, TO_CHAR(BYTES/1024/1024) MB
FROM DBA_DATA_FILES ORDER BY 1;

Verifique o Espaço Lógico.


SQL> SELECT TABLESPACE_NAME, TO_CHAR(SUM(BYTES)/1024/1024) MB
FROM DBA_SEGMENTS GROUP BY TABLESPACE_NAME ORDER BY 1;

Crie uma TABLESPACE, e verifique novamente os Espaços Físico e Lógico.


SQL> CREATE TABLESPACE TESTE DATAFILE
'/u01/app/oracle/oradata/ORCL/teste01.dbf' SIZE 10M;

Crie uma tabela na TABLESPACE, e verifique novamente os Espaços Físico e Lógico.


SQL> CREATE TABLE TESTE TABLESPACE TESTE AS SELECT * FROM ALL_OBJECTS;
O que aconteceu?

219
Tablespaces e Datafiles
Aumente o DATAFILE, crie a tabela, insira dados nela, e verifique novamente os Espaços
Físico e Lógico.
SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/teste01.dbf'
RESIZE 100M;
SQL> CREATE TABLE TESTE TABLESPACE TESTE AS SELECT * FROM ALL_OBJECTS;
SQL> INSERT INTO TESTE SELECT * FROM TESTE;
SQL> INSERT INTO TESTE SELECT * FROM TESTE;
SQL> INSERT INTO TESTE SELECT * FROM TESTE;
...
SQL> COMMIT;
O que aconteceu?

Altere o DATAFILE, crie a tabela, insira mais dados nela, e verifique novamente os Espaços
Físico e Lógico.
SQL> ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/teste01.dbf'
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

Adicione um DATAFILE, insira mais dados na tabela, e verifique novamente os Espaços Físico
e Lógico.
SQL> ALTER TABLESPACE TESTE ADD DATAFILE
'/u01/app/oracle/oradata/ORCL/teste_02.dbf'
SIZE 10M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;

220
O que é um schema?

A coleção de objetos gerenciados por um usuário é um SCHEMA.

221
Usuários e Permissões
Como SYSTEM, crie o usuário TESTE.
SQL> CREATE USER TESTE IDENTIFIED BY MinhaSenha;

Como SYSTEM, altere a senha do usuário TESTE.


SQL> ALTER USER TESTE ACCOUNT UNLOCK IDENTIFIED BY Nerv2021;

Tente conectar com o usuário TESTE.


$ sqlplus TESTE/Nerv2021
O que aconteceu?
Como SYSTEM, Conceda o privilégio CREATE SESSION para o usuário TESTE.
Em seguida, tente se logar novamente no SQL*Plus com o usuário TESTE.
SQL> GRANT CREATE SESSION TO TESTE;

Crie uma tabela com o usuário TESTE.


SQL> CREATE TABLE TABELA_TESTE (C1 NUMBER);
O que aconteceu?
Como SYSTEM, conceda o privilégio de sistema RESOURCE para o usuário TESTE.
Em seguida, tente criar novamente a tabela com o usuário TESTE.
SQL> GRANT RESOURCE TO TESTE;

222
Usuários e Permissões
Com o usuário TESTE, insira dados na tabela.
SQL> INSERT INTO TABELA_TESTE VALUES (1);
O que aconteceu?

Como SYSTEM, consulte o usuário criado.


SQL> SELECT DEFAULT_TABLESPACE FROM DBA_USERS WHERE USERNAME='TESTE';

Como SYSTEM, altere a TABLESPACE padrão do usuário TESTE.


SQL> ALTER USER TESTE DEFAULT TABLESPACE TESTE;
SQL> ALTER USER TESTE QUOTA 200M ON TESTE;

Como usuário TESTE, mova a Tabela para a TABLESPACE TESTE.


SQL> ALTER TABLE TABELA_TESTE MOVE TABLESPACE TESTE;

Com o usuário TESTE, insira dados na tabela.


SQL> INSERT INTO TABELA_TESTE VALUES (1);

Como SYSTEM, consulte os Segmentos do usuário TESTE.


SQL> SELECT SEGMENT_NAME, SEGMENT_TYPE, sum(BYTES) FROM DBA_SEGMENTS
WHERE OWNER ='TESTE'
GROUP BY SEGMENT_NAME, SEGMENT_TYPE
ORDER BY 3 DESC;

223
Usuários e Permissões
Como SYSTEM, conceda privilégios em uma tabela se outro SCHEMA ao usuário TESTE.
SQL> GRANT INSERT, DELETE, UPDATE, SELECT ON SYSTEM.HELP TO TESTE;

Como TESTE, consulte a tabela SYSTEM.HELP.


SQL> SELECT * FROM SYSTEM.HELP;

Como SYSTEM, consulte os privilégios concedidos para o TESTE.


SQL> SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE, GRANTOR
FROM DBA_TAB_PRIVS WHERE GRANTEE='TESTE'
AND OWNER='SYSTEM' AND TABLE_NAME='HELP';

Como SYSTEM, revogue os privilégios concedidos para o usuário TESTE, e verifique.


SQL> REVOKE DELETE,INSERT,UPDATE,SELECT ON SYSTEM.HELP FROM TESTE;

224
V$SESSION_WAIT
Execute novamente o cenário de Transação e Isolamento, e veja o que há na V$SESSION_WAIT.
SQL> SELECT SID, EVENT, SECONDS_IN_WAIT FROM V$SESSION_WAIT;
SQL> SELECT SID, EVENT, SECONDS_IN_WAIT FROM V$SESSION_WAIT WHERE
WAIT_CLASS != 'Idle';

SQL> CREATE TABLE T1 AS SELECT * FROM ALL_OBJECTS;


SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> INSERT INTO T1 SELECT * FROM T1;
SQL> COMMIT;

Qual a diferença da V$SESSION_WAIT antes, durante e após a execução?

225
exp / imp e expdp / impdp
Exemplos
exp / imp
$ exp '"/ AS SYSDBA"' FULL=Y FILE=/home/oracle/FULL.dmp
$ exp '"/ AS SYSDBA"' OWNER=HR FILE=HR.dmp
$ imp '"/ AS SYSDBA"' FILE=HR.dmp FROMUSER=HR TOUSER=TESTE

expdp / impdp (Data Pump: >= 10g)


$ expdp '"/ AS SYSDBA"' FULL=Y DUMPFILE=FULL.dump
$ expdp '"/ AS SYSDBA"' SCHEMAS=HR DUMPFILE=HR.dump

SQL> GRANT UNLIMITED TABLESPACE TO TESTE;

$ impdp '"/ AS SYSDBA"' REMAP_SCHEMA=HR:TESTE DUMPFILE=HR.dump

$ impdp '"/ AS SYSDBA"' TABLES=HR.EMPLOYEES


REMAP_TABLE=HR.EMPLOYEES:EMPLOYEES2 DUMPFILE=HR.dump
EXCLUDE=COMMENT,CONSTRAINT,INDEX,TRIGGER

226
Estruturas físicas
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES;
SQL> SELECT FILE_NAME FROM DBA_TEMP_FILES;
SQL> SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME =
'UNDOTBS1';
SQL> SELECT NAME FROM V$CONTROLFILE;
SQL> SELECT MEMBER FROM V$LOGFILE;
SQL> SHOW PARAMETER SPFILE;

$ rman target /
RMAN> LIST ARCHIVELOG ALL;

227
Configuração Básica RMAN
Execute os comandos abaixo no RMAN.
$ rman target /
RMAN> SHOW All;
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 7;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO
COMPRESSED BACKUPSET;
RMAN> CONFIGURE COMPRESSION ALGORITHM 'HIGH' OPTIMIZE FOR LOAD TRUE AS
OF RELEASE 'DEFAULT';
RMAN> SHOW All;

228
Backup Básico RMAN
Execute os comandos abaixo no RMAN.
RMAN> BACKUP DATABASE;

RMAN> LIST ARCHIVELOG ALL;


RMAN> BACKUP ARCHIVELOG ALL;
RMAN> LIST ARCHIVELOG ALL;
RMAN> BACKUP ARCHIVELOG ALL DELETE INPUT;
RMAN> LIST ARCHIVELOG ALL;

RMAN> LIST ARCHIVELOG ALL;


RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT;
RMAN> LIST ARCHIVELOG ALL;

229
Alta Disponibilidade
• Oracle RAC
• Oracle Data Guard
• Oracle Golden Gate
• Oracle Streams

230
Perguntas?

Ricardo Portilho Proni


ricardo@nervinformatica.com.br 231

Você também pode gostar