MIC PERNAMBUCO SEGUNDA FASE / S2B Banco de Dados Turma: Manhã / FIR Recife-PE www.micpernambuco.com.br Existem muita tarefas que devem ser feitas em um banco de dados, com o passar do tempo chegamos a classificá-las e distribuí-las em grupos, mas por onde começar? Backup Restore Concorrência Profiler SQL Server Agent SQL Server Configuration Manager A principal tarefa de um DBA é garantir que os dados não só vão ser inseridos, mas também que estes dados permaneçam existindo Independente do sistema de contingência o Backup é indispensável Devemos entender como a empresa trabalha e qual o tamanho do banco de dados para definir a melhor política de backup Fazer testes periódicos para garantir que o processo de backup não está com problemas Comando de backup: BACKUP DATABASE { database_name | @database_name_var } TO <backup_device> [ ,...n ] [ <MIRROR TO clause> ] [ next-mirror-to ] [ WITH { DIFFERENTIAL | <general_WITH_options> [ ,...n ] } ] [;] Facilitando, exemplo: BACKUP DATABASE ADVENTUREWORKS TO DISK=“C:\SQL\AW.BAK” WITH FORMAT, COMPRESSION, STATS=10 Backup completo Cria uma cópia de todo o banco de dados. Backup diferencial Cria uma cópia do que foi modificado em relação ao último backup completo. Backup do log de transações Cria uma cópia do log de transações do banco, sendo possível, ao DBA, restaurar o banco de dados posteriormente até determinada transação. Somente Full Sunday Monday Tuesday Full e Log Sunday Monday Importante recurso para recuperação da informação em caso de desastre Apenas retornamos uma database a partir do backup full (completo) O processo de restore deve ser feito com frequência no ambiente de teste, para se evitar falhas em um possível desastre, checando a consistência do processo Sempre que um restore é feito, a database fica indisponível para acesso dos usuários Comando de Restore: RESTORE DATABASE { database_name | @database_name_var } [ FROM <backup_device> [ ,...n ] ] [ WITH { [ RECOVERY | NORECOVERY | STANDBY = {standby_file_name | @standby_file_name_var } ] |, <general_WITH_options> [ ,...n ] |, <replication_WITH_option> | , <change_data_capture_WITH_option> |, <service_broker_WITH options> | , <point_in_time_WITH_options— RESTORE_DATABASE> } [ ,...n ] ] [;] Simplificando: RESTORE DATABASE ADVENTUREWORKS FROM DISK=“C:\SQL\AW.BAK” WITH NORECOVERY A concorrência é muito importante ser observada, quando temos muita concorrência e as aplicações não foram preparadas para isso acabamos com problemas de performance. Como observar? Observar os metadados do SQL Server, usando: Stored procedures Dynamic Management Views SQL Server Management Studio Quais nossas principais opções? sp_who e sp_who2 sys.dm_tran_locks Ter o máximo controle sobre abertura e fechamento das transações nas aplicações Minimizar os erros de codificação Otimizar ao máximo suas consultas Em casos extremos podemos acabar com a conexão que está bloqueando as transações: KILL (ID da conexão) Exemplo: KILL 53 O SQL Server Agent tem uma ferramenta que auxilia na execução de processos automatizados Onde podemos agendar as tarefas para serem executadas. Tarefas agendadas Log das tarefas Iniciando o serviço do SQL Server por meio da ferramenta de configuração de startup Escolha do usuário que irá executar o serviço Listando os primeiros n valores com TOP n Usando funções agregadas Noções básicas sobre a cláusula GROUP BY Gerando valores agregados em conjuntos de resultados Usando as cláusulas COMPUTE e COMPUTE BY Lista apenas os n primeiros registros de um conjunto de resultados Especifica o intervalo de valores na cláusula ORDER BY Retorna correspondências se WITH TIES for usada Exemplo 1 USE northwind SELECT TOP 5 orderid, productid, quantity FROM [order details] ORDER BY quantity DESC GO Exemplo 2 USE northwind SELECT TOP 5 WITH TIES orderid, productid, quantity FROM [order details] ORDER BY quantity DESC GO Funções agregadas Descrição AVG Média de valores em uma expressão numérica COUNT Número de valores em uma expressão COUNT (*) Número de registros selecionados MAX Maior valor da expressão MIN Menor valor da expressão SUM Valores totais em uma expressão numérica STDEV Desvio padrão de todos os valores STDEVP Desvio padrão da população VAR Variância estatística de todos os valores VARP Variância estatística de todos os valores da população A maioria das funções agregadas ignora valores nulos A função COUNT (*) conta todos os registros com valores nulos USE northwind SELECT COUNT (*) FROM employees GO Exemplo 1 USE northwind SELECT COUNT(reportsto) FROM employees GO Exemplo 2 Usando a cláusula GROUP BY Usando a cláusula GROUP BY com a cláusula HAVING USE northwind SELECT productid, orderid ,quantity FROM orderhist GO productid orderid USE northwind SELECT productid ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid GO quantity 1 1 5 1 1 10 2 1 10 2 2 25 3 1 15 3 2 30 productid Apenas os registros que satisfazem às condições da cláusula WHERE serão agrupados total_quantity 1 15 2 35 3 45 productid 2 total_quantity 35 USE northwind SELECT productid ,SUM(quantity) AS total_quantity FROM orderhist WHERE productid = 2 GROUP BY productid GO USE northwind SELECT productid, orderid ,quantity FROM orderhist GO productid orderid quantity USE northwind SELECT productid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid HAVING SUM(quantity)>=30 GO 1 1 5 1 1 10 2 1 10 2 35 2 2 25 3 45 3 1 15 3 2 30 productid total_quantity Usando a cláusula GROUP BY com o operador ROLLUP Usando a cláusula GROUP BY com o operador CUBE Usando a função GROUPING USE northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH ROLLUP ORDER BY productid, orderid GO productid orderid total_quantity Descrição NULL NULL 95 1 NULL 15 1 1 5 1 2 10 2 NULL 35 2 1 10 2 2 25 Valores de detalhe de productid 2, orderid 1 3 NULL 45 Resume apenas os registros de productid 3 3 1 15 Valores de detalhe de productid 3, orderid 1 3 2 30 Valores de detalhe de productid 3, orderid 2 Total geral Resume apenas os registros de productid 1 Valores de detalhe de productid 1, orderid 1 Valores de detalhe de productid 1, orderid 2 Resume apenas os registros de productid 2 USE northwind SELECT productid, orderid, SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO productid orderid total_quantity Descrição NULL NULL 95 Total geral NULL 1 30 Resume todos os registros de orderid 1 O operador CUBE NULL produz dois 1 valores de 1 resumo a mais que o operador 1 ROLLUP 2 2 65 Resume todos os registros de orderid 2 NULL 15 Resume apenas os registros de productid 1 1 5 Valores de detalhe de productid 1, orderid 1 2 10 Valores de detalhe de productid 1, orderid 2 NULL 35 Resume apenas os registros de productid 2 2 1 10 Valores de detalhe de productid 2, orderid 1 2 2 25 Valores de detalhe de productid 2, orderid 2 3 NULL 45 Resume apenas os registros de productid 3 3 1 15 Valores de detalhe de productid 3, orderid 1 3 2 30 Valores de detalhe de productid 3, orderid 2 USE northwind SELECT productid, GROUPING (productid) ,orderid, GROUPING (orderid) ,SUM(quantity) AS total_quantity FROM orderhist GROUP BY productid, orderid WITH CUBE ORDER BY productid, orderid GO productid 1 representa os valores de resumo na coluna anterior 0 representa os valores de detalhe na na coluna anterior NULL NULL NULL 1 1 1 2 2 2 3 3 3 orderid 1 1 1 0 0 0 0 0 0 0 0 0 NULL 1 2 NULL 1 2 NULL 1 2 NULL 1 2 total_quantity 1 0 0 1 0 0 1 0 0 1 0 0 95 30 65 15 5 10 35 10 25 45 15 30 COMPUTE COMPUTE BY USE northwind SELECT productid, orderid ,quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) GO USE northwind SELECT productid, orderid, quantity FROM orderhist ORDER BY productid, orderid COMPUTE SUM(quantity) BY productid COMPUTE SUM(quantity) GO productid orderid quantity productid orderid quantity 1 1 5 1 1 5 1 2 10 1 2 10 2 1 10 2 1 10 2 2 25 2 2 25 3 1 15 3 2 30 3 1 15 95 3 2 30 sum sum sum 15 35 sum 45 sum 95 Indexe colunas freqüentemente agregadas Evite usar funções agregadas com colunas que contêm valores nulos Use a cláusula ORDER BY para garantir a classificação do conjunto de resultados Use o operador ROLLUP sempre que possível Use a cláusula COMPUTE ou COMPUTE BY para testar seus aplicativos Recuperando dados usando a instrução SELECT Filtrando dados Formatando conjuntos de resultados Como as consultas são processadas Como as consultas são colocadas em cache automaticamente Considerações sobre o desempenho Usando a instrução SELECT Especificando colunas Usando a cláusula WHERE para especificar registros A lista de seleção especifica as colunas A cláusula WHERE especifica a condição que restringe a consulta A cláusula FROM especifica a tabela Sintaxe parcial SELECT [ALL | DISTINCT] <lista_de_seleção> FROM {<origem_da_tabela>} [,…n] WHERE <condição_de_pesquisa> USE northwind SELECT employeeid, lastname, firstname, title FROM employees GO employeeid lastname firstname title 1 Davolio Nancy Sales Representative 2 Fuller Andrew Vice President, Sales 3 Leverling Janet Sales Representative 4 Peacock Margaret Sales Representative 5 Buchanan Steven Sales Manager 6 Suyama Michael Sales Representative 7 King Robert Sales Representative 8 Callahan Laura Inside Sales Coordinator 9 Dodsworth Anne Sales Representative USE northwind SELECT employeeid, lastname, firstname, title FROM employees WHERE employeeid = 5 GO employeeid 5 lastname Buchanan firstname Steven title Sales Manager Usando operadores de comparação Usando comparações de seqüências Usando operadores lógicos Recuperando um intervalo de valores Usando uma lista de valores como critérios de pesquisa Recuperando valores desconhecidos Exemplo 1 USE northwind SELECT lastname, city FROM employees WHERE country = 'USA‘ GO lastname Davolio Fuller Leverling Peacock Callahan city Seattle Tacoma Kirkland Redmond Seattle USE northwind SELECT companyname FROM customers WHERE companyname LIKE '%Restaurant%‘ GO companyname GROSELLA-Restaurante Lonesome Pine Restaurant Tortuga Restaurante Exemplo 1 USE northwind SELECT productid, productname, supplierid, unitprice FROM products WHERE (productname LIKE 'T%' OR productid = 46) AND (unitprice > 16.00) GO productid 14 29 62 productname Tofu Thüringer Rostbratwurst Tarte au sucre supplierid 6 12 29 unitprice 23.25 123.79 49.3 USE northwind SELECT productname, unitprice FROM products WHERE unitprice BETWEEN 10 AND 20 GO productname Chai Chang Aniseed Syrup Genen Shouyu Pavlova Sir Rodney’s Scones … unitprice 18 19 10 15.5 17.45 10 … Exemplo 1 Exemplo 1 USE northwind SELECT companyname, country FROM suppliers WHERE country IN ('Japan', 'Italy') GO companyname Tokyo Traders Mayumi’s Formaggi Fortini s.r.l. Pasta Buttini s.r.l. country Japan Japan Italy Italy USE northwind SELECT companyname, fax FROM suppliers WHERE fax IS NULL GO companyname Exotic Liquids New Orleans Cajun Delights Tokyo Traders Cooperativa de Quesos ‘Las Cabras’ … fax NULL NULL NULL NULL … Classificando dados Ocultando registros duplicados Alterando nomes de colunas Usando literais Exemplo 1 USE northwind SELECT productid, productname, categoryid, unitprice FROM products ORDER BY categoryid, unitprice DESC GO productid 38 43 2 … 63 8 61 … productname Cote de Blaye Ipoh Coffee Chang … Vegie-spread Northwoods Cranberry Sauce Sirop d'érable … categoryid 1 1 1 … 2 2 2 … unitprice 263.5000 46.0000 19.0000 … 43.9000 40.0000 28.5000 … Exemplo 1 USE northwind SELECT DISTINCT country FROM suppliers ORDER BY country GO country Australia Brazil Canada Denmark Finland France Germany Italy Japan Netherlands Norway Singapore Spain Sweden UK USA USE northwind SELECT firstname AS First, lastname AS Last ,employeeid AS 'Employee ID:' FROM employees GO First Nancy Andrew Janet Margaret Steven Michael Robert Laura Anne Last Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth Employee ID: 1 2 3 4 5 6 7 8 9 USE northwind SELECT firstname, lastname, 'Identification number:', employeeid FROM employees GO firstname Nancy Andrew Janet Margaret Steven Michael Robert Laura Anne lastname Davolio Fuller Leverling Peacock Buchanan Suyama King Callahan Dodsworth employeeid Identification Number: 1 Identification Number: 2 Identification Number: 3 Identification Number: 4 Identification Number: 5 Identification Number: 6 Identification Number: 7 Identification Number: 8 Identification Number: 9