DBA Júnior
Ricardo Portilho [email protected]
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/.
2
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?
3
● Mercado de Trabalho● Linux - Sistema Operacional, Virtualização, Redes, Storage● MySQL● Oracle
3
Agenda
4
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
6
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?
7
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).
8
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.
9
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
10
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.
13
ComunidadesList Yahoo Oracle Brhttps://www.mail-archive.com/[email protected]/
GPOhttps://www.profissionaloracle.com.br
Glufkehttp://glufke.net/
GUOBhttp://www.guob.com.br/
Database Casthttp://databasecast.com.br/wp/
Certificação BDhttp://certificacaobd.com.br/
DBA Brasilhttps://dbabrasil.net.br/
Treinamentos NervQuero ser um DBA Treinamento DBA JúniorTreinamento DBA Júnior IITreinamento Oracle Backup e Recovery
Já trabalho como DBA e enfrento problemas de desempenho:Treinamento Oracle Performance Diagnostic e TuningTreinamento 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
17
Certificação
- Suas Certificações devem seguir sua carreira. - Não passar na prova faz parte do jogo.
18
Certificações 1o Nível
Bancos de DadosOracle: Oracle Database Administrator Certified AssociateSQL Server: Microsoft Certified Solutions AssociateMySQL: Oracle Certified Associate, MySQL 5
InfraestruturaLinux: LPIC-1Linux: Red Hat Certified System AdministratorAIX: IBM Certified OperatorVirtualização: VMware Certified AssociateVirtualização: Hyper-V: MCITP: Virtualization AdministratorWindows Server: Microsoft Certified Solutions AssociateCISCO: CCENT Cisco Certified Entry Networking TechnicianStorage: IBM Certified Specialist - High Volume Storage FundamentalsStorage: NetApp Certified Data Management Administrator
GerenciamentoITIL
24
24
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)
26
26
Distribuições, Edições, Versões
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svghttp://upload.wikimedia.org/wikipedia/commons/e/ed/LinuxDistroTimeline.png
67
67
Manipulação de ArquivosExecute 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
68
Manipulação de Arquivos# cd# pwdEm 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 testeO que estes comandos fizeram?
69
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
# watch ls -lh
# vi install.logESC 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.
# clearO que a seta para cima faz?# cat .bash_history
70
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
71
Particionamento e Sistema de Arquivos
Crie uma partição com o espaço livre.# findmnt# findmnt -l# fdisk -l# fdisk /dev/sdaDigite: 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
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
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
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
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.logO que aconteceu?
76
76
Shell
Com o usuário oracle, crie um script Bash.$ vi teste.sh...#!/bin/bashdateecho “Teste”...
Execute-o:$ teste.shO que aconteceu?
$ sh teste.sh$ /home/oracle/teste.sh$ ./teste.shO que aconteceu?
$ chmod +x /home/oracle/teste.sh$ /home/oracle/teste.sh$ ./teste.sh
77
77
Shell
Execute-o diretamente desta vez.$ teste.sh$ echo $PATH$ export PATH=/home/oracle/:$PATH$ echo $PATH$ teste.shO que aconteceu?
78
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
79
Processos
Verifique os processos em execução.$ ps$ ps a$ ps aux$ ps aux | grep gnome$ pstreeQual a diferença entre estes comandos?
Finalize o seu processo bash.$ ps a$ kill 2120$ kill -9 2120O que aconteceu?
82
82
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
126
126
Redes TCP/IP● IP / Mask / Gateway / DNS – ifconfig / route / /etc/resolv.conf● VLAN● DHCP● Routing / Firewall / Proxy● IDS / IPSQual seu IP / Mask / Gateway / DNS?
128
128
ssh / scp / ftp
Execute logon remoto no computador do seu vizinho.# ssh [email protected]# exit
Copie um arquivo do computador do seu vizinho para o seu.# scp [email protected]:/root/install.log /tmp/# scp [email protected]:/root/install.log /tmp/install.log# scp [email protected]:/root/install.log /tmp/install.tmp# scp [email protected]:/root/install.log .
Copie um arquivo de seu computador para o do seu vizinho.# scp /root/install.log [email protected]:/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
129
mstsc / rdesktop
Execute logon remoto no Windows Server de sua VM.# rdesktop IpDaVMWindowsPor que não funciona?
130
130
VNC / Xserver
Execute logon remoto gráfico no computador do seu vizinho.# vncviewer 192.168.0.102:1Por que não funciona?
E’xecute logon remoto no computador do seu vizinho.# ssh -CX [email protected]# firefox
131
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=Nerv2019 /mnt/windows
132
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
134
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
NFS Server
135
Adicionar no arquivo /etc/fstab a linha abaixo.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?
135
NFS Client
136
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
Particione o novo disco.# fdisk /dev/sdbDigite: 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.
iSCSI Initiator
143
143
Instalação
[root@Melquior ~]# yum -y install mysql-server...[root@Melquior ~]# rpm -qa | grep mysqlmysql-server-5.1.73-3.el6_5.x86_64mysql-libs-5.1.73-3.el6_5.x86_64mysql-5.1.73-3.el6_5.x86_64[root@Melquior ~]#
146
146
InstalaçãoInstale 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.
147
147
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
148
148
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
149
149
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;
150
150
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-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 -pNerv2019. status
# mysql -u root -pNerv2019.mysql> SHOW PROCESSLIST;mysql> SHOW FULL PROCESSLIST;
http://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html
151
151
Parâmetros de otimizaçãoAltere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.# vi /etc/my.cnf...[mysqld]max_connections = 800thread_cache_size = 100
innodb_buffer_pool_size = 512Mkey_buffer_size = 128M
read_buffer_size = 2Mread_rnd_buffer_size = 2Msort_bufer_size = 2Mjoin_bufer_size = 2M
152
152
Parâmetros de recuperação
Altere todos os parâmetros abaixo no arquivo de parâmetros, e reinicie o MySQL.tmp_table_size = 8Mtmpdir = /tmp/
slow_query_log_file = /var/log/mysql-slow.loglong_query_time = 5
innodb_log_file_size = 32Minnodb_log_files_in_group = 7innodb_log_buffer_size = 64Minnodb_flush_log_at_trx_comit = 1
Verificar parâmetros:mysql> SHOW VARIABLES LIKE 'read%buffer_size';
153
153
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;
154
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_logfile1drwx--x--x. 2 mysql mysql 4.0K Jan 24 14:43 mysqlsrwxrwxrwx. 1 mysql mysql 0 Jan 24 14:45 mysql.sockdrwx------. 2 mysql mysql 4.0K Jan 24 15:12 nervdrwx------. 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-LASTdrwxr-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
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
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 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?
157
157
Importação e Exportação
Exemplosmysql> 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
158
Bin Logs
Adicione no /etc/my.cnf a linha abaixo, e reinicie o mysql.server-id=1log-bin=mysql-binexpire_logs_days=7
O que aconteceu no diretório de dados?
159
159
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?
166
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
169
Com o usuário oracle, acrescenter ao 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/12.2.0.1/db_1export ORACLE_SID=ORCLexport 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/jlibulimit -u 16384 -n 65536
169
Instalação Oracle
170
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
Instalação Oracle
180
Instalação Oracle
# /u01/app/oraInventory/orainstRoot.sh# /u01/app/oracle/product/12.2.0.1/db_1/root.shEnter 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...
208
208
SQL*PlusVerifique o LISTENER.$ lsnrctl status$ lsnrctl stop$ lsnrctl status$ lsnrctl start$ lsnrctl status
Execute logon no SQL*Plus via Sistema Operacional.$ sqlplus / AS SYSDBAPor que isto funcionou?
Execute logon no SQL*Plus via SQL*Net.$ sqlplus SYSTEM/Nerv2019@ORCLPor 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
209
SQL*PlusVerifique 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=viSQL> 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
210
SQL*PlusExecute 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 300SET PAGESIZE 1000COLUMN FILE_NAME FORMAT A40SET TIMING ONSET TIME ONSET SQLPROMPT '&_user@&_connect_identifier> 'DEFINE _EDITOR=vi
Execute logon no SQL*Plus, e verifique o que mudou.
211
211
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
212
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
213
STARTUP / SHUTDOWNEstados da InstânciaSHUTDOWNSTARTUPMOUNTOPEN
Comandos STARTSQL> STARTUP;SQL> STARTUP NOMOUNT;SQL> ALTER DATABASE MOUNT;SQL> STARTUP MOUNT;SQL> ALTER DATABASE OPEN;SQL> STARTUP RESTRICT;SQL> STARTUP FORCE;
Comandos SHUTDOWNSQL> SHUTDOWN NORMAL;SQL> SHUTDOWN TRANSACTIONAL;SQL> SHUTDOWN IMMEDIATE;SQL> SHUTDOWN ABORT;
214
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;
218
Verifique o Espaço Físico.SQL> SELECT TABLESPACE_NAME, FILE_NAME, TO_CHAR(BYTES/1024/1024) MBFROM DBA_DATA_FILES ORDER BY 1;
Verifique o Espaço Lógico.SQL> SELECT TABLESPACE_NAME, TO_CHAR(SUM(BYTES)/1024/1024) MBFROM 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?
Tablespaces e Datafiles
219
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;
Tablespaces e Datafiles
221
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/Nerv2019O 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;
Usuários e Permissões
222
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_SEGMENTSWHERE OWNER ='TESTE'GROUP BY SEGMENT_NAME, SEGMENT_TYPEORDER BY 3 DESC;
Usuários e Permissões
223
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, GRANTORFROM 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;
Usuários e Permissões
224
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
225
exp / imp e expdp / impdp
Exemplosexp / 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
226
Estruturas físicasSQL> 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
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';
228
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;