Aula de Banco de Dados SQL Server 2008

download Aula de Banco de Dados SQL Server 2008

of 77

Transcript of Aula de Banco de Dados SQL Server 2008

  • 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