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 Oracle VirtualBox x64 6.0 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. 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
Certificação 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
Múltiplos Bancos de Dados 20
Múltiplos Bancos de Dados 21
Linux Sistema Operacional, Virtualização, Redes, Storage 22 22
Alta x Baixa plataforma 23 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 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 26
Distribuições, Edições, Versões 27 27
Linux Homologados para Oracle Database 12cR2 28 28
Download OEL 6 29 29
Download OEL 6 30 30
Download OEL 6 31 31
Download OEL 6 32 32
Instalação OEL 6 33 33
Instalação OEL 6 34 34
Instalação OEL 6 35 35
Instalação OEL 6 36 36
Instalação OEL 6 37 37
Instalação OEL 6 38 38
Instalação OEL 6 39 39
Instalação OEL 6 40 40
Instalação OEL 6 41 41
Instalação OEL 6 42 42
Instalação OEL 6 43 43
Instalação OEL 6 44 44
Instalação OEL 6 45 45
Instalação OEL 6 46 46
Instalação OEL 6 47 47
Instalação OEL 6 48 48
Instalação OEL 6 49 49
Instalação OEL 6 50 50
Instalação OEL 6 51 51
Instalação OEL 6 52 52
Instalação OEL 6 53 53
Instalação OEL 6 54 54
Instalação OEL 6 55 55
Instalação OEL 6 56 56
Instalação OEL 6 57 57
Instalação OEL 6 58 58
Instalação OEL 6 59 59
Instalação OEL 6 60 60
Instalação OEL 6 61 61
Instalação OEL 6 62 62
Instalação OEL 6 63 63
Instalação OEL 6 64 64
Instalação OEL 6 65 65
Instalação OEL 6 66 66
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 67 67
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 O que estes comandos fizeram? 68 68
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 # watch ls -lh # vi install.log ESC e depois i ESC e depois x ESC e depois dd ESC e depois :w ESC e depois :q ESC e depois :wq ESC e depois :q! --- insere texto. --- remove uma letra. --- remove uma linha. --- salva as alterações. --- sai do vi. --- salva as alterações, e sai do vi. --- sai do vi sem salvar as alterações. # clear O que a seta para cima faz? # cat.bash_history 69 69
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++ 70 70
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? 71 71
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 72 72
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 73 73
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 74 74
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? 75 75
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 76 76
Shell Execute-o diretamente desta vez. $ teste.sh $ echo $PATH $ export PATH=/home/oracle/:$PATH $ echo $PATH $ teste.sh O que aconteceu? 77 77
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 78 78
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? 79 79
Desempenho 80 80
Desempenho $ free $ vmstat $ vmstat 2 $ vmstat 5 $ iostat -xd $ iostat -xd 2 $ iostat -xd 5 $ top 81 81
Logs Verifique os logs mais atuais, e que informação eles têm. $ ls -lh /var/log $ su # ls -lh /var/log # cat /var/log/messages 82 82
Virtualização Hard x Soft 83 83
Produtos de Virtualização Oracle 84 84
VMs e Containers 85 85
Produtos de Virtualização Oracle 86 86
Instalação Oracle VirtualBox # ls -lh /root/ # rpm -ivh /root/virtualbox* 87 87
Criação VMs 88 88
Criação VMs 89 89
Criação VMs 90 90
Criação VMs 91 91
Criação VMs 92 92
Criação VMs 93 93
Criação VMs 94 94
Configuração VMs 95 95
Configuração VMs 96 96
Configuração VMs 97 97
Configuração VMs 98 98
Configuração VMs 99 99
Configuração VMs 100 100
Configuração VMs 101 101
Configuração VMs 102 102
Configuração VMs 103 103
Configuração VMs 104 104
Configuração VMs 105 105
Configuração VMs 106 106
Configuração VMs 107 107
Configuração VMs 108 108
Configuração VMs 109 109
Configuração VMs 110 110
Configuração VMs 111 111
Configuração VMs 112 112
Pause VMs 113 113
Clone VMs 114 114
Clone VMs 115 115
Clone VMs 116 116
Clone VMs 117 117
Snapshot VMs 118 118
Snapshot VMs 119 119
Snapshot VMs 120 120
Export / Import Appliance 121 121
Export / Import Appliance 122 122
Export / Import Appliance 123 123
Export / Import Appliance 124 124
Export / Import Appliance 125 125
Redes TCP/IP IP / Mask/ Gateway / DNS DHCP Routing / Firewall / Proxy IDS / IPS VLAN Qual seu IP / Mask / Gateway / DNS? 126 126
Configuração de Rede Configure as placas de rede. 127 127
ssh / scp / ftp Execute logon remoto no computador do seu vizinho. # ssh root@192.168.15.102 # exit Copie um arquivo do computador do seu vizinho para o seu. # # # # scp scp scp scp root@192.168.15.102:/root/install.log root@192.168.15.102:/root/install.log root@192.168.15.102:/root/install.log root@192.168.15.102:/root/install.log /tmp/ /tmp/install.log /tmp/install.tmp. Copie um arquivo de seu computador para o do seu vizinho. # scp /root/install.log root@192.168.15.102:/root/desktop/install.log 128 128
mstsc / rdesktop Execute logon remoto no Windows Server de sua VM. # rdesktop IpDaVMWindows Por que não funciona? 129 129
VNC / Xserver Execute logon remoto gráfico no computador do seu vizinho. # vncviewer 192.168.15.102:1 Por que não funciona? E xecute logon remoto no computador do seu vizinho. # ssh -CX root@192.168.15.102 # firefox 130 130
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.15.40/temp -o username=administrator,password=nerv2019 mnt/windows 131 131 /
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 132 132
RAID 133 133
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 134 134
NFS Client Adicionar no arquivo /etc/fstab a linha abaixo. 192.168.15.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? 135 135
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.15.201 -l Verifique se o disco foi configurado localmente. # fdisk -l 136 136
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 um ponto de montagem, e monte a partição deste novo disco. 137
MySQL 138 138
Por que MySQL? 139 139
Evolução MySQL 140 140
Edições - Community 141 141
Edições - Enterprise 142 142
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 ~]# 143 143
Instalação 144 144
Instalação 145 145
Instalação Instale o MySQL. # yum -y install https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm # yum -y install mysql-server # chkconfig mysqld on # service mysqld start # grep password /var/log/mysqld.log # /usr/bin/mysqladmin -p -u root password 'Nerv2019.' # mysql -u root -pnerv2019. 146 146
Verificação Acesse o MySQL. # mysql -u root -pnerv2019. mysql> exit; Verifique se o MySQL está ativo. # mysqladmin -u root -pnerv2019. status Verifique o Log do MySQL. # tail /var/log/mysqld.log 147 147
Programas Cliente # mysql -u root -pnerv2019. mysql> SHOW STATUS; mysql> EXIT; # mysql -u root -pnerv2019. -e SHOW STATUS # # # # # # mysql -u root -pnerv2019. -e SHOW STATUS > status.txt cat status.txt mysql -t -u root -pnerv2019. -e SHOW STATUS > status.txt cat status.txt mysql -E -u root -pnerv2019. -e SHOW STATUS > status.txt cat status.txt # # # # # echo SHOW STATUS >> script.sql cat script.sql mysql -t -u root -pnerv2019. < script.sql mysql -u root -pnerv2019. < script.sql > status.txt cat status.txt 148 148
Engines MyISAM InnoDB Memory Archive CSV Merge Federated NDB Blackhole Example MariaDB / Aria Percona XtraDB Percona XtraDB Cluster Percona TokuDB mysql> CREATE TABLE teste (coluna1 int) Engine=InnoDB; mysql> CREATE TABLE teste2 (coluna1 int) Engine=MyISAM; 149 149
Processos e Threads Execute um teste de carga no MySQL. # yum -y install mysql-test # mysqlslap --user=root --password=nerv2019. --auto-generate-sql -concurrency=10 --iterations=10 --number-char-cols=10 --number-intcols=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 -pnerv2019. status # mysql -u root -pnerv2019. mysql> SHOW PROCESSLIST; mysql> SHOW FULL PROCESSLIST; http://dev.mysql.com/doc/refman/5.6/en/general-thread-states.html 150 150
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 key_buffer_size = 128M = 512M read_buffer_size = 2M read_rnd_buffer_size = 2M sort_bufer_size = 2M join_bufer_size = 2M 151 151
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'; 152 152
Bancos de Dados Crie um novo banco de dados. # mysql -u root -pnerv2019. mysql> show databases; mysql> create database nerv; mysql> show databases; mysql> use nerv; mysql> show tables; 153 153
Estruturas físicas # ls -lh /var/lib/mysql/ total 29M -rw-rw----. 1 mysql mysql -rw-rw----. 1 mysql mysql -rw-rw----. 1 mysql mysql drwx--x--x. 2 mysql mysql srwxrwxrwx. 1 mysql mysql drwx------. 2 mysql mysql drwx------. 2 mysql mysql -rw-rw----. 1 mysql mysql -rw-r--r--. 1 root root -rw-r--r--. 1 mysql mysql drwxr-xr-x. 2 mysql mysql 18M 5.0M 5.0M 4.0K 0 4.0K 4.0K 6 112 112 4.0K Jan Jan Jan Jan Jan Jan Jan Jan Jan Jan Jan 24 24 24 24 24 24 24 24 24 24 24 14:45 14:45 14:45 14:43 14:45 15:12 14:43 14:45 14:43 14:43 14:43 ibdata1 ib_logfile0 ib_logfile1 mysql mysql.sock nerv performance_schema Proni-PC.localdomain.pid RPM_UPGRADE_HISTORY RPM_UPGRADE_MARKER-LAST test # ls -lh /var/lib/mysql/nerv/ total 4.0K -rw-rw----. 1 mysql mysql 65 Jan 24 15:12 db.opt 154 154
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? 155 155
Transações e Isolamento Execute INSERT de 10 registros em cada uma das tabelas que você criou. Execute um UPDATE em todas 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? 156 156
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. 157 157
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? 158 158
mysqldump Execute um backup via mysqldump. # mysqldump -u root -pnerv2019. nerv > nerv.sql # mysqldump -u root -pnerv2019. --all-databases > nerv01.sql Edite o arquivo gerado. O que ele contém? Como utilizar este backup? Quais suas desvantagens? 159 159
Alta Disponibilidade MySQL Replication 160 160
Alta Disponibilidade DRBD / Pacemaker / Corosync 161
Alta Disponibilidade Windows Server Failover Clustering 162
Alta Disponibilidade MySQL Cluster 163
Alta Disponibilidade MySQL Fabric 164
Oracle 165 165
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 166 166
Versões e Edições 167 167
Instalação Oracle 168
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 if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi 169 169
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 170
Instalação Oracle 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 # /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 180...
Instalação Oracle 181
Configuração Listener - netca 182
Configuração Listener 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
Criação do Banco de Dados - dbca 190
Criação do Banco de Dados 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 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
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/Nerv2019@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 208 208
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 Execute o arquivo no SQL*Plus. SQL> HOST OU SQL>! SQL> HOST vi verifica_host.sql OU SQL>!vi verifica_host.sql SQL> START verifica_host.sql OU SQL> @verifica_host.sql 209 209
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. 210 210
Alert Log Verifique o Alert Log. $ tail -f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log $ tail -f $ORACLE_BASE/diag/rdbms/<BancoEmMinúsculo>/<Instância EmMaiúsculo>/trace/alert_<InstânciaEmMaiúsculo>.log 211 211
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 212 212
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; 213 213
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; 214 214
Estruturas Físicas e Lógicas 215 215
Estruturas lógicas e físicas TABLESPACE SEGMENTS EXTENTS DATA BLOCKS DATAFILE 216 216
Estruturas lógicas e físicas 217 217
Tablespaces e Datafiles Verifique o Espaço Físico. SQL> SELECT TABLESPACE_NAME, FILE_NAME, TO_CHAR(BYTES) FROM DBA_DATA_FILES ORDER BY 1; Verifique o Espaço Lógico. SQL> SELECT TABLESPACE_NAME, TO_CHAR(SUM(BYTES)) 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? 218
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; 219
O que é um schema? A coleção de objetos gerenciados por um usuário é um SCHEMA 220
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 Nerv2019; Tente conectar com o usuário TESTE. $ sqlplus TESTE/Nerv2019 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; 221
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 222 ORDER BY 3 DESC;
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; 223
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'; Qual a diferença da V$SESSION_WAIT antes, durante e após a execução? 224 224
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 225 225
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; 226 226
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'; 227 227
Backup Básico RMAN Execute os comandos abaixo no RMAN. RMAN> BACKUP DATABASE; RMAN> RMAN> RMAN> RMAN> RMAN> LIST ARCHIVELOG ALL; BACKUP ARCHIVELOG ALL; LIST ARCHIVELOG ALL; BACKUP ARCHIVELOG ALL DELETE INPUT; LIST ARCHIVELOG ALL; RMAN> LIST ARCHIVELOG ALL; RMAN> BACKUP DATABASE PLUS ARCHIVELOG DELETE INPUT; RMAN> LIST ARCHIVELOG ALL; 228 228
Alta Disponibilidade Oracle RAC Oracle Data Guard Oracle Golden Gate Oracle Streams 229 229
Perguntas? Ricardo Portilho Proni ricardo@nervinformatica.com.br 230