8/4/2019 Aula de Banco de Dados SQL Server 2008
1/77
8/4/2019 Aula de Banco de Dados SQL Server 2008
2/77
Formao SQL Server 2008 MCTS e MCITP
Sumrio
Instalando o SQL Server 2008................................................................................................ 6-Autnoma ...........................................................................................................................6-Automatizada ..................................................................................................................... 6-Cluster ................................................................................................................................ 6-Adicionar n ao cluster ...................................................................................................... 6
Instncia no SQL Server ......................................................................................................... 6-Tipos de Instncias: ........................................................................................................... 7
Componentes "Core": .....................................................................................................7Tipos de Autenticao: ............................................................................................................8Comandos via CMD ................................................................................................................8Tipos de Bancos de Dados ...................................................................................................... 9Arquitetura .............................................................................................................................. 9Design de Bando de Dados ..................................................................................................... 9
Utilizao do NDF ............................................................................................................ 10FILEGROUP (Grupo de arquivos) ................................................................................... 10
-Armazenamento de Dados como Histrico ......................................................................... 10-Acesso e Segurana no SQL Server .................................................................................... 11
Login: ................................................................................................................................ 11Server Role ........................................................................................................................ 12
Manipulao de T-SQL: ........................................................................................................ 12-Orphaned User (Usurio rfo) .......................................................................................... 13-Usurio "Guest" ................................................................................................................... 13SCHEMAS ............................................................................................................................ 15-Tipos de Backup .................................................................................................................. 50
Full .................................................................................................................................... 50Diferencial ......................................................................................................................... 50T-LOG ............................................................................................................................... 50
1) Tradicional ................................................................................................................ 50Backup com T-SQL .......................................................................................................... 51Media Device .................................................................................................................... 51
Restore ................................................................................................................................... 52Backup Espelho ..................................................................................................................... 53Compresso de Backup ......................................................................................................... 54
Comprimindo o banco via commando T-SQL: ................................................................. 54Backup do log, mesmo com o MDF corrompido.............................................................. 54Backup total do banco via T-SQL ..................................................................................... 54Backup Arquivo / Grupo de arquivos ............................................................................... 55Backup Parcial / Diferencial Parcial ................................................................................. 55
Manuteno Lgica e Fsica .................................................................................................. 55Shrink ................................................................................................................................ 55
DBCC .................................................................................................................................... 56
Bruce Vincius Pgina 4 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
3/77
Formao SQL Server 2008 MCTS e MCITP
TDE (Transparent Data Encryption) ..................................................................................... 57Arquitetura do TDE ........................................................................................................... 57Certificados ....................................................................................................................... 58
2) DEK .......................................................................................................................... 583) Backup Da Chave ..................................................................................................... 58
4) Habilitar a Criptografia ............................................................................................. 59Infra-estrutura de E-mail ....................................................................................................... 60SQL Server Agent ................................................................................................................. 60
Componentes: .................................................................................................................... 60Job ..................................................................................................................................... 61Log do Job ......................................................................................................................... 62Configurando o envio de e-mail ........................................................................................ 62Alerta ................................................................................................................................. 62
Plano de manuteno ..................................................................................................... 62Alta disponibilidade .............................................................................................................. 62
Recursos no SQL2008 ....................................................................................................... 62Database Snapshot ........................................................................................................ 63Criando um Snapshot via T-SQL .................................................................................. 64Restaurando um banco com Snapshot via T-SQL ........................................................ 64
Log Shipping ......................................................................................................................... 64Database Mirroring ............................................................................................................... 65
Log Shipping Vs Database Mirroring ............................................................................... 66Componentes do Database Mirroring: .............................................................................. 66
Tipos de configurao do Database Mirroring: ............................................................ 67Replicao ............................................................................................................................. 68
Tipos: ................................................................................................................................. 68Elementos: ......................................................................................................................... 68
Replicao Snapshot ............................................................................................................. 69Funcionamento das avaliaes .............................................................................................. 71Camadas: ............................................................................................................................... 71
Nveis de criptografia no produto: .................................................................................... 71Criptografia de coluna ................................................................................................... 72Conceito de abrir e fechar a chave ................................................................................ 73
Criptografando Dados ....................................................................................................... 73Removendo a criptografia ................................................................................................. 74Acesso de usurios ............................................................................................................ 74
Conceito de DMZ .................................................................................................................. 76Conceitos de Active Directory .............................................................................................. 76
Checklist: ........................................................................................................................... 76Segurana na autenticao .................................................................................................... 76
Autenticao ...................................................................................................................... 76Quando utilizamos NTLM ................................................................................................ 77KERBEROS no SQL ........................................................................................................ 77
Armazenamento Binrio ....................................................................................................... 77Capacidade de manipulao .............................................................................................. 77FileStream ......................................................................................................................... 78
Arquitetura .................................................................................................................... 78
Bruce Vincius Pgina 5 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
4/77
Formao SQL Server 2008 MCTS e MCITP
Aula de Banco de Dados SQL Server 2008.Data: 08/06/2010.
Instalando o SQL Server 2008. Autnoma Automatizada Cluster Adicionar n ao cluster
-Autnoma
Instalao tradicional do produto SQL Server.
-Automatizada
Personalizada, fazendo com que a sua instalao seja de forma automtica e facilitando asua instalao em vrios servidores ao mesmo tempo e padronizando as instalaes conforme aautomatizao.
Basta criar um arquivo.ini que um arquivo de resposta e o SQL ser instalado conforme asinformaes nesse arquivo .ini
-Cluster
Criao de um balanceamento de carga com instalao de SQL Server em vrios servidoresdiferentes com limite de 16 servidores, levando em considerao outras variveis. EX: Hardware,NAS, S.O. etc.
-Adicionar n ao cluster
Apenas adiciona um servidor a um cluster pronto.
Instncia no SQL ServerCenrio normal para outras aplicaes seria o esquema abaixo: HardwareS.O.1 Servio HardwareS.O.1 Servio
Cenrio com o SQL Server S.O.SQL1 Servio, 2 Servio, 3 Servio.
OBS: O SQL consegue adicionar vrias instncias com o mesmo S.O.
Bruce Vincius Pgina 6 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
5/77
Formao SQL Server 2008 MCTS e MCITP
Verso EnterpriseSuporta 50 Instncias no mesmo S.O.Demais VersesSuporta 16 Instncias no mesmo S.O.
-Tipos de Instncias:
Padro (Vnculo no nome da mquina e nica no servidor)
Nomeada (Realiza um vnculo com o nome da mquina mais um ID (nome) da instncia epodemos ter mltiplas at o limite da verso)EX:Servidor SRV030 1 - Instalao do SQL - PadroSRV030 2 - Instalao do SQL - NomeadaSRV030\PROD 3 - Instalao do SQL - NomeadaSRV030\HOMOLOG . . .
Componentes "Core":
1) Database Engine - Principal componente da plataforma. responsvel pela idia de Bando DeDados do produto. Alocam componentes como: Tabela, Triggers, Jobs, Logins, Replicao, ...
2) Analysis Services - Principal componente de Bi do SQL Server. responsvel por todo otratamento de informaes que alimenta o Bi.
3) Reporting Services - Componente do produto, responsvel pela criao e publicao de relatrioscorporativos. Forma, juntamente, com Excel e sharepoint, a capacidade final de publicao dedados do Bi.
Componentes "Compartilhados": SQL Server Management Studio, Books on-line, Client toolsSDK, etc.
Cenrio Tradicional:
1)SRV030 Database Engine e Reporting Services2)SRV030\BI Analysis Services e Reporting Services3)SRV030\HOMOLOG Database Engine
Bruce Vincius Pgina 7 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
6/77
Formao SQL Server 2008 MCTS e MCITP
Tipos de Autenticao: Windows A autenticao realizada com base nas contas/grupos criados localmente no
Windows ou de domnio; Centralizado; Autenticao nica. SQL Utilizada para legado; Base armazenada no SQL Server; Sem centralizao.
IMPORTANTE:O comando abaixo deve ser aplicado para executar a instalao com base em um arquivo .ini noSQL Server 2008 para passar a autenticao do usurio Administrador, pois seno ir apresentarerro durante a instalao se a pessoa apenas executar o .ini sozinho.D:\>setup.exe /CONFIGURATIONFILE=C:\SQL\SQL2008.ini/SQLSVCPASSWORD="123qwe." /ASSVCPASSWORD="123qwe." /RSSVCPASSWORD="123qwe."/AGTSVCPASSWORD="123qwe."
Local aonde armazenado o arquivo .INI com as configuraes da instalao do SQL Server 2008.
C:\Program Files\Microsoft SQL Server\100\Setup
Bootstrap\Log\20080101_212058\ConfigurationFile.ini
Aula de Banco de Dados SQL Server.Data: 09/0/2010
Gerenciamento
SQL Server 2000-Enterprisemanager (grfico) + Query Analyser / iSql; OSql (CMD).
SQL 2005/2008-Management Studio (Grfico) / SQLCMD (cmd)
Comandos via CMD
Para se conectar no SQL Mode via DOS, basta digitar no prprio Dos o comando: sqlcmd.1 - Select @@servername2 - Go (Esse comando utilizado para ver o nome do servidor)
1 - Select @@version2 - Go (Esse comando utilizado para ver a verso do SQL)
OBS: Acessar a console do SQL via cmd ou run = "ssms"
Bruce Vincius Pgina 8 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
7/77
Formao SQL Server 2008 MCTS e MCITP
Tipos de Bancos de Dados
-Sistema:1)Master- Principal Banco de sistema do SQL Server. responsvel primrio, por todos osbancos de dados na instncia. Aloca toda a "arquitetura" de objetos na instncia.
2)TempDB - Bando responsvel pelo processamento de elementos temporrios na instncia.Elementos como tabelas temporrias e order by, publicam informaes neste banco.
3)MODEL - Banco utilizado como "modelo" para novos bancos de dados. Deve ser utilizado como"template".
4)MSDB - Banco utilizado como repositrio de dados por diversos recursos. Ex: Jobs, ServiceBroker, Database mail, LOG Shipping,...
Arquitetura
SRV030 Possui um banco de dados chamado: Produo.Produo Possui duas extenses: MDF e LDF.MDF: Master Data File Ele armazena meta dados e dados os usurio.(S pode existir umarquivo .mdf)LDF: Log Data File importante no s para armazenar os logs, mas para fazer o restor dobanco tambmNDF: Secondary Data File Dados de usurios (Podem existir vrios arquivos .ndf)Esses arquivos so de configurao mnima e tradicional de um Banco de Dados.
Design de Bando de Dados
-Nveis / Regras de Desempenho:
1)Arquivos de dados em discos diferentes do Sistema Operacional;2) .mdf e .ldf alocados em discos diferentes.3)Vincular o arquivo de dados em um RAID._____| BD | ----------- .ldf HD1"""""" \
\
\--------- .mdf HD2, HD3, HD4 (RAID 0 - Melhor performance)
Bruce Vincius Pgina 9 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
8/77
Formao SQL Server 2008 MCTS e MCITP
Utilizao do NDF
Cenrio 1:/""" S.O. HD1
_____________ /( PROD ) .MDF (Apenas Meta dados) + .LDF HD2""""""""""""""" \
\__ .NDF HD3 e HD4 } HD's em RAID 0
Cenrio 2:/""" S.O. HD1
_____________ /( PROD ) .MDF (Apenas Meta dados) HD2""""""|""""""""" \
| \__ .LDF HD3||___________ .NDF (Vendas) HD4
FILEGROUP (Grupo de arquivos)
Tabela3: Vendas
Aula de SQL Server 2008Data:10/06/2010
-Armazenamento de Dados como Histrico
Conceito de armazenamento de informaes que no sofrem o escopo de alterao.Normalmente aplicada ao cenrio de "Movimentao Fiscal" e ou auditoria.
OBS: Grupo de Arquivo somente leitura: Faz com que a tabela fique como read only, garantindoque a tabela no ter os seus dados alterados.(Pertence a um grupo de arquivo e no diretamente aoobjeto.)
Bruce Vincius Pgina 10 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
9/77
Formao SQL Server 2008 MCTS e MCITP
-Acesso e Segurana no SQL Server
-Principals: Objetos que caracterizam acesso a dados no SQL.
Tipos:
Login Server Role User Database Role Schema
Layout
/"""APP____/_____________________________
/ Nvel de Instncia
|""""|| | Servidor|___|___\______________________________
\ ______ Nvel de Banco\__( Prod )
Login:
-Objeto de segurana em nvel de instncia, que fornece acesso camada de instncia do SQL.Pode ser feito de duas maneiras: Windows ou SQL
Windows : Senha criptografada, segura e de gerncia centralizada. SQL : No tem criptografia e o mercado aconselha a no utiliz-la, por ser fraca.
Aula de Banco de Dados SQL Server 2008.Data: 14/06/2010.
PRINCIPALS (Continuao)
Login - OK
Server Role User Database Role Schemas
Bruce Vincius Pgina 11 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
10/77
Formao SQL Server 2008 MCTS e MCITP
Logins
Manipulao de T-SQL:-Create login [serverx\Bianca] From windows
-Create login Sistema with password='123qwe.'-Create login [server\RH] From windows With Default_DataBase=empresa-Alter login Sistema disable\enable-Deny\Grant Connect SQL to Sistema-Drop login Sistema
createlogin[server14\Bianca]fromWindows/*Cria uma conta do tipo SQL associando a umusurio Windows*/createloginsistemawithpassword='123qwe.'/*Cria uma conta do tipo SQL com a senha"123qwe."*/createlogin[server14\RH]fromWindowswithdefault_database=empresa/*Cria uma contaassociando a um grupo ou usurio do Windows e com o banco de dados padro igual empresa*/
Alterloginsistemadisable/*Habilita ou desabilita uma conta do tipo SQL*/denyconnectSQLtosistema/*Nega acesso a uma conta do tipo SQL*/Droploginsistema/*Deleta uma conta de sistema do tipo SQL*/
Server Role
-Componente do SQL em nvel de instncia, que aloca um conjunto de grupos de permisses pr-definidas.-Utilizamos estes grupos, para a associao rpida de permisses logins.
OBS: No podem ser criados por DBA.
Explicita:So permisses atribudas, explicitamente, a conta e ser a permisso realmenteaplicada.Efetiva: So todas as permisses fornecidas globais pelos grupos do Server role no SQL.
OBS: Mapear quais permisses de cada grupo do Server role.
Manipulao de T-SQL:execsp_addsrvrolemember'Carla','sysadmin'/*Adiciona a permisso de sysadmin a conta Carla*/execsp_dropsrvrolemember'Carla','sysadmin'/*Retira a permisso de sysadmin a conta Carla*/
Possibilidade de Mapeamento
1)Tradicional: Logon_1 BD1 user1. (V)
2)Logon_1 e Logon_2 BD1 user1. (X)
3)Logon_1 BD1 user1 e user2. (X)
Bruce Vincius Pgina 12 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
11/77
Formao SQL Server 2008 MCTS e MCITP
4)Logon_1 BD1 user1 (V)| |____ BD2 user1|______ BD3 user1
-Orphaned User (Usurio rfo)_____________________________
_|_ |/___/| | | | _____ ( Active Directory )| = | |--( BD )-------------- |___|/ master | |
| |-Login SQL Ana (SID) |-Login Windows Domnio\Ana (SID)
|__ Security Identifier
OBS: Se um usurio excludo do banco de dados, ele perde todas as suas referncias de permissoe no vivel fazer uma migrao excluindo os usurios e recriando com o mesmo nome no novobanco de dados.
Quando o usurio de AD, seu SID fica registrado no AD e durante uma migrao debanco os usurios bastam ser referenciados, novamente, pois o SQL armazena o seu SID que estno AD e no trazendo impacto.
Quando o usurio SQL ele tambm cria um SID local no banco aonde se houver umamigrao o SID ficar armazenado no banco onde foi criado e o novo ir recriar um novo SID,gerando problemas de usurio rfo que um apontamento para um usurio com SID errado.Analogia: Duas pessoas podem ter o mesmo nome, mas no podem ter o mesmo CPF.Ex: BD1 (User1:IDEx0011)
BD2 (User1:IDEx0050)
Comando para identificar o usurio rfo em um banco especifico:Execsp_change_users_login@action='report'Comando para re-associar o novo usurio ao usurio antigo que seria o usurio rfo:Execsp_change_users_login@action='Update_one',@usernamepattern='u_carla_emp',@loginname='carla'
OBS: select*fromsys.server_principals Lista todos os usurios do banco.
-Usurio "Guest"
Usurio automaticamente criado em todo o banco de dados, que tem a capacidade deautenticar qualquer logon, que no tenha um usurio criado no banco.
aplicado em contextos bem especficos, devendo ser utilizado com bastante cuidado.Comando para habilitar a conta Guest:Grantconnecttoguest
Bruce Vincius Pgina 13 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
12/77
Formao SQL Server 2008 MCTS e MCITP
Aula de Banco de Dados SQL Server 2008.Data: 16/06/2010.
PRINCIPALS(Continuao)
Login - OK Server Role - OK User - OK Database Role Schemas
Database Role
-Objeto em nvel de banco, que agrupa um conjunto de permisses pr-definidas.
USER-DEFINED DATABASE ROLE
OBS: O alinhamento de grupo de bancos de dados apenas permitido para a associao user-defined (de um definido pelo o usurio) ao grupo de sistema.
- possvel adicionar o grupo RH em DB_DataReader ( V )-No possvel adicionar o grupo de sistema DB_DataReader em RH. ( X )
PERMISSES
Grant: Concede permisso a um objeto do SQL.Deny: Nega a permisso a um objeto do SQL.Revoke: Retira a permisso de um objeto do SQL.
Ana/ \/ \
/ \RH Gerentes
Tabela1: RH - select (Deny)
Bruce Vincius Pgina 14 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
13/77
Formao SQL Server 2008 MCTS e MCITP
'----->: Gerentes - select
Explicao: A Ana faz parte dos dois grupos: RH e gerentes e nesse exemplo o grupo RH perdeu odireito de select, caso o administrador do banco configure um Deny para retirar a permisso dogrupo RH e como a Ana faz parte do grupo de Gerentes tambm, o Deny sobrepe qualquer outrapermisso por ser prioritria no SQL e a Ana ir perder o direto de select, mesmo fazendo parte
tambm do grupo gerentes.
SCHEMAS- So objetos em nvel de banco que tem a capacidade de agrupar objetos do banco dedados, segmentando a atribuio de permisses e acesso a objetos.
__ __# No SQL 2000 | (PROD)
_____ | |
Ana |Criar| Ana.Pedidos | ' Ana.Pedidos | Ana.ProdutosTabela: Pedidos | Carlos.Estoque
| DBO.Relatrios| :| :
# No SQL 2005/2008 | (PROD)____ | |
Ana |Criar| Vendas.Pedidos | ' Vendas.Pedidos| | Vendas.Produtos
| Tabela: Pedidos | Ti.Logs| | Mkt.Clientes| | :'---> Esquema Padro: Vendas | :
Cenrio:
| 50 vendas100 Tabelas |
| 50 Homologao
20 Usurios (Venda)10 Usurios (Homologao)/ \
/ \/ \
Sem Schemas e BD Roles Com Schemas e BD Roles
1000 Permisses (Vendas) 1 Permisso (Vendas)500 Permisses (Homol.) 1 Permisses (Homol.)
Bruce Vincius Pgina 15 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
14/77
Formao SQL Server 2008 MCTS e MCITP
1500 2Ex: (Banco)
|'ti.tab1ti.tab2
ti.tab3dbo.tab4
Cenrio 2: { Anaupdate Gerentes { Carla------------
| || | |
(Prod) |-Rh.Tab1 |-Rh.Tab2 |
-Dp.Tab3 |___select___DP_________________|-Dp.Tab4 | || |____Pedro|||___Deny-Select-Carla
Aula de Banco de Dados SQL Server 2008.Data: 17/06/2010.
T-SQL:
Bruce Vincius Pgina 16 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
15/77
Formao SQL Server 2008 MCTS e MCITP
Bruce Vincius Pgina 17 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
16/77
Formao SQL Server 2008 MCTS e MCITP
1) createdatabaseEmpresa2) CreateloginJuliaWithpassword='123qwe.',Default_Database=empresa3) CreateloginLeticiaWithpassword='123qwe.', Default_DataBase=empresa4) createuseru_juliaforloginJulia5) createuseru_leticiaforloginLeticia6) createroleMktexecsp_addrolemember'mkt','u_julia'7) createroleMkt8) execsp_addrolemember'mkt','u_leticia'9) execsp_addrolemember'mkt','u_leticia'
10) createschemasch_mktauthorizationdbo11) createtablesch_mkt.clientes (Col1int,Col2int)12) grantselectonsch_mkt.clientestoMkt13) denyselectonsch_mkt.clientes (Col2)tou_julia14) droptablesch_mkt.clientes15) execsp_droprolemember'mkt','u_julia'16) execsp_droprolemember'mkt','u_leticia'17) droproleMkt18) dropschemasch_mkt19)dropuseru_julia20)dropuseru_leticia21)droploginJulia
22)droploginLeticia23)dropdatabaseEmpresa
Aula de Banco de Dados SQL Server 2008.Data: 21/06/2010.
TIPOS DE DADOS SQL SERVER 2008
Bruce Vincius Pgina 18 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
17/77
Formao SQL Server 2008 MCTS e MCITP
1)Inteiro Bit Aceita s 0 e 1(boolean) Bigint 8 Bytes Int 4 Bytes Smallint 2 Bytes
Tinyint 1 Bytes vai at 255 caracteres
2)Dinheiro: limitada a alocao de operaes e clculos e trunca os dgitos decimais. Ex:xxx,0000. R$12,4900 Money Mais de 272 mil, como casa decimal Smallmoney Aproximadamente at 272 mil, como casa decimal
3)Decimal: (P.S) = (P: precision; S: scala). Ex: (5,2) = 000,00 Decimal Padro Microsoft Numeric Padro Ansi
4)Nmeros Aproximados Float Real
5)Dados Espaciais* Geometry (Dados Planares) Geography (Elipsoidais: Latitude e longitude)
6)Data DateTime Possui a capacidade de armazenar uma data superior a 2079 SmallDateTime Limite de ano que vai at 2079 Date* Armazena s a data. Time* Armazena s a hora. DateTime2* Evoluo do DateTime que no tinha como armazenar o ano um por ex
0001 e agora ele pode e vai de 0001 - 9999. DateTimeOffset* Armazena data, hora e fuso horrio. Ex: 10:30 +3
7)Caracter Char(n) (n vai at 8000) e ele trunca o valor definido em n. Ex: char(5) e foi
armazenado RJ com isso ele vai armazenar RJXXX, ou seja, 5byte e sendo mais rpido. VarChar(n) Faz uma validao no contedo e sempre aperfeioa o armazenamento
guardando s o necessrio. EX: VarChar(5) e foi armazenado RJ com isso ele ir armazenars RJ e no ir adicionar o XXX para completar a varivel.
VarChar(Max) Suporta at 2GB de armazenamento por linha. Text Suporta at 2GB de armazenamento por linha, deve ser evitado por ser muito antigo
e limitado e a Microsoft no o recomenda. NChar(n) | NVarChar(n) | N = D suporte ao padro UNICODE. NVarChar(Max) | NText |
Bruce Vincius Pgina 19 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
18/77
Formao SQL Server 2008 MCTS e MCITP
8)Binary Binary(n) VarBinary(n) VarBinary(Max) Image
9)Outros Tipos Cursor HierarchyID TimeStamp / RowVersion UniqueIdentifier SQL_Variant Table Xml
*So novos no SQL 2008T-SQL = SQL Server (Transact SQL)
PL/SQL = Oracle
OBS: ANSI ocupa 1byte para cada caractere.UNICODE ocupa 2byte para cada caractere.
select*fromsys.messageswhere/*message_id = 1460*/text=N'O banco de dados "%1!" j est configurado para espelhamento de banco de dados noservidor remoto. Descarte o espelhamento de banco de dados no servidor remoto para estabelecerum novo parceiro.'
SelectNEWID()selectgetdate()
execsp_helpFuncionarios/*Traz informaes sobre a tabela funcionrios e poderia ser qualqueruma no banco*/
OBS: Especificao computada Persistido como sim guarda o resultado da frmula no banco e opersistido como no guarda a referncia da frmula no banco.Ex: Sim = R$1400-100 = 1300 que ser armazenado no banco.
No = R$1400-100 que ser armazenado no banco.
Criando tabela via cdigo T-SQL
createtableVendas(id_vendaint identity (1, 1),produtovarchar(100)notnull,quantidadetinyintnotnull,segmentovarchar(50)default('informtica'),
Bruce Vincius Pgina 20 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
19/77
Formao SQL Server 2008 MCTS e MCITP
valormoneynotnull,desconto_produtointnotnull,valor_vendaas ((valor-(valor*desconto_produto/100))*quantidade))
Aula de Banco de Dados SQL Server 2008.Data: 22/06/2010.
Criando Tabela via cdigo T-SQL
CreatetableProdutos(IDPRODintidentity (1, 1),Nomevarchar(50)notnull,Descricaovarchar(4000)notnull,Fabricacaodatenotnull,
valor_unitariodecimal(7,2)notnull,)
insertintoProdutos(Nome,Descricao,Fabricacao,valor_unitario)values ('Bruce','Homem','30/09/2010', 1000)
OBS: Insert into comando responsvel pela insero de dados na tabela no banco de dados.
Para inserir dados em mais uma linha ao mesmo tempo basta executar o comando abaixo:
insertintoProdutos(Nome,Descricao,Fabricacao,valor_unitario)values ('Anderson','Homem','18/06/2010', 1000),
('Fernando','Homem','21/12/2010',40000),('Baars','Homem','15/06/2010',35000)
1)Alter Table
AltertableProdutosaddSegmentoVarchar(50) AltertableProdutosaltercolumnDescricaovarchar(6000) AltertableProdutosdropcolumnFabricacao
2)Update
updateProdutossetvalor_unitario=4.60WhereIDPROD= 2updateProdutossetDescricao='Produto Importado'
3)Delete
deleteFromProdutosWhere
Bruce Vincius Pgina 21 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
20/77
Formao SQL Server 2008 MCTS e MCITP
IDPROD= 4DeleteFromProdutos
4)Truncate
TruncateTableProdutos
OBS: Delete TruncateDelete: Modifica a propriedade identityTruncate: Reinicia os identificadores do identity
Tabelas Temporrias
Objeto do SQL Server, que cria tabela automaticamente descartvel, na finalizao dasesso que a criou.
O armazenamento dessa tabela diretamente vinculado TEMPDB. tipos:1)Local - Acesso exclusivo para a sesso que a criou.- Automaticamente excluda na finalizao da mesma.
Ex: Createtable#tab1 (colint)
2)Global - Permite o acesso de mltiplas sesses.- Exclui o objeto na finalizao da sesso, terminando o procedimento "atual" dos usurios.Ex: Createtable##tabG1 (colint)
OBS:A diferena na criao da tabela temporria local e global a quantidade de #!As tabelas temporrias so presas as sesses e quando o usurio re-conecta ao banco, mesmo sendocom o mesmo usurio ele cria uma nova sesso e portanto excluindo a tabela temporria.
Conceitos e Normalizao
Normalizao: Conjunto de regras vinculadas modelagem, que busca eliminar aduplicidade e a falta de referncia relacional em entidades do banco de dados.
Nomenclatura:Relao TabelaTupla LinhaAtributo Campo / ColunaDomnio Tipo de dados
O contexto da normalizao, normalmente aplicado atravs das Formas Normais(FN)
# Cenrio: Tabela no normalizada.
Tbl: Produtos Cod_prod Nome Desc Fabricacao Fornecedor Razao social
Bruce Vincius Pgina 22 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
21/77
Formao SQL Server 2008 MCTS e MCITP
CNPJ Endereco
FN1
Tbl: Produtos Cod_prod PK Nome Desc Fabricacao Cod_Fornecedor FK
Tbl: Produtos Cod_Forn PK Fornecedor Razao social
CNPJ Endereco
# Cenrio_2: Tabela no normalizada.
Tbl: Clientes Cod PK Nome End. Nasc. Tel1 Tel2 Tel3
FN1
Tbl: Clientes Cod PK Nome End. Nasc.
Tbl: Tel.
Cod PK Tel. Cod_cli FK
Alocao do Bando de Dados
1)Backup / Restore2)Migrao3)Detach / Attach
Bruce Vincius Pgina 23 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
22/77
Formao SQL Server 2008 MCTS e MCITP
Aula de Banco de Dados SQL Server 2008.Data: 23/06/2010.
Alocao do Bando de Dados
1) Backup / Restore2) Migrao3) Detach / Attach
Endereos no Adventure works:
TBL: person.address addressid Pk stateprovinceid Fk
TBL: person.stateprovince stateprovinceid Pk territoryid Fk
TBL: sales.salesterritory territoryid Pk
CreatetableClientes(
Bruce Vincius Pgina 24 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
23/77
Formao SQL Server 2008 MCTS e MCITP
Codclienteintidentity (1,1)primarykey,Nomevarchar(50),Idadetinyint,Profissaovarchar(50),Casadobit)
CreatetableTelefones(Codtelefoneintidentity(1,1)primarykey,Codclienteintnotnullforeignkey(Codcliente)referencesClientes(Codcliente),Telefonechar(10)notnull)
RelacionamentoClientes(Codclientes, Nome, Idade, Profissao, Casado)Telefones(Codtelefone, Codcliente, Telefone)
AltertableTelefonesaddconstraintFk_tel_cliForeignkey(Codcliente)Referencesdbo.clientes(Codcliente)
OBS: Serve para alterar o nome da chave primria para um nome no padro que o sistema geraautomaticamente.
Uso do SELECT
selectCityasCidade,AddressIDasEndereo,AddressLine1as"Linha de Endereo"from
Person.AddresswhereCity 50 orColor='black'
Comando Between: Traz informaes contida entre um valor a outro.select*fromProduction.ProductwhereListPricebetween 50 and 100
Comando Not Between: Traz informaes contida fora de um valor a outro.select*fromProduction.ProductwhereSellEndDatenotbetween'01/07/2002'and'31/12/2008'
Comando que traz as informaes como nulo ou no nulo.select*fromProduction.ProductwhereColorisnull
select*fromProduction.Product
Bruce Vincius Pgina 25 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
24/77
Formao SQL Server 2008 MCTS e MCITP
whereColorisnotnull
select*fromProduction.ProductwhereNamelike'%c%'orNamelike'%a'orNamelike'%d%'
select*fromProduction.Product
whereNamenotlike'%_ea_%'
Comando para trazer todos os nomes comeando com A at Fselect*fromProduction.ProductwhereNamelike'[a-f]%'
'Ir trazer todas as palavras que comecem com F, mas a 2 no pode ser L, o simbolo ^significanegao.select*fromProduction.ProductwhereNamelike'f[^l]%'
selectproductid,name,color,listpricefromProduction.ProductorderbyListPricedesc
selectproductid/*1*/,name/*2*/,color/*3*/,listprice/*4*/asPreofromProduction.Productorderby2desc
Aula de Banco de Dados SQL Server 2008.Data: 29/06/2010.
Uso do SELECT
selectCityasCidade,AddressIDasEndereo,AddressLine1as"Linha de Endereo"fromPerson.AddresswhereCity 50 orColor='black'
Comando Between: Traz informaes contida entre um valor a outro.
select*fromProduction.ProductwhereListPricebetween 50 and 100
Comando Not Between: Traz informaes contida fora de um valor a outro.select*fromProduction.ProductwhereSellEndDatenotbetween'01/07/2002'and'31/12/2008'
Comando que traz as informaes como nulo ou no nulo.select*fromProduction.Product
Bruce Vincius Pgina 26 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
25/77
Formao SQL Server 2008 MCTS e MCITP
whereColorisnull
select*fromProduction.ProductwhereColorisnotnull
select*fromProduction.Product
whereNamelike'%c%'orNamelike'%a'orNamelike'%d%'
select*fromProduction.ProductwhereNamenotlike'%_ea_%'
Comando para trazer todos os nomes comeando com A at Fselect*fromProduction.ProductwhereNamelike'[a-f]%'
'Ir trazer todas as palavras que comecem com F, mas a 2 no pode ser L, o simbolo ^significanegao.select*fromProduction.Product
whereNamelike'f[^l]%'
selectproductid,name,color,listpricefromProduction.ProductorderbyListPricedesc
selectproductid/*1*/,name/*2*/,color/*3*/,listprice/*4*/asPreofromProduction.Productorderby2desc
Uso do SELECT(Cont.)
Distinct:selectdistinctcityfromPerson.Address
-Funes Agregadas:
Max: selectmax(listprice)as'Preo Mximo'fromProduction.Product Min: selectmin(listprice)as'Valor mnimo'fromProduction.Product AVG: selectavg(listprice)as'Mdia de preo'fromProduction.Product Sum: selectsum(listprice)as'Soma de todos os Preos'fromProduction.Product Count: selectCOUNT(*)as'Contador de linhas na tabela'fromPerson.Address Count Distinct: selectCOUNT(distinctcity)as'Total de linhas com cidades diferentes'
fromPerson.Address
Top:-selecttop(10)*fromPerson.Address/*Traz os 10 registros da consulta e alm de evitarstress de disco no banco*/
-selecttop(10)*fromPerson.Address/*Traz os 10 registros no stressando o banco*/orderbyaddressiddesc
OBS: Listprice uma coluna na tabela Production.Product
Bruce Vincius Pgina 27 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
26/77
Formao SQL Server 2008 MCTS e MCITP
Nenhuma funo agregada conta valorNULL Em uma consulta o where executado primeiro e depois que o max executado.
2) selectmax(listprice)as'Mdia de preo'fromProduction.Productwhere
1) Color='black'
-Group by uma estruta que agrupa a exibio de um conjunto de registro.
EX: Nesse exemplo ele agrupa a quantidade de endereos por cidadeRio de janeiro pode ter 30 endereos cadastrados na tabela Person.address e o resultado seria oseguinte:
City: Rio de janeiroQTDE de Endereos por cidade: 30
selectcity,COUNT(addressline1)as'QTDE de Endereos por cidade'fromPerson.Address
groupbyCityorderby 2
-IsNullTrata as informaes com o resultado Null, acrescentando qualquer outra informao
desejada. Nesse exemplo seria 'Sem Cor'selectProductid,name,listprice,isnull(color,'Sem Cor')fromProduction.ProductwhereListPrice> 20
-HavingO having um select, sendo que ele executado aps a funo de agregamento, caso a
pessoa utilize o where ele ser executado antes e no aps.
EX: select ISNULL(color,'Sem Cor')asCores,COUNT(ProductID)as'Qtde. de Cores'fromProduction.ProductgroupbycolorhavingCOUNT(ProductID)> 20orderby 2
-Joins(Junes)Estrutura do SQL, que possibilita a exibio de um conjunto de valores, que possuam uma
referncia relacional.Tipos: Inner Join Left Outer Join Right Outer Join Full Outer Join Cross JoinOBS: Tudo que est sublinhando acima padro da linguagem SQL e no padro microsoft pode seromitido que no ir afetar a consulta.
Bruce Vincius Pgina 28 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
27/77
Formao SQL Server 2008 MCTS e MCITP
-Inner JoinSintaxe Geral:
SelectColuna1,Coluna2,...FromTabelacomFkINNERJOINTabelacomPkOnTabelacomFk.ColunaFk=TabelacomPk.ColunaPkWhere...
Groupby...Orderby...
Exerccios1) Quantidade de produtos que no so da cor preta e tem o valor nitrio maior do que $50.R:selectcount(*)as'Total de Produtos'fromProduction.ProductwhereColor!= 'black'and(ListPrice>50)
2) Trazer todas as cores e as suas quantidades e tratar os campos nulos com a seguinte informao:Sem cor.
R:select ISNULL(color,'Sem Cor')asCores,COUNT(ProductID)as'Qtde. de Cores'fromProduction.Productgroupbycolororderby 2
3) Exibir o produto mais caro para cada cor cadastrada, desde que esse produto tenha a seu valorunitrio maior do que $50.R:selectISNULL(color,'Sem Cor'),MAX(listprice)asQtde_colorfromProduction.ProductgroupbyColorhavingMAX(listprice)> 50
4) Exibir toda a lista de endereos, cidades, estados e o cdigo dos estados.R:selectaddressline1asEndereo,cityasCidade,NameasEstado,StateProvinceCodeasUFfromPerson.AddressasPAinnerjoinPerson.StateProvinceasPSOnPA.StateProvinceID=PS.StateProvinceID
5) Faa um relatrio que exiba a quantidade de endereos cadastrados para cada estado, desde que aquantidade de endereos seja superior a 50 e excluindo o estado de Washington. Esse relatrio deveser ordenado do estado que possue a maior quantidade de endereos para o menor.R:selectNameasEstado,COUNT(AddressLine1)asQtde
fromPerson.AddressasPAinnerjoinPerson.StateProvinceasPSOnPA.StateProvinceID=PS.StateProvinceIDwhereName!='Washington'groupbyNamehavingCOUNT(AddressLine1)> 50orderbyQtdedesc
Bruce Vincius Pgina 29 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
28/77
Formao SQL Server 2008 MCTS e MCITP
6) Faa um relatrio que exiba a quantidade de endereos cadastrados para cada cidade pertencentea cada estado, desde que a quantidade de endereos seja superior a 50 e excluindo o estado deWashington. Esse relatrio deve ser ordenado por estado e por suas cidades, sendo que a cidadedeve estar ordanada em ordem decrescente.R:selectNameasEstado,CityasCidade,COUNT(AddressLine1)asQtde
fromPerson.AddressasPAinnerjoinPerson.StateProvinceasPSOnPA.StateProvinceID=PS.StateProvinceIDwhereName!='Washington'groupbyName,CityhavingCOUNT(AddressLine1)> 50orderbyEstado,Cidadedesc
7)ltimo exemplo do Danillo.
selectaddressline1asEndereo,cityasCidade,PS.NameasEstado,StateProvinceCodeasUF,ST.NameasPais
fromPerson.AddressasPAinnerjoinPerson.StateProvinceasPSOnPA.StateProvinceID=PS.StateProvinceIDinnerjoinSales.SalesTerritoryasSTOnPS.TerritoryID=ST.TerritoryIDorderbyEstado
A consulta abaixo foi realizada pela Thaisselectpa.AddressLine1as'Endereo',pa.Cityas'Cidade',psp.Nameas'Estado',psp.StateProvinceCodeas'UF',st.Nameas'Pas'fromPerson.AddressPAinnerjoinPerson.StateProvincePSPOnPA.StateProvinceID=PSP.StateProvinceIDinnerjoinSales.SalesTerritoryST
onPSP.TerritoryID=ST.TerritoryID
Aula de Banco de Dados SQL Server 2008.Data: 30/06/2010.
-Joins(Junes) ContinuaoEstrutura do SQL, que possibilita a exibio de um conjunto de valores, que possuam uma
referncia relacional.Tipos:
Inner Join Left Outer Join Right Outer Join Full Outer Join Cross JoinOBS: Tudo que est sublinhando acima padro da linguagem SQL e no padro microsoft pode seromitido que no ir afetar a consulta.
Bruce Vincius Pgina 30 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
29/77
Formao SQL Server 2008 MCTS e MCITP
Exercicio utilizando o banco Empresas junto com o join do Danillo.1) Faa uma consulta que retorne o IDPROD, nome do produto, fab_propria e o nome dofornecedor, fazendo as suas devidas referncias relacionais.R:
SelectidprodasCdigo,P.Nomeas'Nome do Produto',fab_propriaas'Frabricao Prpria',F.Nomeas'Nome do Fornecedor'FromFornecedoresAsFinnerjoinProdutosAsPOnF.IDForn=P.IDForn
2) Abaixo tem uns exemplos da mesma consulta acima, mas utilizando o LEFT, RIGHT, FULOUTER JOIN e o CROSS JOIN.
-Left Outer JoinSelectidprodasCdigo,P.Nomeas'Nome do Produto',fab_propriaas'Frabricao Prpria',F.Nomeas'Nome do Fornecedor',Segmento
FromFornecedoresAsFleftouterjoinProdutosAsPOnF.IDForn=P.IDForn
-Right Outer JoinSelectidprodasCdigo,P.Nomeas'Nome do Produto',fab_propriaas'Frabricao Prpria',F.Nomeas'Nome do Fornecedor',SegmentoFromFornecedoresAsFrightouterjoinProdutosAsPOnF.IDForn=P.IDForn
-Full Outer JoinSelectidprodasCdigo,P.Nomeas'Nome do Produto',
fab_propriaas'Frabricao Prpria',F.Nomeas'Nome do Fornecedor',SegmentoFromFornecedoresAsFfullouterjoinProdutosAsPOnF.IDForn=P.IDForn
-Cross Join: Executa um produto cartesiano entre as tabelas relacionadas na consulta SQL.SelectidprodasCdigo,P.Nomeas'Nome do Produto',fab_propriaas'Frabricao Prpria',F.Nomeas'Nome do Fornecedor',SegmentoFromFornecedoresAsFcrossjoinProdutosAsP
-Estruturas no recomendadas:INNER JOINSelect*fromProdutosasP,FornecedoresasFwhereP.idforn=F.idforn
LEFT OUTER JOINSelect*fromProdutosasP,FornecedoresasFwhere
Bruce Vincius Pgina 31 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
30/77
Formao SQL Server 2008 MCTS e MCITP
P.idforn*=F.idforn
RIGHT OUTER JOINSelect*fromProdutosasP,FornecedoresasFwhereP.idforn=*F.idforn
CROSS JOINSelect*fromProdutosasP,FornecedoresasF
-Comando Merge(Vai cair na prova por ser um comando novo)Estrutura nova no Transact-SQL, que era "Cobrada" por diversos DBA's.Faz a mesclagem de contedos em tabelas do bando de dados. Ideal para reestruturao de
cenrios, eliminando a necessidade de utilizao de funes e comandos.Est disponvel em todas as verses do produto.
Layout:___________
|------------------------------------------------------ | Tlb Destino |----------------------------------------------|| Validao 1 || 3 ___________ | 3| | Tlb Origem | || / \ || / 2 \ || / \ |(Insert, Delete, Update...) Matched Not Matched (Insert, Delete, Update...)
Exercicios:1)Unir as tabelas EmailsFilial RJ e EmailsFilial SP na tabela de e-mails globais que nesse exemplo EmailsCorporacao, utilizando o comando merge.
Bruce Vincius Pgina 32 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
31/77
Formao SQL Server 2008 MCTS e MCITP
1) O comando abaixo ir validar se existe algum contedo de e-mail na tabelaEmailsCorporacaoque exista na tabela EmailsFilialA como no existe o comando ir fazer um insert para fazer a cpiados dados entre as tabelas.R:MergeEmailsCorporacaoasECUsingEmailsFilialAasEFA
OnEFA.IdFunc=EC.IdFuncWhenNotMatchedThenInsertValues(EFA.IdFunc,EFA.Email,'-');
2) O comando abaixo ir validar se existe algum contedo de e-mail na tabelaEmailsCorporacaoque exista na tabela EmailsFilialB como no existe o comando ir fazer um insert para fazer a cpiados dados entre as tabelas alm de validar usurios que possam ter e-mails nas duas filiais, nessecaso ele ir fazer um update no campo de e-mail que ainda no contm a informao.R:MergeEmailsCorporacaoasECUsingEmailsFilialBasEFBOnEFB.IdFunc=EC.IdFunc
WhenNotMatchedThenInsertValues(EFB.IdFunc,'Sem E-mail Da Filial A',EFB.Email)WhenMatchedThenupdatesetEC.EmailFilialB=EFB.Email;
-Views (Exibies):Objeto do SQL, capaz de armazenar a definio de uma consulta.Este objeto no ocupa espao em disco, uma vez que no armazena a massa de dados
retornada, e sim a sua definio(A no ser que sejam Views Indexadas).Benefcios: 1) Abstrao de cdigo na aplicao 2) Aplicao de permisses 3) Melhoria na camada de segurana
-Layout da Arquitetura (SQL2005/2008)imagem Views_30-06-2010.jpg
Bruce Vincius Pgina 33 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
32/77
Formao SQL Server 2008 MCTS e MCITP
Aula de Banco de Dados SQL Server 2008.Data: 01/07/2010.
-Views (Exibies): Continuao
Exercicios:1) Faa uma consulta que retorne a quantidade de vendas para cada ms de cada ano, ordenados demaneira decrescente pelo ano e crescente pelo ms, que ainda no retorne grupos cujo o total, sejainferior a 50.R:
selectDATEPART(YYYY,OrderDate)asano,DATEPART(MM,OrderDate)asMs,Count(*)asQtdefromSales.SalesOrderHeadergroupbyDATEPART(YYYY,OrderDate),DATEPART(MM,OrderDate)
Havingcount(*)> 50orderbyanodesc,Ms
-Sintaxe para criar uma View:Createviewrel_totalvendasas'Consulta desejada(select * from....)'
OBS: A criao de View no aceita o comandoorderbyEX:Createviewrel_totalvendas
asselectDATEPART(YYYY,OrderDate)asano,DATEPART(MM,OrderDate)asMs,Count(*)asQtdefromSales.SalesOrderHeadergroupbyDATEPART(YYYY,OrderDate),DATEPART(MM,OrderDate)Havingcount(*)> 50
OBS: Para visualizar uma View, basta executar o seguinte comando:select*fromrel_totalvendas
-Como visualizar a definio da uma View:
1) Acessando o Design de uma view seria a primeira forma de acessar o contedo da view. 2) Pode ser visualizada atrves de um SCRIPT. 3) Execsp_helptext Nome da View(Ex:rel_totalvendas) 4) Sys.syscomments
OBS: Utilizao do Sys.syscomments
select*fromSys.objects Mostra o nome de todos os objetos criados na basa de dados do SQL.
Bruce Vincius Pgina 34 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
33/77
Formao SQL Server 2008 MCTS e MCITP
select*fromSys.syscomments Mostra o ID de todos os objetos criados na basa de dados doSQL.
SelectOBJECT_ID('rel_totalvendas') Traz as informaes do objeto: 'rel_totalvendas'
select*fromsys.syscomments
whereid=OBJECT_ID('rel_totalvendas')
-Adicionar Criptogrfia na View:Createviewrel_totalvendasWith EncryptionasselectDATEPART(YYYY,OrderDate)asano,DATEPART(MM,OrderDate)asMs,Count(*)asQtdefromSales.SalesOrderHeadergroupbyDATEPART(YYYY,OrderDate),DATEPART(MM,OrderDate)Havingcount(*)> 50
OBS: A criptogrfia adicionada para todos os usurios do SQL, portanto se o Adm do bancoquiser ver o contedo da consulta ou da view no ir conseguir.
Existe um software capaz de quebrar essa criptogrfia que o DMT SQL Decryptor, mas s possvel executar quem sysadmin do banco.
-Fazendo consulta em bancos diferentes:
select*fromAdventureWorks.Person.Address
-Criando uma nova tabela com os dados de uma consulta em outra tabela:
SelectAddressID,AddressLine1,AddressLine2,CityintoEmpresa.dbo.LogradrouroFromPerson.AddressOBS: necessrio fazer a referncia do banco aonde ser criada a tabela:Empresa.dbo.Logradrouro
-SCHEMABINDINGFaz a associao da view ao esquema da tabela criando assim uma relao de dependncias.
-Limitaes 1) No suporta o '*' 2) Obrigatoriamente precisa do schema do objeto. Ex: dbo.Logradouro 3) No suporta o mapeamento de banco. Ex: Empresa.dbo.Logradouro
OBS: O comandoAlterutilizado abaixo apenas para alterar uma viso existente.
1)AlterviewTesteWithschemabindingasSelect*Fromdbo.Logradrouro
Bruce Vincius Pgina 35 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
34/77
Formao SQL Server 2008 MCTS e MCITP
2)AlterviewTesteWithschemabindingasSelectaddressid,addressline1,addressline2,cityFromdbo.Logradrouro
3)AlterviewTesteWithschemabindingasSelectaddressid,addressline1,addressline2,cityFromempresa.dbo.Logradrouro
-Possibilidade de alterar dados pela View:
A View s permite o usurio alterar os dados que ela retornar em sua consulta, caso eletente alterar alguma informao que a consuta no mostre, ir dar erro na alterao ou atualizao.Sintaxe de atualizao atrves de View:
updatetestesetaddressline2='uruguaiana'whereaddressid= 635
-Check Option:Bloqueia a atualizao de registros, evitando com que os mesmos sejam retirados do retorno
da view.Sintaxe:alterviewTesteasSelectaddressid,addressline1,addressline2,cityFromempresa.dbo.Logradrourowhere
city='London'withcheckoption
-Particionamento de Tabelas:Recurso vinculado ao produto no SQL2005, que possibilita o particionamento de tabelas
crticas do banco de dados.Basicamente, utilizamos o particionamento, em tabelas muito pesadas, ou que sofrem um
impacto severo da produo.As partes podem ser alocadas em discos diferentes, direcionando o I/O por blocos da tabela. um recurso totalmente transparente para o usurio.Est disponvel apenas na verso Enterprise.
Tipos de particionamento: 1) Hardware (Aplicar RAID) 2) Vertical (SQL no suporta, pois feito na modelagem do banco - Normalizao) 3) Horizontal (Separa a tabela por blocos de linhas)
Aula de Banco de Dados SQL Server 2008.Data: 05/07/2010.
Bruce Vincius Pgina 36 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
35/77
Formao SQL Server 2008 MCTS e MCITP
-Particionamento de tabela (Cont.)Objetos: 1) Partition Function (Vinculo lgico do particionamento) 2) Partition Scheme (Vinculo Fsico(Armazenamento))
Partition Function2 Argumentos: Tipo de ponto Left / Right Pontos da EstruturaOBS: Colunas: Inteiro ou data.
OBS: # igual ao nmero de parties. Como o 1 ponto no conta e o ltimo tende sempre ao infinito por no ter como definir
Qtde.Parties = Qtde de pontos+1Qtde.Pontos = Qtde. de parties-1
Escopo:--== Left ==--
1: 1------------------------500.0002: 500.001--------------1000.0003: 1.000.001-----------1.500.0004: 1.500.001-----------Infinito
--== Right ==--
1: 1------------------------499.9992: 500.000--------------999.9993: 1.000.000-----------1.499.9994: 1.500.000-----------Infinito
Exerccios:1) Criar uma tabela particionada utilizando o tipo de ponto right e a mesma dever ser particionadaa cada 6 meses e o seu primeiro registro foi adicionado em 20/04/2007.
Registros: 20/04/2007 at a presente data.
Bruce Vincius Pgina 37 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
36/77
Formao SQL Server 2008 MCTS e MCITP
Necessidade: Dividir a cada 6 meses.
Pontos: (Right) - 01/01/08; 01/07/08; 01/01/09; 01/07/09; 01/01/10; 01/07/10
Escopo:
1: 20/04/07 ---- 31/12/07 2: 01/01/08 ---- 30/06/08 3: 01/07/08 ---- 31/12/08 4: 01/01/09 ---- 30/06/09 5: 01/07/09 ---- 31/12/09 6: 01/01/10 ---- 30/06/10 7: 01/07/10 ---- Infinito
-Cenrio 1
Tbl: Candidatos(33 Reg)
-Right / Ponto: 15-Escopo: 1: 1 -------- 4 2: 15 ------ InfinitoOBS: Toda tabela sempre est vincula a uma partio.
select*fromsys.partitions Retorna todas as parties existentes no banco.
A consulta abaixo importante, pois mostra a quantidade de linhas contida na coluna Rows databela dbo.candidatos e isso ser necessrio para avaliar o seu modo de particionamento.select*fromsys.partitionswhereOBJECT_ID=OBJECT_ID('candidatos')
A funo abaixo(Fx_int) generica ir particionar qualquer tabela a partir do ponto 15, criando duasparties.CreatePartitionFunctionFx_int(int)AsRangeRightForValues(15)
As consultas abaixo traz informao da funo criada.Select*fromsys.partition_functionsSelect*fromsys.partition_range_values
Esse comando ir chamar a funo Fx_int que ir particionar a tabela apontando para os files groupsFG1 e FG2.CreatePartitionSchemeEsquema_intAsPartitionFx_intTo (FG1,FG2)Em seguida execute o comando abaixo para ver o resultado das parties:select*fromsys.partitionswhereOBJECT_ID=OBJECT_ID('candidatos')
Bruce Vincius Pgina 38 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
37/77
Formao SQL Server 2008 MCTS e MCITP
Cria uma tabela relacionando com o Scheme Esquema_int, ou seja, a mesma est recebendo asconfiguraes de parties criado em esquema_int.CreatetableTbl_exemplo(col1int,col2varchar(50))Onesquema_int(col1)
A consulta abaixo ir otimizar o select, pois estar forando a consulta a buscar informaes apenasna segunda partio criada, evitando a varredura da partio um desnecessariamente.select*fromcandidatoswhere$partition.fx_int(ID)=2
-Cenrio 2
Tbl: Sales_bigVendas 08/1991 02/1996-Right / Ponto: Anual-Escopo: 1: 01/01/1991 ------------------- 31/12/1991 2: 01/01/1992 ------------------- 31/12/1992 3: 01/01/1993 ------------------- 31/12/1993 4: 01/01/1994 ------------------- 31/12/1994 5: 01/01/1995 ------------------- 31/12/1995 6: 01/01/1996 ------------------- Infinito
Aula de Banco de Dados SQL Server 2008.Data: 06/07/2010.
-Particionamento de tabela (Cont.)Objetos: 1) Partition Function (Vinculo lgico do particionamento) 2) Partition Scheme (Vinculo Fsico(Armazenamento))
-Cenrio 2
Tbl: Sales_bigVendas 08/1991 02/1996-Right / Ponto: Anual-Escopo:
1: 01/01/1991 ------------------- 31/12/1991 2: 01/01/1992 ------------------- 31/12/1992 3: 01/01/1993 ------------------- 31/12/1993 4: 01/01/1994 ------------------- 31/12/1994 5: 01/01/1995 ------------------- 31/12/1995 6: 01/01/1996 ------------------- Infinito
1) Visualizar a Tbl:Sales_big
Bruce Vincius Pgina 39 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
38/77
Formao SQL Server 2008 MCTS e MCITP
2) Criar a Partition Function para os 5 pontos
CreatePartitionFunctionFx_date(datetime)AsRangeRightForvalues('01/01/1992','01/01/1993','01/01/1994','01/01/1995','01/01/1996')
3) Criar a estrutura:Sales_P1 --------- Fg_Sales1 ---------------- HD1Sales_P2 --------- Fg_Sales2 ---------------- HD2Sales_P3 --------- Fg_Sales3 ---------------- HD3Sales_P4 --------- Fg_Sales4 ---------------- HD4Sales_P5 --------- Fg_Sales5 ---------------- HD5Sales_P6 --------- Fg_Sales6 ---------------- HD6
4) Criar o Partition Scheme
CreatePartitionSchemeEsquema_dateAsPartitionFx_date
To (Fg_Sales1,Fg_Sales2,Fg_Sales3,Fg_Sales4,Fg_Sales5,Fg_Sales6)
5) Criar uma view chamada Part_SalesBig que contenha o "select bacana" direcionando para aTbl:Sales_Big_part
CreateviewPart_SalesBigasselectps.nameasPartition_Scheme,p.partition_Number, ds.nameasFilegroup, isnull(v.value,'')asRange_Boundary, rowsfromsys.indexesi
joinsys.partition_schemespsoni.data_space_id=ps.data_space_idjoinsys.destination_data_spacesdds onps.data_space_id=dds.partition_scheme_idjoinsys.data_spacesds
ondds.data_space_id=ds.data_space_idjoinsys.partitionsp
ondds.destination_id=p.partition_numberandp.object_id=i.object_idandp.index_id=i.index_id
joinsys.partition_functionspfonps.function_id=pf.function_id
LEFTJOINsys.Partition_Range_Valuesvonpf.function_id=v.function_idandv.boundary_id=p.partition_number-pf.boundary_value_on_right
wherei.object_id=object_id('Sales_Big_Part')
OBS: Quando o "ssms" tenta executar algo complexo que ultrapasse 30s de processamento, o SQLretorna um erro de timeout. Nesse caso o processo a ser executado deve ser repensado e no deve
Bruce Vincius Pgina 40 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
39/77
Formao SQL Server 2008 MCTS e MCITP
ser feito pelo designer da ferramenta visual e sim feito atravs do T-SQL, devido o seu desempenhoser melhor.
O Comando abaixo tem por objetivo desativar a coluna com o identity, para que o indice dosregistros sejam mantidos, caso o identityfique habilitado os registros tero um ID em uma tabela eem suas associaes com os relacionamentos eles teram o ID antigo e isso ir causar falta de
integridade no banco.Alm de executar as instrues acima ele copia todo o contedo da tabela sales_bigpara a tabelasales_big_partque particionada. Ele ir distribuir os registros em seus respectivos Files Groupsem discos distintos conforme configurao realizada no exerccio e otimizando o desempenho dobanco.
Setidentity_insertsales_big_partOnInsertIntosales_big_Part(sales_id,stor_id,ord_num,ord_date,qty,payterms,title_id)Select*fromsales_bigSetidentity_insertsales_big_partOff
-Modificao de Estrutura
Partition Function:
Merge - Mescla pontos na estrutura Split - Adiciona pontos na estrutura
Merge
AlterPartitionFunctionFx_date()MergeRange ('01/01/1993')
Split
AlterPartitionFunctionFx_date()SplitRange ('07/01/1994')OBS: Aps executar o comando acima ir alertar o erro abaixo informando que no h File groupdisponvel. Esse erro gerado devido a excluso de alguns pontos e acontece a desassociao dosfiles groups."A funo de partio associada 'Fx_date' gera mais parties do que o nmero de grupos de arquivos mencionados noesquema 'Esquema_date'."
Para regularizar esse erro necessrio executar o comando abaixo:AlterPartitionSchemeEsquema_date
NextUSEDFg_Sales2
OBS: A tabela de histrico deve estar no mesmo filegroup da partio que desejo remover.
O comando abaixo ir criar a tabela sales_big_94 adicionando no File Group FG_Sales4.
CREATETABLE[dbo].[sales_big_94]([sales_id][int]IDENTITY(1,1)NOTNULL,[stor_id][char](4)NOTNULL,
Bruce Vincius Pgina 41 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
40/77
Formao SQL Server 2008 MCTS e MCITP
[ord_num][varchar](20)NOTNULL,[ord_date][datetime]NOTNULL,[qty][smallint]NOTNULL,[payterms][varchar](12)NOTNULL,[title_id][dbo].[tid]NOTNULL
)
OnFG_Sales4
O comando abaixo ir pegar a metade da tabela Sales_Big_Part definida pela data ('01/01/1994') eir adicionar na tabela Sales_Big_94.
AlterTableSales_Big_PartSwitchPartition$partition.Fx_date('01/01/1994')toSales_Big_94
A consulta abaixo ir trazer a unio dos resultados da tabela do ano de 1994 e 1995
CreateviewAno_94_95asSelect*Fromsales_big_94UnionAllSelect*Fromsales_big_partWhere$partition.fx_date(ord_date)=4
select*fromano_94_95
-PBM (Policy Based Management)
Um dos principais novos recursos do SQL Server 2008 permitir ao DBA, o gerenciamentoe administrao da instncia a partir da "idia" das polticas de grupo (GPO).Est presente em todas as verses do produto. Segundo a microsoft, acelera a administrao
do banco em 45%.
Bruce Vincius Pgina 42 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
41/77
Formao SQL Server 2008 MCTS e MCITP
Aula de Banco de Dados SQL Server 2008.
Data: 07/07/2010.
-PBM (Policy Based Management)_(Cont.)
Um dos principais novos recursos do SQL Server 2008 permitir ao DBA, o gerenciamentoe administrao da instncia a partir da "idia" das polticas de grupo (GPO).
Est presente em todas as verses do produto. Segundo a microsoft, acelera a administraodo banco em 45%.
OBS: O servio PBM se chamava DMF na verso Beta do SQL Server 2008, mas aps a suaconsolidao com as verses de produo o servio passou a se chamarPBM.
- Impedir: Alterar ou Log: utilizado na criao ou alterao da opo.
Bruce Vincius Pgina 43 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
42/77
Formao SQL Server 2008 MCTS e MCITP
- Sob Demanda: utilizado s em verificao ou relatrios.- Agendado: utilizado s em verificao ou relatrios.
No exemplo abaixo, caso a pessoa crie uma procedure fora de uma padro de nomenclatura adiretiva pode bloquear a criao da mesma.Ex: @name like 'SP_'
createproceduresp_testeasselect@@servername
-Trigger
Objeto do SQL Server, que permite a execuo de um cdigo adicional, na execuo deuma instruo. Amplamente utilizado para a alocao de vnculos administrativo e restrio decenrio.Tipos: 1) DML (Data Manipulation Language) Tipo de Trigger associada execuo dos
comandos insert, delete e update. 2) DDL (Data Definition Language) Tipo de Trigger associada execuo de comandos
de manipulao. Tais como: Create Table, Alter View, Drop login,... 3) CLR (Common Language RunTime) Tipo de Trigger capaz de executar um cdigo
compilado do .NET, agrega complexidade na capacidade de execuo das Triggers. 4) Logon Tipo de Trigger que associa a execuo ao logon do usurio.
DML Criada na verso 2000 do SQL Server(Pouco utilizada e no cai na prova e no serabordada no curso)DDL Criada na verso 2005 do SQL Server (Grande atuao no mercado)CLR Criada na verso 2005 do SQL Server (Grande atuao no mercado)
Logon Criada na verso 2005 SP2 do SQL Server (Grande atuao no mercado)DDLDatabase Aplicada para instrues em nvel de banco, para o banco de dados em questo.Allserver Aplicada para instrues em nvel de instncia, e instrues em nvel de banco paratodos os bancos de dados.
Cria a TriggerTrg_Teste1 no banco selecionado e assim que algum tentar criar algumatabela(Create_Table) ele ir mostrar a seguinte msg: 'A criao de tabelas est temporariamente,Desativada!' e anula a ao do usurio com o comando: rollback.
CreateTriggerTrg_Teste1OnDataBaseForCreate_TableAsPrint'A criao de tabelas est temporariamente, Desativada!'rollback
Deleta a TriggerTrg_Teste1 no banco selecionado.DropTriggerTrg_Teste1
Bruce Vincius Pgina 44 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
43/77
Formao SQL Server 2008 MCTS e MCITP
OnDataBase
Cria a TriggerTrg_Audita_tabela no banco selecionado e assim que algum tentar criar algumatabela(Create_Table) ele insere os dados do usurio como nome, usurio corrente, nome damquina que e usurio est logado e a data e hora e esconde a informao do usurio que foiinserido algo na tabela Trg_Audita_tabela com o comando Setnocounton.
CreateTriggerTrg_Audita_tabelaOnDataBaseForCreate_TableAsSetnocounton/*O comando ao lado faz com que o usurio no receba a msg, informando que umalinha foi adicionada na tabela de e perceba que est sendo auditado*/InsertIntoAudita_criar_tblvalues(suser_name(),current_user,host_name(),getdate(),'Uma tabelafoi criada no banco')
CreateTriggerTrg_loginOnAllserverForCreate_LoginAsPrint'A criao de login est temporariamente, Desativada!'rollback
Aula de Banco de Dados SQL Server 2008.Data: 08/07/2010.
-Trigger(cont.)
Logon:OBS: Toda trigger de logon tem que ser feita como All Server, no existe no modo database.
A consulta abaixo, mostra todas as sesses que se conectaram e que esto conectados na instnciaem questo.select*fromsys.dm_exec_sessions
-Criao de Triggers
1)Cria uma trigger que limita o nmero de conexes simultneas em 10 na instnciacreatetriggerTrg_limitasessoesOnAllServerForLogonAsBegin
Declare@loginvarchar(50)=(selectsuser_name())If(selectcount(*)fromsys.dm_exec_sessions
Bruce Vincius Pgina 45 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
44/77
Formao SQL Server 2008 MCTS e MCITP
whereis_user_process= 1 andlogin_name=@login)>= 10Print('Logon bloqueado, voc atingiu o nmero mximo de conees simultneas!')rollbackEnd
necessrio que o usurio Bruce tenha acesso a view server state para poder olhar a tabela
sys.dm_exec_sessions e poder testar a quantidade de conexes do mesmo.GrantviewserverstatetoBruce
OBS: O comando abaixo faz com que o DBA acesse o banco de dados em modo de segurana coma conta DAC(Dedicated Administrator Connection), carregando somente o necessrio para resolverproblemas. No nosso caso ser para deletar a trigger limitassesoes para que os usurios voltem a seconectar no banco. sqlcmd -S server14 -A -d master
Mostra todas as Triggers no banco de dados, caso o DBA esquea o nome da trigger que estocasionando o problema. select * from sys.serve_triggers
A consulta abaixo exclui a trigger problematica, no meu caso ela se chama: trg_limitasessoes. DropTriggertrg_limitasessoes onallserver
2)Cria uma trigger que limita os usurios de se conectarem ao banco em um perodo de tempo,nesse exemplo o usurio no pode se logar antes das 8:00h e nem depois das 17:00h.
CreateTriggerTrg_limitahorarioonallserverasBegin
IFSUSER_NAME()='Bruce'And((selectDATEPART(hh,getdate()))=17)
rollbackEnd
-Manipulao / Transformao de dados
1) BCP (Bulk Copy Program)
Bem antigo na plataforma Contexto de manipulao limitada
Grande velocidade na execuo
Bruce Vincius Pgina 46 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
45/77
Formao SQL Server 2008 MCTS e MCITP
O comando abaixo ir exportar o contedo da tabela person.address contida no bancoAdventureWorks para um arquivos txt chamado enderecos que est localizado na pasta BCP no raizdo C:\ C:\BCP>BCP adventureworks.person.address out enderecos.txt -S server14 -U sa -P
123qwe. -c C:\BCP>BCP adventureworks.person.address out enderecos3.xls -S server14 -U sa -c C:\BCP>BCP adventureworks.person.address out enderecos4.xls -S server14 -T -c C:\BCP>BCP "select addressid, addressline1, city from adventureworks.person.address
where city='london'" queryout end_london.xls -S server14 -T -c
O comando abaixo copia todos os dados da tabela AdventureWorks.Person.Address para a novatabela empresa.dbo.enderecos (Observe que est copiando uma tabela de um banco para um outrobanco)
select*intoempresa.dbo.enderecos fromAdventureWorks.Person.Address
O comando abaixo importa o contedo do arquivo enderecos.txt para a tabelaempresa.dbo.enderecos. C:\BCP>BCP empresa.dbo.enderecos in enderecos.txt -S server14 -T -c
2) BI (Bulk Insert)
Estrutura simples de importar dados.
executado como comando e no como process externo.
O comando abaixo importa dos dados flate in contidos no arquivo enderecos.txt para a tabelaempresa.dbo.Enderecos.
BulkInsertempresa.dbo.Enderecosfrom'c:\bcp\enderecos.txt'
OBS: O comando abaixo limpa o contedo da tabela informada.truncatetableempresa.dbo.enderecos
Aula de Banco de Dados SQL Server 2008.Data: 13/07/2010.
-Manipulao / Transformao de dados(Cont.)
1) BCP - OK
2) Bulk Insert - OK3) OpenRowSet Alocado no database engine Utilizado para xml e Binrio Faz a importao de objetos, transformando os mesmos em uma nica linha.4) Import / Export Wizard
Xml no SQL
Bruce Vincius Pgina 47 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
46/77
Formao SQL Server 2008 MCTS e MCITP
1) Armazenamento de dados em Xml 2) Transformao de Relacional xml 3) Transformao de xml Relacional
Na consulta abaixo mostra o resultado da mesma em XML.select*fromperson.addressforxmlauto
Adiciona uma tag acima da consulta com a informao('enderecos')select*fromperson.addressforxmlauto,root('enderecos')
Retorna a consulta do SQL no formato xml e em tag'sselect*fromperson.addressforxmlauto,elements
OBS: O openxml faz o cenrio ao contrrio, converte xml para relacional.
Exerccio de explicao:
-Openrowset.
1) Primeiro foi criado uma tabela produtos com duas colunas e uma delas no formato XML.
USE[Empresa]GOCREATETABLE[dbo].[Produtos](
[cod_produto][int]IDENTITY(1,1)NOTNULL,[xml_info][xml]NULL,
2) Foi criado um arquivo do tipo xml para que o mesmo sej armazenado em um banco qualquer,
no nosso caso o banco ser Empresa.Crie o arquivo abaixo em um bloco de notas e salve no c:\ com o nome de prod001.xml
MouseMousecomatecnologiaBluetrack1Microsoft170,00
3) O comando abaixo ir armazenar o cdigo xml na tabela dbo.Produtos.
declare@varxml=(select*fromopenrowset (bulk'c:\prod001.xml',single_clob)asQualquer_nome)insertintodbo.Produtosvalues(@var)
-Import / Export Wizard.
Bruce Vincius Pgina 48 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
47/77
Formao SQL Server 2008 MCTS e MCITP
-Recovery Model e Transaction Log
Recovery Model
1) Full Mantm o registro no Log.2) Simple Ele exclui o registro do Log.3) Bulk_Logged
-Operao Bulk-Create / Rebuild de ndices
OBS: A microsoft no recomenda que o Bulk_Logged seja definido no recovery model comodefault, pois passar a no armazenar algumas transaes importante.
O aconselhvel seria a utilizao no modo Full e quando o DBA necessitar importar grandesmassas de dados para a sua tabela ou banco, alterar para Bulk_Logged, pois nesse modo oarquivo de log no ir crescer rapidamente, devido o mesmo ser personalizado e noarmazenar no log todos os tipos de operao.
Bruce Vincius Pgina 49 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
48/77
Formao SQL Server 2008 MCTS e MCITP
-Tipos de Backup
Full Diferencial Full Parcial
Diferencial Parcial T-Log Arquivos / Grupo de arquivos Cpia Espelho
Full
Ex:
Diferencial
O backup diferencial faz o restore utilizando sempre o backup full do dia e o ltimo backupdiferencial aplicado valido antes do problema da perda do dado.Ex: Se uma pessoa fez um backup full as 08:00h e fez dois diferenciais as 09:00h e 10:00h, caso apessoa precise restaurar um dado perdido as 10:30h, ele ir precisar do backup full feito as 08:00h emais o backup diferencial realizado as 10:00h, tendo um tempo de perda de 30min.
08:00h - Full ___> 12:00h - Dif___>16:00h - Dif___>20:00h - Dif___> 23:00h - FullNa estrutura acima, caso o usurios perca um dado as 20:30h ele ir precisar do backup fullrealizado as 08:00h e o ltimo backup diferencial realizado com sucesso antes do problemaacontecer que nesse caso ser 20:00h.
T-LOG
O backup T-log faz o restore utilizando sempre o backup full do dia e mais todos osintervalos de backup t-log criados no dia at acontecer a perda do dado.OBS: Caso um dos arquivos do backup t-log seja perdido o backup ir falhar, pois haver falha naintegridade.
Uma grande diferena do T-log para o diferencial que por ele armazenar as informaesentre um intervalo e outro de backup, ele se torna mais rpido do que o diferencial.08:00h - Full ___> 09:00h - Dif___>10:00h - Dif___>11:00h - Dif___> 12:00h - Full
__
/ >Backup Set - Componente lgico do backup. (tipo de backup, data, lsn,....)Backup /\\---> Media Set - Componente fsico do bakcup. (armazenamento, diviso,...)
1) Tradicional
12/julho - 08:00h ---------> HD1 (Full.bak)
Bruce Vincius Pgina 50 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
49/77
Formao SQL Server 2008 MCTS e MCITP
Backup Set Media Set
2)
Backup Set __ Media Set___12/julho - 08:00h ---------> (Fita1, Fita2, Fita3) - Raid 0 > Nesse cenrio ir otimizar o processo de
gravao do backup no disco ou media utilizada, pois estar dividindo o I/O de disco na hora degerar o backup e armazen-lo.
3)
12/julho - 08:00h (tl1) |12/julho - 08:30h (tl2) |12/julho - 09:00h (tl3) |-----------> HD1 (t-logs.trn)12/julho - 09:30h (tl4) |12/julho - 10:00h (tl5) |
::
:
OBS: Backup realizado no modo full ou diferencial tem a extenso do arquivo .BAK e backuprealizado no modo T-log a sua extenso .TRN
Backup (Cont.)
Backup com T-SQL
O comando abaixo ir executar um backup do banco AdventureWorks no diretrio F:\ como nome de fullADW.bak
backupdatabaseadventureworkstodisk='f:\fullADW.bak'
O comando With status mostra o progresso do backup na aba menssagem nosqlserver 2008.backupdatabaseadventureworkstodisk='\\server15\c$\turma_sql\Bruce.bak'withstats=5
O comando NOINIT no sobre-escreve o contedo do backup e vai adicionando novos backupSetao mediaSet. Quando o INIT adicionado ele ir apagar todos os backupset existentes e ir criar umnovo backupset no mediaset.OBS: O default do banco NOINIT
backupdatabaseadventureworkstodisk='\\server15\c$\turma_sql\Bruce.bak'withstats=10,init
Media Device
O comando abaixo ir criar um media device apontando para o caminho no diretrio F:\execsp_addumpdevice'disk','Diferencial_ADW','f:\Diferencial\exemplo.bak'
Bruce Vincius Pgina 51 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
50/77
Formao SQL Server 2008 MCTS e MCITP
E o comando ir apontar o backup full para o Media Devicebackupdatabaseadventureworkstodiferencial_adw
Cenrio1:
Full 1 para um diaDif 4 em 4 horasTl 1 em 1 hora
06:00 F07:00 - TL08:00 - TL09:00 - TL10:00 - DIF11:00 TLOBS: Na rotina acima de backup realizada em uma empresa, caso acontea da empresa exigir uma
cpia full para levar a algum CPD localizado geograficamente em outro local e voc DBA no irdeter dessa cpia aconselhvel fazer um backup cpia(copy_only), pois nesse modo ele no irinterferir na rotina dos backupset na hora de restaurar o banco aps realiz-lo.
backupdatabaseadventureworkstodiferencial_adwwithcopy_only
O comando abaixo ir criar um media device chamado teste apontando para o diretrio F:\ e ircriar o arquivo aula.bak.Em seguida ir fazer um backup full do adventurewoks apontando o media device teste e o
comando init ir sobrescrever o banco.Differential = Igual a backup diferencialstats=10= Mostra o andamento do back em 10 em 10%name='Tlog_20h'= Adiciona o nome Tlog_20h ao backup de log.
execsp_addumpdevice'disk','teste','f:\aula.bak'backupdatabaseadventureworkstotestewithstats=10,initbackupdatabaseadventureworkstotestewithstats=10,differentialbackuplogadventureworkstologwithstats=10,name='Tlog_20h'
Restore
Os comandos abaixo iro recuperar o banco Adventureworks em 3 etapas:1) norecovery e full2) norecovery e o diferencial3) recovery para finalizar o backup e como o ltimo backup o de log o comando log deve ser
utilizado.restoredatabaseadventureworksfromtestewithfile=1,norecoveryrestoredatabaseadventureworksfromtestewithfile=2,norecoveryrestorelogadventureworksfromtestewithfile=3,recovery
Bruce Vincius Pgina 52 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
51/77
Formao SQL Server 2008 MCTS e MCITP
O comando abaixo ir mostrar o contedo de backups do media device teste via consulta T-sql.restoreheaderonlyfromteste
O comando abaixo far um backup particionando o arquivo de backup em 3, podendo ser colocadosem lugares diferentes e aumentando a performance na criao do backup.backupdatabaseadventureworkstodisk='f:\particionado_1.bak',disk='f:\particionado_2.bak',disk='f:\particionado_3.bak'withstats=5,copy_only
O comando abaixo ir mostrar o caminho aonde estava o banco adventureworks na mquina dathais para que eu possa restaur-lo com o comando seguinte.restorefilelistonlyfromdisk='\\server15\c$\thais\thais.bak'
O comando abaixo ir realizar um restore do banco adventureworks atravs do arquivo thais.bakrestoredatabaseadventureworksfromdisk='\\server15\c$\thais\thais.bak'
O comando abaixo ir realizar um restore do banco que se encontra em um local diferente deorigem e ser restaurado no banco apontando os arquivos .mdf e .ldf para um novo local.restoredatabaseadventureworksfromdisk='\\server15\c$\thais\thais.bak'withmove'adventureworks_data'to'f:\bruce\novoadw.mdf',move'adventureworks_log'to'f:\bruce\novologadw.ldf'
O comando abaixo ir mostrar as informaes tcnicas sobre a midia de armazenamento que seencontra no dispositivo de media. EX: LTO, Date etc.restorelabelonlyfromtape='\\server15\c$\thais\thais.bak'
A microsoft recomanda que os DBAs faam uma politica de restore com freqncia, pois isso irvalidar sempre se o seu disco ou local de armazenamento de backup est ok, dando expertize nahora de realizar um restore em momento de real problema.O comando abaixo ir fazer isso, ir verificar apenas se o restore foi possvel de realizar.restoreverifyonlyfromdisk='f:\bruce\bruce.bak'
Backup Espelho
Em muitos casos de empresa necessrio ter uma redundncia do backup, nesse caso ocomando abaixo lhe permite criar um backup identico e garantindo a redundncia da redundncia.
Um ponto importante no comando que ao realizar o comando pela primeiro vez necessrio passar o parmetro with format para informar ao cabealho que no diretrio f:\part1receber somente o backup padro e no diretrio f:\part2 receber backup s do tipo espelho.
Na segunda vez em diante necessrio retirar o parmetro with formart e acrescentar onoinit.backupdatabaseadventureworkstodisk='f:\part1\full_15julho.bak'mirrortodisk='f:\part2\full_15julho_Espelho.bak'withformat,stats=5
Bruce Vincius Pgina 53 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
52/77
Formao SQL Server 2008 MCTS e MCITP
Compresso de BackupA compresso de backup s est presente na verso Enterprise do SQL.
OBS: Caso algum crie um backup com compresso ele pode restaurar esse backup em
verses anteriores, pois a Microsoft limita s a compresso e no a restaurao na versoEnterprise.Outro detalhe no possvel restaurar um backup 2008 no 2005 por diferena de
arquitetura.Todo backup com compresso mais rpido, pois ir consumir mais processamento,
mas em compensao ir consumir menos I/O no disco e o disco sempre muito mais lentodo que o processador, por tanto a compresso sempre ser benfica no SQL, ganhando emespao e tempo de backup.
Comprimindo o banco via commando T-SQL:backupdatabaseadventureworkstodisk='f:\backup_compress.bak'withcompression
Backup do log, mesmo com o MDF corrompido.BACKUPlog[AdventureWorks]TO DISK=N'F:\Tail Log\Tail_log.trn'withcontinue_after_error
Backup total do banco via T-SQL
restoredatabaseadventureworksFROMdisk='f:\tail log\full.bak'withnorecoveryrestoredatabaseadventureworksfromdisk='f:\tail log\dif.bak'withnorecovery
Bruce Vincius Pgina 54 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
53/77
Formao SQL Server 2008 MCTS e MCITP
restorelogadventureworksfromdisk='F:\Tail Log\Log.trn'withnorecoveryrestorelogadventureworksfromdisk='F:\Tail Log\tail_log.trn'withrecovery
Backup Arquivo / Grupo de arquivosPossibilidade de efetuar o backup por arquivo ou um grupo de arquivos em umbanco que est segmentado em vrios arquivos.BACKUPDATABASE[adventureworks]FILEGROUP=N'FG1'TO DISK=N'C:\Program Files\Microsoft SQL Server\FG1.bak'WITHNOFORMAT,NOINIT,NAME=N'adventureworks-Cheio Grupo de Arquivos Backup',SKIP,NOREWIND,NOUNLOAD, STATS= 10GO
Backup Parcial / Diferencial Parcial
Possibilidade de efetuar um backup read write, ou seja, fazer backup somente detabelas que so somente leituras. muito aplicado em tabelas de histrico que no tem
incidncia de atualizao e etc.backupdatabase[AdventureWorks]read_write_filegroupstodisk='f:\qualquercoisa.bak'
Manuteno Lgica e Fsica aconselhado fazer uma manuteno preventiva dos bancos de dados e
aconselhado realizar um backup full e com isso ir fazer uma limpeza lgica, mas fsicaainda no ocorreu e a que entra o shrink para liberar espao em disco.
Shrink
Recurso utilizado no SQL Server para liberar espao em disco fsico.USE[Empresa]GODBCCSHRINKDATABASE(N'Empresa')GO
Bruce Vincius Pgina 55 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
54/77
Formao SQL Server 2008 MCTS e MCITP
DBCCO DBCC uma estrutura de programao baseada em Transact Sql, que fornece
um conjunto de instrues alocados para os mais variados fins na plataforma de dados.Basicamente alocamos os comandos do DBCC em 4 grupos: Manuteno, Diversos,Informaes e Validao.
A abordagem de todos os comandos DBCC de uma nica vez ilgica e ineficaz.Portanto a abordagem deste documento e da prova 70-432 relacionada ao cenrio dosprincipais comandos.
1) DBCC CHECKDB Verifica a integridade lgica e fsica de todos os objetos do banco.Reproduzem de maneira nica as operaes:
DBCC CHECKALLOC (Verifica consistncia de alocao em disco dobanco)
DBCC CHECKTABLE (Verifica integridade de pginas de dados eestruturas de tabelas ou ndices)
DBCC CHECKCATALOG (Verifica consistncia do catlogo [Metadados]do banco)
Exemplo: DBCC CHECKDB (Empresa, NOINDEX)
2) DBCC SHRINKDATABASE Reduz o tamanho dos arquivos de dados e log do banco.Exemplo: DBCC SHRINKDATABASE (Empresa)
3) DBCC SHRINKFILE Reduz o tamanho dos arquivos de dados ou log especificados.Exemplo: Use AdventureWorks DBCC SHRINKFILE (Adventureworks_log,2)
4) DBCC INDEXDEFRAG Desfragmenta ndices especficos (O ideal utilizar o ddlalter index)Exemplo: DBCC INDEXDEFRAG (Empresa, RH.Funcionarios, IX_Bairro)
5) DBCC DBREINDEX Recria ndices especficos (O ideal utilizar o ddl alter index)Exemplo: Use Empresa DBCC DBREINDEX (RH.Funcionrios,)
Bruce Vincius Pgina 56 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
55/77
Formao SQL Server 2008 MCTS e MCITP
6) DBCC CHECKIDENT Tem a capacidade de verificao e ou alterao em colunasdefinidas como identityExemplo: Use Empresa DBCC CHECKIDENT (dbo.Cadastro,RESEED, 8)
7) DBCC SHOWCONTIG Exibe informaes sobre fragmentao de dados e ndices
Exemplo: Use Empresa DBCC SHOWCONTIG (RH.Funcionrios)
TDE (Transparent Data Encryption)Recurso novo no SQL Server 2008, que aplica a criptografia em todo o banco.
Cria uma camada de proteo para deslocamento de mdias de backup e ou de bancode dados.Muito utilizado em cenrios de grande competitividade e concorrncia.Aplicado apenas na verso enterprise do produto.O banco criptografado s pode ser vinculado em instncias enterprise.
OBS: DEK = (Certificado Digital + Algoritmo) e com isso gera uma camada de proteoque ir proteger o banco de dados e suas informaes.
Arquitetura do TDE
S.O.
Instncia
Banco
Obs: No TDE deve ser criada no banco Master!
- Database Encryption Key
Bruce Vincius Pgina 57 27/09/2011
DPAPI(Data Protection API)
SMK (Service Master Key)
DMK (Database Master Key)
Certificao Digital DEKAlgoritmo
PROD (Banco)
8/4/2019 Aula de Banco de Dados SQL Server 2008
56/77
Formao SQL Server 2008 MCTS e MCITP
OBS: O DPAPI e o SMK j vm pr-configurados e no precisa de configurao adicional.
Certificados
Cenrio TDE:1) Configurar o DMK, pois o SMK e DPAPI j esto configurados.
UsemasterCreatemasterkeyencryptionbypassword='fgv@2010'OBS: Criando esse comando uma vez no ser necessrio refaz-lo, pois ele habilita nomaster e serve para todos os bancos.
O comando ir mostrar a criptografia utilizada no banco.select*fromsys.symmetric_keys
O comando abaixo cria o certificado tde_adventureworks para o bancoadventureworks.CreateCertificatetde_adventureworkswithsubject='Certificado TDE Para o Banco AdventureWorks'
O comando ir mostrar o certificado criado no banco.select*fromsys.certificates
2) DEK
createdatabaseencryptionkeywithalgorithm=aes_256
encryptionbyservercertificatetde_adventureworksOBS: Alm da criptografia aes_256 existe as vriantes: aes_128, aes_192, aes_256 etriple_Des_3key
3) Backup Da Chave
backupcertificatetde_adventureworkstofile='f:\ChaveTDE\Cer_TDEADW.cer'withprivatekey (file='f:\ChaveTDE\Chave_TDEADW.pvk',encryptionbypassword='123qwe.')
O comando abaixo ir criar uma viso vw_tdeinfo e mostrar se o banco possui ou no
criptografia:createviewvw_tdeinfoasSelect EK.Database_ID,
DB_NAME(EK.Database_ID)asDatabaseName,EK.Encryption_State,CASEEK.Encryption_State
WHEN 0 THEN'Sem Chave de Criptografia noBanco'
Bruce Vincius Pgina 58 27/09/2011
8/4/2019 Aula de Banco de Dados SQL Server 2008
57/77
Formao SQL Server 2008 MCTS e MCITP
WHEN 1 THEN'Sem Criptografia'WHEN 2 THEN'Criptografia em Andamento'WHEN 3 THEN'Criptografado!'WHEN 4 THEN'Troca de Chave em Andamento'WHEN 5 THEN'Retirada de Criptografia em
Andamento' ENDasStatus_Criptografia,C.Name,EK.Percent_Complete--O ZERO indica que no existe procedimento
atualmenteFromsys.dm_database_encryption_keysasEKLEFTJOINMaster.sys.certificatesasCONEK.encryptor_thumbprint=C.thumbprintselect*fromvw_tdeinfo
4) Habilitar a Criptografia
Habilita a criptografia no banco AdventureWorks.alterdatabaseadventureworkssetencryptionon
Cenrio1: Esse cenrio tem por objetivo mostrar que um banco de dados foi roubado e oladro tenta restaur-lo em sua instncia, mas como o banco foi criptografado ele nopermitir tal execuo garantindo a segurana dos dados.
Comando para tentar restaurar o banco roubado.restoredatabaseadventureworksfromdisk='c:\full_adw.bak'OBS: No ser possvel executar o comando devido a criptografia.
Cenrio2: Esse cenrio seria uma migrao de uma instncia para a outra dentro da prpriaempresa onde o DBA detem do