Beruflich Dokumente
Kultur Dokumente
1 - Introduo
Viso geral do SQL Server Sistemas Gerenciadores de Bancos de Dados
Objetivos: - Obter uma viso geral do SQL Server e do seu funcionamento; - Conhecer as ferramentas do SQL Server; - Saber a diviso de papis entre o administrador do sistema e o implementador de bancos de dados.
Ferramentas de $dministrao
O SQL Server vem com v/rias ferramentas de administra o 6ue podem ser e4ecutadas a partir de um servidor !indo"s #$+ de uma esta o !indo"s #$ !or9station+ ou at mesmo a partir do !indo"s >?/>@. So elas& Enterprise Manager& como :/ foi dito+ gerencia v/rios servidores+ permitindo e4ecutar 6ual6uer tarefa relacionada ao SQL Server. Como ser/ visto adiante+ ele roda dentro ,,C A,icrosoft ,anagement ConsoleB. =ara e4ecut/-lo atravs de 'niciar+ ;4ecutar+ entre com a seguinte instru o& mmc /s Cpasta-baseDdoDSQLServerEF'##ESQL Server ;nterprise ,anager.,SCC+ substituindo pastabaseDdoDSQLServer pela pasta onde voc3 instalou o SQL Server G. =or padro+ C&E,SSQLG. Service Manager(SQLMA !"#E$E%& permite iniciar+ pausar+ continuar e parar ACfinali2arCB os servi os do SQL Server. Quer& Anal&'er((SQL)#E$E%: permite administrar diretamente o SQL Server usando comandos $ransactSQL. Os comandos SQL podem ser e4ecutados interativamente+ ou podem ser e4ecutados de procedimentos arma2enados ou scripts. *ro+iler (SQL,"A-E#E$E%: permite monitorar toda a atividade do servidor e registrar essa atividade em ar6uivos de log+ incluindo comandos SQL e4ecutados pelo servidor. -lient et.or/ 0tilit& -L(-O 1!#E$E%: configura o soft"are de acesso cliente numa esta o. *er+ormance Monitor (SQL-,"S#*M-: integra o =erformance ,onitor AC-esempenho do SistemaCB do !indo"s #$ com o SQL Server+ para monitorar o desempenho do sistema. Server et.or/ 0tilit& (S"2 E,- #E$E% & permite adicionar+ remover ou configurar as #et-libraries+ 6ue so os protocolos aceitos para comunica o do cliente com o servidor. SQL Server 3oo/s Online: toda a documenta o do SQL Server+ para consultar on-line. =ermite fa2er pes6uisas de te4to na documenta o. =ara e4ecut/-lo+ em 'niciar+ ;4ecutar+ entre com HH pastaDbaseDdoDSQLServerEFOOISESQLFOL.CH,+ onde pastaDbaseDdoDSQLServer o diret5rio onde o SQL Server foi instalado. =or padro+ C&E,SSQLG. 0ninstall SQL Server 4#5: permite 6ue voc3 remova a instala o e4istente do SQL Server G.J
%onceitos &elacionais
.m registro (record* ou linha (ro"* um grupo de vari/veis com tipos de dados diferentes+ 6ue arma2enam dados relacionados. =or e4emplo+ um registro pode conter os dados relativos a um produto vendido pela empresa+ como descri o+ c5digo de identifica o+ 6uantidade em esto6ue. .m campo (field* ou coluna (column* um dos itens de informa o dentro de uma linha da tabela+ como a descri o da informa o. .ma ta6ela (table* um con:unto de linhas AregistrosB com a mesma estrutura+ arma2enados de forma permanente em disco.7s tabelas so compostas de linhasAro"B ou registros ArecordB e colunasAcolumnB ou fieldAcampoB. .m 6anco de dados (database* um con:unto de tabelas 6ue cont3m dados relacionados. =or e4emplo+ um sistema de contas a pagar poderia ter um banco de dados de contas a pagar+ com uma tabela para duplicatas+ uma tabela para bancos+ uma tabela para contas etc. .m 7ndice (inde4+ plural Kinde4esK ou KindicesK* um mecanismo 6ue permite pes6uisar rapidamente por linhas em uma tabela+ dado o valor de uma determinada coluna Aou algumas colunasB da tabela. .m 7ndice prim8rio ou chave prim8ria define um valor )nico+ 6ue no pode ser repetido em outras linhas da tabela. .ma consulta (6uerL* um pedido de pes6uisa no banco de dados+ 6ue permite obter todo um subcon:unto da tabela ou de v/rias tabelas+ especificando as condi 1es de sele o.
Des!to' ( %liente)Servidor
.ma aplica o 6ue utili2a bancos de dados composta de tr3s partes& (nter+ace com o usu8rio: respons/vel por validar as entradas do usu/rio+ e iniciar pes6uisas de acordo com um pedido do usu/rio. Mecanismo de acesso (database engine*: respons/vel pela manuten o das estruturas de dados necess/rias em ar6uivos+ pelos detalhes internos do acesso aos dados+ e pela manuten o da integridade dos dados. Arma'enamento de dados: ar6uivos 6ue contm os dados em si. .m banco de dados Cdes9topC Aou baseado em ar6uivosB a6uele no 6ual a interface com o usu/rio e o mecanismo de acesso ficam no mesmo computador Aa esta oB e apenas os ar6uivos de dados ficam num servidor de rede. Opera 1es de consulta ou pes6uisa devem passar atravs da rede. =or e4emplo+ 6uando um usu/rio 6uer ver uma rela o de contas a pagar+ mas apenas em determinado per%odo+ o sistema deve selecionar alguns registros baseado na data informada. #o ambiente des9top+ a esta o tra2 todos os registros atravs da rede+ mesmo os 6ue no so utili2ados. O tr/fego gerado na rede grande+ principalmente 6uando v/rias esta 1es acessam simultaneamente o servidor. M/ num banco de dados cliente/servidor+ a interface com o usu/rio fica na esta o e se comunica remotamente com o mecanismo de acesso+ 6ue um sistema gerenciador de 6anco de dados AS8F-B rodando no servidor. Quando o S8F- recebe um pedido para selecionar alguns dados+ ele acessa localmente os dados no servidor e retorna apenas o resultado pedido. #o caso de uma atuali2a o+ no necess/rio nem mesmo retornar um resultado+ apenas informar 6ue a atuali2a o foi feita. O diagrama abai4o resume as diferen as entre os ambientes& Des!to' cliente)servidor
O SQL Server+ como :/ foi dito+ um sistema de gerenciamento de bancos de dados cliente/servidor.
* - Instalao e %on+igurao
&e,uisitos de -ard are e So+t are .'/es usadas na instalao Instalando o so+t are de servidor Veri+icando a instalao Instalando o so+t are de cliente &egistrando um servidor Soluo de 'roblemas de instalao &emovendo o SQL Server 012
Objetivos:
- Saber o 6ue necess/rio para instalar o SQL Server em um computador; - 7prender a instalar o SQL Server em um servidor !indo"s #$ e a configurar as esta 1es de rede para utili2/-lo.
&e,uisitos de Sistema
7ntes de instalar o SQL Server+ preciso saber 6uais os re6uisitos m%nimos e recomendados para a instala o. -omputador& 'ntel e sistemas compat%veis+ ou -;C 7lpha e compat%veis& N recomend/vel 6ue todos os componentes de hard"are escolhidos este:am listados na HCL Alista de compatibilidade de hard"areB do !indo"s #$. Mem9ria& ,%nimo de OP ,b. 0ecomend/vel mem5ria adcional+ especialmente se o servidor :/ estiver processando outras fun 1es alm de banco de dados+ ou se forem usados bancos de dados grandes e replica o Sistema Operacional: O SQL Server pode ser instalado no !indo"s #$ Q.J ou superior+ com o Service =ac9 O ou posterior+ nas plataformas de hard"are citadas acima+ ou no !indo"s >4 Ano #$ ele roda como um servi o e no >4 como uma aplica oB. O soft"are de cliente+ para acesso ao SQL Server nas esta 1es+ pode ser instalado em !indo"s #$ Server+ !indo"s #$ !or9station+ !indo"s >?/>@+ ou !indo"s RS-bits AO.4B+ ,S-OS+ .#'<+ ,acintosh+ ou navegadores 'nternet. Espao em disco: #uma instala o m%nima+ so usados GJ ,F+ e numa instala o completa+ RSJ ,F+ incluindo todos ar6uivos de programas+ documenta o online+ ferramentas de desenvolvimento+ e ar6uivos de e4emplo. .ma instala o de um novo servidor+ s5 com as ferramentas de gerenciamento+ e4ige GJ ,F So+t.are de rede: #uma rede !indo"s #$+ o SQL Server usa o soft"are de rede integrado. #o necess/rio soft"are adicional+ e4ceto para conectar a alguns outros tipos de rede. #o caso da #ovell #et"are+ o suporte fornecido pelo protocolo #!Lin9 do !indo"s #$. #o recomendado instalar o SQL Server num computador 6ue se:a controlador prim/rio de dom%nio A=-CB ou controlador reserva AF-CB.
.utras considera/es
Sistemas de ar:uivos: o !indo"s #$ suporta T7$ ou #$TS. O SQL Server pode usar 6ual6uer um dos dois indiferentemente e o tipo de sistema usado no afeta seu desempenho Ae4ceto 6uando se usa compresso no #$TS+ 6ue redu2 o desempenhoB. 0ecomenda-se o #$TS para a instala o do servidor+ pelas suas vantagens de recupera o e seguran a.. ome do Servidor: o nome do computador usado para o SQL Server deve seguir certas regras& #omes no devem ter mais de RP@ caracteres. #omes no podem conter espa os. #omes devem come ar com uma letra Amai)scula ou min)sculaB ou sublinhado AKDKB. #omes tambm podem come ar com U ou V+ mas como nomes come ados por essas letras t3m um significado especial+ no sero usados na maioria dos casos. Caracteres no nome depois da primeira letra+ podem ser 6ual6uer letra+ n)mero+ ou os s%mbolos U+ D+ V+ ou W.
Diret9rios
O SQL Server instalado por default no diret5rio C&E,SSQL+ mas isso pode ser alterado. O nome do diret5rio pode ser longo+ mas no deve conter espa os. -entro desse diret5rio+ todos os ar6uivos possuem nomes curtos AT7$ @.OB+ mesmo num drive 6ue suporta nomes longos. #essa apostila+ ao fa2ermos refer3ncia a -:;MSSQL+ note 6ue voc3 pode ter instalado em um diret5rio diferente. #esse caso+ substitua o nome pelo do seu diret5rio. O SQL cria os seguintes subdiret5rios durante a instala o& X F7CI.= - Contm ar6uivos de bac9up. X F'## - Contm ar6uivos e4ecut/veis das ferramentas de administra o do SQL e ar6uivos do Help Online+ e -LLs. X T$-7$7 - S5 instalado se o componente de procura por te4to completo (Tull-$e4t Search* tiver sido instalado. .tili2ada para lidar com ar6uivos de cat/logo somente de te4to. X -;Y$OOLS - ;ssa pasta+ e suas subpastas+ s5 so criadas+ se escolher-se instalar as ferramentas opcionais de desenvolvimento e e4emplos. X H$,L - 7rma2ena ar6uivos H$,L e ar6uivos relacionados. X -7$7 - Contm os ar6uivos de dados. X MOFS - 7rma2ena informa 1es sobre tarefas (Mobs* do SQL Server X '#S$7LL - Scripts de instala o e ar6uivos de sa%das. X LO8 - Contm ar6uivos de log de erro. X 0;=L-7$7 - -iret5rio de trabalho usado para replica o. X .=807-; - 7r6uivos do assistente de atuali2a o de verso. #o criada se voc3 no instalar o assistente de atuali2a o.
7rotocolos de &ede
=ara cada tipo de cliente de rede+ o SQL Server possui uma et-li6rar&+ um driver 6ue suporta comunica o atravs desse tipo de rede. 7s op 1es dispon%veis so& amed *ipes ( et6eui%: Suporta o protocolo #etbeui. N instalado por default. Yoc3 no deve remov3-lo pois os utilit/rios do SQL Server depende desta #et-LibrarL. Multi-protocol: suporta a cone4o atravs de v/rios protocolos de rede+ suportando tambm seguran a integrada e criptografia Acaso a aplica o suporteB. )Lin/ (*$>S*$: comunica-se com clientes #et"are. O SQL Server pode se registrar como um servi o numa rede #et"are. ,-*>(* soc/ets: suporta comunica o atravs de !indo"s soc9ets+ por e4emplo+ com um cliente de 'nternet. 3an&an 2( ES? Apple,al/ ADS*? DE-net: outros tipos de rede.
.'/es de auto-iniciali8ao
Servi o um programa e4ecut/vel 6ue no tem interface com o usu/rio+ mas tem formas de controlar. Como iniciar e parar o servi o determinado. -efinem se os servi os ,SSQLServer e SQLServer7gent iniciaro automaticamente com o !indo"s #$ ou sero iniciados manualmente. ;ssa op o pode ser alterada depois no =ainel de Controle (Control =anel* do !indo"s #$+ op o Servi os (Services*. =ara o servi o SQLServer7gent+ voc3 pode tambm definir 6ual o nome de usu/rio e senha 6ue ele utili2a para se conectar ao sistema.
Modo de licenciamento
O SQL Server pode ser licenciado por servidor (per server*+ onde para cada servidor ad6uire-se # licen as de acesso+ ou por esta=o (per seat*+ onde e4iste uma licen a para cada esta o+ independentemente do n)mero de servidores usados. -urante a instala o voc3 pode definir 6ual dos modos utili2ar. =ara alterar essas op 1es posteriormente+ use o %cone Licenciamento (Licensing* no =ainel de Controle do !indo"s #$.
Iniciando o S4?37
=ara instalar o SQL Server G+ efetue logon no !indo"s #$ com uma conta 6ue tenha privilgios administrativos+ colo6ue o C- de instala o na unidade de C- . ;m alguns segundos+ o programa de 'nstala o do SQL Server ir/ iniciar automaticamente e mostrar a tela abai4o& 8
#essa tela voc3 tem diversas op 1es. =ara iniciar a instala o do SQL Server+ selecione C'nstall SQL Server G.J ComponentsC. 7 pr54ima tela permite 6ue se selecione 6uais componentes se 6uer instalar. >ota@ Se voc3 tiver a op o de auto0eprodu o do C- desativada+ voc3 pode iniciar manualmente o programa de instala o do SQL Server. =ara fa23-lo+ v/ para o diret5rio rai2 do C- de instala o do SQL Server+ e e4ecute o programa Csetup.batC. ;nto ser/ mostrada a tela acima. Se o SQL Server estiver sendo instalado de um compartilhamento da rede+ mude para a pasta do compartilhamento 6ue contem o SQL Server e e4ecute o ar6uivo Csetup.batC. >ota@ 7 op o C'nstall SQL Server =rere6uisitesC permite intalar os soft"ares necess/rios para se poder instalar o SQL Server. ;stes so o service pac9 Q do !indo"s #$ e o 'nternet ;4plorer Q.JR.
#essa tela+ selecione C-atabase Server- Standard ;ditionC se voc3 6uiser instalar o SQL Server no !indo"s #$+ ou C-atabase Server- -es9top ;ditionC se voc3 6uiser instalar o SQL Server no "indo"s >4.
Se voc3 6uisesse instalar em um computador remoto+ clicaria em C0emote 'nstallC e informaria as op 1es do computador remoto. #o nosso caso+ cli6ue em #e4t para fa2er a instala o local. 7%+ aparece a tela de boasa-vindas& 10
Cli6ue em #e4t para continuar. 7parece a tela de C7cordo de Licen a de Soft"areC (Soft"are License 7greement*. Se voc3 aceita os termos do acordo+ cli6ue em ^es para continuar. Yoc3 deve selecionar ^es se voc3 6uer instalar o SQL Server. 7% aparece a tela de informa o do usu/rio. 76ui+ entre seu nome e o nome da companhia. -epois 6ue tiver entrado com essas informa 1es+ cli6ue em #e4t para continuar. 7 seguir ser/ pedido o n)mero de srie do SQL Server. ;ste pode ser encontrado no adesivo amarelo colado na cai4a do C-. -epois de entrar com esse n)mero+ cli6ue em #e4t para continuar.
Setu' ?A'e
11
76ui+ voc3 deve selecionar se voc3 6uer fa2er uma instala o m%nima+ t%pica+ ou personali2ada. M/ discutimos sobre cada uma das op 1es anteriormente. 76ui+ usaremos a instala o personali2ada+ :/ 6ue ela fornece a maior fle4ibilidade 6uando instalano o SQL Server. Cli6ue no boto perto de CCustomC para escolher a instala o personali2ada. 7inda nesta :anela+ voc3 deve decidir onde arma2enar os ar6uivos de programa e de dados do SQL Server. =odem ser instalados no mesmo local+ ou em locais diferentes. .se os bot1es CFro"seC para selecionar outros locais 6ue no se:an os locais padro selecionados. .se as informa 1es de espa o e4igido (0e6uired* e dispon%vel (7vailable* para decidir melhor onde instalar os ar6uivos. Teitas as sele 1es+ cli6ue em #e4t para continuar.
Select %om'onents
12
76ui+ voc3 deve escolher a6ueles componentes do SQL Server 6ue voc3 6uer carregar. =erceba 6ue no lado es6uerdo da tela esto os componentes+ e no lado direito os sub-componentes. =rimeiro+ voc3 seleciona um componente clicando dentro da cai4a de verifica o+ e se houver subcomponentes+ voc3 os escolhe clicando em cai4as de verifica o do lado direito. ;n6uanto voc3 escolhe os componentes para sua instala o+ perceba 6ue voc3 pode determinar o tamanho da instala o observando o espa o dispon%vel em disco na parte inferior da :anela. -epois de escolhido o 6ue for apropriado+ cli6ue em #e4t para continuar.
#essa :anela+ de sele o das bibliotecas de rede (#et"or9 Libraries*+ voc3 deve+ para cada biblioteca de rede 6ue for instalar+ entrar com alguns parZmetros adicionais+ como a porto em 6ue o servidor vai escutar+ para a biblioteca de rede $C=/'=+ e outras de acordo com a biblioteca de rede a ser instalada. Como :/ foi dito+ a 13
biblioteca de rede #amed =ipes deve ser selecionada+ pois utili2ada durante a instala o. -epois da instala o conclu%da+ ela pode ser retirada+ apesar de no ser recomend/vel. #ormalmente+ as op 1es padro funcionam bem. -epois de feitas as sele 1es necess/rias+ cli6ue em #e4t para continuar. #ota& =ara mudar uma net-LibrarL depois da isntala o+ use o CSQL Server #et"or9 .tilitLC AS0Y#;$C#.;<;B
Services $ccounts
76ui voc3 pode usar a mesma conta para os dois servi os ASQLServer e SQLServer7gentB+ iniciando automaticamente o servi o SQL Server. =ara isso+ selecione o primeiro boto (.se the same account for....*. Caso voc3 6ueira usar uma conta diferente para cada servi o+ selecione CCustomi2e the settings for each serviceC e os bot1es SQL Server e SQL Server 7gent se tornaro ativos. 7% as op 1es do servi o (Service Settings* sero referentes ao servi o selecionado. Se foi criada a conta do usu/rio para uso do SQLServer7gent+ informe o nome do usu/rio+ a senha e confirme a senha Ao default o nome de usu/rio conectado atualmenteB. 'nforme tambm o dom%nio do #$ Server onde essa conta e4iste. Caso no tenha criado a conta mar6ue a op o 'nstall to log on as Local SLstem account A uma conta predefinida do !indo"s #$B. >ota@ Caso se escolha usar a conta de sistema local+ o SQL Server no ser/ capa2 de se comunicar com outros servidores. Cli6ue em #e4t para continuar. 7 seguir aparece a tela de sele o do modo de licenciamento (Choose Licensing ,ode*. ;scolha o licenciamento =er Server ou =er Seat+ levando em conta o 6ue foi discutido anteriormente. Cli6ue em #e4t para continuar.
14
...
O S;$.= vai copiar os ar6uivos necess/rios para o diret5rio de instala o+ reinde4ar as tabelas de sistema+ e definir a configura o inicial do SQL Server. ;sse processo leva cerca de RJ-R? minutos+ dependendo da velocidade do seu computador. 7p5s esse processo+ o SQL Server ter/ sido instalado e estar/ pronto para usar. 7s ferramentas do SQL Server estaro dispon%veis no submenu C,icrosoft SQL Server G.JC+ dentro do menu 'niciar\=rogramas (Start\ =rograms* do !indo"s #$ Q.J. Yoc3 precisar/ de iniciar seus servi os antes de poder conectar-se pela primeira ve2 ao servidor SQL Server.
-epois 6ue o SQL Server estiver instalado+ h/ alguns passos a serem completados antes de se poder di2er 6ue o SQL Server est/ pronto para rodar. 7lguns desses passos devem ser e4ecutados apenas uma ve2 para se assegurar 6ue o SQL Server foi instalado corretamente e para prepar/-lo para rodar corretamente no futuro. 76ui vamos citar esses passos. Outros passos+ 6ue incluem configura 1es+ a:ustes e otimi2a o+ estabelecimento de '-s para login e '-s de usu/rios do banco de dados+ e claro+ a cria o de novos bancos de dados+ sero discutidos em outras se 1es. #esta se o o ob:etivo ser/ verificar se o SQL Server foi instalado corretamente.
Os ar6uivos so& -istmdl.mdf e -istmdl.ldf Aapenas se obe:etos opcionais de replica o foream instalados. #orth"nd.mdf e #orth"nd.ldf ,aster.mdf e ,astlogldf ,odel.mdf e ,odellog.ldf ,sdbsdata.mdf e ,sdbblog.ldf =ubs.mdf e =ubsDlog.ldf $empdb.ldf e $emplog.ldf
16
%on+erindo se os dois servios +oram instalados; e manualmente iniciando-os 'ela 'rimeira ve8 R. 7bra o =ainel de Controle do #$+ e ento d3 um duplo cli6ue no %cone Servi os. 7parece ento a cai4a de di/logo de Servi os. P. =ercorra a lista de servi os at 6ue voc3 ve:a pela primeira ve2 o servi o ,SSQLServer. Se voc3 no reiniciali2ou o computador desde 6ue instalou o SQL Server+ ele deve ter um ;stado (Status* em branco. ; em 'niciali2a o (Startup*+ deve estar configurado como autom/tico. O. =ara iniciar manualmente o servi o+ cli6ue nele uma ve2 para 6ue o mesmo fi6ue selecionado+ e ento cli6ue no boto 'niciar (Start*. -epois de uns OJ segundos+ o ;stado (Status* vai mudar para 'niciado (Started* e o servi o est/ agora sendo e4ecutado. Q. =ercorra a lista um pouco mais at 6ue voc3 ve:a o servi o SQLServer7gent+ e ele tambm deve estar com o ;stado em branco e a 'niciali2a o como 7utom/tica. ?. =ara inici/-lo manualmente+ fa a da mesma maneira 6ue foi feito com o servi o ,SSQLServer+ mas agora selecionando o servi o SQLServer7gent. -epois de uns R? segundos+ o ;stado (Status* vai mudar para 'niciado (Started* e o servi o est/ agora sendo e4ecutado. S. Se tudo estiver correto+ feche a cai4a de di/logo de Servi os e o =ainel de Controle. ; se os servi os no estiverem a%a Se os servi os no estiverem listados+ sua instala o do SQL Server falhou e voc3 vai ter 6ue reinstal/-lo+ mas isso raro. Yoc3 pode ter notado 6ue na coluna 'niciali2a o (Startup*+ estava a a palavra ,anual+ ao invs de 7utom/tico. Se voc3 se vir nessa situa o+ voc3 provavelmente es6ueceu de escolher a op o auto-iniciar (7uto-start* 6uando voc3 instalou o SQL Server. N bem f/cil corrigir isso.
17
4scol5endo auto-iniciar
R. .m de cada ve2+ selecione cada um dos servi os do SQL Server na cai4a de di/logo de Servi os e
P. O. Q. ?. cli6ue no boto 'niciali2a o (Startup*. 'sso mostra a :anela abai4o. #essa :anela+ selecione 7utom/tico como o tipo de 'niciali2a o (Startup tLpe*. Cli6ue em OI+ e voc3 retornar/ para a cai4a de di/logo de Servi os. 0epita os passos R a O para o outro servi o do SQL Server. O )ltimo passo iniciar manualmente os servi os como descrito anteriormente. Se os servi os no iniciarem conforme descrito+ e se voc3 receber uma mensagem de erro+ ve:a a solu o de problemas de instala o para tentar resolver o problema.
O. Se tudo estiver funcionando corretamente+ o prompt do 'SQL dever/ aparecer ao invs do prompt de comando. ;le se parece com isso&
Rb
Q. ;screva a seguinte consulta para testar se o SQL Server vai responder. =ressione ;nter depois de cada linha.
select UUservername go
18
?. 7ssumindo 6ue tudo este:a funcionando+ o nome do seu servidor deve ser mostrado no prompt do 'SQL. 7 resposta deve se parecer Ao n)mero e nome do servidor vai variarB com isso&
=-C AR ro" affectedB Rb
S. =ara sair do programa 'SQL+ digite e(it no prompt do 'SQL e pressione ;nter+ e voc3 retornar/ para o prompt de comando do #$. Se tudo tiver ocorrido como descrito+ voc3 sabe 6ue o SQL Server foi instalado corretamente e est/ funcionando ade6uadamente. Se voc3 encontrar problemas ou mensagens de erro+ ve:a a solu o de problemas de instala o para tentar resolver o problema.
Ferramentas de cliente
O SQL Server inclui uma por o de ferramentas de administra o para serem instaladas no cliente+ 6ue podem ser usadas para gerenciar o SQL Server. -urante o processo de instala o+ voc3 pode instalar 6uantas ferramentas de gerenciamento voc3 achar necess/rio. O SQL Server oferece estas op 1es& SQL Server 4nter'rise Manager@ Se voc3 6uer administrar remotamente o SQL Server+ ento a instala o do ;nterprise ,anager necess/ria. ;ste programa permite ao -F7 e4ecutar virtualmente 6ual6uer tarefa administrativa no SQL Server. SQL Server 7ro+iler@ ;sta ferramenta usada para monitorar e registrar a atividade dos bancos de dados entre o SQL Server e os clientes. 7penas instale esta ferramenta nas m/6uinas 6ue e4ecutaro esta tarefa. SQL Server QuerA $nalA8er@ ;sta ferramenta utili2ada para enviar manualmente comandos $ransact-SQL e procedimentos arma2enados para o mecanismo de banco de dados do SQL Server. Yoc3 provavelmente instalar/ esta ferramenta na maioria+ talve2 em todas as m/6uinas de gerenciamento remoto. %lient Diagnostic 3tilities@ ;sta ferramenta utili2ada para verificar 6ual -F-LibrarL est/ instalad em um cliente+ e para configurar as ferramentas de gerenciamento para se comunicar com o SQL Server em uma rede. 19
MS D?% %lient Su''ort@ 7 ferramenta de Coordena o de $ransa 1es -istribu%das A-$CB da ,icrosoft fornece suporte aos clientes -$C. 7penas necessita ser instalada em clientes 6ue e4ecutem uma aplica o do SQL Server 6ue e4igam o -$C. Develo'ment +iles@ ;sses ar6uivos so necess/rios para desenvolvedores OL;--F para a cria o de programas utili2ando O-FC+ -F-LibrarL+ O-S+ SQL--,O+ ;mbedded SQL for C+ e ,S -$C. 8eralmente+ apenas desenvolvedores SQL Server precisaro desses ar6uivos. Sam'le +iles@ ;stes ar6uivos so ar6uivos de e4emplo feitos para os desenvolvedores analisarem e aprenderem com eles. 7ssim como os ar6uivos de desnvolvimento+ apenas desenvolvedores precisaro deles. &e'lication %on+lict &esolution ?ool@ .tili2ada para a:udar a resolver conflitos de replica o entre dois servidores SQL Server. Yoc3 apenas precisa desta ferramenta se voc3 implementar replica o em seus servidores. Livros online@ ;sta uma documenta o completa e comprensiva do SQL Server+ e interessante instal/-la em todo cliente. Ocupa cerca de R? ,F de espa o no disco+ mas vale a pena. Se voc3 no 6uiser ocupar todo esse espa o em um cliente+ voc3 tambm pode instalar os livros online em um compartilhamento de rede+ e ento conectar a ele 6uando necess/rio. Yoc3 tambm tem a op o de e4ecut/-lo a partir de um drive de C- instalado localmente. #o importa 6uais das op 1es acima voc3 decidir instalar+ as seguintes ferramentas e ar6uivos so instalados automaticamente. eles incluem bcp+ is6l+ os6l+ O-FC+ e -F-LibrarL. Talaremos deles mais tarde.
So+t are e -ard are necess<rio 'ara a instalao do so+t are de cliente
%73@ #o m%nimo um 7lpha 7<= ou um 'ntel de OP bits A@JQ@SB. 0ecomenda-se um =entium PJJ ou mais velo2. &$M@ #o m%nimo OP ,F. 0ecomenda-se OP ,F no !indo"s >4+ e SQ ,F ou mais no !indo"s #$. Monitor e 'laca de v6deo@ Qual6uer placa de v%deo 6ue este:a instalada corretamente funcionar/. 0ecomenda-se pelo menos um monitor de R?C com resolu o de RJPQ4GS@. 4s'ao em disco@ GO ,F para a instala o de todas as ferramentas de gerenciamento. Como provavelmente no sero instaladas todas elas+ pode ser suficiente menos espa o. Drive de %D-&.M@ 7penas e4igido se a instala o estiver sendo feita a partir de um C-. 7laca de rede& Qual6uer placa de rede 6ue funcione no sistema operacional ser/ aceita. 0ecomendase uma placa de RJ ou RJJ ,bits se voc3 estiver acessando um ou mais servidores SQL Server pesadamente a partir da esta o trabalho. Sistema o'eracional@ #o m%nimo #$ Server ou !or9station Q.J Acom Service =ac9 OB+ ou !indo"s >4. 0ecomenda-se usar sempre o Service =ac9 mais recente em 6ual6uer desses sistemas.
20
O. Se voc3 estiver fa2endo a instala o a partir de um C-+ apenas insira o C- do SQL Server no drive de C-. ;m alguns segundos+ a tela do programa de instala o do SQL Server vai surgir automaticamente. Caso voc3 no este:a instalando de um C-+ e4ecute o ar6uivo setu'1bat do compartilhamento de rede onde esto os ar6uivos de instala o. 7parece a tela abai4o.
#esta tela+ voc3 tem uma por o de op 1es. Selecione 'nstall SQL Server G.J Components. Q. #a pr54ima tela+ escolha -atabase Server- -es9top ;dition. ?. -epois voc3 deve escolher se vai fa2er uma instala o para a m/6uina local ou para uma m/6uina remota. Supondo 6ue voc3 este:a instalando as ferramentas de gerenciamento estando fisicamente na m/6uina em 6ue elas sero e4ecutadas+ escolha Local 'nstall.
21
S. -epois de passar por estas telas introdut5rias+ aparece a primeira tela da instala o do SQL Server. G. O programa de instala o um assistente 6ue te encaminha pelo processo de instala o. ;mbora o processo se:a o mesmo 6ue o da instala o do SQL Server+ voc3 no repetir/ e4atamente os mesmos passos. 76ui+ voc3 6uer instalar apenas as ferramentas de gerenciamento. Cli6ue em #e4t para continuar. @. 7parece a tela do acordo de licen a de soft"are. Cli6ue em ^es para continuar. >. 7gora+ voc3 deve digitar seu nome e o nome da sua organi2a o+ e a seguir o n)mero de srie do produto. Cli6ue em #e4t para continuar. RJ. 7gora+ aparece a tela de tipo da instala o (Setup $Lpe*.
22
RR. =ara instalar apenas as ferramentas administrativas+ escolha Custom e cli6ue em #e4t. 7ntes de prosseguir+ verifi6ue se as pastas escolhidas esto corretas+ e se voc3 tem espa o em disco suficiente.Se no+ mude as pastas ou discos+ clicando no boto Fro"se. RP. #a tela de sele o de componentes+ voc3 deve selecionar os componentes 6ue voc3 dese:a instalar e desmarcar os 6ue voc3 no instalar/.
8eralmente+ voc3 desmarcar/ Server Components Aafinal+ voc3 s5 6uer as ferramentas de administra o+ e no o SQL ServerB. Selecione Client ConnectivitL+ e ,anagement $ools. -o lado direito da tela+ voc3 pode desmarcar componentes individuais das mesmas. -epois 6ue voc3 escolher o 6ue achar ade6uado+ cli6ue em #e4t para continuar.
23
RO. Tinalmente+ a instala o vai come ar. Lhe mostrada a tela final+ onde voc3 pode conferir as op 1es 6ue voc3 selecionou. Se estiver satisfeito com as sele 1es feitas+ cli6ue em #e4t para come ar a instala o. Caso contr/rio+ cli6ue em Fac9+ e altere o 6ue achar necess/rio. -epois 6ue voc3 clica em #e4t+ os ar6uivos so copiados para seu computador. Quando o processo de instala o finali2ar+ voc3 volta apara a primeira tela do programa de instala o. =ara sair dessa tela+ cli6ue em ;4it. Quando as ferramentas de gerenciamento :/ estivrem instaladas+ voc3 pode testar se a instala o foi bemsucedida. Ye:a+ se em 'niciar \ =rogramas \ ,icrosoft SQL Server G.J+ as ferramentas 6ue voc3 selecionou tem seus atalhos. =ara verificar se as ferramentas funcionam+ escolha alguma e a e4ecute+ vendo se voc3 pode se conectar a um servidor remoto. Claro+ para 6ue este teste funcione+ voc3 deve ter uma conta legal e as permiss1es necess/rias no servidor SQL Server. Se voc3 puder fa2er uma cone4o com o servidor SQL Server+ voc3 confirma 6ue as ferramentas foram instaladas com sucesso. #a maioria dos casso+ assim 6ue as ferramentas de gerenciamento forem instaladas+ voc3 ser/ capa2 de us/las imediatamente sem 6ual6uer configura o adicional. ,as se a sua rede no for uma rede ,icrosoft pura+ ento voc3 pode ter 6ue mudar algumas op 1es de configura o usando a ferramenta de configura o de clientes (Client #et"or9 .tilitL*. Ye:a na se o Client #et"or9 .tilitL como utili2ar essa ferramenta.
&egistrando um servidor
Quando voc3 tiver certe2a 6ue o SQL Server est/ instalado e voc3 pode se conectar a ele Aconfira em verificando se voc3 pode se logar no SQL ServerB+ a pr54ima etapa se registrar com o SQL ;nterprise ,anager. ;nterprise ,anager o principal programa usado para gerenciar o SQL Server Ave:a mais sobre o SQL ;nterprise ,anagerB. ;le tem a capacidade de no apenas gerenciar um servidor SQL Server local+ mas tambm servidores m)ltiplos conectados em 6ual6uer lugar na mesm rede f%sica. ,as antes de tornar o SQL ;nterprise ,anager capa2 de fa2er isso+ voc3 deve lhe contar sobre os diversos servidores SQL Server 6ue voc3 possa ter+ e isso feito atravs do processo de registrar-se. Quando um servidor SQL Server est/ registrado com uma c5pia do ;nterprise ,anager+ essa c5pia do SQL ;nterprise ,anager capa2 de gerenciar a6uele servidor SQL Server+ no importando onde ele este:a na ree. >ota@ =or padro+ para administrar um servidor+ voc3 deve ser membro do grupo local 7dministradores no computador onde o SQL Server foi instalado. 7dministradores de dom%nio do !indo"s #$ so membros do grupo local 7dministradores. O registro um processo 6ue precisa ser feito apenas uma ve2+ embora voc3 possa desresgistrar e registrar novamente 6ueal servidor SQL Server 6uantas ve2es voc3 6uiser. 7s informa 1es de registro do SQL Server so mantidas no registro do !indo"s #$. O ;nterprise ,anager usa essa informa o a cada ve2 6ue voc3 se conecta com um servidor SQL Server registrado. H/ duas maneiras de registar um servidor SQL Server usando o ;nterprise ,anager& manualmente+ ou com o 7ssitente de 0egistro (0egistration !i2ard*. 76ui olharemos os dois mtodos+ come ando pelo 7ssistente de 0egistro. >ota& -iversas c5pias do ;nterprise ,anager podem estar distribu%das em diversos computadores ao longo da empresa. 'sso pode fa2er com 6ue se:a necess/rio voc3 registrar diversas ve2es oAsB servidorAesB 6ue voc3 6uer administrar. 'sso ocorre pois o registro feito com o ;nterprise ,anager e portanto+ em cada c5pia do ;nterprise ,anager devem ser registrados os servidores 6ue se dese:a administrar.
&egistrando um servidor SQL Server com o SQL 4nter'rise Manager 'ela 'rimeira ve81
R. 7 partir do 8rupo de programas do ,icrosoft SQL Server A'niciar \ =rogramas \ ,icrosoft SQL Server G.J \ ;nterprise ,anagerB+ e4ecute o SQL Server ;ntreprise ,anager. 'sso inicia o ,icrosoft ,anagement Console A,,CB. P. 7gora voc3 est/ pronto para iniciar o assistnte de registro (0egistration !i2ard*. =ara inici/-lo+ cli6ue com o boto direito em ,icrosoft SQL Servers+ 6ue aparece abai4o de Console 0oot. 7parecem ento diversas op 1es+ e voc3 6uer registrar um servidor (#e" SQL Server 0egistration...*
25
O. -epois de escolher a op o #e" SQL Server 0egistration+ aparece a primeira tela do 7ssistente de 0egistro (0egistration !i2ard*. Cli6ue em #e4t para continuar.
4. 7 seguir+ o assistente te pde para selecionar 6ual servidor SQL Server 6ue voc3 6uer registrar+ como
na figura abai4o& Os servidores SQL Server dispon%veis aparecem no lado es6uerdo da tela. Se o seu servidor no estiver sendo mostrado+ talve2 ele no tenha sido instalado ade6uadamente+ ou os dois servi os do SQL Server podem no estar iniciados Aver em verificando a instala o se eles esto iniciadosB. Supondo 6ue seu servidor este:a listado Alocal o servidor SQL Server localB+ cli6ue no servidor 6ue voc3 6uer registrar e cli6ue em 7dd. 'sso move o servidor SQL Server para o lado direito da :anela+ embai4o de Servidores 7dicionados (7dded Servers*. Yoc3 pode registrar mais de um servidor de uma ve2 se voc3 6uiser. ?. -epois 6ue voc3 tiver adicionado os servidores SQL Server dese:ados+ cli6ue em #e4t+ e vai aparecer uma :anela perguntando a voc3 6ual op o de cone4o 6ue voc3 6uer utili2ar para se conectar ao SQL Server. Yoc3 tem duas op 1es& autentica o do !indo"s #$ ou autentica o do SQL Server. Se esta a primeira instala o do SQL Server na sua organi2a o+ escolha por agora autentica o do SQL Server; isso pode ser mudado mais tarde se voc3 mudar seu modo de seguran a. ,as se no for a primeira instala o do SQL Servre+ escolha o modo de seguran a 6ue os outros servidores SQL Server estiverem utili2ando. O e4emplo a seguir sup1e 6ue voc3 tenha escolhido a autentica o do SQL Server (SQL Server authentication*. -epois de feita sua escolha+ cli6ue em #e4t. S. 7 seguir+ o assistente 6uer 6ue voc3 escolha se o SQL ;nterprise ,anager se lembre do seu nome de login e senha.
7 primeira op o+ C;fetuar logon automaticamente usando minha informa o de conta do SQL ServerC (Login 7utomaticallL .sing ,L SQL Server 7ccount 'nformation*+ pode ser escolhida para 6ue o ;nterprise ,anager se lembre de sua senha e nome de login. 7ssim+ voc3 no precisa de+ a cada ve2 6ue iniciar o 26
;nterprise ,anager+ ficar digitando essa informa o novamente. Se voc3 no 6uiser 6ue o ;nterprise ,anager lembre-se de seu login e senha+ escolha a op o C=erguntar a informa o da conta do SQL Server 6uando se conectarC (=rompt for the SQL Server account information "hen connecting*. Se voc3 escolher a primeira op o+ digite S7 como nome de login+ e dei4e a senha (=ass"ord* em branco. Yoc3 deve usar esse nome de login e senha 6uando registra pela primeira ve2 um novo servidor SQL Server po6ue voc3 ainda no atribuiu ] conta S7 uma senha+ nem criou 6ual6uer outro nome de login. Cli6ue em #e4t para continuar. G. Yoc3 deve adicionar um servidor SQL Server a um grupo de servidores.
#essa tela+ voc3 pode adicionar ao grupo padro SQL Server 8roup+ ou a um outro grupo pree4istente Aselecionando a primeira op oB. Yoc3 pode ainda criar um novo grupo Aselecionando a segunda op o (Create a ne" top-level SQL Server group to add the SQL ServerAsB to.*B+ e seu servidor ser/ adicionado a esse grupo. 8rupos de servidores so usados para agrupar servidores SQL Server de usos semelhantes+ para fins de aministra o+ e so completamente opcionais. $udo 6ue os grupos de servidores fa2em agrupar grupos de servidores semelhantes para visuali2a o no ;nterprise ,anager. ;scolha a op o mais ade6uada e cli6ue em #e4t para continuar. @. O assitente de registro mostra sua )ltima tela. Se voc3 6uiser fa2er 6uais6uer mudan as+ voc3 pode fa23-las clicando no boto Fac9. Ou+ se tudo
estiver conforme voc3 6ueria+ cli6ue em Tinish para concluir. 7 cai4a de di/logo de registro do SQL Server aparece+ e voc3 recebe uma mensagem di2endo se o registro foi bem-sucedido. Se voc3 receber uma mensagm de erro+ ve:a a se o de solu o de problemas.
27
>. Cli6ue em Close+ e volta-se para o SQL ;ntrprise ,anager. ;mbai4o de Console 0oot+ voc3 ver/ o cabe alho ,icrosoft SQL Servers. Cli6ue no sinal de mais perto deste cabe alho+ e um ou mais grupos de servidores sero mostrados. OAsB servidorAesB 6ue voc3 acabou de registrar aparecero dentro do grupo 6ue voc3 definiu para eleAsB. Supondo 6ue voc3 no tenha criado nenhum grupo e tenha adicionado-os ao grupo padro+ o )nico grupo listado ser/ o padro SQL Server 8roup. =ara ver o servidor 6ue voc3 acabou de registrar+ cli6ue no sinal de mais perto do grupo de servidores em 6ue voc3 adicionou oAsB servidorAesB. Se o servidor no aparecer dentro de nenhum grupo de servidores+ ele no foi registrado corretamente com o ;nterprise ,anager.
28
R. O primeiro passo desligar o 7ssistente de registro. -epois 6ue ele estiver desligado+ ento dessa ve2 em diante+ voc3 ser/ capa2 de registrar manualmente 6ual6uer servidor com o ;nterprise ,anager. =ara desligar o assistente de registro+ voc3 deve primeiro inici/-lo clicando com o boto direito no te4to ,icrosoft SQL Server+ ou em 6ual6uer grupo de servidores+ ou em 6ual6uer servidor registrado+ e ento selecionar a op o #ovo registro de servidor (#e" SQL Server 0egistration*. 'sso mostra a primeira tela do 7ssistente de registro. P. =ara deslig/-lo+ selecione a op o C7 partir de agora eu 6uero reali2ar essa tarefa sem usar um assistenteC (Trom no" on ' "ant to perform this tas9 "ithout using a "i2ard*. Cli6ue em #e4t e na outra :anela em Cancel. 'sso fechar/ o assistente de registro e tambm o impedir/ de ser e4ecutado a cada ve2 6ue voc3 for registrar um servidor. O. 7gora+ para regsitrar um servidor manualmente+ cli6ue com o boto direito no te4to ,icrosoft SQL Server+ ou em 6ual6uer grupo de servidores+ ou em 6ual6uer servidor registrado+ e ento selecionar a op o #ovo registro de servidor (#e" SQL Server 0egistration*. 'sso mostra a cai4a de di/logo C=ropriedades do servidor SQL registradoC (0egistered SQL Server =roperties*
29
Q. Complete essa :anela usando o mesmo tipo de informa 1es 6ue foram descritas 6uando descrevemos o 7ssistente de registro. .ma diferen a entre o 7ssistente de registro e essa cai4a de di/logo so as tr3s op 1es na parte de bai4o da :anela. -isplaL SQL Server State in console - ;sta op o+ se selecionada+ fa2 com 6ue o ;ntrprise ,anager regularmente interrogue o servi o ,SSQLServer para saber se ele est/ rodando+ e mostra uma lu2 verde no %cone no console 6uando ele est/ rodando+ e uma lu2 vermelha se o servi o no estiver sendo e4ecutado. Sho" SLstem -atabases and SLstem Ob:ects - Se esta op o for escolhida+ todos os bancos de dados e ob:etos do sistema sero mostrados no console. Caso no se:a escolhida+ os mesmos no aparecem no console. 7utomaicallL Start SQL Server "hen connecting - 7ssumindo 6ue o servi o ,SSQLServer no este:a a:ustado para iniciar automaticamente+ esta op o pode ser usada para iniciar automaticamente este servi o 6uando da primeira cone4o com o servidor. =or padro+ as tr3s op 1es esto escolhidas agora+ e so escolhidas automaticamente 6uando se usa o assistente de registro. Yoc3 pode fa2er 6ual6uer escolha 6ue achar ade6uada. Quando voc3 tiver completado suas escolhas+ voc3 pode registrar o servidor clicando em OI.
30
P. Cli6ue com o boto direito no nome do servidor e ento escolha ;dit SQL Server 0egistration no menu. 'sso mostra a cai4a de di/logo 0egistered SQL Server =roperties+ 6ue foi mostrada na figura acima. O. Ta a 6uais6uer mudan as necess/rias. Quando terminar+ cli6ue em OI para salvar essas configura 1es e voltar para o ;nterprise ,anager
'sso mostra todos os grupos de servidores atualmente embai4o dele. Cli6ue com o boto direito no nome ,icrosoft SQL Server+ ou em 6ual6uer grupo de servidores+ e ento selecione #ovo grupo de servidores (#e" SQL Server 8roup* do menu. 7parece a cai4a de di/logo de 8rupos de Servidores. P. =ara criar um novo grupo de servidores+ entre com o nome do novo grupo na cai4a #ame e cli6ue em OI. 'sso far/ esse grupo automaticamente um grupo de servidores do n%vel mais alto. Se voc3 6uiser+ voc3 pode escolher criar um grupo como subgrupo de algum outro grupo+ escolhendo a op o CSubgrupo deC (Sub-group of&*. #a maioria dos casos+ grupos de servidores do mais alto n%vel so mais do 6ue suficientes. O. Se voc3 6uiser remover um grupo de servidores+ cli6ue com o boto direito no nome do grupo de servidores 6ue voc3 6uer remover+ e ento selecione -elete do menu. O grupo removido imediatamente sem nenhum aviso. 31
O. Cli6ue com o boto direito no nome de login S7+ e selecione =ropriedades (=roperties* no menu; a cai4a de di/logo =ropriedades aparece. Q. =ara adicionar uma senha paa a conta S7+ digite-a na cai4a identificada por =ass"ord. Yoc3 vai notar 6ue a cai4a da senha est/ preenchida com asteriscos. 'sso no significa nada+ :/ 6ue atualmente no h/ senha para o login S7. ;scolha uma senha 6ue no se:a f/cil de adivinhar. 5. -epois 6ue voc3 tiver colocado uma senha+ cli6ue em OI. 'sso salvar/ a senha e fechar/ a cai4a de di/logo. 7gora voc3 precisa de voltar ao registro desse servidor e edit/-lo para indicar a nova senha da conta S7. Apara editar o registro do servidor+ fa a como indicado em 0egistrando um servidor manualmenteB O restante desta tela de =ropriedades ser/ visto no decorrer do curso. 7gora+ o SQL Server est/ funcionando e pronto para ser configurado para 6ual6uer aplica o na 6ual ele este:a sendo utili2ado.
32
o erro+ feche-os+ e cli6ue no boto de 0etrL mostrado pela mensagem de erro. Se isso no funcionar+ voc3 pode ter 6ue abortar a instala o do SQL Server e tentar de novo+ desta ve2 sem nenhum programa rodando.
Objetivos: - Conhecer os conceitos de aloca o de espa o usados pelo SQL Server; - $er uma viso geral dos itens 6ue comp1em o cat/logo do sistema; - Saber o 6ue um banco de dados e o 6ue ele contm; - 7prender a criar+ usar e gerenciar dispositivos de banco de dados.
34
35
7% temos uma por o de menus e bot1es. Os itens de menu importantes so 7ction+ Yie" e $ools& 7ction te permite fa2er coisas tais como registrar um novo servidor ou um novo grupo Aconforme visto na se o de instala oB. Yie"s te fornece uma lista dos diferentes tipos de vis1es dispon%veis para voc3. Yoc3 pode selecionar as vis1es grande+ pe6ueno+ detalhe ou lista dos %cones e suas propriedades associadas. 7inda poss%vel definir 6uais itens e 6uais barras de ferramentas voc3 ver/. ;4atamente como no !indo"s ;4plorer. O menu $ools lista todas as ferramentas e assistentes do SQL Server. Yoc3 pode fa2er bac9up de um banco de dados; parar+ iniciar e configurar a replica o; e iniciar ferramentas como o QuerL 7nalL2er A7nalisador de consultasB+ entre outras. 'mediatamente ] direita dos menus h/ outros itens de barras de ferramentas. ;stes so basicamente atalhos para os itens mais usados da barra de menu. $emos+ entre outros& 7nterior =r54imo
7tuali2ar
0egistrar Servidor
#ovo Login
QuerA Designer
O SQL Server G.J tem uma ferramenta muito )til+ 6ue se parece com o QuerL FL ;4ample AQF;B do ,icrosoft 7ccess+ e um 5timo substituto para a ,S QuerL Ado SQL Server S.?B. O nome dessa aplica o QuerL -esigner e fa2 parte das Terramentas Yisuais de Fanco de -ados. N uma 5tima ferramenta+ mas no est/ listada como uma ferramenta do SQL Server+ e um pouco dif%cil ach/-la diretamente. =ara locali2/-la+ fa a assim& -o ;nterprise ,anager+ e4panda o banco de dados #orth"ind+ e e4panda as tabelas. Cli6ue com o boto direito na tabela Categories. Selecione Open $able+ e ento 0eturn 7ll 0o"s. 36
>ota@ O 6ue foi citado acima para a tabela Categories+ do banco de dados #orth"ind+ aplica-se a 6ual6uer tabela+ de 6ual6uer banco de dados+ assim como no necess/rio selecionar 0eturn 7ll 0o"s. =oderia ter sido selecionado 0eturn $op... 6ue te perguntaria 6uantos registros voc3 6uer ver. 7 diferen a no comando SQL gerado para cada uma das sele 1es. -epois 6ue voc3 abrir a tabela+ toda a :anela estar/ envolvida com o QuerL -esigner. ;le permite 6ue voc3 ve:a propriedades da consulta+ e4ecute consultas de sele o+ de a o Ainser o+ atuali2a o+ e4cluso+ e cria o de tabelasB+ valida o da sinta4e SQL+ ordena o+ filtragem+ e agrupamentos. =rovavelmente+ estaremos vendo a se o dos 0esultados A0esults =aneB+ acionada com o boto + 6ue mostra os resultados atuais da consulta. =orm+ ainda h/ outras tr3s se 1es para se escolher ou adicionar ] :anela atual. ;stas so+ Sho" -iagram+ Sho" 8rid+ e Sho" SQL =ane. ;las so selecionadas pelos bot1es no topo da :anela. S5o Diagram 7ane ;sta se o te permite visuali2ar graficamente o banco de dados ou as tabelas. =or padro+ s5 a tabela atual
6ue estiver aberta ser/ mostrada nesta se o. =ara adicionar outr tabela+ simplesmente cli6ue com o boto direito em 6ual6uer lugar da se ao Ae4ceto na representa o gr/fica de alguma tabelaB. 7parece um menu com algumas op 1es.
37
Selecione 7dd $able. 'sso mostrar/ todas as tabelas e vis1es Avie"sB dispon%veis no seu banco de dados+ conforme abai4o.
7dicione a tabela =roducts Asupondo 6ue voc3 seguiu o e4emplo acima e est/ vendo as tabelas do banco de dados #orth"indB+ selecionando-a e clicando em 7dd+ ou dando um duplo cli6ue no nome da tabela . #ote 6ue o relacionamento tambm representado graficamente com uma linha e chave em uma ponta e um %cone de infinito na outra ponta.
'sso mostra um relacionamento de um para muitosAR&#B com CategorL'- na tabela Categories como a chave prim/ria. =ode-se selecionar para a consulta+ colunas individuais ou todas as colunas marcando as cai4as de verifica o apropriadas perto do nome de cada coluna. S5o Grid 7ane ;sta se o permite detalhar mais a consulta sendo criada. =or e4emplo+ podemos selecionar a ordem para uma coluna particular+ seu alias Anome 6ue ser/ mostrado no gridB. $udo isso de uma maneira visual. S5o SQL 7ane ;sta se o mostra a declara o SQL gerada pelas sele 1es feitas nas se 1es acima. =ode-se agora copiar e colar c5digo desta :anela+ para o QuerL 7nalL2er+ pra um ambiente de programa o+ entre outros. >ota@ 7 se o de resultados A0esults =aneB no se atuali2a automaticamente. =ara atuali2/-la+ cli6ue no ponto de e4clama o vermelho A0unB 38
#o QuerL -esigner+ podemos criar consultas comple4as muito mais rapidamente 6ue no QuerL 7nalLser A6ue ser/ visto adianteB. -epois de criarmos as consultas+ podemos coloc/-las no QuerL 7nalL2er e testar sua performance.
39
Q. ;ssa ferramenta inclui tr3s guias 6ue separam cada uma das tr3s op 1es principais. ;las so 8eneral+ #eto"r9-Libraries+ e -F-LibrarL Options. 7 seguir descreveremos cada uma delas.
Geral
7 guia geral Afigura acimaB tem duas se 1es. #a parte superior da tela voc3 pode especificar 6ual #et-LibrarL voc3 6uer usar como o protocolo padro de rede para este cliente. 7 segunda parte da tela utili2ada para especificar configura 1es opcionais do protocolo de rede/ Como voc3 deve se lembrar+ 6uando o SQL Server foi instalado+ voc3 teve 6ue especificar uma ou mais #etLibraries para serem instaladas. ;ste o soft"are utili2ado para estabelecer uma cone4o de rede entre o servidor SQL Server e o soft"are de cliente. O SQL Server usa as bibliotecas de rede (#et-Libraries* para se comunicar com um protocolo de rede espec%fico e enviar pacotes atravs da rede entre um cliente e um servidor. O servidor escuta simultaneamente em diversas portas+ en6uanto o cliente se comunica com o servidor usando uma #et-LibrarL espec%fica. =ara 6ue um cliente se conecte a um servidor+ ele deve usar alguma das #et-Libraries 6ue o servidor tem instaladas. Yoc3 pode fa2er com 6ue cliente e servidor usem a mesma #et-LibrarL de duas maneiras& adicionar no cliente+ uma #et-LibrarL 6ue est/ instalada no servidor; ou o contr/rio& no cliente+ instalar uma #et-LibrarL 6ue este:a instalada no servidor. #ormlamente+ mais f/cil adicionar a #et-LibrarL ao servidor+ do 6ue aos clientes. 7 configura o de uma #et-LibrarL no cliente+ para se comunicar com um servidor+ opcional. =or padro+ #amed =ipes a #et-LibrarL dos clientes+ instalada durante a instala o do SQL Server para computadores e4ecutando !indo"s #$ ou !indo"s >4. #amed =ipes deve funcionar bem na maioria dos casos. ,as+ se esse protocolo no conectar-se com seu servidor+ voc3 vai precisar de reconfigurar o cliente com a configura o correta. ;nto+ caso voc3 precise mudar o protocolo de rede para uma esta o de trabalho AclienteB+ voc3 pode fa2er isso selecionando o protocolo apropriado da lista =rotocolo de rede padro (-efault net"or9 =rotocol*. 7 #et-LibrarL de cliente padro para os clientes SQL Server fa2endo cone41es remotas #amed =ipes+ a 6ual no suportada em servidores rodando !indo"s >4. Clientes conectando-se com servidores rodando !indo"s >4 devem usar a ferramenta SQL Server Client #et"or9 .tilitL para e4ecutar uma das seguintes op 1es& 40
,udar a #et-LibrarL padro do cliente. -efinir uma entrada de configura o para uma #et-LibrarL de cliente na 6ual o servidor rodando !indo"s >4 este:a escutando. 7 parte de configura o do protocolo de rede da guia 8eral (8eneral* s5 usada em casos especiais. Yoc3 s5 vai utili2/-la se se ver em uma das seguintes situa 1es& 7s ferramentas de gerenciamento esro em uma esta o de trabalho rodando !indo"s #$+ conectando-se a um servidor e4ecutando !indo"s >?. Yoc3 precisa adicionar uma configura o e4clusiva de protocolo para as comunica 1es entre um servidor SQL Server espec%fico e um cliente e4ecutando as ferramentas de gerenciamento. O servidor SQL Server com o 6ual voc3 6uer se comunicar a partir de um cliente escuta em uma oprta no-padro. #ormalmente+ voc3 no usar/ esta op o. >ota@ =ara o processo Servidor+ o SQL Server escuta as #et-Libraries #amed =ipes+ soc9ets $C=/'=+ e ,utliprotocolo em computadores rodando !indo"s #$. ;ntretanto+ #amed =ipes no aceito em commputadores rodando !indo"s >4. O SQL Server instalado em computadores rodando !indo"s >4 escuta as #et-Libraries soc9ets $C=/'= e ,utliprotocolo do servidor. Se a cone4o local com o servidor Atal como um cliente e servidor na mesma m/6uinaB+ o SQL Server vai escutar ento a #et-LibrarL de ,em5ria Compartilhada do servidor.
41
DB-LibrarA .'tions
O principal ob:etivo da guia -F-LibrareL lhe permitir determinar se voc3 tem ou no a verso mais atual dos ar6uivos de -F-LibrarL instalados no cliente. Outra parte da guia -F-LibrarL Options formada pelas duas cai4as de verifica o 6ue podem ser usadas para configurar como a -F-LibrarL se comunica com o SQL Server. ;is o 6ue elas fa2em& 7utomatic 7#S' to O;,& Quando esta op o estiver selecionada+ a -F-LibrarL converte caracateres do formato O;, para 7#S' 6uando ocorre a comunica o do cliente para o servidor SQL Server+ e converte caracteres do formato 7#S' para O;, 6uando se comunica do servidor para o cliente. ;sta op o e4igida fre6uentemente poru6e o con:unto de caracteres utili2ado pelo SQL Server diferente da6uele utili2ado pelo sistema operacional do cliente. ;sta op o fa2 automaticamente a tradu o ade6uada entre os dois con:untos de caracteres. ;ssa op o deve estar selecionada se o cliente estiver e4ecutando !indo"s #$ ou !indo"s >4. Se estiver sendo utili2ado um cliente !indo"s O.4+ esta op o no deve ser selecionada. .se 'nternational Settings& Quando esta op o estiver selecionada+ permite-se 6ue a -F-LibrarL pegue as configura 1es de formato de data+ hora e moeda do sistema operacional local ao invs de utili2ar a configura o definida no c5digo do SQL Server. ;sta op o deve ser selecionada se o cliente estiver sendo e4ecutado no !indo"s >4 ou #$.
42
43
?. Selecione o mtodo de e4ecu o. So dispon%veis 6uatro op 1es diferentes de e4ecu o& ;4ecu o padro ACtrle$B mostra os resultados na forma de um ar6uivo te4to+ como na figura abai4o. T? ArunB e4ecuta a consulta+ 6ual6uer 6ue se:a o modo de e4ecu o selecionado. ;4ecutar para uma grade ACtrle-B fornece um formato mais agrad/vel de se visuali2ar+ em uma planilha+ uma estrutura parecida com tabelas Aum laLout de linha-colunaB. 7 figura abai4o mostra o resultado em uma grade. =lano de e4ecu o ACtrleLB+ mostrado na pr54ima figra+ mostra o processo real de e4ecu o 6ue ocorreu. ;ssa consulta no mostrou nada de interessante por6ue s5 havia uma tabela envolvida+ mas se fosse e4ecutada uma consulta mais comple4a com :un 1es internas ou e4ternas+ voc3 visuali2aria sua representa o gr/ifca. 44
7n/lise de fndice ('nde4 7nalLsis* provavelmente lhe avisar/ 6ue ele foi incapa2 de recomendar 6uais6uer %ndices. ;ntretanto+ se voc3 come ar a escrever consultas comple4as 6ue so usadas fre6uentemente+ voc3 pode col/-las nesse utilit/rio e test/-las para sugest1es de %ndice. Quando voc3 decide fa2er uma nova consulta+ voc3 pode fa23-la em outra :anela+ clicando no boto #e" QueL ACtrle#B+ ou ento apagar a consulta :/ feita e digitar novos comandos. #ote 6ue a cada nova :anela aberta+ ou se:a+ a cada consulta feita em outra :anela+ est/ sendo estabelecida uma nova cone4o. Observe na parte inferior da :anela do QuerL 7nalL2er Aao lado de ConnectionsB+ 6uantas so as cone41es estabelecidas. -urante a instala o+ se voc3 optou por licenciar o SQL Server como =er Server+ seu servidor s5 suportar/ tantas cone41es simultZneas 6uantas houverem sido definidas nessa fase da instala o. ;nto+ se voc3
voc3 deve fechar algumas cone41es A:anelas de consultaB antes de tentar abrir alguma nova+ ou ento+ no menu Tile \ Configure+ deve definir o n)mero m/4imo de cone41es aceitas+ na op o n)mero m/4imo de cone41es A,a4imum number of connectionsB.
45
Foo9s Online tem uma navega o simples+ como mostrado abai4o. O boo9s online lembra o ,,C ou o !'ndo"s ;4plorer. O lado es6uerdo tem uma viso de estrutura de /rvore en6uanto o lado direito tem um '; Anavegador 'nternet ;4plorerB. 7s p/ginas mostradas no lado direito so simples p/ginas H$,L Avoc3 pode inclusive visu2ali2ar seu c5digo fonteB.
46
47
48
Di8ardH
.ma viso uma tabela virtual 6ue representa uma maneira diferente de se visuali2ar uma tabela. ;la pode ser usada por v/rios motivos+ incluindo mas no limitada a mostrar apenas a informa o 6ue interessa em uma tabela muito grande. =ermiss1es de seguran a podem ser administradas para permitir 6ue apenas os pessoal de 0H ve:a toda a tabela 6ue mostra sal/rios+ en6uanto usu/rios normais en4ergam apenas a informa o b/sica na viso. Ye:a mais sobre vis1es.
i8ardH
O assistente -$S (-ata $ransformation Services - Servi os de $ransforma o de -ados* permite 6ue voc3 utili2e facilmente o -$S para importar ou e4portar informa 1es heterog3neas utili2ano OL; -F e O-FC; voc3 tambm pode copiar es6uemas e dados de bancos de dados entre bancos de dados relacionais. 49
-ado heterog3neo o dado 6ue arma2enado em diferentes formatos de ar6uivo. 7 utili2a o do -$S com OL; -F e O-FC te permite recuperar dados de um formato de ar6uivo e us/-los com outro formato.
Objetivos: - Conhecer os conceitos de aloca o de espa o usados pelo SQL Server; - $er uma viso geral dos itens 6ue comp1em o cat/logo do sistema; - Saber o 6ue um banco de dados e o 6ue ele contm.
. %at<logo do Sistema
.m 6anco de dados uma cole o de tabelas e outros ob:etos relacionados. ;4istem dois tipos de banco de dados& os bancos de dados do sistema so usados pelo SQL Server para operar e gerenciar o sistema e os bancos de dados do usu8rio so usados para arma2enar os seus pr5prios dados. O cat/logo do sistema composto de tabelas no banco de dados master#
tempd6 .sado para arma2enar tabelas tempor/rias e resultados intermedi/rios de consultas. 8eralmente o seu conte)do e4clu%do sempre 6ue um usu/rio se desconecta. ;le cresce automaticamente confome necess/rio. Seu tamanho inicial de @ ,b. msd6 .sado pelo servi o SQLServer7gent+ para controlar tarefas como replica o+ agendamento de tarefas+ bac9ups e alertas. Contm algumas tabelas de sistema+ 6ue arma2enam informa 1es usadas pelo SQL;4ecutive.Seu tamanho inicial RP ,b.
?abelas do Sistema
7s tabelas do sistema+ arma2enadas no banco de dados master e em cada banco de dados de usu/rio+ cont3m informa 1es sobre o SQL Server e sobre cada banco de dados de usu/rio. ;4istem RG tabelas em cada banco de dados 6ue formam o cat8logo do 6anco de dados. $odas come am com o prefi4o s&s e contm as seguintes informa 1es& 'nforma o sobre cada coluna de cada tabela+ e cada parZmetro de s&scolumns procedimento. =ara cada ob:eto de banco de dados Aviso+ regra+ default+ trigger+ s&scomments procedimentoB contm o te4to de sua defini o. 'nclui informa 1es sobre todas as restri 1es usadas no banco de s&sconstraints dados. s&sdepends 0egistra as depend3ncias entre ob:etos do banco de dados. $em uma linha para cada grupo de ar6uivos arma2enado em um s&s+ilegroups banco de dados. s&s+iles 'nforma 1es sobre cada ar6uivo de um banco de dados. 'nforma 1es sobre todas as restri 1es de chaves estrangeiras s&s+oreign/e&s encontradas em todas as tabelas de um banco de dados. s&s+ullte@tcatatalogs Lista todos os cat/logos de te4to completo para esse banco de dados. 'nforma o para cada %ndice criado e para cada tabela sem %ndices+ s&sinde@es alm de informa 1es para cada tabela 6ue possui colunas te@t ou image. s&sinde@/e&s 'nforma o sobreas chaves e as colunas de um %ndice. s&smem6ers 'nforma 1es sobre os membros de cada papel. 'nforma o sobre cada ob:eto do banco de dados Atabelas+ vis1es+ s&so6<ects procedimentos+ regras+ defaults e gatilhosB. 'nforma o sobre permiss1es atribu%das a usu/rios+ grupos e papis s&spermissions em um banco de dados. s&sprotects =ermiss1es atribu%das ] contas de seguran a. 'nforma o sobre toda restri o de integridade referencial usada numa s&sre+erences coluna ou tabela de um banco de dados. 'nforma o sobre cada tipo de dados Ado sistema ou definido pelo s&st&pes usu/rioB. 'nforma o sobre cada usu/rio 6ue pode ter acesso ao banco de s&susers dados. ;4istem tambm tabelas locali2adas apenas no banco de dados master+ 6ue comp1em o cat8logo do sistema. ;las cont3m as seguintes informa 1es& 'nforma 1es sobre cada unidade de aloca o gerenciada pelo SQL s&sallocations Server s&salt+iles 'nforma 1es sobre cada ar6uivo gerenciado pelo SQL Server 'nforma o sobre con:untos de caracteres (character sets* e ordens de s&scharsets classifica o (sort orders*. s&scon+igures? =arZmetros de configura o do SQL Server. 51
s&scurcon+igs s&sdata6ases s&sdevices s&slanguages s&sloc/in+o s&slogins s&smessages s&soled6users s&sper+in+o s&sprocesses s&sremotelogins s&sservers
'nforma o sobre os bancos de dados e4istentes. 'nforma o sobre os dispositivos+ tais como o dispositivo de fita. 'diomas suportados pelo servidor. $ravas Aloc9sB ativas. Contas de login. ,ensagens de erro do sistema Contm uma linha para cada usu/rio e senha mapeados em um servidor. 'nforma o sobre os monitores de performance. =rocessos em e4ecu o Contas de login remotas. Servidores remotos conhecidos.
Outro procedimento )til spAhelpd6. ;le mostra informa 1es sobre um banco de dados. Sinta(e@ spDhelpdb (Fanco de -ados* 4(em'lo@
spDhelpdb master
#ote 6ue todos os procedimentos arma2enados do sistema t3m nomes 6ue come am com KspDK Aabrev. de sLstem procedureB.7o e4ecutar um procedimento 6ue inicie com KspDK o procedimento ser/ procurado no banco de dados atual+ se no for encontrado ele ser/ procurado no banco de dados ,aster. 52
Quando um procedimento inicia com K4pDK ele um procedimento estendido+ 6uer di2er 6ue no foi escrito em SQL+ mas foi compilado como parte de uma -LL. =or e4emplo+ o procedimento 4pDcmdshell e4ecuta um programa. =ara e4ecutar o procedimento necess/rio 6ue este:a posicionado no banco de dados ,aster. Sinta(e 4pDcmdshell KnomeDar6uivoK Onde& nomeDar6uivo o nome do programa 6ue dese:a e4ecutar. 4(em'lo@
4pDcmdshell Kcalc.e4eK
=ara mais informa 1es consulte SQL Server Foo9s Online em $ransact-SQL %tem Stored =rocedures ou no Help e4iste t5picos para cada procedimento.
.b:etos
.m ob:eto contm dados ou interage com os dados. Cada ob:eto tem uma linha correspondente a tabela sLsob:ects.;4istem os seguintes tipos de ob:etos& Con:unto de linhas+ compostas de colunas. Cada coluna ,a6ela (table* arma2ena um item de dado. .ma forma alternativa de visuali2ar dados em uma tabela ou 2is=o (vie"* mais. .m valor 6ue inserido numa coluna caso no tenha sido De+ault informado um valor. "egra (rule* Yalida os dados 6ue podem ser inseridos em uma coluna. *rocedimento arma'enado .ma se6g3ncia de comandos SQL+ compilados e arma2enados (stored procedure* no banco de dados. .ma se6g3ncia de comandos e4ecutados automaticamente !atilho (trigger* 6uando os dados so modificados numa tabela.
Kndices
.m %ndice composto de ponteiros para os dados+ ordenados pelo valor de uma ou mais colunas. 7travs de um %ndice+ poss%vel acessar mais rapidamente os dados+ dado o valor de algumas colunas.
?i'os de dados
.m tipo de dados especifica 6uais os valores 6ue podem ser arma2enados em uma coluna.
&estri/es GconstraintsH
.ma restri o refor a a integridade dos dados em uma tabela+ ou entre duas tabelas+ controlando 6uais dados podem ser inseridos.
7r6uvios prim/rios& $odo banco de dados inclui ao menos um ar6uivo prim/rio+ 6ue feito para arma2enar todos os ob:etos de banco de dados+ tais como tabelas e %ndices. ;ste ar6uivo tambm usado para apontar para o resto dos ar6uivos 6ue constituem o banco de dados. 7r6uivo secund/rio& .m banco de dados s5 ter/ um ar6uivo secund/rio se o ar6vuivo prim/rio no for grande o suficiente para aram2enar todos os dados. .m banco de dados pode ter um+ ou muitos ar6uivos secund/rios. 7r6uivo de log& $odo banco de dados tem um ar6uivo de log+ 6ue usado para rgistrar todas informa 1es antes 6ue elas se:am escritas em um ar6uivo prim/rio ou secund/rio. ;sses dados so utili2ados para a:udar na recupera o+ no caso de um problema com o banco de dados. .m banco de dados pode ter um ou v/rios ar6uivos de log se o ar6uivo de log original ficar sem espa o.
Subdivis/es de es'ao
Cada banco de dados dividido ainda em& 0nidades Cada unidade de aloca o tem ?RP Ib Ameio megabLteB. .m banco de dados de ocupa sempre um n)mero inteiro de unidades de aloca o. aloca=o& .m e@tent tem SQ Ib. Cada ob:eto de banco de dados Atabelas+ %ndicesB ocupa um E@tents& n)mero inteiro de e@tents .ma p/gina A@IbB a unidade mais b/sica de arma2enamento. .m ob:eto do *8gina banco de dados sempre cresce em p/ginas e em alguns casos pode ficar (page*& fragmentado+ disperso em p/ginas distantes uma da outra.
$r,uivos 'rede+inidos
7o instalar o SQL Server+ so criados 6uatro bancos de dados+ com os seguintes nomes l5gicos& ,7S$;0& composto pelos ar6uivos master#md+ e mastlog#ld+ Aar6uivo prim/rio e de logB ,S-F& composto pelos ar6uivos msd6data#md+ e mastlog#ld+ Aar6uivo prim/rio e de log+ 6ue por sinal o mesmo ar6uivo de log do banco de dados masterB ,O-;L& composto pelos ar6uivos model#md+ e modellog#ld+. $;,=-F& composto pelos ar6uivos tempd6#md+ e templog#ld+
54
Objetivos: - 7prender a gerenciar bancos de dados+ criando+ alterando ou e4cluindo-os com o ;nterprise ,anager ou com comandos SQL; - 7prender a criar tabelas e alterar sua estrutura.
=or padro+ ao se criar um banco de dados+ o log de transa 1es criado com P?i do tamanho do banco de dados. =ode-se mudar o tamanho do mesmo. 0ecomenda-se alocar para o log de RJ a P?i do tamanho do banco de dados.
56
Onde& nomeA6ancodedados o nome do banco de dados 6ue se dese:a criar. nomeAlogicoAar:uivo um nome usado para referenciar o ar6uivo em 6uais6uer comandos SQL e4ecutados depois 6ue o banco de dados tiver sido criado. *"(MA"C& ;sta op o especifica o grupo de ar6uivos prim/rio. O grupo de ar6uivos prim/rio deve contre todas as tabelas de sistema para o banco de dados. .m banco de dados s5 pode ter um grupo de ar6uivo =0',70^. Se no for especificado algum+ o primeiro listado ser/ o prim/rio. AYeremos grupos de ar6uivos em breveB. 1(LE AME& 76ui deve-se especificar o caminho e nome do ar6uivo 6ue voc3 est/ criando. O ar6uivo deve estar locali2ado na mesma m/6uina 6ue o servidor SQL Server. ;le pode estar em uma unidade de disco diferente contanto 6ue este:a na mesma m/6uina. S(DE& ;specifica o tamanho em megabLtes 6ue voc3 6uer alocar para o seu banco de dados. O valor m%nimo R,F+ e o padro O,F para ar6uivos de dados+ e R,F para ar6uivos de log. AObs.& o padro a6ui di2 respeito ] cria o do banco de dados por comandos SQL. Como vimos+ 6uando criado pelo ;nterprise ,anager+ o padro R,F de tamanho tanto para ar6uivos de banco de dados 6uanto para ar6uivos de logB. MA$S(DE& ;sta op o lhe permite especificar o tamanho m/4imo at o 6ual seu ar6uivo pode crescer. O padro permite 6ue seu ar6uivo cres a at 6ue o disco este:a cheio. 1(LE!"O),E& ;specifica a ta4a de crescimento do ar6uivo. ;ste a:uste no pode e4ceder a configura o de ,7<S'h;. .m valor de J indica 6ue no permitido crescimento. O padro RJ por cento+ significando 6ue a cada ve2 6ue o ar6uivo cresce+ ser/ alocado um espa o adicional de RJ por cento para ele. .m banco de dados 6ue este:a em mais de um ar6uivo Ave:a 7r6uivos para maiores detalhesB+ s5 e4pandido depois 6ue o )ltimo ar6uivo estiver cheio. #a op o LO8 O# se aplicam as mesmas defini 1es acima+ e4ceto pelo fato de no ser o ar6uivo de dados+ mas sim o ar6uivo de log de transa 1es 6ue estar/ sendo criado. Caso LO8 O# se:a omitido+ criado um )nico ar6uivo de log com um nome gerado pelo sistema e um tamanho 6ue se:a P? por cento da soma dos tamanhos de todos os ar6uivos de dados para o banco de dados. >ota@ 7 op o TO0 LO7- pode ser adicionada antes da declara o LO8 O#. #o recomenda-se us/-la+ :/ 6ue e4iste apenas para compatibilidade com vers1es anteriores. ;sta op o coloca a op o +or dbo use onlA como verdadeira+ e o status como para carregar (+or load*. ;ssa op o no necess/ria+ pois no SQL Server G+ temos o comando 0;S$O0; pode recriar um banco de dados como parte de uma opera o de recupera o. Como e4emplo+ vamos criar um banco de dados+ entrando com o seguinte c5digo SQL no QuerL 7nalL2er.
C0;7$; -7$7F7S; ;4emploP O# =0',70^ A#7,;k;4emploPDdata+ T'L;#7,; k KC&E,SSQLGE-7$7E;4emploP.mdfK+ S'h; k RJ,F+ ,7<S'h; k R?,F+ T'L;80O!$H k P?iB LO8 O# A#7,; k ;4emploPDlog+ T'L;#7,; k KC&E,SSQLGE-7$7E;4emploP.ldfK+ S'h; k Q,F+ ,7<S'h; k S,F+ T'L;80O!$H k P,FB
57
58
59
0eorgani2e database& esta op o+ se selecionada+ fa2 uma espcie de desfragmenta o do banco de dados+ agrupando as p/ginas preenchidas+ e dei4ando as p/ginas livres no fim do ar6uivo. Shrin9 database files& esta op o disponnibili2a o espa o livre 6ue houver no fim do ar6uivo+ para o sistema operacional.
Onde& nomeA6ancodedados o nome do banco de dados 6ue se dese:a alterar. nomeAlogicoAar:uivo o nome l5gico dado ao ar6uivo na sua cria o. novoAtamanho o tamanho novo do banco de dados. ;sse tamanho fornecido em ,egaFLtes. =or e4emplo& Yamos fa2er o banco de dados aumentar para RP ,b. =ara isso+ digite&
7L$;0 -7$7F7S; ;4emploP ,O-'T^ T'L; A#7,; k ;4emploPDdata+ S'h; k RP,F B
=ara e4pandir o log de transa 1es do banco de dados ;4emploP para O,F+ fa a&
7L$;0 -7$7F7S; ;4emploP ,O-'T^ T'L; A#7,; k ;4emploPDlog+
60
Com o comando SQL 7L$;0 -7$7F7S;+ tambm poss%vel acrescentar ar6uivos ao banco de dados. =ara isso+ usa-se a op o 7-- T'L;. Yamos adicionar um ar6uivo secund/rio ao banco de dados ;4emploP+ com Q,F iniciais+ e tamanho m/4imo de G,F. Ye:a mais sobre ar6uivos secund/rios.
7L$;0 -7$7F7S; ;4emploP 7-- T'L; A#7,;kK;4emploPDdadosPK+ T'L;#7,;kKC&Emss6lGEdataE;4emploP.ndfK+ S'h;kQ,F+ ,7<S'h;kG,FB
=ara redu2ir o tamanho de um banco de dados+ usa-se o comando -FCC SH0'#I-7$7F7S;. ;ste comando redu2 o tamanho de todos os ar6uivos de dados no banco de dados mas no diminui o tamanho dos ar6uivos de log. Sinta(e
-FCC SH0'#I-7$7F7S; A#omeDFancode-ados +porcentagemDfinal (+ j#O$0.#C7$; \ $0.#C7$;O#L^l* B
Onde& nome6ancodedados o nome do banco de dados 6ue se dese:a alterar o tamanho. porcentagemA+inal a porcentagem de espa o livre a ser dei4ada no banco de dados depois 6ue o mesmo for redu2ido. O,"0 -A,E fa2 com 6ue o espa o liberado permane a nos ar6uivos de banco de dados. Se no especificado+ o espa o liberado tornado dispon%vel para o sistema operacional. ,"0 -A,EO LC fa2 com 6ue o espa o no utili2ado em ar6uivos de dados se:a liberado para o sistema operacional e encolhe o ar6uivo at o )ltimo espa o utili2ado+ redu2indo o tamanho do ar6uivo sem mover 6uais6uer dados. #enhuma tentativa feita para relocar colunas em p/ginas no-alocadas. porcentagemA+inal ignorado 6uando $0.#C7$;O#L^ for utili2ado. #o se pode diminuir o tamanho do banco de dados para um tamanho menor do 6ue o tamanho m%nimo do ar6uivo+ 6ue espcificado 6uando o ar6uivo foi originalmente criado. >ota@ O banco de dados no pode ficar menor 6ue o tamanho do banco de dados model. =ode-se tambm redu2ir todo o banco de dados usando o comando -FCC SH0'#IT'L;. ;ste comando redu2 o tamanho de um ar6uivo de dados espec%fico em um banco de dados. Sinta(e
-FCC SH0'#IT'L; AjnomeAar:uivo\idAar:uivol+ (novoAtamanho*(+ j;,=$^T'L; \ #O$0.#C7$; \ $0.#C7$;O#L^l*B
$odas as op 1es :/ foram e4plicadas para o comando -FCC SH0'#I-7$7F7S;+ com duas e4ce 1es& 76ui se especifica o nome do ar6uivo+ e no do banco de dados. O novo tamanho dado em ,F+ no em porcentagem como acima. 7 op o ;,=$^T'L; migra todos os dados do ar6uivo especificado para outros ar6uivos no mesmo grupo de ar6uivos. O SQL Server no permite mais 6ue dados se:am colocados no ar6uivo em 6ue foi utili2ada a op o ;,=$^T'L;. ;sta op o permite 6ue o ar6uivo se:a e4clu%do com o comando 7L$;0 -7$7F7S;+ com a op o 0;,OY; T'L;. >ota@ Quando se usa 6ual6uer das op 1es ;,=$^T'L;+ #O$0.#C7$; ou $0.#C7$;O#L^+ no se especifica o novo tamanho. Como e4emplo+ vamos redu2ir o ar6uivo secund/rio do banco de dados ;4emploP A;4emploP.ndfB+ 6ue chamamos de ;4emploPD-adosP para P,F. =ara isso+ entre com o seguinte comando no QuerL 7nalL2er&
-FCC SH0'#IT'L; A;4emploPD-adosP+PB
O banco de dados a ser redu2ido no precisa estar em modo de )nico usu/rio+ outros usu/rios podem estar trabalhando com o banco de dados 6uando ele redu2ido. 61
Onde& nomeA6ancodedados o nome do banco de dados 6ue se dese:a e4cluir. Yoc3 pode e4cluir um banco de dados ou m)ltiplos banco de dados. ;4emplo& =ara e4cluir v/rios banco de dados ao mesmo tempo + usa-se&
-0O= -7$7F7S; ;4emplo+ ;4emploP
Se e4ecutar este comando crie o banco de dados ;4emplo novamente+ pois iremos us/-los nos e4emplos posteriores.
$r,uivos
Como dito anteriormente+ o SQL Server cria bancos de dados e logs baseado em uma estrutura de ar6uivos ao invs da especifica o de -ispositivo (-evice* de vers1es anteriores. 'sso permite 6ue os ar6uivos de bancos de dados e de log se:am escalados com maior facilidade. Cada ar6uivo pode ser usado por apenas um banco de dados. ;le no pode ser compartilhado entre v/rios bancos de dados. Quando um banco de dados for e4clu%do+ se:a atravs de -0O= -7$7F7S; ou do ;nterprise ,anager+ o ar6uivo associado tambm e4clu%do. O SQL Server tem tr3s tipos de ar6uivos& 7rim<rio1 O ar6uivo prim/rio o ponto de partida do banco de dados e aponta para o resto dos ar6uivos no banco de dados. $odo banco de dados deve ter ao menos um ar6uivo de dados prim/rio. 7 e4tenso padro e recomendada 1md+. Secund<rio1 7r6uivos de dados secund/rios so os outros Ano-prim/riosB ar6uivos no banco de dados. 7lguns bancos de dados podem no ter 6uais6uer ar6uivos secund/rios de dados+ en6uanto outros podem ter m)ltiplos ar6uivos secund/rios. 7 e4tenso padro e recomendada 1nd+. Log1 .m ar6uivo de log uma /rea de arma2enamento para todas as mudan as nos bancos de dados. $do banco de dados deve ter pelo menos um ar6uivo de log. 7 e4tenso recomendada 1ld+. >ota@ o SQL Server no te for a a usar a e4tenso recomendada para os ar6uivos. ;las e4istem simplesmente para te a:udar a gerenciar seus ar6uivos de bancos de dados.
Gru'os de ar,uivos
Os ar6uivos de bancos de dados so agrupados para fins de aloca o e administra o. 7lguns sistemas podem ter seu desempenho aumentado pelo controle do arma2enamento de dados e %ndices em unidades e disco espec%ficas. 8rupos de ar6uivos podem au4iliar nesse processo. O administrador de sistema pode criar grupos de ar6uivos para cada unidade de disco+ e ento definir 6ue certas tabelas+ %ndices+ entre outros ob:etos+ se:am arma2enados em grupos de ar6uivos espec%ficos. Quando um banco de dados criado+ o grupo de ar6uivos prim/rio contm o ar6uivo prim/rio. Outros grupos de ar6uivos Agrupos de ar6uivos definidos pelo usu/rioB podem ser criados e agrupados para fins de aloca o e administra o. Yoc3 cria um grupo de ar6uivos como uma cole o nomeada de ar6uivos. #enhum ar6uivo pode ser membro de mais de um grupo de ar6uivos. ;4istem tr3s tipos de grupos de ar6uivos 7rim<rio1 O grupo de ar6uivo prim/rio contm o ar6uivo de dados prim/rio e 6uais6uer outros ar6uivos de dados no atribu%dos a outros grupos de ar6uivos. $odas as tabelas de sistema so arma2enadas no grupo de ar6uivos prim/rio. De+inido 'elo usu<rio G3ser-de+inedH1 8rupos de ar6uivos definidos pelo usu/rio so criados usando a palavra-chave T'L;80O.= 6uando se utili2a os comandos C0;7$; -7$7F7S; ou 7L$;0 -7$7F7S;. 7adro1 O grupo de ar6uivos padro contm todas as tabelas e %ndices 6ue no t3m um grupo de ar6uivo especificado 6uando eles so criados. ;m cada banco de dados+ apenas um grupo de ar6uivos de cada ve2 pode ser o grupo de ar6uivos padro. >ota@ 7r6uivos de log nunca fa2em parte de um grupo de ar6uivos. O espa o do log gerenciado separadamente do espa o dos dados. Yamos agora criar um grupo de ar6uivos chamado 8rupoRD;4emploP no banco de dados ;4emploP+ e ento adicionar um ar6uivo secund/rio chamado $este ao banco de dados ;4emploP+ com o nome f%sico de $este8rupoRD;4emploP.ndf+ com O,F de tamanho+ mas este ar6uivo ser/ adicionado ao grupo 8rupoRD;4emploP. ;ntre com o seguinte c5digo SQL&
7L$;0 -7$7F7S; ;4emploP 7-- T'L;80O.= 8rupoRD;4emploP 8O
63
Apostila Microsoft SQL Server 7.0 7L$;0 -7$7F7S; ;4emploP 7-- T'L; A#7,;k$este+ T'L;#7,;kKC&E,SSQLGE-7$7E$este8rupoRD;4emploP.ndfK+ S'h;kO,FB $O T'L;80O.= 8rupoRD;4emploP 8O
#ote 6ue o parZmetro $O T'L;80O.= simplesmente especifica o grupo em 6ue o ar6uivo criado deve ser adicionado. 7gora+ vamos usar o comando C0;7$; -7$7F7S; para criar um ar6uivo de dados prim/rio+ um grupo de ar6uivos definido pelo usu/rio+ e um ar6uivo de log. ;nto+ emitiremos o comando 7L$;0 -7$7F7S; para mudar o grupo de ar6uivos padro para o grupo de ar6uivos definido pelo usu/rio.
.S; ,7S$;0 8O -- dois tra os indicam um coment/rio -- C0'70 O F7#CO -; -7-OS C0;7$; -7$7F7S; ;4emplo#ovo O# =0',70^ A#7,;k;4emplo#ovoDdata+ T'L;#7,; k Kc&Emss6lGEdataE;4emplo#ovo.mdfK+ S'h;kRJ,F+ ,7<S'h;kR?,F+ T'L;80O!$HkRJiB+ T'L;80O.= ;4emplo#ovoDT8R A#7,;k;4emplo#ovoDT8RD-7$R+ T'L;#7,;kKc&Emss6lGEdataE;4emplo#ovoDT8RD-7$R.ndfK+ S'h;kO,F+ ,7<S'h;kRJ,F+ T'L;80O!$HkRJiB+ A#7,;k;4emplo#ovoDT8RD-7$P+ T'L;#7,;kKc&Emss6lGEdataE;4emplo#ovoDT8RD-7$P.ndfK+ S'h;kO,F+ ,7<S'h;kRJ,F+ T'L;80O!$HkRJiB LO8 O# A#7,;k;4emplo#ovoDlog+ T'L;#7,;kKc&Emss6lGEdataE;4emplo#ovo.ldfK+ S'h;k?,F+ ,7<S'h;kR?,F+ T'L;80O!$HkRJiB 8O -- .se 7L$;0 para mudar o grupo de ar6uivos padro 7L$;0 -7$7F7S; ;4emplo#ovo ,O-'T^ T'L;80O.= ;4emplo#ovoDT8R -;T7.L$ 8O
%riando ?abelas
.ma tabela (table* um ob:eto do banco de dados+ composto de 2ero ou mais linhas (ro"s*+ contendo os dados+ organi2ados em uma ou mais colunas (columns*. =ara criar a tabela+ voc3 pode usar o ;nterprise ,anager ou comandos SQL --L A-ata -efinition Language - linguagem de defini o de dadosB. 7ntes de criar suas tabelas+ importante levar em conta um bom pro:eto do banco de dados+ 6ue determina 6uais as informa 1es a serem guardadas. 7p5s criar as tabelas+ voc3 utili2a comandos SQL -,L A-ata ,anipulation Language - linguagem de manipula o de dadosB para inserir novas linhas numa tabela+ alterar colunas das linhas e4istentes+ e4cluir linhas e consultar dados.
?i'os de Dados
Cada coluna tem um tipo de dados (datatLpe*+ 6ue determina 6ue tipo de informa o Acaracteres+ n)meros+ datas/horasB pode ser colocada na coluna e 6uais as caracter%sticas desses dados. O tipo determinado 6uando a tabela criada e no pode ser alterado posteriormente. Yoc3 pode usar tipos de dados do sistema (sLstem datatLpes*+ predefinidos+ ou criar novos tipos de dados+ chamados tipos de dados do usu8rio (user datatLpes*+ baseados nos tipos pree4istentes. Os tipos de dados e4istentes so& 7ara dados ?i'o ?aman5o Caractere charAnB+ varcharAnB+ nvarcharAnB? ncharAnB at n bLtes #umrico e4ato decimalAp+eB ou numericAp+eB -depende#umrico apro4imado +loat+ real @+ Q bLtes #umrico inteiro int? smallint? tin&int Q+ P+ R bLte ,onet/rio mone&? smallmone& @+ Q bLtes -ata e hora datetime? smalldatetime @+ Q bLtes Fin/rio 6inar&AnB? var6inar&AnB n bLtes $e4to e imagens te@t? image? nte@t -vari/velOutros 6it? timestamp R bit+ @ bLtes =ara dados contendo caracteres+ charAnB arma2ena um n)mero fi4o de caracteres. =or e4emplo+ uma coluna do tipo char(F5% tem sempre OJ caracteres. Se forem informados menos+ o restante completado com espa os. M/ o tipo varcharAnB arma2ena uma 6uantidade vari/vel de caracteres+ at o m/4imo informado. Os tipos ncharAnB e nvarcharAnB+ arma2enam dados .nicode+ de comprimento fi4o ou vari/vel+ e usam o con:unto de caracteres .#'CO-; .CS-P. Os tipos Cnumricos e4atosC+ decimal e numeric+ permitem arma2enar dados e4atos+ sem perdas devidas a arredondamento. 7o usar esses tipos+ voc3 pode especificar uma precis=o+ 6ue indica 6uantos d%gitos podem ser usados no total e uma escala+ 6ue indica 6uantos d%gitos podem ser usados ] direita do ponto. =or e4emplo+ decimalA>+PB permite guardar G d%gitos antes do ponto decimal e P ap5s+ num total de >+ assim o maior valor poss%vel >>>>>>>+>>. Os tipos Cnumricos ine4atosC+ +loat e real+ arma2enam dados numricos+ mas nem sempre mantm a preciso suficiente para arma2enar corretamente n)meros de v/rios d%gitos. O tipo mone& usado para valores monet/rios+ ocupando @ bLtes em disco e permitindo valores entre ->PP.OOG.PJO.S@?.QGG+?@J@ e e>PP.OOG.PJO.S@?.QGG+?@JG A>PP trilh1esB. O tipo smallmone& permite valores entre - PRQ.GQ@+OSQ@ e ePRQ.GQ@+OSQG APRQ milB e ocupa Q bLtes em disco. -os tipos inteiros+ int usa OP bits AQ bLtesB+ permitindo arma2enar at e/-P.RQG.Q@O.SQG+ smallint usa RS bits AP bLtesB permitindo e/-OPGSG e tin&int usa @ bits AR bLteB+ permitindo n)meros no-negativos de J a P??. O tipo datetime arma2ena valores contendo a data e hora+ com preciso de R/OJJ de segundo+ entre Rm de :aneiro de RG?O e OR de de2embro de >>>> Ao sculo sempre arma2enadoB. O tipo smalldatetime ocupa menos espa o e arma2ena datas e horas de Rm de :aneiro de R>JJ at S de :unho de PJG>+ com preciso de R minuto. 65
$ipos bin/rios so usados para dados 6ue o SQL Server no interpreta+ por e4emplo+ o conte)do de um ar6uivo bin/rio. O tipo te@t usado para colunas com dados CmemoC+ ou se:a+ com te4to de tamanho vari/vel; o tipo nte@t arma2ena dados .nicode de tamanho vari/vel. O tipo image arma2ena imagens+ tambm de tamanho vari/vel. Os tipos te@t e nte@t+ arma2enam dados de tamanho vari/vel+ mas podem arma2enar R.JGO.GQR.@PO caracteres+ para o caso do nte@t+ e P.RQS.Q@O.SQG caracteres para o caso do tipo te@t. ;n6uanto isso+ os tipos varchar e nvarchar arma2enam CsomenteC @JJJ caracteres AvarcharB ou QJJJ caracteres AnvarcharB O tipo 6it arma2ena valor R ou J. .ma coluna do tipo timestamp no pode ser alterada pelo usu/rio. ;la definida automaticamente com a data e hora atual 6uando a linha inserida ou atuali2ada.
Onde& nomeAtipo o nome do tipo de dado 6ue dese:a criar. tipoAdado o tipo de informa o 6ue ira conter este tipo criado. ;4emplo& char+ int+..etc. valorAnull identifica se este tipo pode ou no conter valores nulos. ;4emplos& #o QuerL 7nalL2er na lista C-FC+ selecione o banco de dados C;4emploC. -igite e e4ecute os seguintes comandos&
spDaddtLpe cpf+ KcharARRBK go spDaddtLpe nomepessoa+ KcharA?JBK go spDaddtLpe valorgrande+ KnumericAR?+PBK go spDaddtLpe tipooperacao+ KSmall'ntK+ #O#.LL
7 palavra reservada go indica final de comando. Com isso+ usar o tipo KcpfK+ por e4emplo+ o mesmo 6ue usar charARRB+ mas mais intuitivo e f/cil de entender. Se voc3 especificar #O#.LL no tipo significa 6ue ele no aceita valores nulos. Yoc3 pode e4cluir um tipo com spAdropt&pe& Sinta(e
spDdroptLpe nomeDtipo
Onde& nomeAtipo o nome do tipo de dados 6ue dese:a e4cluir. ;4emplo& =ara e4ecutar este e4emplo continue posicionado no banco de dados ;4emplo.
spDdroptLpe nomepessoa
=ara criar+ alterar ou e4cluir tipos com o ;nterprise ,anager+ voc3 deve abrir ome-do-6anco-de-dados cli6ue em .ser -efined -atatLpes com o boto direito cli6ue em &e+res5 Apara atuali2ar os dados B e com o boto direito cli6ue em >e 3serDe+inedData?A'e111. Ser/ mostrada a seguinte tela&
66
K#ame K indica o nome do tipo de dados. K-ata tLpeK o tipo de informa o 6ue ir/ conter esse tipo criado. KLengthK indica o tamanho do tipo de dado. K7llo" #ullK se esta op o estiver marcada indica 6ue o tipo criado aceita valores nulos. 7s op 1es K-efaultK e K0uleK permitem 6ue voc3 selecione uma regra ou um default+ se houver algum+ e ligue-o ao tipo de dados definido por voc3. =ara apagar algum tipo de dados+ selecione-o do lado direito A6uando voc3 estiver com .ser -efined -ata$Lpes selecionado do lado es6uerdo do ;nterprise ,anagerB. Cli6ue com o boto direito no tipo de dados 6ue voc3 6uer e4cluir+ e ento selecione a op ao -elete. 7pague todos os tipos de dados e crie o tipo de dados Se4o. ;m C#ameC colo6ue dmSe4o+ C-ata $LpeC selecione char+ CLengthC colo6ue R. ,ais tarde veremos como restringir o valor de um tipo.
67
#ote 6ue definimos algumas colunas com o tipo char+ como C=T e .T+ por6ue elas geralmente t3m tamanho fi4o. M/ outras como #ome+ Cidade e =a%s+ geralmente t3m tamanho vari/vel+ por isso+ para economi2ar espa o no banco de dados+ usamos varchar. 7 coluna -efault especifica um valor default 6ue inserido caso nada tenha sido informado. #o caso da data de cadastro+ usamos a fun o getdateAB+ 6ue retorna a data do dia. #o caso do pa%s+ o default a string CFrasilC caso nada se:a informado. 7gora cli6ue no boto CSaveC para salvar a tabela. >ota@ Yoc3 pode ter um identificador e4clusivo em todo o banco de dados+ para uma coluna. =ara isso+ selecione o tipo de dados da coluna como uni,ueidenti+ier+ e mar6ue a cai4a de verifica o 's0o"8uid. 'sso far/ com 6ue se:a atribu%do um valor default (-efault Yalue* igual a Ane"idABB. Ye:a mais sobre identificadores globalmente e4clusivos.
#ote 6ue a lista de colunas delimitada com par3nteses. =ara cada coluna+ deve-se informar #.LL ou #O$ #.LL+ indicando se esta permite valores nulos ou no. Caso essa op o no se:a informada+ como no caso de K#omeK e K=a%sK acima+ o SQL Server assume 6ue a coluna #O$ #.LL AgeralmenteB. =ara saber se o SQL usa #.LL ou #O$ #.LL por default e4ecute o procedimento s'M dbo'tion. Se aparecer na primeira linha KK7#S' null defaultK indica 6ue o valor default #.LL+ se no aparecer esta string a op o default #O$ #.LL. Sinta(e
spDdboption nomeDbancodedados Kansi null defaultK+ opcao
68
Onde& nomeA6ancodedados o nome do banco de dados em 6ue se dese:a verificar a op o default. opcao se for true o valor default ser/ #.LL+ se for false o valor default ser/ #O$ #.LL. Observa o& O padro 7#S' utili2a #ull como default+ ao desativar esta op o no SQL+ pode ser 6ue esta op o na sua tabela no este:a de acordo com o 6ue voc3 esperava. Ye:a outros parZmetros de spDdboption em C-efinindo op 1es do banco de dadosC ;4ecute os seguintes comandos para criar duas tabelas no banco de dados ;4emplo&
C0;7$; $7FL; -epartamento A Cod-epartamento int+ #ome varcharA?JB+ Cod-eptSuperior int #ull B go C0;7$; $7FL; Tuncionario A CodTuncionario int+ #ome varcharA?JB+ Cod-epartamento int+ 0amal int #ull+ Salario moneL+ -ata7dmissao datetime+ -ataCadastro datetime #O$ #.LL -;T7.L$ AgetdateABB+ Se4o charARB B
69
Onde& 6ancoAdados o nome do banco de dados a 6ue a tabela pertence. ;ssa op o opcional+ ela ser/ usada somente 6uando se estiver posicionado num determinado banco de dados e se dese:a e4cluir a tabela de outro banco de dados. nomeAta6ela o nome da tabela 6ue se dese:a remover. ;ste procedimento pode ser usado para e4cluir v/rias tabelas ao mesmo tempo. ;4emplos&
-rop $able ClienteR
ou
-rop $able ;4emplo.dbo.clienteR
O nome ou o dono de uma tabela tambm podem ser modificados. Quando voc3 fa2 isso+ tambm deve-se mudar o nome da tabela em 6uais6uer gatilhos+ procedimentos arma2enados+ scripts SQL+ ou outro c5digo de programa o 6ue utili2e o nome ou propriet/rio antigo da tabela. >ota@ N importante considerar 6ue a mudan a de tipo de dados em uma coluna pode causar truncamento dos dados+ ou mesmo ser imposs%vel de ser feita Apor e4emplo+ se voc3 6uiser converter um tipo char para um tipo inteiro e :/ houver valores no-numricos arma2enados nessa colunaB.
Onde& 6ancoAdados o nome do banco de dados a 6ue a tabela pertence. ;ssa op o opcional+ ela ser/ usada somente 6uando se estiver posicionado num determinado banco de dados se e dese:a e4cluir a tabela de outro banco de dados. nomeAta6ela o nome da tabela 6ue dese:a alterar. nomeAcoluna a coluna 6ue se 6uer alterar. novoAtipoAdeAdados o tipo de dados 6ue a coluna aceitar/ a partir de agora. 71
!'$H CH;CI \ !'$H #OCH;CI ;specificam se os dados na tabela devem ou no ser validados contra uma nova ou reabilitada restri o TO0;'8# I;^ ou CH;CI. Se no especificada+ assume-se !'$H CH;CI para novas restri 1es e !'$H #OCH;CI para restri 1es reabilitadas. Ye:a mais sobre restri 1es. ;4emplo&
7L$;0 $7FL; Cliente 7-- ender varcharA?JB #.LL 8O 7L$;0 $7FL; Cliente 7L$;0 COL.,# C'-7-; Y70CH70 AP?B
>ota@ =erceba 6ue ao e4ecutar o comando acima+ voc3 recebe um aviso 6ue di2& CCuidado& ,udar 6ual6uer parte do nome de um ob:eto pode invalidar scripts e procedimentos arma2enados.
72
$ambm poss%vel criar um script com todas as tabelas do banco de dados+ ou com todos os ob:etos. =ara isso+ d3 uma olhada em C-ocumentando a cria o de bancos de dadosC Averemos outros tipos de ob:etos mais tardeB.
.'/es dis'on6veis
7 seguir+ temos uma lista das op 1es mais comuns de banco de dados. =ara maiores detalhes em cada uma das op 1es+ ve:a no Foo9s Online. 7s op 1es marcadas com um asterisco AdB indicam 6ue essa op o pode ser configurada pelo ;nterprise ,anager; caso contr/rio+ uma op o s5 alter/vel atravs de procedimentos arma2enados. N$>SI null de+ault Controla se o valor padro para todos os tipos de dados #.LL. 7 ,icrosoft p1e o padro em #O$ #.LL. Se esta op o estiver em $0.;+ o padro ser/ #.LL para o banco de dados. Quando se entrar com o comando C0;7$; $7FL;+ a no ser 6ue o criador indi6ue e4plicitamente #O$ #.LL+ a regra se aplicar/ tambm ] cria o da tabela. $>SI >ulls Quando em $0.;+ as compara 1es de #.LL com 6ual6uer valor vo retornar um #.LL. Quando em T7LS;+ apenas compara o de valores no-.nicode retornaro $0.; se e somente se ambos valores forem nulos. O padro para essa op o T7LS;. $>SI Darnings Quando em $0.;+ avisos de erro so e4ibidos+ 6uando ocorrerem condi 1es tais como diviso por 2ero ou valores nulos aparecerem em fun 1es de agrega o. =or padro+ T7LS;. Nautoclose Quando em $0.;+ o banco de dados fechado automaticamente 6uando o )ltimo usu/rio encerra a cone4o. 'sto muito )til para ambientes pe6uenos+ mas deve ser evitado nos casos em 6ue cone41es so constantemente feitas e encerradas. 7 6uantidade de carga adicional gerada pela abertura e fechamento de um banco de dados poe ter efeitos negativos em um ambiente de produ o. autos5rin! Quando em $0.;+ o SQL Server periodicamente redu2ir/ os ar6uivos do banco de dados se necess/rio. Ndbo use onlA Quando em $0.;+ apenas o dbo Apropriet/rio do banco de dadosB tem acesso ao banco de dados. .se esta op o 6uando estiver e4ecutando reparos nem bancos de dados. 73
'ublis5ed .tili2ado para relica o+ 6uando pu6lished estiver em $0.;+ indica 6ue a publica o est/ habilitada. Colocar essa op o em T7LS; desabilita a publica o. Nread onlA Se $0.; indica 6ue o banco de dados somente para leitura. T7LS; permite acesso para leitura/escrita. Nrecursive triggers Quando $0.;+ permitido o disparo de gatilhos recursivos (recursive triggers*. Quando T7LS; Ao padroB+ gatilhos no podem disparar recursivamente. .m gatilho recursivo a6uele 6ue dispara na tabela 6ue o originou+ causando uma atuali2a o em outra tabela+ a 6ual causa uma atuali2a o na tabela 6ue originou o gatilho. Nselec into ) bul! co'A =ermite 6ue o banco de dados aceite a 1es no registradas em log+ tais como S;L;C$ '#$O e o utilit/rio FC= fa2em. Nsingle user =ermite 6ue apenas um usu/rio acesse o banco de dados. subscribed Quando em $0.;+ o banco de dados pode ser assinado para publica o. Ntorn 'age detection Se $0.;+ o SQL Server detectar/ leituras incompletas em disco+ e far/ com 6ue se:am marcadas. Quedas de energia ou outros defeitos podem causar essas leituras incompletas. ?runcate log on %5ec!'oint "Ntrunc1 Log on c5!'t1# Quando estiver em $0.;+ o SQL Server trunca o log de transa 1es toda ve2 6ue encontrar um chec9point. ;sta op o usada fre6uentemente para desenvolvimento+ fa2endo com 6ue o log de transa 1es no fi6ue cheio com tanta fre6u3ncia. Yoc3 no deve utili2ar esta op o em um sistema CrealC.
=or e4emplo&
spDdboption KpubsK+ Kread onlLK+ KtrueK
=ara ver o estado atual das op 1es do banco de dados 'ubs+ entre com o seguinte comando&
spDdboption KpubsK
;mbora lhe se:a permitido e4cluir o banco de dados de sistema msdb+ voc3 no deve e4clu%-lo se usa ou pretende usar& 0eplica o SQL Server 7gent 7ssistente de cria o de p/ginas !eb Hist5rico de bac9ups Servi os de transforma o de dados Quando e4cluir um banco de dados+ considere os seguintes fatos& Com o mtodo SQL -0O= -7$7F7S;+ voc3 pode e4cluir v/rios bancos de dados de uma ve2. O ;nterprise ,anager s5 lhe permite e4cluir um banco de dados de cada ve2. -epois 6ue voc3 e4cluir um banco de dados+ 6ual6uer '- de login 6ue usava o banco de dados e4clu%do como seu banco de dados padro+ usar/ agora o banco de dados master. Yoc3 deve S;,=0; fa2er bac9up do banco de dados master+ sempre 6ue 6ual6uer novo banco de dados for adicionado ou e4clu%do.
76
S. Selecione os ob:etos 6ue voc3 dese:a criar da :anela 6ue aparece a seguir+ mostrada abai4o&
77
Yoc3 pode prever o ar6uivo primeiro ou simplesmente clicar em OI para salv/-lo em um ar6uivo.
O - %onsultando Dados
Viso Geral do ?ransact-SQL $ Sinta(e do S4L4%? Mani'ulando 4('ress/es %ondi/es de 7es,uisa .utros &ecursos
Objetivos: - ;ntender a diviso de comandos da linguagem $ransact-SQL; - 7prender a usar o comando S;L;C$ e suas v/rias op 1es para fa2er consultas aos dados.
$ Sinta(e do S4L4%?
O comando S;L;C$ recupera dados de uma ou mais tabelas. 7 sua sinta4e mais simples pode ser resumida da forma& Sinta(e@
S;L;C$ listaAdeAcolunas T0O, listaAdeAta6elas !H;0; condiBes
Onde 78
7 listaAdeAcolunas especifica 6uais colunas sero retornadas como resultado+ separadas por v%rgulas ou um asterisco AdB 6ue indica todas as colunas da tabela. 7 cl/usula T0O,+ com uma listaAdeAta6elas+ especifica 6uais tabelas sero consultadas. 7 cl/usula !H;0; especifica condiBes 6ue devem ser satisfeitas pelas linhas das tabelas. O comando Select pode ser utili2ado para mostrar o conte)do de vari/veis+ valores literais+ etc... Como e4emplo e4ecute o seguinte comando no QuerL 7nalL2er&
Select UUY;0S'O#
O resultado ser/&
UUYersion uma vari/vel global do SQL Server 6ue contm a verso do SQL Server utili2ado. =ara mostrar um valor literal digite o comando&
Select K$esteK
O resultado ir/ mostrar todas as colunas e todas as linhas da tabela KauthorsK Aou se:a+ todo o seu conte)doB+ como abai4o Aalgumas linhas e colunas foram omitidasB&
79
#ote a mensagem CPO ro"AsB affectedC (PO linhas afetadas*. 'sso indica 6uantas linhas foram retornadas pelo S;L;C$. Yoc3 poderia escolher ver os resultados em uma grade+ ao invs de em modo te4to. =ara isso basta selecionar+ clicando na seta ] direita no %cone+ a op o C0esults in 8ridC ACtrle-B. Caso voc3 no 6ueira selecionar na lista K-FK o banco de dados a 6ue a tabela 6ue dese:a procurar pertence+ ser/ necess/rio indicar no comando a 6ual banco de dados a tabela pertence+ e o comando seria o seguinte&
select d from pubs..authors
#essa tabela de e4emplo+ a coluna KauDfnameK o primeiro nome do autor+ KauDlnameK o sobrenome (last name* e KauDidK o n)mero de identifica o. 7gora suponhamos 6ue voc3 6uer consultar apenas essas tr3s primeiras colunas+ omitindo a informa o de telefone AphoneB e endere o AaddressB. O KdK no comando acima especifica 6ue todas as colunas da tabela so retornadas+ mas voc3 pode listar s5 as 6ue so dese:adas. Cli6ue na p/gina QuerL+ e altere o comando anterior para o seguinte&
select auDid+ auDfname+ auDlname from authors
;4ecute o comando. 7gora apenas as colunas KauDidK+ KauDfnameK e KauDlnameK so retornadas+ nessa ordem& 80
#ote 6ue a ordem das colunas no precisa ser a mesma ordem presente na defini o da tabela.-e fato+ na maioria das aplica 1es bem constru%das+ a ordem das colunas na tabela no tem a menor importZncia. Yoc3 tambm pode mudar o cabe alho das colunas retornadas+ criando um alias de coluna. ;4ecute o seguinte comando&
select auDid 'dentif+ auDfname #ome+ auDlname Sobrenome from authors
O resultado ser/ o mesmo do comando anterior+ mas a coluna KauDidK aparece como 'dentif+ KauDfnameK como #ome etc.
7 palavra reservada as pode ser utili2ada para indicar um alias+ mas opcional. =or e4emplo&
select auDid as 'dentif+ auDfname as #ome+ auDlname as Sobrenome from authors
3sando %ondi/es
Os comandos 6ue :/ usamos no t3m a cl/usula !H;0;. #esse caso+ todas as linhas da tabela so retornadas. Se o !H;0; estiver presente+ ele especifica uma condi o 6ue seleciona as linhas+ e apenas as 6ue satisfa2em essa condi o sero mostradas. =or e4emplo+ se 6uisermos os autores 6ue moram na Calif5rnia+ podemos consultar as linhas cu:a coluna KstateK AestadoB tem o valor KC7K&
select auDfname+ auDlname+ citL+ state from authors "here statekKC7K
O resultado ser/&
81
#ote 6ue o resultado mostra apenas R? linhas AR? ro"s affectedB e no PO+ 6ue o total da tabela. 7s linhas 6ue aparecem so apenas as 6ue satisfa2em a consulta. ;4istem v/rios tipos de condi 1es de pes6uisa+ como veremos.
Mani'ulando e('ress/es
.m comando S;L;C$ pode retornar nas colunas de resultado uma coluna da tabela+ ou um valor calculado. =or e4emplo+ a tabela titles contm os t%tulos de livro AtitleB e os pre os de cada um ApriceB. Se 6uisermos ver como fica o pre o de cada um ap5s um aumento de RJi+ pode ser feito o seguinte&
select price =re o + Aprice d R.RB C=re o com RJi de aumentoC+ title from titles
#ote 6ue C=re o com RJi de aumentoC o nome do cabe alho da e4presso Aprice d R.RB+ como o nome colocado possui espa os+ foi necess/rio coloca-lo entre aspas. Ou se:a+ a segunda coluna + cu:o nome C=re o com RJi de aumento C mostra o resultado de price d R.R para cada linha. Yoc3 pode tambm usar v/rios operadores em e4press1es com colunas numricas& adi o AeB+ subtra o A-B+ multiplica o AdB+ diviso A/B e m5dulo AiB. O m5dulo s5 pode ser usado com tipos inteiros e calcula o resto da diviso de dois n)meros inteiros A;4.& RO i Q k RB.
Fun/es matem<ticas
7lm de operadores+ voc3 pode usar fun 1es matem/ticas do SQL Server+ por e4emplo& 7FSAvalorB retorna o valor absoluto Asem sinalB de um item. =O!;0Avalor+pB retorna o valor elevado ] pot3ncia p. 0O.#-Avalor?nB arredonda o valor para n casas decimais. SQ0$ AvalorB retorna a rai2 6uadrada do valor especificado. =' valor constante O.RQR?>P?SO?@>G>O =ara outras fun 1es+ consulte o help do $ransact-SQL em K,ath functionsK. =or e4emplo+ para arredondar o valor do pre o de cada livro para duas casas decimais+ pode ser feito o seguinte&
Select price =re o + 0O.#-Aprice+ RB C=re o com R casa
82
Apostila Microsoft SQL Server 7.0 decimalC+ title $%tulo from titles
O resultado ser/&
Fun/es de caracteres
Yoc3 pode usar fun 1es para manipular dados do tipo caracter Achar ou varcharB+ por e4emplo+ para pegar uma sub-string de uma se6g3ncia de caracteres. ; voc3 pode usar o operador e para concatenar dois valores de tipo caracter. =or e4emplo+ digite o seguinte comando&
select auDfname e K K e auDlname K#ome completoK+ citL e K+ K e state KCidadeK from authors
O resultado ser/&
83
O 6ue fi2emos foi concatenar o primeiro nome e segundo nome do autor+ inserindo um espa o no meio AauDfname e K K e auDlnameB+ para gerar a coluna #ome completo e depois :untar o nome da cidade com o nome do estado+ inserindo uma v%rgula AcitL e K+ KestateB. ;4istem v/rias fun 1es de manipula o de strings 6ue podem ser usadas para outras tarefas+ por e4emplo& 7SC''AcaractereB retorna o c5digo 7SC'' de um caractere. CH70AinteiroB retorna o caractere+ dado o seu c5digo 7SC'' LO!;0Ae@prB converte para min)sculas .==;0Ae@prB converte para mai)sculas L$0',Ae@prB retira espa os ] es6uerda 0$0',Ae@prB retira espa os ] direita 0;=L'C7$;Ae@pr+ nB repete uma e4presso n ve2es S.FS$0'#8Ae@pr?in7cio?tama e4trai uma parte de uma string desde in7cio e com tamanho nhoB caracteres 0'8H$Ae@pr?nB retorna n caracteres ] direita da string 0;Y;0S;Ae@prB inverte uma string CH70'#-;<AGcaractereG? retorna a posi o de um caractere dentro da string e@prB S=7C;AnB retorna uma string com n espa os converte um valor numrico para string+ formatado com n S$0AnHmero?n?dB caracteres na parte inteira Aantes da v%rgulaB e d casas decimais depois da v%rgula. S$.TTAe@prI?in7cio?tamanho? substitui em e@prI+ os caracteres desde in7cio at tamanho por e@prJB e@prJ -7$7L;#8$HAe@prB retorna a 6uantidade de caracteres em e@pr =or e4emplo digite o seguinte comando&
Select substringAtitle+ R+ OJB $%tulo + strAprice+ ?+ RB =re o from titles
O 6ue fi2emos foi mostrar at OJ caracteres da coluna title e mostramos a coluna price com no m/4imo ? n)meros antes da v%rgula e R casa decimal depois da v%rgula. ;nto o resultado ser/&
Fun/es de Data)5ora
O tipo datetime+ como vimos+ arma2ena datas e horas. 7lgumas fun 1es trabalham com esse tipo de dados& -7$;7--Aparte?nHmero?d adiciona um certo n)mero de dias Aou meses+ anos etc.B ] data ataB -7$;-'TTAparte?dataI?dat subtrai as duas datas AdataJ - dataIB+ retornando um resultado em aJB dias+ meses etc. dependendo de datepart -7$;=70$Aparte?dataB retorna a parte especificada da data -7$;#7,;Aparte?dataB retorna o nome por e4tenso da parte especificada 8;$-7$;AB retorna a data e hora atuais #as fun 1es acima+ o argumento parte? especifica 6ual parte da data usar. ;le pode ser um dos seguintes valores& LL o ano 66 o trimestre mm o m3s dL o dia do ano AR-OS?B dd o dia do m3s "9 o n)mero da semana AJ-?RB d" o dia da semana AdomingokR+ segundakP+...B hh a hora AJ-POB mi os minutos ss os segundos ms os milisegundos =or e4emplo+ digite o seguinte comando&
Select pubdate+ datepartALL+ pubdateB 7no from titles
O resultado ser/& O 6ue fi2emos foi mostrar o campo pubdateA-ata de publica o do livroB e o de publica o do livro. =ara mostrar o ano utili2amos a fun o de data datepart .
%onverso de dados
7 fun o CO#Y;0$ permite converter de um tipo de dado para outro. 7 sua forma geral de uso & CO#Y;0$AtipoAdeAdados+ valorB =or e4emplo&
select convertAcharARJB+auDfnameB e K Ke convertAcharARJB+auDlnameB from authors
85
Com valores datetime+ convert pode ter um parZmetro a mais+ 6ue especifica o formato de data a ser usado. Os formatos mais usados so O Apadro brasileiro dd/mm/aaB+ RJO Add/mm/aaaaB e os padr1es americanos R Amm/dd/LLB e RJR Amm/dd/LLLLB. O default J+ 6ue mostra datas como& Man JR R>>G JR&RO&PO =, =or e4emplo+ para ver a data de ho:e em formato brasileiro+ e4ecute&
select convertAchar+getdateAB+RJOB
=ara converter valores numricos em char pode ser utili2ado a fun o CO#Y;0$+ por e4emplo&
select convertAchar+pubDidB from titles
%ondi/es de 'es,uisa
Como vimos+ a cl/usula !H;0; permite selecionar 6uais as linhas da tabela a serem inclu%das no resultado. ;4istem v/rias formas de montar uma cl/usula !H;0;+ usando um dos seguintes elementos& Operadores de compara=o: k igual a b maior 6ue n menor 6ue bk ou `n maior ou igual Ano menorB nk ou `b menor ou igual Ano maiorB nb ou `k diferente 1ai@as: Listas: -asamento de padrBes: 2alores nulos& -om6ina=o de condiBes: F;$!;;# valor-ini 7#- valorl-+in '# AlistaB L'I; padr=o 'S #.LL+ 'S #O$ #.LL 7#-+ O0+ #O$
3sando o'eradores
7s condi 1es mais simples so formadas usando operadores de compara o+ como vimos no e4emplo anterior&
select auDlname+ citL from authors "here state k KC7K
86
#ote 6ue constantes do tipo char Aou varcharB+ bem como datas+ devem ser colocadas entre ap5strofos AKB. Se 6uisermos fa2er o contr/rio+ isto + procurar os autores 6ue #oO so da Calif5rnia+ podemos fa2er&
select auDlname+ citL from authors "here state nb KC7K
3sando +ai(as
#a tabela titles+ para cada livro+ est/ guardada a sua data de publica o na coluna KpubdateK. Se 6uisermos saber 6uais os livros publicados no ano de R>>R+ podemos fa2er a consulta&
select pubdate+ title from titles "here pubdate bet"een KR/R/>RK and KRP/OR/>RK
Onde F;$!;;#...7#-... seleciona os valores de KpubdateK 6ue esto dentro de uma determinada fai4a. =ara fa2er o contr/rio+ bastaria usar #O$ F;$!;;# Amas nesse caso no to eficiente a consultaB.
3sando listas
Yoc3 pode selecionar valores de acordo com uma lista. Se o valor pertence ] lista+ a linha ser/ inclu%da no resultado. =or e4emplo&
select auDlname+ citL+ state from authors "here state in AK.$K+KC7KB
O resultado contm as linhas onde KstateK tem um dos valores K.$K ou KC7K. ;6uivale ao mesmo 6ue usar uma condi o composta&
"here state k K.$K O0 state k KC7K
=ara retornar os valores 6ue n=o esto na lista+ pode-se usar #O$ '#.
%asamento de 'adr/es
O operador L'I; (como* fa2 casamento de padr1es. .m padr=o uma string contendo caracteres 6ue podem ser combinados com parte de outra string. =or e4emplo+ o caractere i em um padro representa 6ual6uer 6uantidade de caracteres. =or e4emplo+ para obter todos os autores cu:o AprimeiroB nome come a com 7+ use&
select auDfname+ auDlname from authors "here auDfname li9e K7iK
=ara obter todos os nomes 6ue contm as letras KenK no meio Aou no in%cio ou no fimB+ use&
select auDfname+ auDlname from authors "here auDfname li9e KieniK
Outro caractere para usar em padr1es o sublinhado ADB. ;le combina com um )nico caractere. =or e4emplo+ se nos seus dados e4istem pessoas com nome KSousaK ou KSou2aK+ voc3 pode usar& L'I; KisouDaiK. Tinalmente+ poss%vel usar os colchetes para combinar com uma determinada fai4a de caracteres. =or e4emplo+ L'I; K(CI*iK encontra os nomes 6ue iniciam com C ou I e L'I; K(7-;*iK os 6ue come am com as letras de 7 at ;. M/ L'I; K(pY*iK encontra os nomes 6ue n=o come am com Y Ao caractere p indica noB. #ote 6ue as compara 1es feitas com L'I; dependem da ordem de classifica o (sort order* escolhida durante a instala o do SQL Server. Se foi usada a ordem Caccent-insensitiveC+ como foi recomendado+ ele consegue procurar ignorando acentos. =or e4emplo+ L'I; KcamaraK vai encontrar tambm KCZmaraK.
87
#.LL no tratado como outros valores. ;specialmente+ 6ual6uer opera o com #.LL tem como resultado #.LL e 6ual6uer compara o com #.LL tem resultado T7LSO. =or e4emplo+ ve:a as duas consultas a seguir&
select price+ title from titles "here price k R>.>> select price+ title from titles "here price nb R>.>>
7lgumas linhas da tabela KtitleK t3m KpriceKk#.LL. ;ssas linhas no vo aparecer nem na primeira nem na segunda consulta+ por6ue #.LLkR>.>> falso e #.LLnbR>.>> tambm falso. =ara ver essas linhas com valores nulos+ use&
select price+ title from titles "here price is #.LL
=ara ver as linhas onde o valor est/ preenchido Ano #.LLB+ use&
select price+ title from titles "here price is #O$ #.LL
.sar Kprice k #.LLK funciona no SQL Server+ mas no compat%vel com o padro 7#S'.
'sso retorna os livros onde& Am6as as condi 1es R e P so verdadeiras& R-0ma das seguintes verdadeira o t%tulo AKtitleKB come a com $+ .3 o c5digo da editora AKpubDidKB KJ@GGK 4 P- o pre o AKpriceKB maior 6ue RS.JJ Os par3nteses indicam a preced3ncia das condi 1es. #a falta de par3nteses+ o operador #O$+ se presente+ aplicado primeiro+ depois as condi 1es com 7#- so agrupadas+ depois as condi 1es com O0 so agrupadas. Yoc3 pode usar par3nteses+ mesmo se no necess/rios+ para tornar a e4presso mais leg%vel.
.utros recursos
#o comando S;L;C$+ a cl/usula -'S$'#C$ elimina valores duplicados no resultado e ordena a lista de resultados. =ara apenas ordenar por uma ou mais colunas+ use O0-;0 F^. N poss%vel tambm combinar o resultado de dois comandos S;L;C$ em um )nico con:unto com o operador .#'O#.
88
,as note 6ue algumas cidades+ como Oa9land+ C7+ aparecem v/rias ve2es. =ara eliminar duplica 1es+ use a cl/usula -'S$'#C$. O SQL leva em conta as duas colunas em con:unto+ para remover duplicatas.
O resultado ser/& #ote 6ue o resultado ter/ apenas RS linhas. O SQL Server ordena os dados implicitamente+ para poder eliminar as duplicatas.
.rdenando resultados
=ara ver o resultado numa ordem particular+ use a cl/usula O0-;0 F^. Se estiver presente+ deve ser a )ltima cl/usula do comando S;L;C$. =or e4emplo+ para ver os livros em ordem de pre o&
select title+ tLpe+ price from titles order bL price
Yoc3 pode indicar ap5s o nome da coluna+ se a ordem ascendente ou descendente+ por e4emplo&
select title+ tLpe+ price from titles order bL tLpe asc+ price desc
Se nem 7SC nem -;SC estiverem presentes+ o default 7SC. ;m ve2 de colocar o nome da coluna+ voc3 pode usar o n)mero relativo AR+P+...B. 7 mesma consulta anterior poderia ser&
select title+ tLpe+ price from titles order bL P asc+ O desc
3nio de con:untos
O comando S;L;C$ retorna um con<unto de linhas+ e permite tambm opera 1es com a no o matem/tica de con:untos. =or e4emplo+ o resultado de dois comandos S;L;C$ pode ser combinados com o operador .#'O#. Os dois comandos podem at mesmo tra2er dados de tabelas diferentes+ desde 6ue com o mesmo n)mero de colunas+ e tipos de dados compat%veis para cada coluna correspondente de um com o outro. =or e4emplo+ no banco de dados pu6s+ a tabela authors contm informa o sobre cada autor+ o 6ue inclui a cidade e estado onde ele mora Acolunas cit& e stateB. 7 tabela pu6lishers contm informa o sobre as editoras e suas cidades e estados. =ara sabermos o con:unto de todas as cidades onde e4istem autores ou editoras+ pode ser feita uma unio dos dois con:untos+ com&
select citL+ state from authors
89
Apostila Microsoft SQL Server 7.0 union select citL+ state from publishers
#ote 6ue na unio de dois con:untos+ os elementos repetidos so eliminados+ como 6uando se usa o -'S$'#C$. O resultado tambm aparece em ordem crescente+ pois o SQL Server ordena os resultados antes de eliminar repeti 1es. Se voc3 6uer ordenar de modo diferente os resultados da unio+ usando O0-;0 F^+ essa cl/usula s5 pode aparecer no segundo comando S;L;C$+ ou se:a+ no final dos comandos+ por e4emplo&
select citL+ state from authors union select citL+ state from publishers order bA state
$lterao de Dados
Inserindo Lin5as $tuali8ando Lin5as 4(cluindo Lin5as
Inserindo lin5as
O comando '#S;0$ insere linhas em uma tabela. 7 forma mais simples do comando '#S;0$ insere somente uma linha + dados os valores. Sinta(e
'#S;0$ ('#$O* nomeDtabela AcolunasB Y7L.; AvaloresB
Onde& nomeDtabela o nome da tabela 6ue dese:a incluir os dados. colunas o nome das colunas da tabela 6ue dese:a acrescentar os dados. valores o conte)do de cada coluna. ;4emplos& Yamos usar a tabela KfuncionarioK+ do banco de dados ;4emplo+ criada anteriormente+ para inserir linhas. #a :anela SQL QuerL $ool+ selecione em CF-C o banco de dados ;4emplo. -igite o seguinte&
insert into Tuncionario values AR+ K=rimeiro Tuncion/rioK+ P+ RPP+ POQ.PO+ KJR/JR/R>>@K+ KJR/JR/R>>@K+ K,KB
#esse caso+ so informados os valores de todas as colunas da tabela+ na ordem em 6ue elas foram definidas na tabela. ,as poss%vel tambm inserir dados parciais de apenas algumas colunas. =ara testar+ digite os seguintes comandos e depois e4ecute&
insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissaoB values AP+ KSegundo Tuncion/rioK+ R+ KTK+ QOSJ.JJ+ KJR/JR/R>>SKB insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissao+ 0amalB values AO+ K$erceiro Tuncion/rioK+ R+ KTK+ R?JJ.JJ+ KRP/OJ/R>>?K+ RPPB
90
Apostila Microsoft SQL Server 7.0 insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissaoB values AQ+ KQuarto Tuncion/rioK+ R+ K,K+ R?JJ.OQ+ KRJ/OJ/R>>SKB insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissaoB values A?+ KQuinto Tuncion/rioK+ O+ K,K+ ?JJ.OQ+ KJG/OJ/R>>GKB insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissaoB values AS+ KSe4to Tuncion/rioK+ O+ KTK+ RJJJ.OQ+ KJ@/OJ/R>>?KB insert into Tuncionario ACodTuncionario+ #ome+ Cod-epartamento+ Se4o+ Salario+ -ata7dmissaoB values AG+ KStimo Tuncion/rioK+ O+ KTK+ >JJ.OQ+ KJR/JR/R>>GKB
#esse caso+ os nomes das colunas 6ue sero inseridas so especificados entre par3nteses ap5s o nome da tabela. 7 ordem no precisa ser a mesma das colunas na tabela. ,as a ordem dos valores em Y7L.;S corresponde ] ordem dos nomes de colunas informados. #esse caso+ se uma coluna omitida da lista+ o SQL Server fa2 o seguinte& X Se a coluna tem um valor default + o valor default inserido. X Caso contr/rio+ se a coluna permite valores #.LL+ ser/ inserido um #.LL. X Caso a coluna no tenha default e tenha sido criada como #O$ #.LL+ o SQL Server gera uma mensagem de erro e cancela a e4ecu o do comando. -igite agora KS;L;C$ d from TuncionarioK. Yoc3 ver/ 6ue os funcion/rios P + O e Q a data de cadastro a data de ho:e+ por6ue o default para essa coluna a fun o 8;$-7$;AB. ;m outros casos+ o valor da coluna ficou #.LL 6uando no informado. 7 palavra reservada -;T7.L$ insere o valor default da coluna. Como e4emplo e4ecute o seguinte comando&
insert into Tuncionario values A@+ KOitavo Tuncion/rioK+ P+ RPP+ SJJ.PO+ KJR/JR/R>>@K+ -;T7.L$+ K,KB
-igite agora KSelect d from funcionario "here codfuncionario k @K.Ser/ mostrado os dados do funcion/rio cu:o c5digo igual a @. O conte)do da data do cadastro a data de ho:e+ isto ocorreu devido ao seu valor default. #o acrescente nenhuma linha a mais na tabela de KfuncionarioK+ por6ue ela ser/ usada posteriormente nos nossos e4emplos. Caso acrescente o resultado dos e4emplos 6ue iremos utili2ar no ir/ coincidir. Yamos inserir alguns dados na tabela KdepartamentoK do banco de dados ;4emplo.;sta tabela possui tr3s colunas. 7 coluna Cod-eptSuperior indica o c5digo do departamento 6ue o departamento 6ue esta sendo cadastrado subordinado. ;4ecute os seguintes comandos&
insert into -epartamento Yalues AR+ K-iretoriaK+ JB insert into -epartamento Yalues AP+ K-epartamento 7dministrativoK+ RB insert into -epartamento Yalues AO+ K-epartamento =essoalK+ RB
#o acrescente nenhuma linha a mais na tabela de KdepartamentoK+ por6ue ela ser/ usada posteriormente nos nossos e4emplos. Caso acrescente o resultado dos e4emplos 6ue iremos utili2ar no ir/ coincidir. 7crescente dados para a tabela de clientes. Observe 6ue as colunas -ataCadastro e =a%s possuem valores -efault + as colunas C=T+ Cidade+ ;stado pode conter o valor null.
Codigo int #ome varcharA?JB =ara copiar as linhas P e Q da tabela Cliente+ use o seguinte comando&
insert into CopiaCliente select CodCliente+ #ome from Cliente "here CodCliente in AP+QB
Cada linha retornada pelo S;L;C$ interno ser/ inserida na tabela CopiaCliente. ;sse comando muito )til para copiar dados entre tabelas semelhantes. #ote 6ue nesse caso+ as regras 6ue vimos anteriormente ainda se aplicam+ a cada linha 6ue o comando est/ tentando inserir. 7s colunas da tabela de destino e os valores de resultado do S;L;C$ devem ser compat%veis+ ou se:a+ devem ter o mesmo tipo de dados ou tipos compat%veis e devem estar na mesma ordem Amas os nomes no precisam ser os mesmos+ como no caso de KCodClienteK e KCodigoKB. Se as duas tabelas fossem id3nticas+ poderia ser usado d no select em ve2 de uma lista de colunas. Se a tabela CopiaCliente tivesse colunas a mais+ alm de CodCliente e #ome+ teria de ser especificada a lista de colunas a ser inseridos+ como vimos anteriormente.
4(cluindo lin5as
O comando -;L;$; e4clui permanentemente uma ou mais linhas de uma tabela+ baseado em alguma condi o. Sinta(e
-;L;$; T0O, nomeDtabela !H;0; condicao
Onde& nomeDtabela o nome da tabela 6ue dese:a e4cluir os dados. condicao condi o para selecionar as dados 6ue dese:a e4cluir. =or e4emplo+ para e4cluir o cliente nm P ACodigo kPB da tabela CopiaCliente+ e4ecute o seguinte comando no banco de dados ;4emplo&
delete from CopiaCliente "here Codigo k P
3sando sub-consultas
7ssim como .=-7$;+ o comando -;L;$; tambm pode usar sub-consultas para e4cluir linhas baseado nos dados de outra tabela. =ara testar+ copie novamente as linhas de cliente para CopiaCliente e depois insira duas novas linhas em CopiaCliente+ como abai4o&
insert into CopiaCliente select CodCliente+ #ome from Cliente insert into CopiaCliente A?+ KCliente CincoKB insert into CopiaCliente AS+ KCliente SeisKB
7gora vamos apagar de CopiaCliente apenas as linhas 6ue e4istem na tabela Cliente. =ara isso+ use o comando abai4o&
delete from CopiaCliente "here Codigo in Aselect CodCliente from ClienteB
92
Outra op o o comando $0.#C7$; $7FL;+ 6ue 6uase sempre mais r/pido 6ue o -;L;$;+ especialmente em tabelas grandes&
truncate table CopiaCliente
,as $0.#C7$; $7FL; no salva informa 1es no log de transa 1es+ o 6ue tem algumas conse6g3ncias com rela o a bac9ups+ como veremos.
P - %onsultas $vanadas
Dados de &esumo Iun/es de ?abelas Sub-consultas
Objetivos: - 7prender a gerar dados de resumo com fun 1es agregadas e 80O.= F^; - 7prender a consultar dados a partir de duas ou mais tabelas.
Dados de resumo
7lm da sinta4e b/sica do S;L;C$ 6ue :/ vimos+ alguns elementos a mais podem ser inclu%dos+ as cl/usulas 80O.= F^ e H7Y'#8& Sinta(e S;L;C$ listaAdeAcolunas T0O, listaAdeAta6elas !H;0; condiBes 80O.= F^ listaAdeAe@pressBes H7Y'#8 condiBes Como :/ vimos+ o !H;0; Ase presenteB separa as linhas 6ue satisfa2em as condi 1es iniciais. 7 cl/usula 80O.= F^ organi2a as linhas de resultado em grupos de acordo com os valores das e4press1es informadas. 7 cl/usula H7Y'#8 AopcionalB seleciona os grupos de acordo com os resultados. O resultado do S;L;C$...80O.= F^... tem uma linha para cada grupo+ 6ue pode conter valores de resumo Asomat5rio+ mdia+ contagem etc.B calculados dentro do grupo. Quando o 80O.= F^ est/ presente+ poss%vel usar +unBes agregadas+ 6ue calculam valores baseado nas linhas de um grupo e geram valores de resumo.
4(em'lo
=ara saber 6uantas linhas e4istem na tabela G+uncionarioG do banco de dados ;4emplo+ pode-se usar a fun o agregada CO.#$AdB&
select countAdB from funcionario
O resultado ser/ @. Quando a cl/usula 80O.= F^ omitida+ como nesse e4emplo+ todas as linhas da tabela so agrupadas para formar uma linha de resultado. Yoc3 pode tambm acrescentar uma condi o&
select countAdB from funcionario "here ramal is not null
93
#este caso o resultado O. ;stamos contando 6uantos funcionarios tem a coluna 0amal diferente de null. Quando se utili2a o 80O.= F^ com o nome de uma coluna+ os resultados so agregados por essa coluna. =or e4emplo+ para saber 6uantos funcionarios e4istem por departamento&
select countAdB KQuantidade Tuncion/rioK+ Cod-epartamento from funcionario group bL Cod-epartamento
O resultado ser/&
Ou se:a+ todos os tr3s funcion/rios cu:o c5digo do departamento R foram agrupados para gerar uma s5 linha de resultado. -epois todos os funcion/rios com coddepartamento k O Acaso houvesse algum funcion/rio cadastrado com c5digo departamento k P+ viria logo ap5s o de c5digo departamento k RB e assim por diante. #o resultado mostrada a coluna KcoddepartamentoK A6ue foi usada no 80O.= F^ para definir os gruposB e o resultado da fun o CO.#$AdB+ 6ue a contagem de elementos de cada grupo.
Fun/es agregadas
7lm da fun o CO.#$+ e4istem outras fun 1es agregadas 6ue podem ser usadas para fa2er opera 1es sobre os elementos do grupo& Calcula o valor mdio da e4presso e@pr dentro do grupo. 7 e4presso pode ser um nome de coluna ou calculada a partir de 7Y8Ae@prB colunas e/ou constantes. A=or e4emplo+
7Y8 AsalariodR.RB
B Conta 6uantos valores e4istem da e4presso dada dentro do grupo CO.#$Ae@prB Ase e@pr for #.LL para uma linha+ a linha no inclu%da na contagemB. CO.#$AdB Conta 6uantas linhas e4istem dentro do grupo. ,7<Ae@prB 0etorna o m/4imo valor de e@pr dentro do grupo. ,'#Ae@prB 0etorna o m%nimo valor de e@pr dentro do grupo. S.,Ae@prB 0etorna o somat5rio da e4presso dentro do grupo. 7s fun 1es 7Y8 e S., podem ser usadas apenas com dados numricos. 7s outras podem ser usadas com 6ual6uer tipo de coluna. 7s fun 1es S.,+ 7Y8 e CO.#$Ae@prB permitem especificar tambm o operador -'S$'#C$+ 6ue indica para considerar apenas os valores distintos. =or e4emplo+ a tabela KfuncionariosK do 94
banco de dados ;4emplo contm informa o sobre 6ual departamento este funcion/rio trabalha. =ara saber 6uais os departamentos 6ue t3m ao menos um funcionario + e4ecute o seguinte comando&
select countAdistinct coddepartamentoB from funcionario
O resultado O+ o n)mero de valores distintos de KdepartamentosK. Sem usar -'S$'#C$+ o resultado seria @ Ao n)mero de linhas da tabela KfuncionarioKB.
Outro e4emplo usando a tabela KfuncionarioK& para saber o total de sal/rios pagos por cada departamento+ pode-se usar 80O.= F^ e a fun o S., calculando o somat5rio da coluna KSalarioK&
select coddepartamento -epartamento+ SumASalarioB K$otal Sal/rioK from funcionario group bL coddepartamento
O resultado ser/&
Detal5es do G&.37 BQ
7 cl/usula 80O.= F^ agrupa valores baseado em uma ou mais colunas. #o )ltimo S;L;C$ acima+ group bL coddepartamento significa 6ue todas as linhas 6ue t3m o mesmo valor da coluna KcoddepartamentoK sero agrupadas em uma s5. .ma fun o agregada+ como S.,+ CO.#$+ 7Y8 calcula valores sobre todos os elementos do grupo. .ma linha de resumo gerada para o grupo+ contendo o valor representante do grupo+ KcoddepartamentoK e o resultado de S.,ASalarioB. #ote 6ue as colunas de resultado da cl/usula S;L;C$ Aa lista de colunas ap5s o S;L;C$B podem ser apenas& - .ma coluna presente na lista do 80O.= F^ O. - .m valor gerado por uma fun o agregada Outras colunas no podem ser inclu%das no resultado+ por6ue teriam valores diferentes para cada linha do grupo.
95
Apostila Microsoft SQL Server 7.0 group bL coddepartamento having sumASalarioB b RJJJ.JJ
#ote 6ue as cl/usulas !H;0; e H7Y'#8 so semelhantes. ,as !H;0; seleciona as linhas da tabela 6ue iro participar da gera o do resultado. ;ssas linhas sero agrupadas e depois H7Y'#8 aplicado ao resultado de cada grupo+ para saber :uais grupos vo aparecer no resultado. #as condi 1es usadas por H7Y'#8 s5 podem aparecer valores 6ue se:am os mesmos em todos os elementos do grupo.
Iun/es de tabelas
.m comando S;L;C$ tambm pode fa2er uma consulta 6ue tra2 dados de duas ou mais tabelas. ;sse um processo chamado de <un=o (:oin*. 7s tabelas t3m uma coluna em comum 6ue usado para fa2er as :un 1es. 7ntes de e4ecutar os e4emplos mostrados abai4o+ vamos inserir um departamento na tabela KdepartamentoK 6ue neste caso no ter/ nenhum funcion/rio relacionado. ;4ecute o seguinte comando&
insert into departamento values AQ+ KContabilidadeK+ PB
=or e4emplo+ no banco de dados E@emplo+ a tabela KdepartamentoK contm dados de departamentos. Cada departamento tem um n)mero de identifica o )nico+ KCod-epartamentoK. #a tabela KfuncionarioK esto os dados dos funcion/rios. =ara identificar o departamento do funcion/rio+ a tabela KfuncionarioK tem tambm uma coluna KCod-epartamentoK 6ue pode ser usada para procurar na tabela KdepartamentoK. =or e4emplo+ digite&
select d from funcionario
O resultado ser/&
...e ve:a 6ue na primeira linha da tabela+ o nome do funcion/rio K=rimeiro Tuncion/rioK e o valor da coluna KcoddepartamentoK P. 7gora digite&
select d from departamento
-epois de e4ecutar+ note 6ue na segunda linha o nome do departamento + cu:o c5digo igual a P + K-epartamento 7dministrativoK. Se 6uisermos ver uma listagem mostrando os funcion/rios e seus respectivos departamentos+ basta fa2er uma :un o das duas tabelas. .ma das formas de fa2er isso &
select departamento.nome K-epartamentoK+ funcionario.nome
96
O resultado ser/& #este e4emplo como as duas tabelas tem o mesmo nome de coluna necess/rio 6ualificar o nome com o nome da tabela+ como Cfuncionario.nomeC+ Cdepartamento.nomeC. ;m geral+ recomend/vel sempre 6ualificar os nomes para maior clare2a.
Sinta(e da Iuno
O SQL Server aceita duas sinta4es diferentes para :un o de tabelas. .ma delas+ mostrada acima+ espec%fica ao SQL Server e+ ]s ve2es+ um pouco mais simples de utili2ar. #a sinta4e do SQL Server+ na lista do T0O, as duas Aou maisB tabelas so especificadas+ separadas por v%rgulas. #a cl/usula !H;0; deve haver uma condi o ligando as duas+ a condi=o de <un=o (:oin condition*. #a lista de colunas do S;L;C$ podem ser inclu%dos colunas de 6ual6uer uma das tabelas. #o e4emplo acima foram especificadas as colunas Kdepartamento.nomeK Ao nome da departamento+ 6ue vem da tabela KdepartamentoKB e Kfuncionario.nomeK Anome do funcionario+ 6ue vem da tabela KfuncionarioKB. 7 outra forma de sinta4e 6ue pode ser usada a sinta4e do padro 7#S' SQL. O e4emplo anterior+ com a sinta4e 7#S'+ ficaria&
select departamento.nome+ funcionario.nome from funcionario inner :oin departamento on funcionario.coddepartamento k departamento.coddepartamento
#essa sinta4e+ o tipo de <un=o entre as tabelas deve ser especificado entre elas Averemos os diferentes tipos abai4oB e a condi o de :un o especificada com a palavra O#.
Iuno interior
O e4emplo acima uma <un=o interior de tabelas (inner :oin*. ;sse tipo de :un o conecta as duas tabelas e retorna apenas as linhas 6ue satisfa2em a condi o de :un o. #o e4emplo+ isso significa 6ue+ se e4istirem funcion/rios para os 6uais no h/ departamento relacionado eles no sero inclu%dos no resultado. 'gualmente+ se e4istirem departamentos 6ue no t3m empregadosAcomo KContabilidadeKB + eles no aparecem no resultado. .ma :un o interior chamada de e:ui<oin 6uando as colunas so comparadas usando o k+ e as duas colunas aparecem no resultado+ mostrando dados redundantes+ :/ 6ue elas t3m o mesmo valor. .ma :un o 97
interior chamada <un=o natural 6uando a coluna usada para :un o aparece apenas uma ve2 no resultado+ vinda de uma ou outra tabela. #a sinta4e 7#S'+ :un 1es interiores so indicadas da forma&
ta6elaI '##;0 MO'# ta6elaJ O# condi=oAdeA<un=o
#esse caso+ como a tabela KfuncionarioK tem @ linhas e a tabela KdepartamentoK tem Q linhas + o resultado final ser/ OP linhas 6ue @ d Q k OP linhas+ formadas por todas as combina 1es poss%veis de funcionarios e departamento. #a sinta4e do SQL Server+ basta especificar a lista de tabelas+ sem usar uma condi o de :un o&
select departamento.nome+ funcionario.nome+ salario from funcionario+ departamento
;sse e4atamente um dos problemas com a sinta4e informal& se voc3 incluir mais de uma tabela mas no colocar uma condi o de :un oA f/cil es6uecer uma condi o 6uando e4istem v/rias outras envolvidasB+ o banco de dados vai simplesmente fa2er um produto cartesiano sem nenhum aviso.
Mun 1es cru2adas raramente so usadas+ mas importante saber como evitar us/-las. =ara isso+ sempre crie uma :un o interior ou e4terior Averemos abai4oB + em casos de ter v/rias tabelas envolvidas.
Iuno e(terior
.ma :un o e4terior (outer :oin* mostra todas as linhas de uma tabela+ mesmo 6uando elas no satisfa2em a condi o de :un o. =or e4emplo&
select departamento.nome K-epartamentoK+ funcionario.nome KTuncionarioK from departamento left outer :oin funcionario on departamento.coddepartamento k funcionario.coddepartamento
Se usado L;T$ O.$;0 MO'# indica 6ue todas as linhas da tabela ] es6uerda Ano caso+ KdepartamentoKB so inclu%das no resultado. #esse caso+ so mostrados todos os departamentos+ mesmo a6ueles 6ue no tem funcion/rio. Quando um departamento no tem funcion/rio+ as colunas da tabela KfuncionarioK ir/ mostrar o valor #.LL . 7 tabela KdepartamentoK chamada de a ta6ela e@terior e KfuncionarioK a ta6ela interior da :un o. Se fosse usado 0'8H$ O.$;0 MO'#+ a tabela ] direita AKfuncionarioKB mostraria todas as linhas e a tabela ] es6uerda+ apenas as relacionadas. Se for usado T.LL O.$;0 MO'#+ todas as linhas de ambas as tabelas so inclu%das+ mesmo as 6ue no esto relacionadas com a outra tabela.
#a tabela KfuncionarioK acrescente a seguinte coluna& %olumn>ame DatatA'e CodCargo int .tili2e o ;nterprise ,anager ou o comando 7lter $able. Yamos atuali2ar a tabela KfuncionarioK para acrescentar dados a coluna cargo+ e4ecute os seguintes comandos&
update funcionario set codcargo k R "here codfuncionario k R update funcionario set codcargo k P "here codfuncionario k P update funcionario set codcargo k O "here codfuncionario k O update funcionario set codcargo k Q "here codfuncionario k Q update funcionario set codcargo k ? "here codfuncionario k ?
N poss%vel :untar tr3s ou mais tabelas com informa 1es relacionadas. #o banco de dados K;4emplosK+ por e4emplo+ a tabela KcargoK contm uma linha 6ue representa cada cargo do funcion/rio. ;ntre os dados+ esta a identifica o do cargo AKcodcargoKB . 7 coluna KcodcargoK pode ser usada para buscar o nome do cargo+ fa2endo uma :un o com a tabela KfuncionarioK. 7 tabela KdepartamentoK contm uma linha 6ue representa cada departamento do funcion/rio. 7 coluna KcoddepartamentoKpode ser usada para buscar o nome do departamento+ fa2endo uma :un o com a tabela KdepartamentoK. Taremos o seguinte&
select funcionario.nome KTuncion/rioK+ cargo.nome KCargoK+ departamento.nome K-epartamentoK from funcionario inner :oin cargo on funcionario.codcargo k cargo.codcargo inner :oin departamento on funcionario.coddepartamento k departamento.coddepartamento
99
#ote 6ue as duas :un 1es de tabela so representadas com um '##;0 MO'# ap5s o outro. O primeiro '##;0 MO'# cria uma CtabelaC virtual reunindo KfuncionarioK e KcargoK. O segundo re)ne essa tabela virtual ] tabela KdepartamentoK.
$'elidos de tabela
=ara simplicar a 6ualifica o de colunas+ pode-se usar um apelido (alias* de tabela+ um nome colocado imediatamente ap5s o nome da tabela+ na lista do T0O,. ;sse nome representa a tabela nas 6ualifica 1es. =or e4emplo+ a consulta anterior pode ser reescrita da forma&
select f.nome KTuncion/rioK+ c.nome KCargoK + d.nome K-epartamentoK from funcionario f inner :oin cargo c on f.codcargo k c.codcargo inner :oin departamento d on f.coddepartamento k d.coddepartamento
#esse caso+ KfK o apelido para a tabela KfuncionarioK+ KcK para a tabela KcargoK e KdK para a tabela KdepartamentoK. #ote 6ue os aliases podem ser usados na lista do S;L;C$ ou nas condi 1es de :un o Aou em outros lugares+ como numa cl/usula !H;0;B.
$uto-:un/es
.ma auto-<un=o (self :oin* uma :un o da tabela com ela mesma. #a tabela departamento+ por e4emplo+ cada departamento est/ subordinado a outro. 7 coluna KcoddeptsuperiorK indica o c5digo do departamento superior. =ara mostrarmos uma lista de todos os departamentos+ cada um com seus sub-departamentos+ podemos usar&
select dR.nome+ dP.nome from departamento dR inner :oin departamento dP on dR.coddepartamento k dP.coddeptsuperior
#esse caso+ obrigat5rio usar um apelido de tabela para distinguir as duas Cc5piasC da tabela 6ue esto sendo relacionadas& KdRK no e4emplo representa uma linha da tabela KdepartamentoK e KdPK representa outra linha 6ue esto sendo comparadas entre si. O resultado dessa consulta &
100
Subconsultas
.ma su6-consulta (sub6uerL* uma consulta S;L;C$ aninhada dentro de outro comando SQL. ;la pode retornar um valor s5 ou uma lista de valores para ser usada numa compara o. =or e4emplo+ para saber o gasto 6ue a empresa tem com funcion/rios+ pode-se usar&
select sumAsalarioB from funcionario
...6ue d/ como resultado o valor RJ.?>?+@P . 7gora suponhamos 6ue 6ueremos saber 6ual a porcentagem do total 6ue o sal/rio do funcion/rio representa. -igite o seguinte comando&
select nome KTuncion/rioK+ Salario KSal/rioK+ =orcentagem k RJJdAsalariodR.J/ "select sumAsalarioB from funcionario# B from funcionario
O resultado ser/&
7 coluna K=orcentagemK calculada como a 6uantidade dividida pelo resultado da sub-consulta Aselect sumAsalarioB from funcionarioB+ 6ue k RJ.?>?+@P nesse caso. #ote portanto 6ue a sub-consulta e4ecutada e seu resultado substitu%do dentro da outra consulta+ como se tivssemos escrito&
select nome KTuncion/rioK+ Salario KSal/rioK+ =orcentagem k RJJdAsalariodR.J/ 121LRL;P* B from funcionario
Subconsultas so sempre colocadas entre par3nteses e podem retornar no resultado apenas uma coluna Aembora em alguns casos podem retornar mais de uma linhaB. #o e4emplo acima+ se a subconsulta retornasse mais de um valor+ haveria um erro de e4ecu o.
Listas de valores
.ma sub-consulta pode retornar uma lista de valores e essa lista de valores pode ser usada em compara 1es com o operador '#. =or e4emplo+ para saber 6uais so os funcionarios 6ue possuem cargos+ pode ser usado&
select funcionario.nome
101
Apostila Microsoft SQL Server 7.0 from funcionario "here codcargo in Aselect codcargo from cargoB
.ma sub-consulta pode ser usada tambm com um operador de compara o modificado com as palavras 7#^ (6ual6uer* ou 7LL (todos*. =or e4emplo+ b 7LL (maior 6ue todos* significa 6ue para 6ue a condi o se:a satisfeita+ o valor comparado deve ser maior 6ue todos os elementos da lista& O e4emplo abai4o utili2a o banco de dados =ubs.
select title from titles "here advance b 7LL Aselect advance from publishers+ titles "here titles.pubDid k publishers.pubDid and pubDname k K7lgodata 'nfosLstemsKB
7 subconsulta retorna uma lista de valores de KadvanceK (adiantamento* 6ue contm todos os valores de adiantamento de livros publicados pela editora K7lgodata 'nfosLstemsK. Seu resultado A?JJJ+ ?JJJ+ ?JJJ+ GJJJ+ @JJJB 7 consulta e4terna retorna os livros cu:o KadvanceK maior do 6ue todos os itens dessa lista. 7s seguintes combina 1es 6ue podem ser usadas& b 7LL maior 6ue todos os elementos da lista n 7LL menor 6ue todos nb 7LL diferente de todos Ao mesmo 6ue #O$ '#B k 7#^ igual a algum dos elementos da lista Ao mesmo 6ue '#B b 7#^ maior 6ue algum dos elementos da lista n 7#^ menor 6ue algum dos elementos nb 7#^ diferente de algum dos elementos da lista Afalso se igual a todosB 7lm disso+ podem ser usadas combina 1es com bk e nk+ de forma an/loga. #ote 6ue no permitido o uso de k 7LL.
?estes de e(istCncia
.m teste de e4ist3ncia uma condi o 6ue envolve a palavra ;<'S$S e uma sub-consulta. 7 condi o verdadeira se a sub-consulta retorna alguma linha e falsa se ela retorna 2ero linhas. =or e4emplo+ para saber 6uais os departamentos 6ue possue funcion/rios cu:o cargo igual a cargoR+ utili2e o banco de dados ;4emplos e e4ecute o seguinte comando&
select d.nome from departamento d "here e4ists Aselect d from funcionario f+ cargo c "here f.codcargo k c.codcargo and c.nome k KCargoRK and d.coddepartamento k f.coddepartamentoB
O resultado da sub-consulta no importa+ pois est/ apenas sendo testada a e4ist3ncia de um resultado. #esse caso+ a lista de colunas sempre um asterisco AdB.
Subconsultas correlacionadas
7s sub-consultas 6ue foram vistas at agora nos e4emplos podem ser avaliadas uma ve2 s5 e depois substitu%das no corpo da consulta principal. M/ uma sub-consulta correlacionada (correlated sub6uerL* depende dos valores da consulta principal onde ela est/ alinhada+ por isso deve ser avaliada uma ve2 para cada linha do resultado e4terno. =or e4emplo+ a seguinte utili2e o banco de dados =ubs para consultar a lista+ para cada livro+ o autor 6ue tem a maior porcentagem de roLalties sobre o livro Aa tabela KtitleauthorK relaciona livros e autores de forma # 4 #B&
select titleDid+ auDid+ roLaltLper from titleauthor ta "here roLaltLper k Aselect ma4AroLaltLperB from titleauthor
102
;ssa uma sub-consulta correlacionada por6ue ela fa2 refer3ncia a uma tabela da consulta mais e4terna. 7 sub-consulta avaliada repetidas ve2es+ uma para cada linha da tabela KtitleauthorK.
R - Im'lementando Kndices
7or ,ue 6ndicesS ?i'os de Kndices .timi8ando %onsultas
. .timi8ador
O otimi2ador o componente do SQL Server 6ue analisa as consultas SQL e decide 6uando vale a pena utili2ar um %ndice ou no. cs ve2es+ mesmo 6uando voc3 define um %ndice em uma coluna+ o otimi2ador resolve no utili2/-lo por determinar 6ue ele no a:udaria no desempenho. =or e4emplo+ no vale a pena utili2ar um %ndice 6ue retorna uma porcentagem muito grande de linhas+ pois levaria mais tempo analisando o %ndice do 6ue o tempo 6ue ele economi2aria filtrando os resultados. =or 103
e4emplo+ se uma coluna tem apenas tr3s valores poss%veis+ J+ R+ e P+ no vale a pena inde4ar+ pois 6ual6uer consulta pode retornar at OOi das linhas. O otimi2ador descobre isso e ignora esse tipo de %ndice.
?i'os de Kndices
%lustered
.m %ndice clustered (agrupado* a6uele onde a ordem f%sica das p/ginas de dados a mesma ordem do %ndice. 7 cada inser o+ numa tabela 6ue tem um %ndice agrupado+ a ordem f%sica dos dados pode mudar. S5 pode haver um )nico %ndice agrupado por tabela.Se voc3 no especificar o indice Clustered a sua tabela ser/ criada com o %ndice #on-clustered Aver abia4oB. 0ecomenda-se criar um %ndice agrupado antes de 6ual6uer outro+ pois ao cri/-lo+ as linhas da tabela so reordenadas fisicamente e todos os outros %ndices so reconstru%dos. N recomend/vel usar um %ndice agrupado para a coluna 6ue representa a ordem mais natural da tabela+ ou se:a+ a ordem na 6ual geralmente os resultados sero apresentados. 0ecomenda-se utili2ar %ndice agrupado (Clustered* nos seguintes casos& Os dados das colunas so acessados fre6uentemente. =or e4emplo na tabela de KfuncionarioKdo banco de dados ;4emplo + vamos supor 6ue so feitas v/rias pes6uisas com o nome do funcionario+ neste caso voc3 poderia criar um %ndice clustered com o nome do funcion/rio. ;m colunas usadas com O0-;0 F^ e 80O.= F^. ;m colunas 6ue so alteradas fre6uentemente. ;m chaves prim/rias+ contanto 6ue no ha:a outras colunas melhores. ;m chaves estrangeiras+ por6ue geralmente elas no so )nicas.
>on-clustered
.m %ndice non-clustered (no-agrupado* possui uma ordem f%sica diferente da ordem dos dados. ;4iste um n%vel a mais+ de ponteiros para os dados+ 6ue permite acess/-los indiretamente. =ode haver mais de um %ndice no-agrupado na tabela+ at o m/4imo de PQ> %ndices+ incluindo 6ual6uer %ndice criado com restri 1es =0',70^ I;^ ou .#'Q.;. Quando o tipo de %ndice da tabela no for espec%ficado ele ser/ criado como um %ndice #onclustered. N recomendado utili2ar %ndices no agrupados (#onclustered* para& Colunas 6ue so usadas nas cla)sulas O0-;0 F^ e 80O.= F^. Colunas 6ue so fre6uentemente utili2adas como condi 1es na cla)sula !H;0;.
Quando da cria o de um %ndice )nico+ no pode haver valores duplicados nas colunas do %ndice. Se houver+ a cria o do %ndice falha e voc3 deve alterar as colunas antes de tentar cri/-lo novamente.
%om'osto
.m %ndice composto a6uele formado por duas ou mais colunas. ;sse tipo de %ndice )til 6uando duas ou mais colunas so sempre pes6uisadas em con:unto. =or e4emplo+ poderia ser criado um %ndice na tabela Cliente para as colunas ACidade+;stadoB. 7 ordem das colunas importa& um %ndice com A;stado+CidadeB seria completamente diferente. Se voc3 criar um %ndice composto+ o otimi2ador vai utili2/-lo mesmo 6uando apenas a primeira coluna especificada+ por e4emplo em&
S;L;C$ d T0O, Cliente !H;0; Cidade k K8oiZniaK
.m %ndice composto tambm pode ser )nico. #esse caso+ o 6ue no pode se repetir o valor das duas ou mais colunas+ tomadas em con:unto. =or e4emplo+ os valores poderiam ser AR+RB+ AR+PB+ AP+RB+ AP+PB etc. ,as no poderia haver duas linhas com os valores AR+RB.
#a op o K$ableK informe a tabela em 6ue dese:a criar o %ndice. Cli6ue no boto >e 111. 7parece a tela abai4o& ;m KColumnK+ mar6ue na cai4a de verifica o aAsB colunaAsB 6ue voc3 6uer 6ue fa aAmB parte do %ndice. Yoc3 pode mover 6ual6uer coluna selecionada para cima ou para bai4o Alembrando 6ue em um %ndice ocmposto a colunas em ordens diferentes formam %ndices diferentesB 105
;m K'nde4 name&K colo6ue o nome do %ndice 6ue dese:a criar ou visuali2ar. 7s pr54imas op 1es iro definir o tipo e as caracter%sticas do %ndice& ;m K'nde4 optionsK+ pode-se definir o seguinte+ com a sele o das op 1es ade6uadas& se voc3 marcar C.ni6ue valuesC (valores )nicos*+ o %ndice ser/ um %ndice )nico. #o caso de um %ndice )nico+ se voc3 marcar a op o C'gnore -uplicate valuesC (ignorar valores duplicados*+ ao e4ecutar um comando '#S;0$ ou .=-7$; em v/rias linhas+ apenas as linhas 6ue no t3m chave duplicada sero inseridas/atuali2adas; para as outras+ o SQL Server mostra uma mensagem de aviso e ignora Ano insereB as linhas duplicadas. Se esta op o no for marcada+ o comando '#S;0$ ou .=-7$; falha e no insere/atuali2a nenhuma linha. >ota@ .m %ndice )nico no pode ser criado em uma coluna 6ue :/ tenha valores duplicados+ mesmo 6ue voc3 selecione a op o de Cignorar valores duplicadosC. Se voc3 tentar+ o SQL Server mostra uma mensagem de erro e lista os valores duplicados. ;limine os valores duplicados antes de criar um %ndice )nico na coluna. =ara criar um %ndice agrupado+ mar6ue a op o CClusteredC. Com o %ndice agrupado+ voc3 no pode ignorar valores duplicados A permitido marcar a op o+ mas ao clicar em OI+ surge uma mensagem de erro+ avisando 6ue as duas op 1es so mutuamente e4clusivasB. =orm+ se voc3 marcar+ :unto com a op o CClusteredC+ a op o C.ni6ue valuesC+ permitido ignorar valores duplicados Aselecionando C'gnore -uplicate YaluesC+ 6ue sero tratados da mesma forma 6ue no caso do %ndice ser apenas )nico Acom a diferen a 6ue agora ele um %ndice )nico agrupadoB. Se :/ houver um %ndice agrupado na tabela+ na cria o de um novo %ndice+ no se permite selecionar a op o CclusteredCApois s5 pode haver um %ndice agrupado em 6ual6uer tabelaB. C-o not recompute statisticsC& com esta op o marcada+ as estat%siticas do %ndice no so recalculadas automaticamente 6uando o %ndice atuali2ado. Tilegroup& especifica em 6ue grupo de ar6uivos ser/ criado o %ndice. Cli6ue no nome do grupo de ar6uivos. Ave:a grupos de ar6uivosB C-rop e4istingC& para e4cluir 6ual6uer %ndice e4istente com o mesmo nome antes de criar o novo %ndice. .tili2ada 6uando voc3 altera um %ndice :/ criado. Yoc3 no pode marcar ou desmarcar essa op o. >ota@ Yoc3 no pode transformar um %ndice agrupado em um %ndice no agrupado+ editando-o. Yoc3 deve e4clu%-lo+ para ento criar outro %ndice A6ue pode ter o mesmo nomeB. CTill factorC& Afator de preenchimentoB especifica o 6uo cheio o SQL Server deve fa2er o n%vel folha de cada p/gina de %ndice durante a cria o do mesmo.Quando uma p/gina de %ndice fica cheia+ o SQL Server deve gastar tempo para dividir a p/gina+ liberando espa o para novas colunas+ o 6ue tem um custo computacional alto. =ara tabelas em 6ue so feitas muitas atuali2a 1es+ um valor para CTill factorC bem escolhido gera um melhor desempenho em atuali2a 1es do 6ue um valor mal escolhido. O valor de CTill factorC fornecido na forma de porcentagem. C=ad inde4C& ;specifica o espa o a ser dei4ado desocupado em cada p/gina nos n%veis intermedi/rios do %ndice. S5 )til 6uando selecionado em con:unto com CTill factorC+ pois o Cpad inde4C usa a porcentagem definida em CTill factorC. 'ndependentemente do valor de CTill factorC+ o n)mero de colunas numa p/gina intermedi/ria nunca menor do 6ue duas. -efinidas todas as op 1es dese:adas+ cli6ue em O9+ e o %ndice ser/ criado Aou alteradoB. Yoc3 pode ver e alterar o c5digo SQL usado na cria o do %ndice+ bastgando para isso clicar no boto C;dit SQLC. Quando editando o c5digo+ voc3 pode verific/-lo antes de e4ecutar+ bastando para isso clicar em C=arseC. Clicar em C;4ecuteC+ tem o mesmo efeito de clicar em O9 na tela anterior. =ara e4cluir um %ndice 6ual6uer+ pelo ;nterprise ,anager+ basta selecion/-lo+ na tela C,anage 'nde4esC+ e clicar em -elete.
106
=ara criar um %ndice na cria o de uma tabela basta + no modo de edi o da tabela+ selecionar 6ual6uer coluna+ clicar com o boto direito+ e em =roperties+ na :anela 6ue aparece+ 6ue a :anela abai4o+ selecionar a guia 'nde4es/IeLs&
Onde& nomeAindice o nome do %ndice 6ue dese:a criar. nomeAta6ela o nome da tabela 6ue dese:a criar o %ndice. nomeAcolunaI o nome da coluna 6ue ir/ fa2er parte do %ndice.Se o %ndice tiver mais de uma coluna acrescente a v%rgula e colo6ue o nome das outras colunas. .#'Q.; indica se o %ndice ser/ )nico. N opcional. Se o %ndice fo )nico voc3 pode acrescentar a op o '8#O0;D-.=DI;^ (ignorar chaves duplicadas*. CL.S$;0;- indica se o %ndice ser/ agrupado. Com o %ndice agrupado e a op o .#'Q.;+ voc3 pode tambm usar a op o '8#O0;D-.=DI;^+ 107
T'LLT7C$O0 o fator de prenchimento+ ou se:a+ a porcentagem de espa o livre 6ue ser/ dei4ado em cada p/gina do %ndice. -0O=D;<'S$'#8 e4clui o %ndice e4istente com o mesmo nome. Se voc3 for criar um %ndice cu:o nome no e4iste e usar esta o o+ o SQL Server retornar/ uma mensagem avisando 6ue o %ndice com o nome sendo criado no foi encontrado. S$7$'S$'CSD#O0;CO,=.$; fa2 com 6ue as estat%sticas do %ndice no se:am recalculadas automaticamente com a atuali2a o do %ndice. =7-D'#-;< dei4a espa os va2ios nas p/ginas dos n%veis intermedi/rios do %ndice. S5 fa2 sentido se usado em con:unto com T'LLT7C$O0. >ota@ =ara criar 6ual6uer %ndice+ voc3 deve estar posicionado no banco de dados em 6ue o mesmo ser/ criado+ ou informar o nome completo da tabela AnomeDbancoDdeDdados..nomeDtabelaB. $ambm poss%vel usar a cl/usula .S;S antes do comando de cria o do %ndice A.S;S nomeDbancoDdeDdadosB. =ara e4cluir algum %ndice+ use o comando -0O= '#-;<+ com a seguinte sinta4e&
-0O= '#-;< Ktabela.%ndiceK (+...n*
Onde tabela.indice o nome da tabela+ seguido do nome do %ndice 6ue se dese:a e4cluir. Caso voc3 6ueira e4cluir mais de um %ndice de uma ve2+ basta colocar uma v%rgula e indicar o nome doAsB outroAsB %ndiceAsB a serAemB e4clu%doAsB.
.timi8ando %onsultas
O otimi2ador escolhe uma de duas alternativas ao fa2er uma consulta& ou varre a tabela ou usa um %ndice. ;le decide o 6ue fa2er baseado em& ;stimativa apro4imada de 6uanto trabalho necess/rio para usar o %ndice ou no. ;ssa estimativa baseada em informa 1es estat%sticas sobre o %ndice+ 6ue di2em 6ual a distribui o dos dados. ;ssas informa 1es podem ficar desatuali2adas. =ara corrigi-las+ e4ecute o comando .=-7$; S$7$'S$'CS nomeAdaAta6ela. Se uma tabela muito pe6uena+ ou se o otimi2ador espera 6ue ser/ retornada uma grande porcentagem de linhas+ ele fa2 uma varredura. Se na cl/usula !H;0; da consulta esto presentes colunas inde4adas+ bem prov/vel 6ue o otimi2ador resolva utili2ar o %ndice.
$nalisando o .timi8ador
=ara saber se o otimi2ador est/ usando seus %ndices ou no+ no QuerL 7nalL2er+ cli6ue no boto CSho" ;4ecution =lanC ACtreLB. Quando da e4ecu o de uma consulta+ voc3 agora tem duas guias+ como pode ser visto abai4o& 108
;ssa guias podem ser selecionadas na parte inferior da :anela da consulta. .ma o C;stimated ;4ecution =lanC e a outra C0esultsC. #a guia C;stimated e4ecution planC+ voc3 pode ver a an/lise de cada linha da sua consulta ou 6ual6uer comando SQL. =ara cada linha da consulta+ voc3 ver/ seu custo CQuerL costC como uma porcentagem do custo total da se6u3ncia de comandos+ e seu te4to CQuerL te4tC. #a guia C0esultsC voc3 ver/ o resultado da consulta. 7lm disso+ para cada linha da consulta+ mostrada uma representa o gr/fica A6ue deve ser lida da direita para a es6uerdaB+ 6ue especifica os operadores l5gicos e f%sicos utili2ados na e4ecu o de cada parte da consulta ou comando. =ara saber mais sobre a representa o gr/fica do plano de e4ecu o+ procure porC8raphicallL -isplaLing the ;4ecution =lan .sing SQL Server QuerL 7nalL2erC no Foo9s Online. Cada um dos %cones A6ue so chamados de operadores+ f%sicos e l5gicosB mostrados no plano de e4ecu o+ 6uando se passa o mouse por cima dos mesmos+ mostram informa 1es espec%ficas a seu respeito+ como seu nome+ o custo computacional em termos de C=. e de '/O+ alm dos parZmetros 6ue foram usados com o mesmo e uma breve descri o de sua fun o. Quando voc3 passa o mouse por cima da seta 6ue liga os %cones+ voc3 v3 6uantas linhas foram retornadas Ano caso de um S;L;C$B pelo seu comando+ e o tamanho estimado de cada linha. Caso voc3 6ueira ver os resultados da an/lise do otimi2ador em modo te4to+ use o comando
S;$ SHO!=L7#D7LL O#
'sso fa2 com 6ue o SQL Server no e4ecute comandos SQL. 7o invs disso+ ele retorna informa 1es detalhadas sobre como os comandos so e4ecutados e estima os custos dos comandos. 7 informa o retornada como um con:unto de linhas 6ue formam uma /rvore hier/r6uica 6ue representa os passos dados pelo processadore de consultas do SQL Server na e4ecu o de cada comando+ seguida por algumas linhas com os detalhes dos passos de e4ecu o. ;sse comando no pode ser parte de um procedimento arma2enado; deve ser o )nico comando em um batch Alote de comandosB. O comando destinado a aplica 1es escritas para lidar com sua sa%da. =ara retornar sa%das compreens%veis para aplica 1es ,S--OS+ use
S;$ SHO!=L7#D$;<$ O#
Os resultados so retornados na forma de an/lise da consulta+ sem sua e4ecu o+ at 6ue voc3 CdesligueC essas op 1es+ bastando para isso digitar
S;$ SHO!=L7#D7LL OTT
ou
S;$ SHO!=L7#D$;<$ OTT
12 - Integridade de Dados
109
Apostila Microsoft SQL Server 7.0 %onceitos $ 'ro'riedade ID4>?I?Q 3sando De+aults e &egras De+inindo e 3sando &estri/es G%onstraintsH Quando 3sar %ada %om'onente
Objetivos: - 7prender a criar colunas com auto-incremento; - 7prender a utili2ar as op 1es defaults e 0egras nas colunas; - 7prender a definir restri 1es nas tabelas para garantir a integridade dos dados; - Saber 6uando escolher cada um dos recursos de integridade de dados.
$ 'ro'riedade ID4>?I?Q
.ma coluna criada com a propriedade '-;#$'$^ tem um valor )nico 6ue gerado automaticamente pelo sistema. Somente uma coluna pode ter essa propriedade. =or e4emplo+ crie uma nova tabela no banco de dados ;4emplo+ com o seguinte comando&
create table =roduto ACod=roduto int #O$ #.LL '-;#$'$^+ #ome varcharASJB+ =re o moneLB
.ma coluna '-;#$'$^ no aceita um valor e4plicitamente inserido. 7o inserir dados na tabela+ a coluna deve ser omitida. ;4ecute agora&
insert into =roduto A#ome+ =re oB values AK=rimeiro =rodutoK+ RJJ.JB insert into =roduto A#ome+ =re oB values AKSegundo =rodutoK+ R?J.JB insert into =roduto A#ome+ =re oB values AK$erceiro =rodutoK+ RPJ.JB
;4ecute agora&
select d from =roduto
#ote 6ue a coluna Cod=roduto foi preenchida automaticamente com um valor auto-incrementado pelo sistema&
Cod=roduto ----------R P O AO ro"AsB affectedB #ome ------------------=rimeiro =roduto Segundo =roduto $erceiro =roduto =re o -------------------------RJJ+JJ R?J+JJ RPJ+JJ
Opcionalmente+ na cria o da tabela+ pode ser informado uma semente Avalor inicial para a colunaB e um incremento+ como em&
Cod=roduto int '-;#$'$^AJ+RJB
Desabilitando ID4>?I?Q
Yoc3 pode temporariamente desativar a propriedade '-;#$'$^+ para 6ue voc3 possa inserir valores e4plicitamente numa coluna com '-;#$'$^. =ode ser necess/rio 6ue voc3 insira valores e4plicitamente em tabelas 6ue t3m itens deletados com fre6u3ncia.'nserir valores e4plicitamente na coluna com '-;#$'$^ lhe permite preencher espa os va2ios dei4ados na tabela. 110
7 6ual6uer instante+ somente uma ta6ela em uma sesso pode ter a propriedadede de '-;#$'$^D'#S;0$ em O#. ;sta propriedade s5 v/lida para o usu/rio atual e a sesso atual Aperde o efeito 6uando voc3 se desconecta do SQL ServerB. Se :/ houver uma tabela com esta propriedade em O#+ e se entrar com o comando S;$ '-;#$'$^D'#S;0$ O# para outra tabela+ ser/ retornado uma mensagem de erro di2endo 6ue essa propriedade :/ est/ em O# e 6ual a tabela para a 6ual essa propriedade est/ em O#.
7 principal vantagem do tipo de dados uni,ueidenti+ier 6ue se garante 6ue os valores gerados pela fun o $ransact-SQL+ #;!'-+ se:am e4clusivos ao redor do mundo. ,as por outro lado+ o tipo de dados uni,ueidenti+ier tem srias desvantagens& Os valores so longos e obscuros. 'sso os torna dif%ceis de serem digitados corretamente pelos usu/rios+ e mais dif%cil ainda de serem lembrados. Os valores so aleat5rios e no aceitam 6uais6uer padro 6ue os torne mais significativos para os usu/rios. 111
#o h/ como determinar a se6u3ncia em 6ue os valores uni,ueidenti+ier so gerados. ;les no se ade6uam a aplica 1es e4istentes 6ue incrementem serialmente valores-chave. Como t3m RS bLtes+ os dados do tipo uni,ueidenti+ier so relativamente grandes se comparados com outros tipos de dados tais como inteiros de Q bLtes. 'sto significa 6ue %ndices constru%dos usando chaves do tipo uni,ueidenti+ier podem ser relativamente mais lentos do 6ue se implementados utili2ando uma chave int.
#ote 6ue para simplificar no colocamos todos os estados v/lidos. O nome do parZmetro valor+ e a condi o verifica se Uvalor um dos valores da lista. Cli6ue no boto O9. 7gora essa regra pode ser usada em uma coluna 6ual6uer. Cli6ue com o boto direito na regra 6ue voc3 acabou de criar+ selecione =roperties+ cli6ue no boto CFind ColumnsCe vamos ligar essa regra+ na tabela Cliente+ ] coluna C;stadoC. Ta a isso+ selecionando a tabela Cliente+ selecionando o campo ;stado em 112
C.nbound ColumnsC+ e clicando no boto 7dd. Teche as :anelas+ clicando em O9 duas ve2es. #ote 6ue a regra s5 se aplica aos novos dados 6ue sero inseridos e no afeta os anteriores. 7gora tente inserir um dado na tabela Cliente+ como por e4emplo&
insert into Cliente ACodCliente+ #ome+ ;stadoB values ARJ+ K-cimo ClienteK+ K<^KB
Como K<^K no satisfa2 a regra+ o SQL Server vai mostrar uma mensagem indicando isso.
.ma regra pode ser criada com o comando C0;7$; 0.L;+ como&
create rule 0egra;stado as Uestado in AKS=K+ K8OK+ K0MKB
=ara vincular uma regra ou default a uma coluna ou a um tipo de dados+ usa-se o procedimento spA6indrule ou spA6inde+ault&
spDbindefault nomeAde+ault+ nomeAo6<eto? futureonlL spDbindrule nomeAregra+ nomeAo6<eto? futureonlL
Onde nomeAo6<eto pode ser nomeAta6ela#nomeAcoluna+ no caso de uma coluna ou o nome de um tipo de dados e +utureonlA um parZmetro opcional di2endo 6ue+ no caso de um tipo de dados+ o item afeta apenas colunas a serem criadas+ mas no as e4istentes. =ara desvincular a regra ou default+ usa-se&
spDunbindefault nomeAo6<eto+ futureonlL spDunbindrule nomeAo6<eto+ futureonlL
7o desvincular um default ou uma regra+ se voc3 usar a op o +utureonlA+ colunas e4istentes do tipo de dados no perdem o default ou regra especificado. Tinalmente+ para e4cluir um default ou regra+ podem ser usados os comandos&
drop default nomeAde+ault drop rule nomeAregra
Lembre-se de desvincular um default ou regra 6ue este:am vinculados a uma coluna antes de e4clu%-los.
113
#ote 6ue KCodTornecedorK deve ter a op o #O$ #.LL. #o poss%vel criar uma chave prim/ria com colunas 6ue podem ser #.LL. Opcionalmente+ poderia ser informado um nome para a restri o+ por e4emplo KChaveTornecedorK. #esse caso+ a segunda linha acima seria&
CodTornecedor int not null constraint %5aveFornecedor 'rimarA !eA+
7gora+ na tabela Tornecedor+ no pode haver duas linhas com o mesmo valor de KCodTornecedorK. Quando a chave composta de duas ou mais colunas+ nesse caso ela tem 6ue ser especificada com a lista de colunas entre par3nteses+ por e4emplo&
create table =rodutoTornecedor ACod=roduto int+ CodTornecedor int+ 'rimarA !eA "%od7roduto; %odFornecedor#B
.ma chave prim/ria pode ser acrescentada ] tabela depois 6ue ela :/ foi criada+ com o comando 7L$;0 $7FL;. =or e4emplo+ vamos acrescentar chaves prim/rias ]s tabelas Cliente e =roduto&
alter table Cliente add 'rimarA !eA nonclustered "%od%liente# alter table =roduto add 'rimarA !eA clustered "%od7roduto#
7 op o #O#CL.S$;0;- di2 respeito ao tipo de %ndice 6ue ser/ criado para a chave prim/ria. Se no especificada+ o %ndice ser/ CL.S$;0;- Av. cap%tulo anteriorB. ;sse %ndice criado ou e4clu%do automaticamente+ :unto com a restri o. ;m 6ual6uer um dos casos pode-se especificar ou no o nome da restri o+ na forma CO#S$07'#$ nome logo antes das palavras C=0',70^ I;^C. 114
3nicidade G3>IQ34H
.ma restri o .#'Q.; em uma coluna ou grupo de colunas determina 6ue o seu valor deve ser )nico na tabela. ;sse tipo de restri o usado para chaves alternadas+ ou se:a+ valores 6ue se repetem na tabela alm da chave prim/ria. =ode haver v/rias restri 1es .#'Q.; na tabela e as colunas de uma restri o .#'Q.; permitem valores nulos. ;sse tipo de restri o pode ser criada com e4atamente a mesma sinta4e do =0',70^ I;^+ por e4emplo Ano e4ecuteB&
alter table Cliente add uni,ue nonclustered "%od%liente#
$ambm criado um %ndice automaticamente+ 6ue no permite valores duplicados. =ode-se especificar ou no o nome da restri o+ na forma CO#S$07'#$ nome logo antes do C.#'Q.;C..
De+ault
.m default pode ser especificado na forma de restri o. #a defini o da tabela+ como :/ vimos+ poss%vel fa2er isso&
create table Cliente A ... -ataCadastro datetime de+ault "getdate"##+ ... =a%s varcharAPJB de+ault VBrasilVB
O valor de um default pode ser uma constante ou uma chamada fun o do sistema+ como 8;$-7$;AB. =odese especificar ou no o nome da restri o+ na forma CO#S$07'#$ nome logo antes da palavra C-;T7.L$C+ por e4emplo&
=a%s varcharAPJB constraint De+7ais de+ault VBrasilV
Se o default for acrescentado com o comando 7L$;0 $7FL;+ preciso especificar para 6ual coluna ele vai ser ativado+ por e4emplo&
alter table Cliente add default KFrasilK +or 7a6s
Veri+icao G%-4%UH
.ma restri o CH;CI muito semelhante a uma regra+ 6ue verifica os valores 6ue esto sendo inseridos. 7 vantagem 6ue ele pode fa2er refer3ncia a uma ou mais colunas da tabela. =or e4emplo+ vamos verificar+ na tabela Cliente+ se a Cidade e ;stado so informados. Yamos criar uma restri o 6ue impede de inserir o valor de Cidade+ se ;stado no foi informado&
alter table Cliente add c5ec! "not "%idade is not null and 4stado is null##
=ara testar+ tente inserir uma linha com Cidade k K$esteK e ;stado no informado Aou informado k #.LLB. #ote 6ue a e4presso do CH;CI deve estar sempre entre par3nteses. Sub-consultas no so permitidas em CH;CI; para verificar dados em outras tabelas+ use chaves estrangeiras como abai4o. =ode-se especificar ou no o nome da restri o+ na forma CO#S$07'#$ nome logo antes das palavra CCH;CIC. $ecnicamente+ o 6ue uma restri o CH;CI fa2 especificar uma condi o de pes6uisa Fooleana A6ue retorna verdadeiro ou falsoB 6ue aplicada a todos os valores inseridos para a coluna. $odos os valores 6ue no retornem verdadeiro ($0.;* so re:eitados. Yoc3 pode especificar v/rias restri 1es CH;CI para cada coluna.
.ma chave estrangeira (foreign 9eL* uma restri o de integridade referencial. ;la consiste de uma coluna ou grupo de colunas cu:o valor deve coincidir com valores de outra tabela. #o nosso caso+ vamos adicionar duas chaves estrangeiras na tabela K=rodutoTornecedorK& Cod=roduto fa2 refer3ncia a 7roduto1%od7roduto e CodTornecedor fa2 refer3ncia a Fornecedor1%odFornecedor&
alter table =rodutoTornecedor add +oreign !eA "%od7roduto# re+erences 7roduto"%od7roduto#+ +oreign !eA "%odFornecedor# re+erences Fornecedor"%odFornecedor#
#ote 6ue a chave prim/ria de =roduto ACod=rodutoB e de Tornecedor ACodTornecedorB+ como foi definido antes. Se fossem especificados apenas os nomes das tabelas+ sem indicar entre par3nteses as colunas+ tambm funcionaria&
alter table =rodutoTornecedor add +oreign !eA "%od7roduto# re+erences 7roduto+ +oreign !eA "%odFornecedor# re+erences Fornecedor
=or6ue nesse caso assumida a chave prim/ria. ,as uma chave estrangeira pode fa2er refer3ncia a colunas 6ue no a chave prim/ria+ desde 6ue possuam uma restri o .#'Q.; definida. Outra forma de criar essas restri 1es em con:unto com a tabela+ da forma&
create table =rodutoTornecedor ACod=roduto int +oreign !eA re+erences 7roduto+ CodTornecedor int +oreign !eA re+erences Fornecedor+ primarL 9eL ACod=roduto+ CodTornecedorBB
;sse tipo de restri o no cria um %ndice automaticamente+ embora muitas ve2es se:a recomend/vel criar para maior desempenho Ageralmente no-clusteredB. =ode-se especificar o nome da restri o opcionalmente+ na forma CO#S$07'#$ nome? logo antes das palavras CTO0;'8# I;^C.
;sse comando mostra informa 1es sobre a tabela+ inclusive os nomes de cada restri o. =ara e4cluir uma restri o+ usa-se 7L$;0 $7FL;+ com a op o -0O= Aindependente do tipo de restri oB. 7 sinta4e genrica &
alter table nomeAdaAta6ela drop constraint nomeAdaArestri=o
.ma restri o tambm pode ser desabilitada temporariamente e depois reabilitada com o comando 7L$;0 $7FL;+ usando as op 1es #OCH;CI Apara desabilitarB e CH;CI Apara habilitarB. 'sso no funciona com =0',70^ I;^+ .#'Q.; ou -;T7.L$+ apenas com as outras restri 1es. 'sso pode ser )til para inserir dados 6ue fu:am aos valores impostos pelas restri 1es. 7 sinta4e &
alter table nomeAdaAta6ela nochec9 constraint nomeAdaArestri=o alter table nomeAdaAta6ela chec9 constraint nomeAdaArestri=o
116
Yoc3 tem a p/gina 'nde4es/IeLs para criar ou remover a chave prim/ria+ e criar ou e4cluir restri 1es .#'Q.;. 7 p/gina C$ablesC permite definir restri 1es CH;CI+ a p/gina C0elationshipsC permite definir as chaves estrangeiras. Os defaults so tratados na lista de colunas+ na :anela de edi o da tabela. #ote 6ue nesta :anela+ voc3 tambm pode definir em 6ual grupo de ar6uivos Aver grupos de ar6uivosB voc3 vai criar cada uma das restri 1es.
11 - Vis/es;Gatil5os e 7rocedimentos
Vis/es GVie sH 7rocedimentos $rma8enados Gatil5os G?riggersH
Objetivos: - 7prender a criar e utili2ar vis1es e saber 6uais as particularidades do acesso a vis1es; - 7prender a criar e utili2ar procedimentos arma2enados; - 7prender a criar e utili2ar triggers(gatilhos*.
117
Vis/es GVie sH
.ma viso (vie"* uma forma alternativa de olhar os dados contidos em uma ou mais tabelas. =ara definir uma viso+ usa-se um comando S;L;C$ 6ue fa2 uma consulta sobre as tabelas. 7 viso aparece depois como se fosse uma tabela. Yis1es t3m as seguintes vantagens& .ma viso pode restringir 6uais as colunas da tabela 6ue podem ser acessadas Apara leitura ou para modifica oB+ o 6ue )til no caso de controle de acesso+ como veremos mais tarde. .ma consulta S;L;C$ 6ue usada muito fre6gentemente pode ser criada como viso. Com isso+ a cada ve2 6ue ela necess/ria+ basta selecionar dados da viso. Yis1es podem conter valores calculados ou valores de resumo+ o 6ue simplifica a opera o. .ma viso pode ser usada para e4portar dados para outras aplica 1es.
R. #a :anela superior Alogo abai4o dos %cones+ chamada de se o do diagrama+ cli6ue com o boto direito+ e selecione $dd ?able. P. #a guia $ables Aou Yie"s+ caso voc3 :/ tenha criado alguma viso e 6ueira 6ue ela fa a parte desta 6ue est/ sendo criadaB+ selecione a tabela Aou visoB a ser adicionada+ e ento cli6ue $dd. Caso voc3 6ueira remover alguma tabela adicionada ao diagrama+ cli6ue na mesma comqo boto direito e selecione &emove. O. 0epita tantas ve2es 6uantas forem as tabelas Aou vis1esB a serem adicionadas ] nova viso. Cli6ue em %lose 6uando tiver escolhido todas as tabelas Aou vis1esB dese:adas. 118
Q. #a cai4a Column da se o da grade Aparte da :anela logo abai4o de onde esto as tabelas adicionadasB+ selecione as colunas a serem referenciadas na viso. #ote 6ue caso ha:a mais de uma tabela na se o do diagrama+ 6uando voc3 for selecionar a coluna na se o da grade+ aparecer/ o nome completo da coluna Atabela.colunaB. ?. ,ar6ue a cai4a .ut'ut se a coluna deve ser mostrada no resultado da viso. #ote 6ue voc3 tambm pode escolher as colunas 6ue faro parte da viso+ selecionando-as na representa o gr/fica da tabela+ mas as colunas selecionadas dessa maneira faro parte da sa%da por padro. =ara 6ue no apare am na sa%da+ desmar6ue a cai4a .ut'ut. S. =ara agrupar por alguma coluna+ cli6ue com o boto direito na coluna Ana se o da gradeB e selecione Grou' BA. G. #a coluna %riteria+ digite o critrio especificando 6uais linhas retornar; isso determina a cl/usula !H;0;. Se 8roup FL for especificado+ isso determina a cl/usula H7Y'#8. @. #a coluna .r111 entre com 6ual6uer critrio adicional para especificar 6uais linhas a serem retornadas. >. Cli6ue com o boto direito em 6ual6uer lugar da se o da grade+ e ento selecione 7ro'erties. COutput all columnsC mostrar/ todas as linhas da viso no resultado. C-'S$'#C$ valuesC filtra os valores duplicados no resultado. C;ncrLpt vie"C criptografa a defini p da viso. Opcionalmente+ em C$opC+ entre com o n)mero de linhas a serem retornadas no resultado. -igite a palavra =;0C;#$ depois do n)mero para mostrar uma porcentagem das linhas+ no resultado. RJ. Cli6ue com o boto direito em 6ual6uer lugar da se o do diagrama; cli6ue ento em &un Apara ver o resultadoB ou Save Apara salvar a visoB. #ote 6ue na se o SQL+ aparece o c5digo SQL do S;L;C$ envolvido na cria o da viso.
nomeAvis=o o nome a ser dados ] viso coluna o nome a ser usado para uma coluna em uma viso. #omear uma coluna em C0;7$; Y';! s5 necess/rio 6uando uma coluna obtida por uma e4presso aritmtica+ uma fun o+ ou uma constante+ ou 6uando duas ou mais colunas poderiam ter o mesmo nome Afre6uentemente por causa de uma :un oB+ ou 6uando a coluna em uma viso recene um nome diferente do nome da coluna da 6ual se originou. Os nomes de colunas tambm podem ser atribu%dos no comando S;L;C$. Caso voc3 6ueira nomear mais de uma coluna+ entre com o nome de cada uma separado por v%rgulas. !'$H ;#C0^=$'O# criptografa as entradas na tabela sAscomments 6ue contm o te4to do comando C0;7$; Y';!. !'$H CH;CI O=$'O# for a todas as modifica 1es de dados e4ecutadas na viso a aderirem aos critrios definidos na declara=oASELE-,. Quando uma coluna modificada atravs de uma viso+ !'$H CH;CI O=$'O# garante 6ue os dados permane am vis%veis atravs da viso depois 6ue as modifica 1es forem efetivadas. Yamos criar uma viso no banco de dados ;4emplo+ usando as tabelas K=rodutoK+ KTornecedorK e K=rodutoTornecedorK. ;ssa viso vai mostrar o nome do fornecedor e o nome do produto. Crie-a digitando o te4to abai4o no QuerL 7nalL2er&
create vie" YisaoTornec=roduto as select f.#ome #omeTornecedor+ p.#ome #ome=roduto from Tornecedor f
119
Apostila Microsoft SQL Server 7.0 inner :oin =rodutoTornecedor pf on f.CodTornecedor k pf.CodTornecedor inner :oin =roduto p on pf.Cod=roduto k p.Cod=roduto
=ara criar uma viso voc3 deve estar posicionado no banco de dados onde a viso ser/ criada ou ento especific/-lo atravs da cl/usula .S;S. 7o criar uma viso+ o te4to do comando acima arma2enado na tabela s&scomments. 7gora+ para testar+ digite&
select d from YisaoTornec=roduto
O resultado ter/ as colunas K#omeTornecedorK e K#ome=rodutoK+ mostrando os dados relacionados entre elas. Yoc3 pode tambm criar uma viso 6ue calcula valores usando colunas das tabelas+ ou usando 80O.= F^ e fun 1es agregadas+ na declara o S;L;C$.
$odas as considera 1es feitas a respeito do comando C0;7$; Y';! se aplicam a6ui. Caso voc3 no se lembre do comando usado na cria o da viso Ao comando C0;7$; Y';!B + voc3 pode obt3-lo usando o procedimento spAhelpte@t+ da forma&
spDhelpte4t YisaoTornec=roduto
;ste te4to consultado na tabela s&scomments. 7lgumas linhas podem aparecer 6uebradas no resultado. N importante considerar 6ue a altera o de uma viso no afeta os procedimentos arma2enados ou gatilhos dependentes da mesma e no altera as permiss1es atribu%das ] mesma Averemos mais sobre permiss1es em Seguran aB.
120
7rocedimentos $rma8enados
.m procedimento arma2enado (stored procedures* um con:unto de comandos SQL 6ue so compilados e arma2enados no servidor. ;le pode ser chamado a partir de um comando SQL 6ual6uer. ;m vers1es anteriores do SQL Server+ os procedimentos arma2enados eram uma maneira de pr-compilar parcialmente um plano de e4ecu o. Quando da cria o do procedimento arma2enado+ um plano de e4ecu o parcialmente compilado era arma2enado em uma tabela de sistema. 7 e4ecu o de um procedimento arma2enado era mais eficiente do 6ue a e4ecu o de um comando SQL+ por6ue o SQL Server no precisava compilar um plano de e4cu o completamente+ apenas tinha 6ue terminar a otimi2a o do plano arma2enado para o procedimento. 7lm disso+ o plano de e4ecu o completamente compilado para o procedimento arma2enado era mantido na cache de procedimentos do SQL Server+ significando 6ue e4ecu 1es posteriores do porcedimento arma2enado poderiam usar o plano de e4ecu o pr-compilado. 7 verso G.J do SQL Server apresenta v/rias mudan as no processamento de comandos 6ue estendem muitos dos benef%cios de desempenho dos procedimentos arma2enados para todos os comandos SQL. O SQL Server G.J no salva um plano parcialmente compilado para os procedimentos 6uando os mesmos so criados. .m procedimento arma2enado compilado em tempo de e4ecu o como 6ual6uer outro comando $ransact-SQL. O SQL Server G.J mantm planos de e4ecu o para todos os comandos SQL na cache de procedimentos+ no apenas planos de e4ecu o de procedimentos arma2enados. ;le ento usa um algoritmo eficiente para compara o de novos comandos $ransact-SQL com os comandos $ransact-SQL de planos de e4ecu o e4istentes. Se o SQL Server G.J determinar 6ue um novo comando $ransact-SQL o mesmo 6ue um comando $ransact-SQL de um plano de e4ecu o e4istente+ ele reutili2a o plano. 'sso redu2 o ganho relativo de desempenho+ na pr-compila o de procedimentos arma2enados+ :/ 6ue estende a reutili2a o de planos de e4ecu o para todos os comandos SQL. 7 vantagem de usar procedimentos arma2enados 6ue eles podem encapsular rotinas de uso fre6gente no pr5prio servidor+ e estaro dispon%veis para todas as aplica 1es. =arte da l5gica do sistema pode ser arma2enada no pr5prio banco de dados+ em ve2 de ser codificada v/rias ve2es em cada aplica o.
#ote 6ue os parZmetros so sempre declarados com U+ logo ap5s o nome do procedimento. .m procedimento pode ter 2ero ou mais parZmetros. -eclara-se o nome do procedimento+ e a seguir o tipo de dados do parZmetro. >ota@ ao invs de C0;7$; =0OC;-.0;+ pode-se utili2ar C0;7$; =0OC+ com o mesmo efeito. -entro do procedimento pode haver v/rios comandos S;L;C$ e o resultado desses comandos ser/ o resultado do procedimento. O corpo do procedimento come a com a palavra 7S e vai at o final do procedimento. #o se pode usar os comandos S;$ SHO!=L7#D$;<$+ e S;$ SHO!=L7#D7LL dentro de um procedimento arma2enado+ pois os mesmos devem ser os )nicos comandos de um lote AbatchB. -entro de um procedimento+ nomes de ob:etos usados em alguns comandos devem ser 6ualificados com o nome do propiet/rio do ob:eto+ se outros usu/rios utili2aro o procedimento arma2enado. Os comandos so& 7L$;0 $7FL; C0;7$; '#-;< $odos os comandos -FCC 121
O resultado ser/ as linhas da tabela Cliente onde o valor de #ome contm KanK Ase e4istirem tais linhasB. 7o e4ecutar um procedimento+ voc3 pode informar e4plicitamente o nome de cada parZmetro+ por e4emplo&
FuscaCliente UnomeFusca k KanK
'sso permite passar os parZmetros Ase mais de umB fora da ordem em 6ue eles foram definidos no procedimento. ;<;C tambm pode e4ecutar um procedimento em outro servidor. =ara isso+ a sinta4e b/sica &
;<;C nomeAservidor#nomeA6ancoAdeAdados##nomeAprocedimento
O comando -;CL70; declara vari/veis+ 6ue so sempre introdu2idas pelo caractere U. #o caso+ Ucontagem uma vari/vel do tipo int e Umensagem do tipo charARJJB. #ote 6ue 6uando voc3 usa um comando S;L;C$+ o resultado pode ser colocado numa vari/vel+ como Ucontagem acima. ;sse resultado no aparece no resultado do S;L;C$. ;ssa tambm a )nica forma de alterar uma vari/vel Avoc3 no pode escrever KUvari/vel k valorK diretamenteB. O comando 'T verifica uma condi o e e4ecuta um comando caso a condi o se:a verdadeira. Se acompanhado da cl/usula ;LS;+ e4ecuta um outro comando caso a condi o se:a falsa. O comando =0'#$ usado acima geralmente usado para mostrar mensagens+ 6ue aparecem 6uando voc3 chama o procedimento interativamente.
122
Os comandos F;8'# e ;#- so usados para delimitar uma lista de comandos+ 6ue passa a ser tratada como um comando )nico. #o caso acima+ eles so necess/rios para poder e4ecutar tr3s comandos dentro do 'T Ao S;L;C$ e os dois =0'#$B.
$ambm poss%vel a cria o de procedimentos arma2enados atravs do ;nterprise ,anger. =ara isso+ devese e4pandir um grupo de servidore+ um servidor+ e o banco de dados onde o procedimento arma2enado ser/ criado. Cli6ue ento com o boto direito em Stored 7rocedures+ e selecione >e Stored 7rocedure. 7parece uma tela como abai4o #essa tela voc3 deve dar o nome 6ue dese:ar ao procedimento+ substituindo o te4to em preto (=0OC;-.0; #7,;* pelo nome 6ue voc3 6uer dar ao procedimento arma2enado sendo criado. Logo depois do 7S+ voc3 deve entrar com o c5digo do procedimento arma2enado+ conforme descrito acima. Yoc3 pode ap5s entrar com o c5digo dese:ado+ clicar no boto %5ec! SAnta(+ 6ue verificar/ se h/ erros de sinta4e nas declara 1es SQL. Quando tiver terminado de entrar com o c5digo do procedimento+ basta clicar em OI 6ue o mesmo ser/ criado.
Gatil5os G?riggersH
.m gatilho (trigger* um tipo de procedimento arma2enado+ 6ue e4ecutado automaticamente 6uando ocorre algum tipo de altera o numa tabela. 8atilhos CdisparamC 6uando ocorre uma opera o '#S;0$+ .=-7$; ou -;L;$; numa tabela. 8eralmente gatilhos so usados para refor ar restri 1es de integridade 6ue no podem ser tratadas pelos recursos mais simples+ como regras+ defaults+ restri 1es+ a op o #O$ #.LL etc. -eve-se usar defaults e restri 1es 6uando eles fornecem toda a funcionalidade necess/ria. .m gatilho tambm pode ser usado para calcular e arma2enar valores automaticamente em outra tabela+ como veremos. 123
4(em'lo de gatil5os
=ara utili2ar gatilhos+ vamos criar antes algumas tabelas 6ue sero usadas como e4emplo. 7 tabela C#otaTiscalC conter/ os cabe alhos de notas fiscais. 7 tabela C'tem#otaTiscalC ir/ conter itens de nota fiscal relacionados com as notas fiscais. ;4ecute o script abai4o para criar as tabelas&
create table #otaTiscal A#umero#ota numericARJB primarL 9eL+ Yalor$otal numericARJ+PB default AJB B 8O create table 'tem#otaTiscal A#umero#ota numericARJB foreign 9eL references #otaTiscal+ Cod=roduto int foreign 9eL references =roduto+ Quantidade int not null chec9 AQuantidade b JB+ primarL 9eL A#umero#ota+Cod=rodutoB B
Yamos usar gatilhos para duas finalidades& primeiro+ 6uando for e4clu%da uma nota fiscal+ todos os seus itens sero e4clu%dos automaticamente. -epois+ 6uando for inclu%do um item+ a coluna KYalor$otalK ser/ atuali2ada+ na tabela K#otaTiscalK.
%riando gatil5os
8atilhos so sempre criados vinculados a uma determinada tabela. Se a tabela for e4clu%da+ todos os gatilhos dela so e4clu%dos como conse6g3ncia. 7o criar um gatilho+ voc3 pode especificar 6ualAisB aAsB opera oA1esB em 6ue ele ser/ acionado& '#S;0$+ .=-7$; ou -;L;$;.
=rimeiro o gatilho usa as tabelas inserted e ota1iscal para consultar se e4iste o valor de #umero#ota na tabela. Caso no e4ista+ o comando 07'S;00O0 gera um erro de e4ecu o+ com uma mensagem 6ue ser/ retornada para a aplica o. ;sse comando efetivamente cancela o comando '#S;0$ 6ue estiver sendo e4ecutado. -epois verifica a 6uantidade 6ue est/ sendo inserida Ainserted.QuantidadeB e multiplica pelo pre o do produto A=roduto.=re oB. ;sse pre o buscado na tabela de produtos+ usando como valor de pes6uisa o c5digo do produto inserido Ainserted.Cod=rodutoB. ;le atuali2a a nota fiscal relacionada com o item 6ue est/ sendo inserido Apara isso verifica "here #umero#otakAselect #umero#ota from insertedBB. 124
#ote acima o uso de Kif updateAnomeAdaAcolunaBK. -entro de um gatilho de atuali2a o+ isso permite descobrir se a coluna est/ sendo alterada ou no. 'sso para evitar trabalho desnecess/rio se no estiver sendo modificada uma dessas colunas.
.utros comandos
;m gatilhos+ assim como em procedimentos arma2enados+ poss%vel declarar vari/veis e usar comandos como 'T+ F;8'#..;#- etc. 125
1* - Segurana
%onceitos %riando logins do SQL Server %riando usu<rios do banco de dados %riando gru'os de usu<rios De+inindo 'ermiss/es
Objetivos: - Conhecer os recursos do SQL Server para controle de acesso ao banco de dados; - 7prender a criar logins de usu/rio e usu/rios do banco de dados.
%onceitos
Os recursos de seguran a do SQL Server permitem determinar& Quais usu/rios podem usar o SQL Server. Quais usu/rios podem acessar cada banco de dados. 7s permiss1es de acesso para cada ob:eto de banco de dados e para cada usu/rio. 7s permiss1es de acesso para cada comando SQL em cada banco de dados+ para cada usu/rio. ;4istem 6uatro barreiras para 6ue os usu/rios possam acessar dados em um servidor SQL Server& O sistema operacional de rede; o usu/rio deve efetuar logon na rede. 7 autentica o do SQL Server; o usu/rio deve ter uma conta no SQL Server. 7 autentica o de banco de dados; o '- do usu/rio deve e4istir em uma tabela de sistema do banco de dados Amais especificamente+ a tabela s&susersB 7 autentica o de ob:etos; o usu/rio deve ter permiss1es para acessar 6ual6uer ob:eto Atabelas+ vis1es+ entre outrosB.
126
$utenticao de usu<rios
Quando um usu/rio tenta acessar um servidor SQL Server+ ele pode ser autenticado de duas maneiras& pela 7utentica o do !indo"s #$ ou pela 7utentica o do SQL Server. #o confunda isso com modo de seguran a+ 6ue um t5pico muito semelhante. 7 autentica o do !indo"s #$ se aproveita da seguran a embutida no !indo"s #$ Server+ a 6ual inclui caracter%sticas como senhas criptografadas+ senhas 6ue e4piram+ tamanho m%nimo de senhas+ blo6ueio de conta+ e restri o de acesso com base em nomes de computador. O SQL Server pode confiar no !indo"s #$ para autenticar logins+ ou pode ele mesmo autenticar os logins. Quando o !indo"s #$ autentica o login+ o SQL Server processa o login assim& Quando um usu/rio se conecta ao SQL Server+ o cliente abre uma cone4o confi/vel com o SQL Server+ na 6ual so passadas as contas de usu/rio e de grupo do cliente para o SQL Server. .ma cone@=o con+i8vel (trusted connection* uma cone4o de rede com o SQL Server 6ue consegue ser autenticada pelo !indo"s #$. =ara ocorrer uma cone4o confi/vel+ as bibliotecas de rede (netlibraries* #amed =ipes ou ,ultiprotocol devem estar sendo utili2adas tanto pelo cliente 6uanto pelo servidor SQL Server. Caso a biblioteca de rede sendo utili2ada pelo cliente ou pelo servidor no se:a uma dessas duas+ a cone4o de rede n=o-con+i8vel e a autentica o do !indo"s #$ no pode ser utili2ada. Se o SQL Server encontra a conta de usu/rio ou de grupo na lista de contas de login do SQL Server+ na tabela de sistema s&slogins+ ele aceita a cone4o. O SQL Server no precisa de revalidar uma senha+ :/ 6ue o !indo"s #$ :/ a validou. #esse caso+ a conta de login no SQL Server+ do usu/rio+ a conta de usu/rio ou de grupo do !indo"s #$+ a 6ue tiver sido definida como a conta de login do SQL Server. Se v/rios computadores com servidores SQL Server participam em um dom%nio ou um grupo de dom%nios confi/veis+ basta efetuar logon em um )nico dom%nio para ter acesso a todos os servidores SQL Server. >ota@ O SQL Server no ir/ reconhecer grupos nem usu/rios 6ue foram e4clu%dos e depois recriados no !indo"s #$. Os grupos devem ser e4clu%dos do SQL Server e adicionados novamente+ pois o SQL Server usa o identificador de seguran a AS'-B do !indo"s #$ para identificar um grupo ou usu/rio. ; um grupo ou usu/rio e4clu%do e depois criado novamente com o mesmo nome no !indo"s #$+ ter/ um S'- diferente. Quando o SQL Server autentica o login+ ocorre o seguinte& Quando um usu/rio se conecta ao SQL Server com um nome de usu/rio e senha de uma conta do SQL Server+ o mesmo verifica 6ue um login e4iste na tabela de sistema s&slogins e 6ue a senha especificada igual a 6ue se tem gravada. Se o SQL Server no tem uma conta de login com esse nome de usu/rio ou a senha no a 6ue se tem gravada+ a autentica o falha e a cone4o recusada.
Modos de segurana
.m modo de seguran a se refere a como o -F7 Aadministrador do banco de dadosB configura o SQL Server para autenticar usu/rios. .m servidor pode usar um de dois modos de seguran a& !indo"s #$ e mista (mi4ed*. 7 diferen a entre esses modos de seguran a como a seguran a do SQL Server se integra com o !indo"s #$& Modo de autentica=o mista do SQL Server MSQL Server Mi@ed Authentication Securit& ModeN: #esse nidi de seguran a+ um usu/rio pode conectar-se ao SQL Server usando a 7utentica o do !indo"s #$+ ou a 7utentica o do SQL Server. 7o tentar conectar-se com o SQL Server+ verifica-se se voc3 est/ usando ou no uma cone4o confi/vel. Ocorre ento o seguinte& Se voc3 estiver usando uma cone4o confi/vel+ o SQL Server tentar/ autenticar o seu login do !indo"s #$+ verificando se o seu nome de usu/rio tem permisso para conectar-se ao servidor SQL 127
Server. Caso seu nome de usu/rio no tenha permisso para conectar-se ao SQL Server+ lhe ser/ pedido um nome de login e senha. Caso voc3 no este:a usando uma cone4o confi/vel+ lhe ser/ logo pedido um login e senha. Seu login e senha so verificados na tabela de sistema s&slogins. Se o nome de login for v/lido e a senha correta+ voc3 poder/ conectar-se ao servidor SQL Server. Quando o SQL Server lhe pede um login e senha+ ele usa seu pr5prio cadastro de usu/rios+ independente do banco de dados de contas do !indo"s #$. Os logins de usu/rio devem ser cadastrados no SQL Server. Modo de autentica=o de segurana do )indo.s , M)indo.s , Server Authtentication Securit& ModeN: Se se opta por usar o modo de seguran a do !indo"s #$+ s5 o mecanismo de autentica o do !indo"s #$ utili2ado para autenticar usu/rios para o SQL Server. O nome de usu/rio 6ue foi usado para se conectar ] rede #$ o mesmo nome usado para o SQL Server. ;sse nome de usu/rio e a senha no precisam ser informados novamente. Se o usu/rio for autori2ado Aou se:a+ tiver um registro na tabela de sistema s&sloginsB a conectar-se ao SQL Server+ ento ele poder/ conectar-se. #esse modo de seguran a+ s5 poss%vel se conectar ao SQL Server atravs de uma cone@=o con+i8vel. Se esta op o for escolhida+ deve-se ter certe2a de 6ue todos os clientes este:am rodando em sistemas !indo"s+ e 6ue possam conectar-se ao SQL Server usando uma cone4o confi/vel. Yantagens de cada um dos modos de seguran a Modo de segurana do Modo de segurana mista Dindo s >? 0ecursos avan ados de Clientes no-!indo"s e usando bro"ser podem usar esse seguran a modo para conectar-se. 7dicionar grupos como uma Camada adicional de seguran a sobre o !indo"s #$ conta. 7cesso r/pido.
128
;m 7uthentication+ caso voc3 selecione CSQL Server and !indo"s #$C+ o modo de seguran a mista Ami4ed modeB estar/ sendo definido. Caso voc3 selecione C!indo"s #$ onlLC+ o modo de seguran a do !indo"s #$ estar/ sendo definido. ;m 6ual6uer dos casos+ voc3 deve parar e reiniciar o servi o ,SSQL Server para 6ue a mudan a tenha efeito. =ara isso+ voc3 pode usar+ entre outras ferramentas+ o Service ,anager.
Logins
.m login do SQL Server Aou login (DB um nome 6ue identifica um usu/rio para o SQL Server. Cada login tem uma senha+ 6ue deve ser informada no caso da seguran a mista Aver abai4oB. O SQL Server cria automaticamente um login chamado KsaK Aadministrador do sistemaB+ 6ue no deve ser e4clu%do. O KsaK tem permisso para fa2er praticamente tudo no banco de dados& criar bancos de dados+ tabelas+ criar outros logins etc. O sa pode conceder permiss1es para outros usu/rios poderem fa2er algumas tarefas. $ambm criado automaticamente o login F.'L$'#E7dministrators. ;sse login a conta padro de login para todos os administradores do !indo"s #$. ;sse login tem todos os direitos no SQL Server e em todos os bancos de dados.
O usu/rio 6ue cria um ob:eto Atabela+ viso+ procedimento etc.B no banco de dados o dono deste ob:eto. O dono tem inicialmente todas as permiss1es no ob:eto criado+ mas ele pode conceder essas permiss1es a outros usu/rios se dese:ar. .m login pode ter um alias (apelido* dentro de um banco de dados+ 6ue o nome de outro usu/rio. #esse caso+ dentro da6uele banco de dados+ ele funciona como se fosse a6uele usu/rio e tem as mesmas permiss1es dele. Y/rios usu/rios AloginsB diferentes podem ter o mesmo alias. ;sse um recurso 6ue e4iste no SQL Server G.J+ apenas para compatibilidade com vers1es anteriores+ :/ 6ue atravs de papis (roles* e da atribui o de permiss1es aos papis+ o 6ue era feito usando aliases+ pode ser feito de maneira muito mais efica2. O usu/rio guest (convidado* um nome especial 6ue e4iste em todo banco de dados e permite a 6ual6uer login usar o banco de dados+ mesmo 6ue no tenha um nome de usu/rio relacionado.
7a'Wis G&olesH
#a sua ess3ncia+ um papel (role* um grupo de usu/rios 6ue t3m necessidades semelhantes de acesso ao SQL Server. ,as+ os papis so um pouco mais comple4os do 6ue isso. =or e4emplo+ h/ uma por o de tipos diferentes de papis do SQL Server+ incluindo os seguintes& =apis predefinidos de servidor (=redefined server roles* =apis predefinidos de bancos de dados (=redefined database roles* O papel p)blico (=ublic role* =apis personali2ados de bancos de dados (Custom database roles* *apOis de aplica=o so um tipo especial de papis 6ue so atribu%dos a uma aplica o espec%fica 6ue foi pro:etada para acessar os dados do SQL Server. =or e4emplo+ se um usu/rio precisa de acessar um tipo espec%fico de dados+ ao invs de atribuir permisso e4pl%cita ao usu/rio para acessar os dados+ o acesso aos dados dado ao usu/rio utili2ando a aplica o ] 6ual foi atribu%do um papel de aplica o. 'sso significa 6ue um usu/rio apenas ter/ acesso aos dados usando essa aplica o espec%fica. =apis de aplica o so atribu%dos a aplica 1es+ no a usu/rios.
7dministradores de sistema (SLstem 7dministrators* AsLsadminB& ;ste o mais poderoso de todos os papis. Qual6uer um 6ue perten a a esse papel pode reali2ar 6ual6uer tarefa no SQL Server+ inclusive sobrep_r-se a 6ual6uer dos outros papis predefinidos de servidor. ;sse papel o e6uivalente ] conta S7 em vers1es anteriores do SQL Server Aa conta S7+ por padro fa2 parte desse grupoB. Criadores de bancos de dados (-atabase Creators* AdbcreatorB& ;les t3m a habilidade de criar e alterar bancos de dados individuais. 7dministradores de discos (-is9 7dministrators* Adis9adminB& $3m a capacidade de gerenciar ar6uivos de disco. 7dministradores de processos (=rocess 7dministrators* AprocessadminB& $3m a capacidade de gerenciar os v/rios processos sendo e4ecutados no SQL Server. 7dministradores de seguran a (SecuritL 7dministrators* AsecuritLadminB& ;les t3m a capacidade de gerenciar logins para um servidor. 7dministradores de servidor (Sever 7dministrators* AserveradminB& $3m a capacidade de reali2ar configura 1es a n%vel de servidor. 7dministradores de configura o (Setup 7dministrators* AsetupadminB& $3m a capacidade de instalar a replica o no SQL Server+ e gerenciar procedimentos arma2enados. 8eralmente+ voc3 no precisar/ de todos esses papis 6uando for delegar tarefas administrativas do SQL Server para a:udantes. ;m muitos casos+ voc3 provavelmente s5 atribuir/ seus a:udantes a um ou dois papis+ dando-lhes as permiss1es espec%ficas 6ue eles precisam para e4ecutar as tarefas 6ue voc3 delegou a eles. Os usu/rios podem pertencer a mais de um papel ao mesmo tempo.
#ega o de leitura no banco de dados -atabase -enL -ata 0eader AdbDdenLdatareaderB& .m papel especial 6ue permite a seus membros mudar o es6uema do banco de dados+ mas sem poder ver os dados no banco de dados. #ega o de escrita no banco de dados (-atabase -enL -ata !riter* AdbDdenLdata"riterB& .m papel especial 6ue evita 6ue seus membros alterem 6ual6uer dado em um banco de dados. Como o -F7+ voc3 provavelmente no usar/ a maioria desses papis predefinidos de bancos de dados. N prov/vel 6ue voc3 precise de apenas alguns de modo a delegar algumas de suas tarefas administrativas para seus a:udantes. ; como com os papis predefinidos d servidor+ usu/rios podem pertencer a mais de um papel ao mesmo tempo.
#a cai4a C#ameC digite o nome do papel de banco de dados 6ue voc3 6uer criar . -epois+ voc3 deve informar se voc3 est/ criando um papel padro (Standard 0ole* ou um papel de aplica o (7pplication 0ole*. Se voc3 escolher criar um papel padro+ voc3 tem a op o de adicionar um ou mais '-s de usu/rios de banco de dados ao papel agora Aclicando em $dd111B. Ou ento+ voc3 pode pular este passo agora e adicionar '-s de usu/rios de banco de dados posteriormente+ usando as tcnicas mostradas em 8erenciando usu/rios . Se voc3 escolher papel de aplica o+ voc3 tambm dever informar uma senha. -epois de terminar de informar o 6ue foi pedido+ cli6ue em O9 para criar o novo papel de banco de dados. 'sso fechar/ a cai4a de di/logo acima e ento o novo papel ser/ mostrado no ;nterprise ,anager. >ota@ Lembre-se 6ue papis de banco de dados so criados para cada banco de dados. ;les no so compartilhados entre bancos de dados.
antes de tentar e4cluir o papel. Se voc3 tentar e4cluir um papel sem antes remover os '-s de usu/rios a ele associados+ voc3 ver/ uma mensagem de erro. =ara e4cluir um papel de banco de dados+ fa a o seguinte& R. #o ;nterprise ,anager+ e4panda o banco de dados em 6ue est/ definido o papel 6ue voc3 6uer e4cluir. P. Cli6ue em 0oles e+ no lado direito da tela+ selecione o papel a ser e4clu%do. -3 um duplo cli6ue no mesmo+ e verifi6ue se em bai4o de 3ser+ h/ algum usu/rio listado. O. Caso ha:a algum usu/rio+ remova-o selecionando-o e clicando no boto &emove. Q. Teito isso+ cli6ue em O9+ selecione o papel a ser e4clu%do+ cli6ue no mesmo com o boto direito e selecione Delete. ?. Lhe ser/ perguntado se voc3 de fato 6uer e4cluir o papel. Confirme+ clicando em Qes. Caso voc3 saiba de antemo 6ue no h/ usu/rios associados a esse papel+ v/ direto para o passo Q.
=ara adicionar ou remover um loginm de um papel de servidor+ fa a o seguinte& #o ;nterprise ,anager+ selecione o servidor SQL Server cu:os papis voc3 6uer configurar. ;4pandao e abra a pasta SecuritA. Cli6ue em Server &oles. #o lado direito da tela aparecem os papis de servidor. Selecione o papel ao 6ual voc3 6uer adicionar algum login. 134
Cli6ue no mesmo com o boto direito e selecione =roperties. 7parece a :anela abai4o&
=ara adicionar um login ao papel de servidor+ cli6ue no boto $dd. 7parece a cai4a de di/logo C7dicionar ,embrosC (7dd ,ebers*+ com todos os logins definidos para o servidor. ;scolha um ou mais logins para adicionar a esse papel de servidor. Cada ve2 6ue voc3 selecionar um login+ ele ficar/ marcado+ e assim ficar/ at 6ue voc3 o cli6ue de novo. -epois de selecionados todos os logins 6ue voc3 6uer adicionados ao papel de servidor+ cli6ue em O9. ;nto voc3 volta para a cai4a de di/logo de propriedades do papel de servidor Amostrada acimaB. Caso voc3 6ueira remover algum login 6ue fa2 parte de um papel de servidor+ selecione-o+ na cai4a de di/logo de propriedades do papel de servidor+ e cli6ue no boto &emove. Quando voc3 tiver adicionado e/ou removido todos os logins dese:ados a esse papel de servidor+ cli6ue em O9 para concluir. Yoc3 pode adicionar logins aos papis de servidor sempre 6ue achar necess/rio. ,as lembre-se 6ue o ato de delegar privilgios administrativos a usu/rios ]s ve2es pode ser arriscado+ e voc3 no ir/ 6uerer dar privilgios demais para usu/rios. 7penas d3 aos logins os privilgios absolutamente m%nimos 6ue eles precisam para completar as tarefas 6ue voc3 os atribuiu.
Observe na parte direita da tela estas informa 1es& 7 coluna C#ameC mostra cada login e4istente. Se algum login tiver um nome de dom%nio antes do nome do login+ como acima em C,70$'#SES6le4ecutivoC+ significa 6ue a conta usa a autentica o do !indo"s #$. Os 6ue no so precedidos por um nome de dom%nio usam a autentica o do SQL Server+ como CaC e CsaC na figura acima. 7 coluna C$LpeC d/ mais informa 1es sobre o login. Se o tipo C#$ .serC+ a conta foi o #$ Server e adicionada como um login do SQL Server. Se o tipo C#$ 8roupC+ isso significa 6ue 6ual6uer usu/rio 135
6ue fa a parte desse grupo do !indo"s #$ pode acessar o SQL Server utili2ando sua conta de grupo como login. Se o tipo CStandardC+ esse login foi criado usando com o ;nterprise ,anager. 7 coluna C-efault -atabaseC mostra 6ual banco de dados cada usu/rio usa como seu banco de dados padro. N o banco de dados no 6ual eles so automaticamente logados 6uando eles acessam o SQL Server pela primeira ve2. 7 coluna C.serC mostra o nome de usu/rio 6ue este usu/rio recebeu no banco de dados padro Ao 6ue ele automaticamente logado da primeira ve2 6ue efetua logon no SQL Server. 7 coluna C-efault LanguageC mostra a l%ngua espec%fica para o login. O padro ingl3s (;nglish*. =ara ver informa 1es espec%ficas sobre 6ual6uer um dos logins+ cli6ue no mesmo com o boto direito+ e selecione =roperties. 7parece a tela abai4o&
76ui voc3 pode ver e configurar 6uase todas op 1es de login. ;ssa tela tem tr3s guias. #a guia 8eneral+ voc3 pode alterar a senha para esse login (=ass"ord*+ e definir seu banco de dados e linguagem padro A(-atabase* e (Language*B. #a guia CServer 0olesC mostra a 6uais papis de servidor o login pertence. 7 guia C-atabase 7ccessC mostra a 6uais bancos de dados o login tem acesso Aou se:a+ tem um login definido na tabela s&slogins do banco de dadosB+ alm de mostrar a 6uais papis de banco de dados o usu/rio pertence+ em cada banco de dados. Cli6ue em Cancel para sair da :abela de propriedades do login.
136
=ara isso+ no ;nterprise ,anager+ selecione o banco de dados cu:as informa 1es de '-s de usu/rio voc3 6uer ver+ e4panda-o e cli6ue em 3sers.
#ote 6ue no lado direito da tela aparecem algumas informa 1es sobre os '-s definidos para o banco de dados& 7 coluna #ame mostra o '- de usu/rio 6ue foi adicionado a este banco de dados+ indicando 6uem tem a capacidade de acessar este banco de dados. 7 coluna CLogin #ameC mostra 6ual login est/ associado com os '-s de usu/rio definidos para esse banco de dados. 7 coluna C-atabase 7ccesC indica o tipo de acesso 6ue o '- de usu/rio tem a esse banco de dados. Selecione+ do lado direito da tela+ o login cu:as informa 1es voc3 dese:a ver+ cli6ue no mesmo com o boto direito e selecione =roperties. ;ssa tela mostra todos os papis de banco de dados definidos para este banco de dados Atodos 6ue aparecem listadosB e tambm a 6uais deles este usu/rio espec%fico pertence Aos 6ue t3m a cai4a de verifica o ao seu lado marcadaB. =ara sair desta :anela+ cli6ue em Cancel.
137
#a coluna C#ameCvoc3 v3 uma lista de todos os papis para esse banco de dados particular. #a coluna C0ole $LpeC v3-se as palavras CStandardC ou C7pplicationC. Standard significa 6ue um papel normal de banco de dados+ eb6uanto 7pplication significa 6ue esse papel um papel de aplica o de banco de dados. Caso voc3 6ueira obter mais informa 1es sobre 6ual6uer dos papis+ cli6ue no mesmo com o boto direito e selecione 7ro'erties.
138
;ssa cai4a de di/logo lista os usu/rios do banco de dados 6ue fa2em parte deste papel em particular. =ara sair dessa cai4a de di/logo+ cli6ue em Cancel. N bem prov/vel 6ue voc3 ache mais f/cil ver estas informa 1es atravs das informa 1es de login+ como descrito anteriormente.
#o ;nterprise ,anager+ selecione o servidor cu:os papis voc3 6uer gerenciar+ e e4panda-o. ;4panda a pasta SecuritA e selecione Server &oles. 139
O nome completo do papel de servidor mostrado na coluna CTull #ameC+ e o seu nome curto em C#ameC. 7 coluna C-escriptionC descreve o 6ue o papel de servidor pode fa2er. =ara descobrir 6uais logins pertencem a cada um dos papis de servidor+ cli6ue com o boto direito no papel de servidor+ e selecione =orperties. 7parece a cai4a de di/logo de C=ropriedades do papel de servidorC.
;ssa cai4a de di/logo tem duas guias& a guia C8eneralC+ 6ue te di2 6uais logins foram atribu%dos a esse papel particular. 7 guia C=ermissionsC te mostra as v/rias permiss1es 6ue esse papel recebeu. Cli6ue em Cancel para sair dessa :anela. >ota@ ;sse o )nico local onde se pode ver informa 1es sobre papis de servidor.
140
7ermiss/es
7t agora+ :/ vimos como criar e gerenciar logins 6ue so usados para controlar o acesso ao SQL Server. Yimos tambm como criar e gerenciar '-s de usu/rios de bancos de dados+ os 6uais so usados para controlar o acesso a bancos de dados individualmente. ,as+ mesmo 6ue um usu/rio tenha um login e um 'de usu/rio v/lido+ ele no pode acessar 6ual6uer dado em um banco de dados sem 6ue lhe tenham sido dadas permiss1es e4pl%citas para acessar os ob:etos arma2enados no banco de dados. *ermissBes so usadas no SQL Server para especificar 6uais usu/rios podem ter acesso a 6uais ob:etos de bancos de dados+ e o 6ue eles podem fa2er com tais ob:etos. Se um usu/rio no receber e4plicitamente a permisso para acessar um ob:eto+ ele no ter/ acesso ao mesmo. =ermiss1es podem ser atribu%das a usu8rios Acontas do #$ Server ou do SQL ServerB+ grupos Agrupos globais do #$ ServerB+ e papOis Apapis predefinidos de servidor+ de banco de dados e papis personali2ados de bancos de dadosB. N mais f/cil atribuir permiss1es a grupos e papis do 6ue a usu/rios individuais Aa 6uantidade de trabalho bra al e4igida menorB. O SQL Server apresenta tr3s n%veis de permiss1es& *ermissBes para comandos SQL& habilitam usu/rios a e4ecutar comandos SQL espec%ficos 6ue so usados para criar ob:etos de bancos de dados+ fa2er bac9up de bancos de dados e logs de transa o. *ermissBes de o6<etos& determinam o 6ue um usu/rio pode fa2er a um ob:eto pree4istente. *ermissBes impl7citas& so permiss1es 6ue s5 podem ser e4ecutadas por membros de papis predefinidos de servidor e de banco de dados+ ou pelos propriet/rios do banco de dados. 7tribuem-se permiss1es aos usu/rios baseado no 6ue eles precisam de fa2er com os dados arma2enados no SQL Server. 7lguns usu/rios podem precisar apenas de visuali2ar dados+ outros podem precisar de consultar dados e gerar relat5rios+ outros podem precisar de alterar dados+ etc. .ma das principais responsabilidades do -F7 determinar 6uais usu/rios precisam de acessar 6uais ob:etos+ e 6uais permiss1es eles precisam. =ermiss1es atribu%das em um banco de dados so independentes de permiss1es atribu%das a outro banco de dados. Se um usu/rio precisar de acessar tabelas em dois bancos de dados+ o usu/rio deve ter '-s de usu/rio nos dois bancos de dados+ e as permiss1es necess/rias atribu%das em cada banco de dados+ para acesso aos ob:etos 6ue ele precisa acessar.
7s tarefas descritas acima podem ser reali2adas diretamente atravs de comandos SQL+ ou usando o ;nterprise ,anager. Yoc3 pode atribuir a um usu/rio uma )nica permisso por ve2+ todas elas+ ou um con:unto das permiss1es de comando dispon%veis. #a realidade+ raramente sero usadas as permiss1es para comandos SQL+ pois o SQL Server :/ inclui papis 6ue cumprem as mesmas fun 1es 6ue a atribui o dessas permiss1es. =or e4emplo+ o papel predefinido de servidor SLsadmin consegue real2iar 6ual6uer tarefa 6ue possa ter sido atribu%da a um usu/rio atravs de permiss1es para comandos SQL. 7ssim como o papel predefinido de banco de dados dbDbac9upoperator pode fa2er os bac9ups de um banco de dados da mesma maneira 6ue 6uem recebeu a permisso -.,= -7$7F7S;. O mais pr/tico atribuir os usu/rios a papis de servidor ou de banco de dados 6ue lhe permitam fa2er as tarefas 6ue forem necess/rias.
7ermiss/es de ob:etos
O tipo mais comum de permisso atribu%do a usu/rios+ grupos e papis a permisso de ob:etos. ;ssas permiss1es determinam 6uem pode acessar um ob:eto pree4istente e o 6ue esse usu/rio pode fa2er com tal ob:eto. Quando voc3 atribui a um usu/rio uma permisso de ob:eto+ voc3 na verdade est/ dando a tal usu/rio a capacidade de e4ecutar certos comandos SQL sobre ob:etos em um banco de dados. ;ssas permiss1es so as seguintes& -;L;$;& permite e4cluir uma tabela ou viso em um banco de dados. ;<;C.$;& premite a e4ecu o de um procedimento arma2enado. '#S;0$& permite adicionar-se uma nova linha em uma tabela+ ou em uma tabela atravs de uma viso. 0;T;0;#C;S& A-0'B permite ligar duas tabelas usando uma coluna comum. S;L;C$& permite pes6uisar e visuali2ar dados de uma viso+ tabela ou coluna. .=-7$;& permite modificar dados em uma tabela+ coluna de uma tabela+ ou em uma tabela atravs de uma viso. 7s tarefas relacionadas a ob:etos citadas acima podem ser e4ecutadas com o ;nterprise ,anager+ ou pelo uso de comandos SQL+ ou indiretamente atravs do uso de 6ual6uer aplica o Cfront-endC de cliente 6ue use comandos SQL para acessar dados do SQL Server em um servidor. 'ndependente de como um usu/rio acessa ob:etos em um banco de dados+ cada usu/rio deve receber e4plicitamente permiss1es+ em cada ob:eto+ para reali2ar o acesso.
7ermiss/es im'l6citas
.ma permisso impl%cita uma permisso 6ue um usu/rio obtem apenas pelo fato de pertencer a um papel predefinido de banco de dados ou de servidor+ ou por ser o propriet/rio de um ob:eto de banco de dados. =ermiss1es impl%citas no podem ser atribu%das a usu/rios. 7o invs disso+ um usu/rio 6ue precise de uma permisso impl%cita deve ser adicionado a um papel predefinido 6ue :/ tenha tal permisso. =ermiss1es impl%citas podem assim ser atribu%das a usu/rios+ papis personali2ados ou grupos+ com a simples atribui o dos mesmos a um papel predefinido de banco de dados ou de servidor. 7s permiss1es impl%citas tambm podem ser atribu%das a usu/rios+ grupos ou papis personali2ados definindo 6uais6uer destes como o propriet/rio de um ob:eto de banco de dados espec%fico. Os usu/rios+ grupos ou papis personali2ados podem ser atribu%dos a 6ual6uer um dos 7a'Wis 'rede+inidos de Servidor ou 7a'Wis 'rede+inidos de Banco de Dados+ recebendo as permiss1es 6ue tal papel tenha. Arelembre 6uais so os =apis predefinidos de Servidor e =apis predefinidos de Fanco de -adosB 7lm de receberem permiss1es atravs da atribui o aos papis acima+ tambm podemos fa2er usu/rios tornarem-se propriet/rios de algum ob:eto. Como funciona issoa Quando um usu/rio com a permisso de comando ade6uada cria um novo ob:eto no banco de dados+ tal como uma tabela+ ele se torna o propriet8rio do o6<eto de 6anco de dados (-atabase ob:ect o"ner* A-FOOB da6uele ob:eto. =ropriet/rios de ob:etos de banco de addos t3m permiss1es impl%citas em todos os ob:etos 142
6ue lhes perten am+ o 6ue os d/ a capacidade de e4ecutar 6ual6uer atividade na6uele ob:eto+ tal como S;L;C$+ '#S;0$+ .=-7$;+ -;L;$;+ entre outros. ;les t3m controle completo dos ob:etos 6ue criam. Como d/ para perceber+ permitir 6ue 6ual6uer um se:a um -FOO no uma boa idia. #ormalmente+ as )nicas pessoas 6ue devem criar ob:etos de bancos de dados so -F7s ou desenvolvedores SQL+ no usu/rios comuns.
7recedCncia de 'ermiss/es
Cinco n%veis de permiss1es podme ser atribu%das a um usu/rio+ conforme segue& =ermiss1es individuais =ermiss1es de grupos globais do #$ Server =ermiss1es de papis predefinidos de servidor =ermiss1es de papis predefinidos de bancos de dados =ermiss1es de papis personali2ados de bancos de dados. 7s permiss1es podem ser dos tipos& impl%cita+ de comandos ou de ob:etos. O 6ue ocorre se um usu/rio receber permiss1es diferentes atravs de v/rias permiss1es individuais+ v/rios grupos ou papis de 6ue o mesmo fa a partea 7 priori+ as permiss1es somam-se+ ou se:a& as permiss1es 6ue um usu/rio tenha como membro de um grupo somam-se ]s permiss1es 6ue ele tiver como usu/rio individual e assim por diante. ,as h/ uma e4ce o` 7 permisso Cnegar acessoC (denL access* sobrep1e-se a 6ual6uer outra permisso para o ob:eto em 6uesto. Quer di2er 6ue se um usu/rio tiver obtido permisso para visuali2ar dados de uma tabela+ atravs da permisso de comando S;L;C$ para a tabela+ e o mesmo usu/rio fi2er parte de um grupo global 6ue tem a permisso de Cacesso negadoC ] tabela em 6uesto+ sua permisso efetiva ser/ a de Cacesso negadoC+ ou se:a+ no lhe ser/ permitido acessar tal banco de dados. 7pesar de termos e4emplificado a6ui citando uma tabela+ essa regra v/lida para 6ual6uer ob:eto de banco de dados.
143
trabalhar com permiss1es+ mas tambm te mostrar/ como e4ecutar uma tarefa 6ue voc3 estar/ reali2ando regularmente como um -F7. Yamos ver como visuali2ar as permiss1es atuais de ob:eto para todos os usu/rios+ grupos+ e papis em um )nico banco de dados utili2ando o ;nterprise ,anager. Lembre-se 6ue permiss1es so gerenciadas para cada banco de addos+ e 6ue voc3 deve reali2ar estes passos em cad banco de dados no 6ual voc3 6ueira ver as permiss1es. Visuali8ando 'ermiss/es 'ara comandos SQL #o ;nterprise ,anager+ usando uma conta com privilgios de s&sadmin+ e4panda o banco de dados cu:as permiss1es de comando voc3 6uer visuali2ar. Cli6ue no mesmo com o boto direito e em 7ro'erties. 7parece a cai4a de di/logo de =ropriedades do banco de dados& 7gora+ cli6ue na guia 7ermissions. N mostrada a tela de permiss1es para comandos SQL
#a primeira coluna desta tela+ embai4o do t%tulo 3ser)&ole+ esto listados toos os '-s de usu/rios de bancos de dados para esse banco de dados. Lembre-se 6ue essa coluna pode e4ibir 6uais6uer grupos+ papis ou usu/rios. #as outras colunas esto as v/rias permiss1es para comandos SQL 6ue podem ser atribu%das. #ote 6ue esta tela no e4ibe todas as permiss1es de uma ve2; voc3 deve percorr3-la para a direita para poder v3las todas. -epois de ver todas as permiss1es 6ue podem ser atribu%das+ saia desta tela clicando em %ancel. 'sso te leva de volta ] tela do ;nterprise ,anager. Visuali8ando 'ermiss/es de ob:etos 7 visuali2a o de permiss1es de ob:etos m pouco mais dif%cil do 6ue a visuali2a o de permiss1es para comandos SQL. Yoc3 pode v3-las da perspectiva de usu/rios+ grupos+ ou papis+ ou ento da perspectiva dos pr5prios ob:etos. 7nalisaremos a6ui as duas maneiras. Sob a 'ers'ectiva do usu<rio; gru'o ou 'a'el; as 'ermiss/es so visuali8adas desta +orma@ R. #o ;nterprise ,anager+ e4panda o banco de dados cu:as permiss1es de ob:etos voc3 6uer visuali2ar. P. O pr54imo passo depende se voc3 6uer ver permiss1es de ob:etos para grupos e usu/rios+ ou para papis personali2ados. 144
Caso voc3 6ueira ver as permiss1es de ob:etos para grupos e usu/rios+ selecione 3sers no banco de dados em 6uesto; todos os usu/rios e grupos aparecem do lado direito da tela. =ara ver informa 1es de permiss1es de ob:etos atribu%das a papis personali2ados+ selecione &oles no banco de dados em 6uesto; todos os papis+ predefinidos e personali2ados so mostrados no lado direito da tela. O. 7gora+ no lado direito da tela+ cli6ue com o boto direito em um usu/rio+ grupo ou papel personali2ado+ cu:as permiss1es de ob:etos voc3 6uer visuali2ar+e ento selecione =roperties. 7parece ento a :anela de propriedades do usu/rio ou do papel Adependendo do 6ue voc3 selecionou no passo PB.
Q. Cli6ue no boto =ermissions para ver as permiss1es a n%vel de ob:eto 6ue esse usu/rio Aou papelB tem. Ye:a 6ue h/ dois bot1es no topo da tela. Quando o primeiro (List all ob:ects* est/ selecionado+ todos os ob:etos pertencentes ao banco de dados so e4ibidos na tela. Se a segunda op o (List onlL ob:ects "ith permissions for this user* for selecionada+ apenas a6ueles ob:etos para os 6uais o usu/rio tm permisso so listados. #a primeira coluna h/ um %cone 6ue representa o ob:eto de banco de dados. 7 segunda coluna+ lhe mostra o nome do ob:eto. 7 coluna O"ner mostra 6uem o propriet/rio do ob:eto. 7s outras colunas mostram as permiss1es de ob:etos dispon%veis. Se alguma coluna estiver marcada Acom sua cai4a de verifica o ativadaB+ isso indica 6ue esse usu/rio possui a6uela permisso para o ob:eto em 6uesto. =erceba 6ue nem todos os ob:etos t3m todas as permiss1es de ob:eto dispon%veis. =or e4emplo+ procedimentos arma2enados t3m apenas a permisso de ob:eto 4(ecute. ?. =ara terminar de visuali2ar as permiss1es de ob:eto+ saia da tela clicando em %ancel. Cli6ue de novo em %ancel e voc3 estar/ de volta ao ;nterprise ,anager. Sob a 'ers'ectiva dos ob:etos individuais de banco de dados; visuali8am-se assim as 'ermiss/es@ 145
R. #o ;nterprise ,anager+ e4panda o banco de dados cu:as permiss1es de ob:eto voc3 6uer verificar. 7parecem todos os tipos de ob:etos de bancos de dados. P. 7gora voc3 deve decidir 6uais permiss1es de ob:etos voc3 6uer visuali2ar. Yoc3 pode escolher& tabelas (tables*+ vis1es (vie"s*+ procedimentos arma2enados (stored procedures*+ regras (rules*+ defaults (defaults*+ e tipos de dados definidos pelo usu/rio (user defined data tLpes*. Cli6ue no tipo de ob:eto pcu:as permiss1es voc3 6uer visuali2ar. 7parecem no lado direito da tela todos os ob:etos desse tipo.
O. Cli6ue com o boto direito em um dos ob:etos+ e em 7ro'erties. 7parece a cai4a de di/logo de propriedades do ob:eto 6ue voc3 selecionou Ano caso uma tabelaB Q. =ara e4ibir as permiss1es para esse ob:eto+ cli6ue no boto =ermissions. 7parece a tela de permiss1es do ob:eto+ como abai4o& #ote as duas op 1es na parte superior da tela. =or padro+ a primeira (List all users / user-defined -F roles / public* est/ selecionada. 7ssim+ todos usu/rios+ grupos e papis para esse banco de dados so e4ibidos na tela. Se a segunda op o (List onlL users / user-defined -F roles / public permissions on this ob:ect*+ apenas os usu/rios+ grupos ou papis 6ue tenham permiss1es definidas para esse ob:eto sero e4ibidos. 7 primeira coluna mostra um %cone. .ma )nica cabe a indica um usu/rio ou um grupo. -uas cabe as indicam um papel. $odos os usu/rios+ grupos ou papis para esse banco de dados esto embai4o de C.ser/-F 0oleC. 7s colunas restantes indicam as permiss1es de ob:eto dispon%veis para este ob:eto. Se a cai4a de verifica o estiver selecionada AativaB+ indica 6ue um usu/rio+ grupo ou papel obteve a permisso de ob:eto associada. Ye:a 6ue nem todos os ob:etos t3m todas as permiss1es de ob:eto. ?. -epois de terminar de visuali2ar as permiss1es de ob:eto+ voc3 pode sair clicando em %ancel duas ve2es+ primeiro para a tela de permiss1es+ e depois para a cai4a de di/logo de propriedades. ;nto voc3 volta para a tela principal do ;nterprise ,anager. 146
2. ;ssa a mesma tela vista anteriormente Aem visuali2ando permiss1es de bancos de dadosB. #a
primeira coluna desta tela+ abai4o de 3ser)&ole esto listados todos os '-s de usu/rio de banco de dados para este banco de dados. Lembre-se 6ue esta coluna pode listar 6ual6uer usu/ri+ grupo ou papel. #as outras colunas esto as v/rias permiss1es para comandos SQL 6ue podem ser atribu%das. #ote 6ue na tela no cabem todas as permiss1es e4istentes; para v3-las+ voc3 tem 6ue rolar hori2ontalmente para a direita. O. =ara atribuir 6ual6uer das sete permiss1es para comandos SQL para 6ual6uer usu/rio+ papel ou grupo e4ibidos na primeira coluna+ cli6ue na coluna da permisso 6ue voc3 6uer atribuir+ na linha do usu/rio 6ue deve receber tal permisso. 7 permisso no concedida at 6ue voc3 cli6ue em 7pplL ou O9. Q. =ara revogar uma permisso de comando 6ue tenha sido atribu%da anteriormente+ cli6ue na cai4a de verifica o 6ue representa a permisso de comando 6ue voc3 6uer revogar do usu/rio+ grupo+ ou papel. Quando voc3 clicar na cai4a de verifica o+ ela muda paara um < vermelho Acomo mostrado 147
abai4oB+ indicando 6ue a permisso ser/ revogada. 7 permisso s5 de fato revogada 6uando voc3 clica em O9 ou 7pplL. ?. -epois de revogar e conceder todas as permiss1es para comandos SQL 6ue voc3 6ueira+ saia dessa tela clicando em O9. ;nto voc3 volta para o ;nterprise ,anager.
148
P. Cli6ue com o boto direito no usu/rio+ grupo ou papel cu:as permiss1es voc3 6uer alterar+ e em 7ro'erties. 7parecer/ uma cai4a de di/logo com propriedades do usu/rio ou grupo+ ou do papel. O. Cli6ue em 7ermissions. 7parece a tela de permiss1es para o usu/rio+ grupo ou papel 6ue voc3
houver selecionado. 7 primeira coluna tem um %cone 6ue representa o tipo do ob:eto de banco de dados+ seguido do nome do ob:eto de banco de dados. 7 coluna O"ner mostra 6uem o propriet/rio do ob:eto. 7s outras colunas mostram as permiss1es de ob:eto e4istentes. .ma marca o em alguma das cai4as de verifica o indica 6ue o usu/rio em 6uesto tem permisso para esse ob:eto. Q. =ara conceder alguma das seis permiss1es de ob:etos para o usu/rio+ grupo ou papel em 6uesto+ mar6ue a cai4a de verifica o apropriada na coluna referente ao ob:eto. 7 cai4a de verifica o ficar/ marcada. 7 permisso s5 de fato concedida 6uando voc3 clica em O9 ou 7pplL. ?. =ara revogar uma permisso 6ue :/ tenha sido atribu%da+ cli6ue na cai4a de verifica o 6ue representa a permisso de ob:eto 6ue voc3 6uer remover de um usu/rio+ grupo ou papel. 7o clicar na mesma+ ela muda para um < vermelho+ indicando 6ue a permisso ser/ revogada. 7 permisso s5 de fato revogada ao se clicar em O9 ou 7pplL. S. -epois de teminar de definir as permiss1es de ob:etos+ voc3 pode sair da tela clicando em O9. Yoc3 deve ento clicar em O9 de novo para retornar ao ;nterprise ,anager.
; a do 0;YOI; &
0;YOI; j7LL \ comando(+...n*l T0O, contaDseguran a (+...n*
149
Onde& comando o comando SQL para o 6ual a permisso est/ sendo concedida/removida. Os comandos podem ser& C0;7$; -7$7F7S; C0;7$; -;T7.L$ C0;7$; =0OC;-.0; C0;7$; 0.L; C0;7$; $7FL; C0;7$; Y';! F7CI.= -7$7F7S; F7CI.= LO8 ALL indica 6ue todas as permiss1es daAsB contaAsB de seguran a em 6uesto sero concedidas/revogadas. contaAsegurana a conta de seguran a no banco de dados atual para a 6ual as permiss1es esto sendo adicionadas ou removidas. =ode ser um& .su/rio do SQL Server ou do #$ 8rupo do #$ =apel do SQL Server n indica 6ue pode ser informado mais de um nome de conta de seguran a para se conceder/revogar permiss1es+ assim como pode-se informar mais de um comando para tr permisso concedida/revogada. Fasta separ/-los por v%rgula. Caso 6uisssemos por e4emplo+ permitir 6ue um usu/rio pudesse criar uma tabela+ digitar%amos
807#$ create table $O usuario
1E - Bac!u' e &estaurao
Dis'ositivos de Bac!u' Im'lementar Bac!u' &estaurar um Bac!u' $gendar Bac!u's $utom<ticos
Objetivos: - 7prender a gerenciar os dispositivos de bac9up; - 7prender como fa2er bac9ups+ restaurar os dados+ e agendar bac9ups autom/ticos.
%onceitos
.m 6ac/up ou dump do banco de dados a opera o de copiar os dados para um dispositivo de bac9up. =ode ser feito com o ;nterprise ,anager ou com o comando F7CI.=. #o necess/rio parar o SQL Server ou desconectar os usu/rios para fa2er a opera o de bac9up. ;la pode ser feita a 6ual6uer momento. -eve150
se considerar 6ue a reali2a o do bac9up com usu/rios utili2ando o banco de dados+ causa uma pe6uena 6ueda de performance+ 6ue pode ser percept%vel aos usu/rios. N importante ento escolher horas de menor atividade do servidor Aou ao menos do banco de dados cu:o bac9up est/ sendo feitoB para a reali2a o do bac9up. .ma restaura=o ou "ES,O"E do banco de dados a opera o de tra2er os dados de um meio de bac9up de volta para os bancos de dados.
?i'os de bac!u'
.m bac9up pode ser feito do banco de dados inteiro+ 6ue copia todos os dados+ mais o log de transa 1es Aa tabela s&slogsB. Se esse bac9up for restaurado+ todo o conte)do do banco de dados restaurado e sobrescreve o conte)do atual. ;sse tipo de bac9up pode ser feito com o comando F7CI.= -7$7F7S; ou o ;nterprise ,anager. =ode ser feito um bac9up apenas do log de transa 1es. Como o log de transa 1es contm apenas as modifica 1es feitas aos dados+ se esse bac9up for restaurado+ apenas essas modifica 1es sero aplicadas sobre os dados. ;sse tipo de bac9up pode ser feito com o comando F7CI.= LO8 ou o ;nterprise ,anager. 7p5s um bac9up desse tipo+ o log de transa 1es esva2iado Ae4ceto as transa 1es 6ue ainda esto sendo atuali2adasB. .m bac9up do log de transa 1es leva muito menos tempo para ser feito do 6ue um ba9cup de todo banco de dados. 7ssim+ em um banco de dados 6ue bastante modificadao diariamente+ pode-se fa2er diversos bac9ups di/rios do log de transa 1es. Ou ento algum bac9up diferencial+ como ser/ mostrado a seguir. =ode-se fa2er tambm o 6ue chamado de 6ac/up di+erencial. ;sse tipo de bac9up semelhante ao bac9up do log de transa 1es+ com a diferen a de 6ue s5 far/ bac9up dos valores modificados desde o )ltimo bac9up completo Ade todo o banco de dadosB. Ou se:a+ se uma infroma o foi modificada vinte ve2es desde o )ltimo bac9up+ um bac9up do log de transa 1es teria as PJ modifica 1es feitas nessa informa o+ en6uanto 6ue um bac9up diferencial teria apenas o )ltimo valor arma2enado. 7ssim+ esse tipo de bac9up gera ar6uivos menores+ apesar de demorar um pouco mais de tempo para ser reali2ado 6ue o bac9up do log de transa 1es. ,as+ por outro lado+ e4ige bem menos tempo para restaura o. =or )ltimo+ e4iste a possibilidade de se fa2er bac9up de ar6uivos individuais do banco de dados. Lembre-se 6ue um banco de dados pode ser formado por v/rios ar6uivos. 7ssim+ para um banco de dados muito grande+ a ponto de no poder ser Cbac9upeadoC em uma )nica noite+ por e4emplo+ podem ser feitos bac9ups dos ar6uivos 6ue o formam+ um por ve2. >ota@ os comandos -.,= -7$7F7S; e -.,= $07#S7C$'O#+ e4istentes em vers1es do SQL Server anteriores ] G.J+ ainda e4istem+ mas apenas por motivos de compatibilidade. 0ecomenda-se utili2ar F7CI.= -7$7F7S;+ ao invs de -.,= -7$7F7S;+ e F7CI.= LO8 ao invs de -.,= $0#S7C$'O#+ :/ 6ue -.,= no ser/ mais aceito em futuras vers1es do SQL Server.
Dis'ositivos de Bac!u'
.m dispositivo de bac9up nada mais 6ue um ponteiro para o local onde o bac9up do seu banco de dados ser/ arma2enado. =ode-se criar um dispositivo de bac9up a 6ual6uer instante+ no ;nterprise ,anager+ ou cri/-lo apenas 6uando se for de fato fa2er um bac9up do banco de dados. .m dispositivo de ba9cup opde especificar o nome de um ar6uivo em disco r%gido 6ue ser/ escrito 6uando o ba9cup for e4ecutado+ ou pode especificar o nome de uma unidade de fita. 7 cria o de um dispositivo de bac9up no cria um ar6uivo at 6ue se:a e4ecutado o bac9up..
#o ;nterprise ,anager+ selecione o servidor do 6ual se 6uer fa2er bac9up de algum banco de dados+ abra a pasta Management e cli6ue com o boto direito em Fac9up. Selecione >e Bac!u' Device. Cada dispositivo de bac9up tem um nome l5gico e um nome f%sico. ;m #ame+ informe um CapelidoC Anome l5gicoB 6ue ser/ utili2ado pelo comando de bac9up 6uando da reali2a o de um bac9up do banco de dados. #o nosso caso+ informemos Fac9upR. O campo ?a'e Drive >ame ou File >ame a locali2a o f%sica do ar6uivo em 6ue o dispositivo de bac9up ir/ escrever. =ara fitas+ informe o nome da unidade de fita+ 6ue algo como EE.E$7=;J. =ara ar6uivos em disco+ informe o nome e caminho do ar6uivo de disco+ algo como EEServidorEbac9upsESegundaEmaster.ba9 Cli6ue em O9 para terminar. 7parece agora o nome deste dispositivo de bac9up do lado direito da tela+ 6uando se seleciona Fac9ups do lado es6uerdo do ;nterprise ,anager. O ;nterprise ,anager cria o nome f%sico do ar6uivo em -:;MSSQLEF7CI.=+ como default+ mas pode ser mudado. Se voc3 clica em C$ape bac9up deviceC+ voc3 deve escolher um dos dispositivos de fita suportados pelo !indo"s #$+ como nome f%sico. #o caso+ usaremos C-is9 bac9up deviceC. Cli6ue em O9. #ote 6ue o ar6uivo+ no caso c:;mss:lEbac9upEFac9upR.dat+ no criado imediatamente+ s5 da primeira ve2 6ue um bac9up for feito. ;le tambm e4pande automaticamente+ dependendo dos dados colocados nele+ por isso voc3 no define o seu tamanho. >ota@ O suporte a fitas do SQL Server depende do suporte fornecido pelo !indo"s #$ Aver =ainel de Controle+ %cone C-ispositivos de fitaC ($ape -evices*B.
Im'lementando um bac!u'
=ara fa2er um bac9up completo do banco de dados ;4emplo+ fa a o seguinte&
152
R. no ;nterprise ,anager+ locali2e esse banco de dados sob C-atabasesC e cli6ue nele com o boto direito. Selecione $ll ?as!s+ e Bac!u' Database. 7parece a :anela abai4o& P. 'nforme um nome para o bac9up Aou dei4e o nome padro+ 6ue nomeA6ancoAdeA dados 6ac/upB+e caso 6ueira+ uma descri o (-escription* para o bac9up. Yoc3 pode escolher entre 6uatro op 1es de bac9up& bac9up do banco de dados inteiro A-atabase - completeB& a op o selecionada por padro. bac9up diferencial A-atabase - differentialB& um bac9up diferencial fa2 uma c5pia apenas das mudan as ocorridas no banco de dados desde o )ltimo bac9up completo. apenas do log A$ransaction LogB& uma das ra21es para se fa2er bac9up do log de transa 1es evitar 6ue o mesmo fi6ue cheio. Se voc3 o configurou para crescer automaticamente+ no se preocupar/ com isso+ a no ser 6ue o disco onde est/ arma2enado o log de transa 1es este:a ficando cheio. ;sta op o desabilitada se ?runcate Log on %5ec!'oint estiver ativa para o banco de dados em 6uesto. de algum ar6uivo ou grupo de ar6uivos ATile and filegroupB& esta op o tambm fica desabilitada se ?runcate log on c5ec!'oint estiver ativada para esse banco de dados. .m bac9up de grupo de ar6uivos Afilegroup bac9upB copia apenas alguns dos ar6uivos f%sicos 6ue formam o banco de dados. .sa-se esta op o 6uando no se disp1e de tempo para fa2er bac9up de todo o banco de dados. O. Cli6ue em 7dd para para selecionar um destino Aem fita ou em discoB para o bac9up. Q. -igite o nome do ar6uivo destino do bac9up+ ou selecione um dispositivo de bac9up e4istente. #o nosso caso+ selecionaremos o dispositivo bac9upR+ criado anteriormente. Cli6ue em O9. ?. Yoc3 pode optar por uma das a 1es a seguir Adei4e a op o default - 7ppend to mediaB& 153
$''end to media& com esta op o selecionada+ este bac9up do banco de dados ser/ adicionado a outros bac9ups :/ e4istentes na fita+ dispositivo ou ar6uivo selecionado. .ver rite e(isting media far/ com 6ue este bac9up subsitutua+ sobrescreva+ o conte)do da fita ou ar6uivo para onde ele est/ sendo gravado. S. Cli6ue em O9 para inciar o bac9up. 7o clicar na guia Options+ voc3 pode optar por fa2er uma verifica o completa do bac9up ap5s sua reali2a o (YerifL bac9up upon completion*. #o caso de fa2er bac9up para fita+ voc3 tambm pode definir uma data de e4pira o para o bac9up. =ara conferir o conte)do de KFac9upRK+ selecione Fac9ups+ selecione-o na lista de dispositivos Ado lado direito da :nelaB+ d3 um duplo cli6ue no mesmo e cli6ue no boto CYie" ContentsC. Yoc3 ver/ 6ual o conte)do atual+ 6ue inclui o banco de dados ;4emplo.
7% voc3 v3 os bac9ups arma2enados no ar6uivo ou dispositivo+ com detalhes sobre o mesmo. Yoc3 v3 a%+ o nome do bac9up (#ame*+ de 6ual servidor foi feito (Server*+ de 6ual banco de dados (-atabase*+ 6ue tipo de bac9up ($Lpe*. Se voc3 rolar o conte)do da :anela hori2ontalmente+ ver/ ainda a ver/ a data (-ate* em 6ue foi feito+ o tamanho (Si2e*+ a data de e4pira o (;4piration* Adispon%vel selecionando bac9up em fitaB+ e alguma descri o (-escription* 6ue voc3 tenha colocado. Cli6ue em %lose para sair dessa tela.
$crescentando um bac!u'
Yoc3 pode acrescentar um bac9up a um dispositivo. Yamos acrescentar o bac9up de e4emploP Aou outro banco de dados 6ual6uer 6ue no se:a o e@emploB a esse dispositivo. =ara isso+ fa a o mesmo processo anterior Aagora com o outro banco de dadosB+ selecionando a op o $''end to media+ e cli6ue em CO9C. #ote 6ue a6ui voc3 tambm pode ver o conte)do de um ar6uivo ou dispositivo+ clicando em Vie %ontents. 7gora d3 um duplo cli6ue em CFac9upRC na lista de bac9ups+ e no boto CYie" ContentsC. Yoc3 ver/ 6ue l/ dentro esto os dois bancos de dados.
Yisuali2e a informa o de KFac9upRK com o boto CYie" ContentsC. #ote+ na coluna CFac9up Si2eC+ 6ue o tamanho do log menor do 6ue o banco de dados. 7o fa2er esse tipo de bac9up+ o conte)do do log limpo Ae4ceto as altera 1es ainda pendentes no banco de dadosB. 'sso signifca 6ue voc3 deve manter os bac9ups de log para poder restaurar um banco de dados.
&estaurando um Bac!u'
Yoc3 pode restaurar um bac9up atravs do ;nterprise ,anager.
155
R
7 primeira op o+ C0estore -atabaseC+ 6ue mostra a figura acima+ e4ibe uma lista dos bac9ups a partir dos 6uais voc3 pode pode pode fa2er a restaura o+ baseado em tabelas de hist5rico arma2enadas no SQL Server. =or padro+ o bac9up completo do banco de dados mais recente mostrado primeiro+ seguido pelos bac9ups do log de transa 1es e diferenciais reali2ados depois dele. Yoc3 pode usar a barra de rolagem para selecionar um bac9up completo feito h/ mais tempo. #ote a sutil diferen a entre os %cones de um bac9up completo do banco de dados e do bac9up do log de transa 1es. >ota@ voc3 pode saber 6ue tipo de bac9up est/ representado pelo %cone+ entre outros detalhes+ clicando em =roperties. =ode ser importante+ pois um bac9up de grupo de ar6uivos tem o mesmo %cone 6ue um bac9up completo do banco de dados.
156
P
7 segunda op o+ C0estore Tilegroups or TilesC+ tambm e4ibe uma lista de bac9ups a partir dos 6uais voc3 pode fa2er a restaura o com base nas tabelas de hist5rico. Munto com uma lista de bac9ups anteriores de grupos de ar6uivos+ voc3 ver/ 6ue bac9ups de ar6uivos completos e de logs de transa 1es. ;les so mostrados pois um grupo de ar6uivos tambm pode ser restaurado a partir de um bac9up completo do banco de dados e do log de transa 1es.
157
O
7 terceira op o+ C0estore from -eviceC+ utili2ada 6uando o bac9up 6ue voc3 6uer restaurar no est/ listado na tabela de hist5rico Aos bac9ups mostrados pelos %cones citados acimaB. 'sso pode ocorrer se voc3 estiver restaurando um banco de dados copiado de outro servidor SQL Server. >ota@ S5 pelo fato de um bac9up estar listado+ no significa 6ue voc3 se:a capa2 de reali2ar uma restaura o atravs dele. 7s tabelas de hist5rico no SQL Server registram onde foi feito o bac9up do banco de dados+ 6uando ele foi e4ecutado. Se desde ento+ os ar6uivos foram sobrescritos ou e4clu%dos+ voc3 no ser/ capa2 de fa2er uma restuara o a partir desse bac9up. Quando voc3 estiver fa2endo a restaura o+ o primeiro ar6uivo selecionado deve ser um bac9up completo do banco de dados. 7 cai4a de listagem CTirst bac9up to restoreC+ lista os bac9ups completos conhecidos. 7 cai4a de di/logo mostrar/ os bac9ups :unto dos logs de transa 1es e bac9ups diferenciais subse6uentes. O SQL Server seleciona todos ou alguns dos bac9ups diferenciais e de log de transa 1es a serem recuperados+ em con:unto com o bac9up completo+ automaticamente. 7 combina o selecionada pelo SQL Server fornece a imagem mais atuali2ada do banco de dados com o menor tempo de recupera o poss%ve;. Se voc3 no 6uiser restaurar tambm os bac9ups do log de transa 1es+ voc3 pode desselecion/-los clicando na cai4a de verifica o ] es6uerda de cada log. Se voc3 desselecionar algum log+ os logs subse6uentes tambm no sero mais selecionados+ automaticamente. Yoc3 no pode saltar nenhum log de transa 1es no processo de restaura o. Se um bac9up diferencial do banco de dados Aindicado pelo %cone Btiver sido reali2ado+ ele tambm ser/ selecionado+ :unto com o bac9up completo do banco de dados. 7penas o bac9up diferencial mais recente ser/ selecionado. Caso voc3 6ueira restaurar o banco de dados para um ponto espec%fico no tempo+ voc3 deve selecionar um log de transa 1es+ e ento selecionar a cai4a de verifica o C=oint in $ime 0estoreC e informar a data e hora dese:adas para a restaura o na cai4a de di/logo 6ue aparece. ;nt]o o banco de dados retornar/ ao estado em 6ue se encontrava na data e hora selecionadas. 158
159
O. Cli6ue em #e4t at chegar ] tela chamada ;specificar o plano de bac9up do banco de dados (SpecifL the -atabase Fac9up =lan*+ mostrada abai4o& Yoc3 pode optar a6ui por verificar a integridade do bac9up ap5s seu trmino. =ara isso+ cli6ue em CYerifL the integritL of the bac9up on completion of the bac9upC. Cli6ue em Change para agendar 6uando o bac9up ir/ ocorrer. #ote 6ue o default COcorre toda R semana no domingo+ ]s P&JJ 7,.C. 7o clicar em Change+ voc3 ver/ a variedade de op 1es de agendamento dispon%veis. Yoc3 pode definir data inicial e final Aou sem data finalB+ ocorrer diariamente+ semanalmente+ mensalmente+ ou a cada # semanas/meses/dias+ a hora em 6ue ocorrer/+ o dia da semana+ entre outras op 1es. =ara o teste+ cli6ue em C-ailLC+ dei4e R dia e em COccurs onceC+ digite o hor/rio dese:ado. ;scolha entre arma2enar o bac9up em uma unidade de fita ou disco+ e cli6ue em #e4t. 'nforme uma unidade de fita ou diret5rio de disco onde o bac9up dever/ ser escrito. O processo de bac9up ir/ gerar automaticamente um nome de ar6uivo para o bac9up. Yoc3 pode optar por arma2enar o bac9up de cada banco de dados em um diret5rio separado. Fasta clicar em CCreate a subdirectorL ofr each databaseC. Se voc3 6uiser 6ue o trabalho de bac9up e4clua ar6uivos antigos do mesmo diret5rio para liberar espa o no disco r%gido+ opte por Cremover ar6uivos mais antigos 6ueC (0emove Tiles Older $han* e informe um n)mero de semanas. Cli6ue em #e4t.
Q.
?. S.
G. @.
160
>. 7 pr54ima tela permite 6ue voc3 agende para 6ue ocorra um bac9up tambm do log de transa 1es ao ser reali2ada a tarefa. =ara isso+ selecione CFac9up transaction log as part of the mainteinance planC. 7s op 1es dispon%veis para bac9up do log de transa 1es so as mesmas 6ue para o bac9up do banco de dados Adiret5rio+ hor/rios+ etc...B Ta a suas op 1es e v/ clicando em #e4t at 6ue apare a a tela de relat5rios a gera (0eports to generate*+ mostrada abai4o& #essa tela+ voc3 pode definir se ser/ gerado um relat5rio da opera o de bac9up+ e informar o diret5rio onde o relat5rio ser/ arma2enado. =ode ainda definir um operador para receber por e-mail o relat5rio Apara isso+ voc3 deve ter algum operador definido. -efina algum+ e4pandindo+ no ;nterprise ,anager+ ,anagement. Cli6ue ento com o boto direito em Operartors+ e selecione #e" Operator. 'nforme os dados - nome+ e-mail... - do operador+ e cli6ue em O9.B. Selecione da lista+ o operador 6ue ir/ receber um e-mail com o relat5rio. Cli6ue em #e4t para continuar. RJ. 7parece depois uma tela lhe informando onde ser/ mantido o hist5rico da reali2a o da tarefa+ e voc3 opde definir outro lugar para o mesmo. CLi6ue em #e4t. RR. =or fim+ lhe ser/ mostrada uma tela e4ibindo as op 1es 6ue voc3 acabou de definir para o bac9up do banco de dados. -3 um nome ] tarefa+ e cli6ue em Tinish para 6ue ela se:a criada. $ambm poss%vel agendar o bac9up completo de um banco de dados e4ecutadno os mesmos passos vistos na cria o de um bac9up imediato+ e selecionando Schedule. Cli6ue no boto de retic3nciasA111B+ para definir o agendamento do bac9up. N mais f/cil e mais conveniente definir a tarefa do bac9up usando assistente de plano de manuten o de banco de dados+ devido ] variedade de op 1es dispon%veis.
R. #o ;nterprise ,anager+ e4panda a pasta Management+ e4panda o SQL Server $gent+ e cli6ue com o obto direito em Iobs. Selecione >e Iob. P. -3 um nome para o trabalho e selecione a guia Ste's ApassosB.
O. ;scolha Cli6ue no boto >e 111 . 7parece a cai4a de di/logo abai4o. Q. #a guia General+ informe um nome para o passo+ por e4emplo CFac9up do F- pubsC. ?. #a lista ?A'e+ selecione C$ransact-SQL ScriptC. 'sso lhe permitir/ entrar com comandos SQL em %ommand. S. O )ltimo passo digitar o comando SQL a ser e4ecutado na cai4a de te4to Command. =ara fa2er bac9up completo do banco de dados pu6s para um dispositivo de bac9up chamado pu6sA6/Adev+ o comando seria
F7CI.= -7$7F7S; pubs 0O pubsDb9Ddev
.m bac9up de grupo de ar6uivos+ supondo o ar6uivo authors no gruop de ar6uivos titles+ do banco de dados pubs+ seria feito com o seguinte comando
F7CI.= -7$7F7S; pubs T'L; k KauthorsK+ T'L;80O.= k KtitlesK $O pubsDb9Ddev
Yoc3 pode ver o hist5rico dos trabalhos de bac9up+ selecionando o trabalho em 6uesto no ;nterprise ,anager+ e clicando no mesmo com o boto direito+ selecionando Vie Iob -istorA111
1J - .utros &ecursos
%on+igurao do SQL Server 4ntendendo as ?abelas de Sistema Im'ortao e 4('ortao de Dados 7ublicando dados na Internet
Objetivos: 162
- ;ntender as configura 1es do SQL e tabelas de sistemas; - Ta2er importa o e e4porta o de dados usando o programa FC=; - 7prender a publicar dados na 'nternet.
7 op o CFac9up/restoreC define 6uanto tempo o SQL Server deve esperar ao tentar ler uma fita de um dispositivo de fita& 'ndefinidamente (indefinitelL*+ tentar uma ve2 e desistir (trL once then 6uit*+ ou tentar durante # minutos (trL for minutes*. 7 op o Cdefault bac9up media retentionC especifica depois de 6uanto tempo o SQL Server vai reescrever em uma fita com bac9up. Ou se:a+ se voc3 grava um bac9up ho:e+ e define esta op o para G dias+ s5 depois de G dias 6ue o SQL Server vai escrever de novo nessa fita. Se voc3 tentar escrever antes de decorrido esse pra2o+ receber/ uma mensagem de erro. C0ecoverL interval AminBC. .se esta op o para determinar o n)mero m/4imo de minutos por banco de dados 6ue o SQL Server precisa para recuper/-los. 7 cada ve2 6ue o SQL Server inicia+ ele recupera cada banco de dados+ desfa2endo transa 1es 6ue no haviam sido finali2adas+ e refa2endo transa 1es 6ue haviam sido finali2adas+ mas cu:os dados no haviam sido escritos para o disco 6uando o SQL Server parou. 76ui voc3 define um limite superior de tempo para recupera o de cada banco de dados. O padro J+ indicando configura o autom/tica pelo SQL Server. #a pr/tica+ isso significa um tempo de recupera o de menos de um minuto e um chec9point apro4imadamente a cada minuto para bancos de dados ativos. O SQL Server estima 6uantas modifica 1es de dados ele pode efetivar no intervalo+ e fa2 um chec9point no banco de dados 6uando o n)mero de modifica 1es de dados feitas no banco de dados depois do )ltimo chec9point alcan a o n)mero 6ue o SQL Server estima 6ue pode efetivar no intervalo. #a p/gina CMemorAC+ voc3 pode definir como 6uer 6ue o SQL Server alo6ue mem5ria para si. Yoc3 opde optar entre aloca o dinZmica+ sob demanda+ de mem5ria Aa op o padroB+ definindo a% a 6uantidade m%nima e m/4ima de mem5ria 6ue o SQL Server pode alocar Apor padro+ o m%nimo J e o m/4imo a mem5ria total do sistemaB; ou ento optar por determinar uma 6uantidade fi4a de mem5ria a ser usada pelo SQL Server (.se a fi4ed memorL si2e*+ 6ue sempre estar/ alocada para o mesmo+ e definir em 6uanto ficar/ fi4ada essa 6uantidade de mem5ria.7 op o C0eserve phLsical emorL for SQL ServerC+ se selecionada+ indica 6ue no ser/ feito se6uer s.ap nas p/ginas de mem5ria do SQL Server; as mesmas estaro sempre dispon%veis em 07,. #o use esta op o se voc3 permitir 6ue o SQL Server alo6ue mem5ria dinamicamente. =or fim+ a op o Cminimum 6uerL memorLC indica a 6uantidade m%nima de mem5ria a ser alocada para a e4ecu o de uma consulta. O aumento desse valor pode resultar em desempenho melhor na reali2a o de certos tipos de consultas. #a p/gina C7rocessorsC voc3 encontra op 1es relativas ] otimi2a o do SQL Server em m/6uinas multiprocessadas Ase o =arallelismB. #a se o C=rocessor controlC da p/gina =rocessors+ voc3 tem as op 1es CFoost SQL Server prioritL on !indo"s #$C+ 6ue far/ com 6ue os processos do SQL Server tenham prioridade maior sobre os outros processos em e4ecu o Acuidado ao usar essa op o pois outras tarefas reali2adas no #$ onde o SQL Server est/ rodando podem ficar pre:udicadasB. 7 op o Cma4 "or9er threadsC te permite definir o n)mero m/4imo de tarefas AthreadsB 6ue estaro dispon%veis para processos do SQL Server Ao padro P??+ 6ue funciona bem na maioria dos casos. cs ve2es+ a diminui o desse n)mero+ pode melhorar o desempenhoB. Se voc3 marcar a op o C.se #$ fibersC voc3 pode ter um aumento no desempenho+ :/ 6ue o escalonamento de tarefas AthreadsB poder/ ser feito no modo usu/rio Apelo uso das +i6ersB+ sem a necessidade de torca de conte4to para o modo 9ernel 6ue o uso apenas de threads implica. =rocure por C$hread and tas9 architectureC no Foo9s online para entender melhor isso. >ota@ algumas dessas op 1es s5 t3m efeito depois de parar e reiniciar o servi o ,S SQL Server. Outras delas s5 permitem altera o se voc3 definir 6ue se:am mostradas op 1es avan adas. =ara isso+ no QuerL 7nalL2er+ digite
spDconfigure Ksho" advanced optionsK+ R
depois pare e reinicie o servi o ,S SQL Server. 7% voc3 poder/ alterar 6ual6uer das op 1es citadas.
164
%onsultando sAsob:ects
7 tabela s&so6<ects+ por e4emplo+ contm informa 1es sobre todos os ob:etos do banco de dados. 7s seguintes colunas so )teis& varchar(F name O nome do ob:eto. 5% .m n)mero de identifica o. =ode ser obtido tambm com a fun o id int OFM;C$D'-AnomeB. $ipo do ob:eto& .& tabela de .su/rio+ S& tabela do Sistema+ Y& Yiso+ =& t&pe char(J% procedimento+ 0& regra+ -& default+ $0& trigger (gatilho*+ C& restri o Chec9+ I& chave prim/ria ou restri o .#'Q.;+ T& Toreign 9eL Achave estrangeiraB crdate datetime 7 data/hora em 6ue o ob:eto foi criado. =or e4emplo+ para saber se uma tabela chamada Cliente :/ e4iste e e4clu%-la caso e4ista+ pode ser usado o teste&
if e4ists Aselect d from sLsob:ects "here tLpekK.K and namekKClienteKB drop table Cliente
$ tabela sAscolumns
7 tabela s&scolumns relacionada com s&so6<ects e guarda informa o sobre cada coluna de cada tabela. $ambm guarda informa 1es sobre parZmetros de procedimentos arma2enados. Seus colunas mais importantes so& 'dentificador da tabela ou do procedimento arma2enado. Ta2 refer3ncia id int a s&so6<ects#id# #)mero se6gencial da coluna dentro da tabela Aou do parZmetro dentro colid int do procedimentoB. t&pe int 'dentifica o tipo de dados b/sico+ 6ue fa2 refer3ncia a s&st&pes#t&pe. length int $amanho da coluna ou 2ero se no se aplica. usert&pe int $ipo de dados definido pelo usu/rio. Ta2 refer3ncia a s&st&pes#usert&pe. name varchar(F5% #ome da coluna. =or e4emplo+ para listar todas as tabelas de usu/rio e suas colunas+ use&
select so.name $abela+ sc.name Coluna from sLsob:ects so inner :oin sLscolumns sc on so.id k sc.id "here so.tLpe k K.K
=odem aparecer tabelas chamadas dtproperties. ;ssa tabelas e4istem para arma2enar diagramas do banco de dados.
=ara criar um diagrama+ voc3 clica com o boto direito no banco de dados 6ue ter/ seu diagrama criado Ano ;nterprise ,anager+ claroB+ seleciona #e" \ -atabase -iagram. 7% aparece o assistente de cria o de diagramas+ 6ue lhe pergunta 6uais tabelas voc3 6uer incluir no diagrama. 'nforme-as+ e 6uando clicar em #e4t+ aparecer/ o diagrama mostrando o relacionamento entre as tabelas Acaso e4istaB. Quando voc3 sai da :anela de diagrama+ voc3 pode salv/-lo com um nome 6ual6uer. =ara saber mais sobre diagramas+ consulte C-atabase -iagramsC+ no cap%tulo CCreating and ,aintaining databasesC do boo9s online
#o caso+ K;4emploK o nome do banco de dados+ a op o O.$ especifica 6ue os dados sero e4portados+ CL';#$;.$<$ o nome do ar6uivo 6ue ser/ criado. 7 op o C-cC indica um ar6uivo no formato te4to. Se fosse usado C-nC+ seria usado o formato CnativoC+ isto + com dados bin/rios. 7 op o C-SC especifica o nome do servidor Asubstitua nomeAdoAservidor pelo nome do seu servidorB. Tinalmente C-.C e C-=C especificam o nome de usu/rio e senha+ respectivamente. Se a senha for va2ia+ C-=C deve ser a )ltima op o na linha de comando. #ote 6ue as op 1es so sens7veis ao caso Amai)sculas e min)sculas so diferentesB. O ar6uivo CL';#$;.$<$ pode ser alterado em 6ual6uer editor+ ou importado em outro banco de dados. Se voc3 e4ecutar FC= O.$ sem usar C-cC+ ele ir/ 6uestionar interativamente o tamanho de cada coluna a ser usada. =ara importar uma tabela+ e4istem alguns detalhes. 7 importa o muito mais r/pida Aespecialmente no caso de tabelas grandesB se o banco de dados permitir opera o sem log (nonlogged*+ ou se:a+ inserir linhas sem atuali2ar o log de transa 1es. =ara ativar essa op o+ no ;nterprise ,anager+ cli6ue com o boto direito no banco de dados e 7ro'erties. -epois cli6ue na p/gina COptionsC+ mar6ue CSelect into/bul9 copLC e cli6ue O9. =ara teste+ crie uma nova tabela com a mesma estrutura da tabela Cliente chamada C$empClienteC. 'mporte os dados e4ecutando& >ota@ Yoc3 pode criar uma c5pia da tabela Cliente+ clicando na mesma com o boto direito+ depois em 7ll $as9s \ 8enerate SQL Scripts. 7% cli6ue em =revie". -epois 6ue terminar-se de gerar o script+ cli6ue em CopL+ e o script SQL ser/ posto na /rea de transfer3ncia. Fasta depois col/-lo no QuerL 7nalL2er+ mudando o nome da tabela+ e e4ecutar o comando.Lembre-se de retirar as primeiras linhas Aat o 8OB+ 6ue verificam se a tabela e4iste+ e se e4istir+ a e4cluem+ posicione-se no banco de dados onde voc3 6uer a tabela criada.
FC= ;4emplo..$empCliente '# CL';#$;.$<$ -c -S nomeAdoAservidor -. sa -=
Se a tabela tivesse uma coluna '-;#$'$^+ voc3 deveria incluir tambm a op o C-;C para usar S;$ '-;#$'$^D'#S;0$ nomeAta6ela O# durante a importa o de dados. Outras op 1es+ especialmente )teis com tabelas grandes+ so C-T numeroAlinhaC e C-L numeroAlinhaC. ;las permitem especificar respectivamente+ os n)meros da primeira e )ltima linha 6ue sero importadas ou e4portadas. 7 op o C-b tamanhoC di2 a 6uantidade de linhas 6ue enviada em cada CbatchC Alote de atuali2a 1esB. =ode ser aumentada em rela o ao default.
166
Select Database
76ui voc3 deve informar de 6ual bancos de dados sero selecionadas as tabelas e colunas. ;scolha da lista o banco de dados dese:ado. Cli6ue em #e4t para continuar.
Start a >e
'nforme um nome para o trabalho do 7ssistente !eb+ e informe de 6ue forma viro os dados 6ue voc3 dese:a publicar. 7s op 1es so as seguintes& C-ata from the tables and columns ' selectC& selecionando esta op o+ lhe ser/ permitido escolher 6uais colunas e tabelas fornecero os dados para publica o.Caso voc3 selecione esta op o siga para Sele o de tabelas e colunas. C0esult setAsB of a stored procedure ' selectC& mostrar/ os resultados da e4ecu o de um procedimento arma2enado ] sua escolha. Caso voc3 selecione esta op o siga para Sele o de procedimentos arma2enados. C-ata from the $ransact-SQL statement ' specifLC& obterm os dados a serem mostrados atravs de uma se6u3ncia de comandos SQL 6ue voc3 informar. Caso voc3 selecione esta op o siga para 'nformando comandos. Teita sua sele o cli6ue em #e4t para continuar. 7s pr54imas :anelas a serem mostradas dependem do 6ue voc3 selecionou no passo acima. Seleco de tabelas e colunas #a tela mostrada abai4o+ selecione as colunas 6ue voc3 dese:a 6ue se:am mostradas no seu resultado+ selecionando-as do lado es6uerdo da tela Aembai4o de $able columnsB e clicando em $dd. Caso 6ueira selecionar todas colunas da tabela em 6uesto+ cli6ue em $dd $ll. #ote 6ue as tabelas selecionadas aparecem do lado direito da tela+ embai4o de CSelected columnsC. =ara remover alguma coluna selecionada+ selecione-a e cli6ue em 0emove.
167
Caso 6ueira e4ibir colunas de outras tabelas+ selecione-as atravs da lista C7vailable tablesC. Cli6ue em #e4t para continuar. 7parece a tela Select ro s+ onde voc3 pode especificar o critrio de sele o das linhas a serem mostradas. Yoc3 disp1e nessa tela de tr3s op 1es+ 6ue so& 7ll of the ro"s& mostrar/ todas as linhas da tabela 6ue houver sido selecionada. COnlL those ro"s that meet the follo"ing criteriaC& a6ui voc3 pode definir um critrio para e4ibi o das linhas+ especificando uma coluna de uma tabela+ um critrio de compara o Ak+ nb+ n+ b+ bk+ nkB+ e um valor An)mero+ string+ o 6ue forB. S5 sero e4ibidas as colunas 6ue se en6uadrarem no critrio especificado. COnlL those ro"s that 6ualifL using the follo"ing $ransact-SQL !H;0; clauseC& s5 sero e4ibidas as linhas 6ue atendam ] declara o !H;0; 6ue voc3 informar na cai4a de te4to logo abai4o. Cli6ue em #e4t e v/ para Schedule the !eb 7ssistant :ob. Seleo de 'rocedimentos arma8enados1
#a tela mostrada abai4o+ selecione o procedimento arma2enado cu:o resultado voc3 6uer 6ue se:a publicado.
168
Cli6ue em #e4t. Lhe ser/ pedido para informar valores para todos os parZmetros necess/rios para o funcionamento do procedimento arm2aenado. 'nforme-os+ cli6ue em #e4t+ e v/ para Schedule the !eb 7ssistant :ob. In+ormando comandos -igite na cai4a de te4to a se6u3ncia de comandos SQL 6ue voc3 6uer 6ue se:a e4ecutada de modo a mostrar os resultados a serem publicados. Cli6ue em #e4t e v/ para Schedule the !eb 7ssistant :ob
169
Com a primeira op o selecionada+ a p/gina ser/ gerada apenas uma ve2 6uando o assistente for conclu%do Ano nosso caso+ dei4aremos essa primeira op o selecionadaB. Quando voc3 seleciona 6ual6uer outra op o+ voc3 pode definir se ser/ ou no gerada uma p/gina 6uando da concluso do assistente. Aop o C8enerate a !eb page "hen the "i2ard is completedC+ se marcada+ gera uma p/gina 6uando completa o assistente.B. 7s outras op 1es so& (Sob demanda*. O trabalho e4ecutado mais tarde. -eve-se e4ecutar o On demand !eb 7ssistant de novo para e4ecutar a tarefa (7penas uma ve2 em*. 7 p/gina s5 gerada uma )nica ve2+ no dia e hora Onl& one time at: especificados. (Quando os dados do SQL Server mudarem* Quando uma ou mais )hen the SQL coluna de uma tabela forem alterados. ;ssa op o cria um gatilho na Server data changes tabela para notificar automaticamente o !eb 7ssistant das altera 1es. (;m intervalos regularmente agendados*. =or e4emplo+ a cada P horas+ a At regularl& cada P dias etc. Cli6ue em #e4t e+ para esta op o+ lhe ser/ peritido scheduled intervals definir a periodicidade de tais intervalos. Cli6ue em #e4t para continuar.
7ublis5 t5e
eb 'age
Yoc3 deve informar o nome do ar6uivo. =ara o teste+ mantenha -:;MSSQL4EH$,LE!eb=ageR.H$,. #ote 6ue o caminho para o ar6uiv pode ser um caminho local+ um caminho de rede+ ou at um caminho de um servidor T$=.Cli6ue em #e4t.
S'eci+A titles
76ui voc3 define o t%tulo da p/gina (!hat do Lou "ant to title the !eb pagea*+ e o t%tulo da tabela H$,L 6ue conter/ os dados (!hat do Lou "ant to title the H$,L table that contains the dataa*. Yamos informar o t%tulo da p/gina& C$estando o !eb 7ssistantC e o t%tulo para o resultado& C0ela o de ClientesC. Yoc3 ainda pode definir 6ue tamanho ter/ o t%tulo da tabela (!hat si2e should the H$,L table title font bea* AHR+ HP+ HO..B. =ode ainda escrever a data e hora de publica o da p/gina (7pplL a time and date stamp to the !eb page*. Cli6ue em #e4t.
Format a table
76ui+ voc3 decide se 6uer os nomes das colunas sendo e4ibidas na tabela H$,L. (-o Lou "ant column names displaLed in the H$,L tablea*. 7inda poss%vel definir as caracter%sticas da fonte dos dados da tabela (!hat font characteristics do Lou "ant to applL to the table dataa*. =or fim+ pode optar por desenhar bordas ao redor da tabela (-ra" border lines around the H$,L table*. Cli6ue em #e4t.
C^es+ add a list of hLperlin9 .0Ls. Select them from a SQL Server table "ith the follo"ing SQL statementC& voc3 pode ainda informar as .0Ls dando um S;L;C$ em colunas de tabelas dos seus bancos de dados. -igite os comandos SQL na cai4a de te4to. Limit 0o"s =ode-se limitar o n)mero de linhas a serem e4ibidas na p/gina+ com algumas op 1es. 7s primeiras duas op 1es definem se sero e4ibidas todas (#o+ return all ro"s of data*+ ou as primeiras # linhas (^es. 0eturn the first ro"s of data.* 7s outras duas op 1es lhe permitem definir se todos os dados sero postos em uma )nica p/gina (#o+ put all data in one scrolling page*+ ou em diversas p/ginas ligadas por hiperlin9s (^es+ lin9 the successive pages togheter.*. #o )ltimo caso+ voc3 deve informar 6uantas linhas sero e4ibidas por p/gina. Cli6ue em #e4t. Tinalmente+ voc3 v3 a tela final do assistente+ lhe mostrando as op 1es deifnidas na cria o dessa tarefa. 7%+ voc3 ainda tem a op o de escrever o c5digo SQL gerador de tal tarefa para um ar6uivo (!rite $ransact-SQL to Tile...*. Cli6ue em Tinish.
?estando a '<gina
7bra a p/gina no 'nternet ;4plorer para visuali2ar o seu resultado.
Os lin9s abai4o contm os scripts SQL para facilitar o acompanhamento da apostila. 7bra-os e visuali2e no se" Cbro"serC. =ara utili2/-los+ selecione-os+ copie e cole para o QuerL 7nalL2er. =ara voltar para esta p/gina+ use o boto F7CI de seu bro"ser+ ou o menu de navega o ] es6uerda na tela. ;4ecute-os de prefer3ncia+ em se6u3ncia.
171
N $dicionando
spDaddtLpe K$C;=K+ KcharARJBK+ KnullK 8O spDaddtLpe K$;stadoK+ KcharAPBK+ KnullK 8O spDaddtLpe K$QuantidadeK+ KnumericARJ+PBK+ Knot nullK 8O spDaddtLpe K$$elefoneK+ Kvarchar APJBK+ KnullK 8O spDaddtLpe K$$ipoOperacaoK+ KSmall'ntK+ KnullK go spDaddtLpe K$Yalor8ranteK+ KnumericAR?+PBK
N &emovendo
spDdroptLpe $$ipoOperacao 8O spDdroptLpe $Yalor8rante
%riando ?abelas
/dddddd $able CategoriaContato dddddd/ C0;7$; $7FL; CategoriaContato A CodCategoria int #O$ #.LL+ #ome varchar ASJB #.LL B 8O /dddddd $able Contato dddddd/ C0;7$; $7FL; Contato A $ipo charARB #O$ #.LL CH;CI A$ipo in AK=K+K;KBB+ Codigo int #O$ #.LL+ CodigoSub int #O$ #.LL+ #ome varchar ASJB #.LL B 8O /dddddd $able ;mpresa dddddd/ C0;7$; $7FL; ;mpresa A Cod;mpresa int #O$ #.LL+ #ome varchar ASJB #.LL+ 0a2aoSocial varchar ASJB #.LL+ -- campos adicionais -ataCadastro datetime #.LL+ #otas te4t #.LL B 8O
172
Apostila Microsoft SQL Server 7.0 /dddddd $able =roduto dddddd/ C0;7$; $7FL; =roduto A Cod=roduto int #O$ #.LL+ #ome varcharASJB #.LL+ -escricao varcharASJB #.LL+ Quant-isponivel $Quantidade #O$ #.LL CH;CI AQuant-isponivel bk JB Quant,inima $Quantidade #.LL+ Locali2acao varchar A?JB #.LL+ =reco moneL #O$ #.LL CH;CI A=reco b JB B 8O /dddddd $able ,ovimentacao=roduto dddddd/ C0;7$; $7FL; ,ovimentacao=roduto A Cod,ov=roduto int #O$ #.LL+ -- chave estrangeira da tabela Contato $ipoContato charARB #.LL+ CodContato int #.LL+ CodSubContato int #.LL+ -- chave estrangeira da tabela =roduto Cod=roduto int #O$ #.LL+ Quantidade $Quantidade #O$ #.LL+ -ata,ov datetime #O$ #.LL -;T7.L$ AgetdateABB+ -- ; k ;ntrada+ S k Sa%da $ipo,ov charARB #O$ #.LL CH;CI A$ipo,ov in AK;K+KSKBB B 8O /dddddd $able =essoa dddddd/ C0;7$; $7FL; =essoa A Cod=essoa int #O$ #.LL+ #ome Se4o Tone Ta4 B 8O /dddddd $able Subdivisao dddddd/ C0;7$; $7FL; Subdivisao A -- chave prim/ria Cod;mpresa int #O$ #.LL+ CodSubdivisao int #O$ #.LL+ #ome varchar A?JB #.LL+ Tone $$elefone #.LL+ Ta4 $$elefone #.LL+ -- colunas de endere o 0ua varchar A?JB #.LL+ Fairro varchar AP?B #.LL+ Cidade varchar AQJB #.LL+ varchar A?JB #.LL+ charARB #O$ #.LL+ $$elefone #.LL+ $$elefone #.LL
-;T7.L$ J+
173
Apostila Microsoft SQL Server 7.0 ;stado C;= C8C $;stado #.LL+ $C;= #.LL+ varchar AR@B #.LL+
-- colunas adicionais -ataCadastro datetime #.LL+ #otas te4t #.LL B 8O /dddddd $able 0el;mpresaCategoria dddddd/ C0;7$; $7FL; 0el;mpresaCategoria A Cod;mpresa int #O$ #.LL+ CodCategoria int #O$ #.LL B 8O /dddddd $able 0el=essoaCategoria dddddd/ C0;7$; $7FL; 0el=essoaCategoria A Cod=essoa int #O$ #.LL+ CodCategoria int #O$ #.LL B 8O
/dddddd $able 0elSubdivisao=essoa dddddd/ C0;7$; $7FL; 0elSubdivisao=essoa A Cod;mpresa int #O$ #.LL+ CodSubdivisao int #O$ #.LL+ Cod=essoa int #O$ #.LL+ Cargo B 8O varchar AOJB #.LL
/dddddd $able ,ov7cumulado dddddd/ C0;7$; $7FL; ,ov7cumulado A Cod=roduto int #O$ #.LL+ $otalYendas $Quantidade+ $otalCompras $Quantidade B 8O /dddd $able $emporaria ddddd/ C0;7$; $7FL; $emporaria A Codigo int #O$ #.LL+ #ome varchar A?JB #.LL B
174
Apostila Microsoft SQL Server 7.0 /dddd $able $emporariaR ddddd/ C0;7$; $7FL; $emporaria A Codigo int #O$ #.LL+ #ome varchar A?JB #.LL B
$lter ?able
N %am'o
7L$;0 $7FL; =essoa 7-- 0ua varcharASJB null+ Cidade varcharAOJB null+ Fairro varcharAOJB null+ C;= $C;= #.LL+ ;stado $;stado #.LL+ C=T varchar ARQB #.LL+ -ataCadastro datetime #.LL -;T7.L$ AgetdateABB+ #otas te4t #.LL
&enomear ?abela
spDrename K$emporariaRK+ $emporaria$este 8O spDrename K$emporaria.codigoK+ cod
&emover ?abela
drop table $emporaria+ $emporaria$este
4staro criadas as tabelas; todas va8ias1 Deve-se e(ecutar o scri't Dados?odos; ,ue colocar< dados em todas elas1 %oloca dados em todas as tabelas ",ue :< devem ter sido criadas#1
175
Apostila Microsoft SQL Server 7.0 insert into =essoaACod=essoa+#ome+Se4o+Tone+Ta4+0ua+Fairro+Cidade+;stado+C;=B values AR+ K7brlio Tren9elK+ KTK+ KPPP-P@GJK+ KJOR-P>?-QJ>?K+ K7v. 8oi s+ OQ? sala PK+ KK+ K8oisniaK+ K8OK+ K KB insert into =essoaACod=essoa+#ome+Se4o+Tone+Ta4+0ua+Fairro+Cidade+;stado+C;=B values AP+ K7dto -iasK+ KTK+ KPSR-@PSOK+ KPPP-QP@JK+ K0ua C- RQS+ SSRK+ KK+ K8oisniaK+ K8OK+ KKB insert into =essoaACod=essoa+#ome+Se4o+Tone+Ta4+0ua+Fairro+Cidade+;stado+C;=B values AO+ K7dto =ereiraK+ KTK+ KPOQ-GG??K+ KnJo lembraK+ K 0ua P+ R?RK+ KSetor .niversit rioK+ K8oisniaK+ K8OK+ KKB insert into =essoaACod=essoa+#ome+Se4o+Tone+Ta4+0ua+Fairro+Cidade+;stado+C;=B values AQ+ K7debaldo #epomucenoK+ KTK+ KPQO-SQS?K+ KP>R-OP?GK+ K7v. PQ de Outubro+ Q?K+ KK+ K8oisniaK+ K8OK+ KGQPR?-JOJKB insert into =essoaACod=essoa+#ome+Se4o+Tone+Ta4+0ua+Fairro+Cidade+;stado+C;=B values A?+ K7driano MesusK+ K,K+ KP@R-SGG>K+ KP>?-QPRGK+ K7v. =erimetral #orte+ OPORK+ K K+ K8oisniaK+ K8OK+ K KB
/dddd =roduto dddd/insert into =rodutoACod=roduto+#ome+-escricao+Quant-isponivel+Quant,inima+Locali2acao+=recoB valuesAR+CLZmpadas R?J YC+CC+Q.JJ+P.JJ+C;stante + =rateleira + -iviso C+R?.JJJJBinsert into =rodutoACod=roduto+#ome+-escricao+Quant-isponivel+Quant,inima+Locali2acao+=recoB valuesAP+C$oner/Laser MetC+CC+R.JJ+J.JJ+C7rm/rio JR+ =rateleira JP+ C+R?.JJJJB %onsultando dados; +un/es matem<ticas; de caracteres; data)5ora; converso de dados e condi/es de 'es,uisa1
%onsultando Dados
%onsultando verso do SQL Server
Select UUversion
d ,ostrar 6uais so os autores cadastrados no bando de dados =ubsa select d from pubs..authors
Apostila Microsoft SQL Server 7.0 d ,ostrar o nome+ telefone e fa4 das pessoas cadastradas no contatosa Select nome+ fone+ fa4 from pessoa
3sando condi/es
d Quais so as pessoas + cu:o+ estado igual a K8oK e cidade igual a K8oiZniaK a select #ome+ Tone from pessoa "here cidade k K8oiZniaK and estado k K8oK
Mani'ulando 4('ress/es
d ,ostrar os pre os de cada produto + ap5s um aumento de RJia select nome =roduto+ =reco =re o+ Apreco d R.RB C=re o com RJi de aumentoC from produto
Fun/es Matem<ticas
d ,ostrar os pre os de cada produto + ap5s um aumento de RJi arredondando o valor com duas casas decimaisa select nome =roduto+ =reco =re o+ roundAApreco d R.RB+ PB C=re o arredondadoC from produto select po"erAQ+PB+ piAB+ asciiAK7KB
Fun/es de caracteres
d ,ostrar os produtos com as descri 1esa select #ome e K-K e descricao K=roduto/-escri oK from produto d ,ostrar os produtos + onde os nomes podem aparecer com PJ caracteres e o pre o com S casas decimais antes da v%rgula e P casas depois da v%rgulaa Select substringA#ome+ R+ PJB =roduto + strApreco+ S+ PB =re o from produto d 0epetir a letra a RJ ve2es. select replicateAKaK+ RJB
177
Fun/es de Data)5ora
select datacadastro K-ata CadastroK+ date7ddAmm+ R+datacadastroB K7dicionando R ,3sK + date-iffAdd+ datacadastro+ getdateABB KSubtraindo -atasK+ datepartALL+ datacadastroB 7no+ datepartAd"+ datacadastroB Semana from empresa
%onverso de Dados
select convertAcharARJB+ nomeB K#ome SubdivisoK+ convertAchar+ datacadastro+ RJOB K-ata Tormato FrasileiroK from subdivisao
%ondi/es de 7es,uisa
d Quais so os produtos+ cu:a 6uantidade dispon%vel em esto6ue menor 6ue a 6uantidade m%nima permitidaa Select nome + 6uantdisponivel+ 6uant,inima from produto !here 6uant-isponivel n 6uant,inima d Quais as pessoas 6ue no foi informado o telefonea Select nome from pessoa "here fone is null d Quais as subdivis1es 6ue esto no estado de 8oi/s e $ocantinsa select nome+ fone+ estado from subdivisao "here estado in AK8oK+ K$oKB d Quais as sa%das reali2adas no per%odo de JR/JS/>@ a JQ/JS/>@a select codproduto+ 6uantidade+ datamov from movimentacaoproduto "here data,ov bet"een KJS/JR/>@K and KJS/JQ/>@K d Quais as pessoas 6ue contm as letras KcrisK no meio Aou no in%cio ou no fimBa select nome from pessoa "here nome li9e KicrisiK d Quais as cidades onde a empresa possu% clientes+ idependente se se:a pessoa ou subdivisoa select cidade from pessoa union select cidade from subdivisao
178
Inserindo Lin5as
'#S;0$ '#$O =essoa Y7L.;S AQJJ+ K=;SSO7 .,K+ K,K+ KPPP-PPPPK+ KK+ K0. $esteK+ KF. -OS L',O;'0OSK+ K8oiZniaK+ K8OK+ KGQJ>J-RPOK+ KPPPPPPP-PRK+ KJG/PP/R>>@K+ KObs. #enhumaKB '#S;0$ '#$O =essoaACod=essoa+#ome+Se4oB Y7L.;S AQJR+K=essoaQJRK+KTKB
7ara incluir os dados numa tabela com a estrutura di+erente +aa@ %riar a tabela co'ia'essoa
C0;7$; $7FL; Copia=essoa A Cod=essoa #ome Se4o Tone B int #O$ #.LL+
varchar A?JB #.LL+ charARB #O$ #.LL CH;CI ASe4o in AK,K+KTKBB+ $$elefone #.LL
179
$tuali8ando dados
N $lterar o estado das 'essoas 'ara VGoV ; ,uando a cidade +or igual a VGoiYniaV
update =essoa set ;stado k K8oK "here Cidade k K8oiZniaK
180
4(cluindo dados
N 4(cluir todos os registros da tabela co'ia'essoa
delete from copiapessoa
181
Apostila Microsoft SQL Server 7.0 insert into funcionario valuesAKfuncSK+ K=K+ ROJJB go insert into funcionario valuesAKfuncGK+ K=K+ PJJB go insert into funcionario valuesAKfunc@K+ K=K+ SJJB go insert into funcionario valuesAKfunc>K+ K=K+ GJJB go insert into funcionario valuesAKfuncRJK+ K$K+ @JJB
Dados de &esumo
N Quantas 'essoas esto cadastradas na tabela de 'essoasS
Select countAdB from =essoa
N &elao de 'rodutos da em'resa com sua ,uantidade total vendida e ordenado 'ela ,uantidade1
select Cod=roduto+ S.,AQuantidadeB from ,ovimentacao=roduto "here $ipo,ov k KSK and -ata,ov bet"een KG/S/>@K and KG/G/>@K group bL Cod=roduto order bL S.,AQuantidadeB -;SC
182
-aving
N Qual a menor sa6da reali8ada 'ara cada c9digo do 'roduto ,uando a ,uantidade vendida +or maior ,ue L1S
Select codproduto+ minA6uantidadeB from movimentacaoproduto !here tipomov k KSK 8roup bL codproduto Having sumA6uantidadeB b ?R
N Quais as 'essoas ,ue 'ertencem a categoria V%L %lientesV; mostrando as 'essoas em ordem al+abWticaS
Select p.nome from =essoa p+ 0el=essoaCategoria r+ CategoriaContato c "here p.codpessoa k r.codpessoa and c.codcategoria k r.codcategoria and c.nome k KCL ClientesK order bL p.nome
183
select e.#ome+ s.#ome from ;mpresa e inner :oin Subdivisao s on e.cod;mpresa k s.cod;mpresa order bL e.nome+ s.nome
Iuno e(terior
select e.nome from 0el;mpresaCategoria r inner :oin ;mpresa e on r.codempresa k e.codempresa inner :oin CategoriaContato c on r.codcategoria k c.codcategoria "here c.nome k KCL ClientesK order bL e.nome
N Listagem das em'resas com nome; +a(; bairro; cidade ;estado e ,ue 'ertencem a categoria igual a *S
select s.#ome+Ta4+Fairro+Cidade+;stado
184
Apostila Microsoft SQL Server 7.0 from Subdivisao s inner :oin ;mpresa e on s.Cod;mpresa k e.Cod;mpresa inner :oin 0el;mpresaCategoria r on r.Cod;mpresa k e.Cod;mpresa "here r.CodCategoria k P order bL ;stado+ Cidade+ Fairro+ s.#ome
Sub-%onsultas
N 7orcentagem da ,uantidade de um 'roduto em relao ao total de ,uantidades dos 'rodutos; ,ue +oram com'rados 'elo em'resaS select Cod=roduto+ RJJ.J d sumAQuantidadeB / Aselect sumAQuantidadeB from ,ovimentacao=roduto "here $ipo,ov k K;KB as =orcentagem from ,ovimentacao=roduto "here $ipo,ov k K;K group bL Cod=roduto Select #ome+ Aselect sumAQuantidadeB from ,ovimentacao=roduto m "here $ipo,ov k KSK and m.Cod=roduto k p.Cod=rodutoB as $otalYendas+ Aselect sumAQuantidadeB from ,ovimentacao=roduto m "here $ipo,ov k K;K and m.Cod=roduto k p.Cod=rodutoB as $otalCompras from =roduto p order bL nome 7ara as 'r9(imas consultas iremos criar a tabela de +uncion<rio; 'ara isso e(ecutar os seguintes comandos@ create table funcionario A codigo int identitL+ nome charASJB+ tipo charARB+ salario moneL B 4(ecutar o scri't %oloca dados na tabela de +uncion<rios 'ara acrescentar dados na tabela de +uncion<rios1 $ coluna ti'o se +or 7 indica 'ro+essor e se +or ? indica tWcnico1
?este de e(istCncia
N Mostrar os 'ro+essores somente se tiver tWcnicos com o sal<rio igual a 1*221
Select nome + salario Trom funcionario !here funcionario.tipo k K=K and ;4ists Aselect d from funcionario "here tipo k K$K and salario k RPJJB
Select Cod;mpresa+CodSubdivisao+#ome from Subdivisao s "here #O$ ;<'S$S Aselect d from 0elSubdivisao=essoa rsp "here rsp.Cod;mpresa k s.Cod;mpresa and rsp.CodSubdivisao k s.CodsubdivisaoB
185
N Qual a data da Fltima venda de cada 'roduto com suas res'ectivas ,uantidadesS
select codproduto+ ma4AdatamovB+ Aselect 6uantidade from movimentacaoproduto p "here p.codproduto k mp.codproduto and p.datamov k ma4Amp.datamovBB from movimentacaoproduto mp "here tipomov k KSK group bL codproduto
N &elao das em'resas e subdivis/es com a ,uantidade de +uncion<rios 'ertencente a cada em'resaS
select e.nome K;mpresaK+ countAdB from 0elSubdivisao=essoa r inner :oin =essoa = on r.codpessoa k p.codpessoa inner :oin subdivisao s on Ar.codsubdivisao k s.codsubdivisao and inner :oin ;mpresa ; on S.cod;mpresa k ;.cod;mpresa group bL e.nome
r.codempresa k s.codempresaB
fndices "Kndices clustered geralmente W utili8ado ,uando no W +eito muita incluso de dados na tabela1#
C0;7$; .#'Q.; CL.S$;0;- '#-;< ind#ome O# CategoriaContatoAnomeB C0;7$; CL.S$;0;- '#-;< ind#ome O# ;mpresaAnomeB C0;7$; '#-;< ind#ome O# =essoaAnomeB
IdentitA
Create table -epartamento A Codigo int not null identitL+ #ome varcharASJB B
De+ault
create default
186
Apostila Microsoft SQL Server 7.0 -ata7tual as getdateAB go spDbindefault -ata7tual+ Kempresa.datacadastroK e4ec spDbindefault -ata7tual+ Ksubdivisao.datacadastroK 7lter table Subdivisao add default K8OK for ;stado 7lter table =essoa add default K8OK for ;stado
&egras
create rule 0egraSe4o as Use4o in AKTK+ K,KB go spDbindrule 0egraSe4o+ Kpessoa.se4oK 7L$;0 $7FL; ,ovimentacao=roduto add chec9 AU$ipo,ov in AK;K+ KSKBB
&estri/es
/dddddd Ob:ect& $able CategoriaContato dddddd/ 7L$;0 $7FL; CategoriaContato 7-- =0',70^ I;^ #O#CL.S$;0;- ACodCategoriaB /dddddd Ob:ect& $able Contato dddddd/ 7L$;0 $7FL; Contato 7-- CO#S$07'#$ =9Contato =0',70^ I;^ CL.S$;0;- A$ipo+ Codigo+ CodigoSubB /dddddd Ob:ect& $able ;mpresa dddddd/ 7L$;0 $7FL; ;mpresa 7-- CO#S$07'#$ =9;mpresa =0',70^ I;^ #O#CL.S$;0;- ACod;mpresaB /dddddd Ob:ect& $able =roduto dddddd/ 7L$;0 $7FL; =roduto 7-- CO#S$07'#$ =9=roduto =0',70^ I;^ #O#CL.S$;0;- ACod=rodutoB /dddddd Ob:ect& $able ,ovimentacao=roduto dddddd/ 7L$;0 $7FL; ,ovimentacao=roduto 7-- =0',70^ I;^ #O#CL.S$;0;- ACod,ov=rodutoB+ TO0;'8# I;^ ACod=rodutoB 0;T;0;#C;S =rodutoACod=rodutoB+ TO0;'8# I;^ A$ipoContato+ CodContato+ CodSubContatoB 0;T;0;#C;S ContatoA$ipo+Codigo+CodigoSubB /dddddd Ob:ect& $able =essoa dddddd/ 7L$;0 $7FL; =essoa 7-- =0',70^ I;^ #O#CL.S$;0;- ACod=essoaB /dddddd Ob:ect& $able Subdivisao dddddd/ 7L$;0 $7FL; Subdivisao 7-- =0',70^ I;^ #O#CL.S$;0;- ACod;mpresa+ CodSubdivisaoB /dddddd Ob:ect& $able 0el;mpresaCategoria dddddd/ 7L$;0 $7FL; 0el;mpresaCategoria 7-- CO#S$07'#$ =90el;mpresaCategoria =0',70^ I;^ #O#CL.S$;0;- ACod;mpresa+CodCategoriaB+ CO#S$07'#$ T9Cod;mpresaCategoria TO0;'8# I;^ ACodCategoriaB 0;T;0;#C;S
187
Apostila Microsoft SQL Server 7.0 CategoriaContatoACodCategoriaB /dddddd Ob:ect& $able 0el=essoaCategoria dddddd/ 7L$;0 $7FL; 0el=essoaCategoria 7-- =0',70^ I;^ ACod=essoa+ CodCategoriaB+ CO#S$07'#$ T9Cod=essoaCategoria TO0;'8# I;^ ACodCategoriaB 0;T;0;#C;S CategoriaContatoACodCategoriaB /dddddd Ob:ect& $able 0elSubdivisao=essoa dddddd/ 7L$;0 $7FL; 0elSubdivisao=essoa 7-- =0',70^ I;^ ACod;mpresa+CodSubdivisao+Cod=essoaB+ TO0;'8# I;^ ACod;mpresa+CodSubdivisaoB 0;T;0;#C;S Subdivisao+ TO0;'8# I;^ ACod=essoaB 0;T;0;#C;S =essoa
N %riar estas tabelas ,ue utili8a as restri/es de integridade com o comando create1
C0;7$; $7FL; copia=essoa A Cod=essoa int #O$ #.LL constraint =ID=essoa primarL 9eL+ #ome varchar A?JB #.LL constraint .D#ome=essoa .ni6ue+ Tone $$elefone #.LL + Ta4 $$elefone #.LL + Se4o char ARB chec9 Ase4o inAKTK+K,KBB+ 0ua varchar ASJB #.LL + -ataCadastro datetime default getdateAB + Cidade varchar AOJB default K8oiZniaK + Fairro varchar AOJB #.LL + C;= $C;= #.LL + ;stado $;stado #.LL + C=T varchar ARQB #.LL + #otas te4t #.LL B C0;7$; $7FL; Copia0el=essoaCategoria A Cod=essoa int #O$ #.LL constraint TIDCopia=essoa foreign 9eL references copiapessoa+ CodCategoria int #O$ #.LL primarL 9eL Acodpessoa+ codcategoriaB B
Vis/es
C0;7$; Y';! ;mpresaCategoria ACod;mpresa+ ;mpresa+ CategoriaB 7S select e.Cod;mpresa+ e.#ome+ c.#ome from ;mpresa e '##;0 MO'# 0el;mpresaCategoria rec O# e.Cod;mpresa k rec.Cod;mpresa '##;0 MO'# CategoriaContato c O# rec.CodCategoria k c.CodCategoria C0;7$; Y';! =roduto0estrito 7S S;L;C$ Cod=roduto+ #ome+ Locali2acao T0O, =roduto
188
Apostila Microsoft SQL Server 7.0 C0;7$; Y';! =essoas;mpresa as select p.#ome K=essoaK+ e.nome K;mpresaK+ s.nome KSubdivisaoK+ rs.cargo from =essoa p inner :oin 0elSubdivisao=essoa rs on p.Cod=essoa k rs.Cod=essoa inner :oin Subdivisao s on Ars.Cod;mpresa k s.Cod;mpresa and rs.CodSubdivisao k s.CodSubdivisaoB inner :oin ;mpresa e on As.codempresa k e.codempresaB C0;7$; Y';! =essoaYie" 7S S;L;C$ #ome+ Cidade+ ;stado T0O, =essoa !H;0; #ome li9e K7iK C0;7$; Y';! Saidas 7S S;L;C$ -ata,ov+ Cod=roduto+ Quantidade+ $ipo,ov T0O, ,ovimentacao=roduto !H;0; $ipo,ov k KSK !'$H CH;CI O=$'O#
7rocedimentos
C0;7$; =0OC;-.0; Fusca=essoa Unome varcharA?JB 7S declare Upes6uisa varcharA?JB declare Ucontagem int select Upes6uisa k KiK e Unome e KiK select Ucontagem k countAdB from =essoa "here #ome li9e Upes6uisa declare Umensagem varcharARJJB 'T Ucontagem `k J begin select Umensagem k convertAvarchar+UcontagemB e K pessoas encontradasK print Umensagem select Cod=essoa+ #ome from =essoa "here #ome L'I; Upes6uisa order bL #ome end ;LS; begin select Umensagem k K#o foi encontrado CKeUnomeeKCK print Umensagem end 8O
189
Apostila Microsoft SQL Server 7.0 /dddddddddddddd/ create procedure Fusca=essoaCategoria Unome varcharA?JB+ UcodCategoria int k J 7S if UcodCategoria k J begin select d from =essoa "here #ome li9e KiKeUnomeeKiK return R end else begin select d from =essoa "here #ome li9e KiKeUnomeeKiK and Cod=essoa in Aselect Cod=essoa from 0el=essoaCategoria "here CodCategoria k UcodCategoriaB return P end 8O /dddddddddddddd/ create procedure ConsultaYendas=roduto Ucod=roduto int+ Udata'ni datetime+ UdataTim datetime as select Quantidade+-ata,ov+ $ipoContato+CodContato+CodSubContato from ,ovimentacao=roduto "here Cod=roduto k Ucod=roduto and $ipo,ov k KSK and -ata,ov bet"een Udata'ni and UdataTim order bL -ata,ov /dddddddddddddd/ create procedure 'niciali2arContato as delete from Contato insert into Contato select K=K+ Cod=essoa+ J+ #ome from =essoa insert into Contato select KSK+ Cod;mpresa+ CodSubdivisao+ #ome from Subdivisao 8O /dddddddddddddd/ create procedure 7tuali2arYendasCompras
190
Apostila Microsoft SQL Server 7.0 as delete from ,ov7cumulado insert into ,ov7cumuladoACod=roduto+$otalYendas+$otalComprasB select Cod=roduto+ =recodAselect sumAQuantidadeB from ,ovimentacao=roduto m "here m.$ipo,ov k KSK and m.Cod=roduto k p.Cod=rodutoB+ =recodAselect sumAQuantidadeB from ,ovimentacao=roduto m "here m.$ipo,ov k K;K and m.Cod=roduto k p.Cod=rodutoB from =roduto p 8O /dddddddddddddd/ C0;7$; =0OC;-.0; 'ncrementa=roduto Ucod=roduto int+ UQuant7dicionada $Quantidade 7S update produto set 6uantdisponivel k 6uantdisponivel e U6uant7dicionada "here codproduto k Ucodproduto if UU;rror `k J return UU;rror else return J 8O /dddddddddddddd/ C0;7$; =0OC;-.0; -ecrementar=roduto UCod=roduto int+ UQuant0etirada $Quantidade 7S if Aselect 6uantdisponivel from produto "here codproduto k UcodprodutoB n UQuant0etirada begin 0ais;rrorAKQuantidade 'nsuficiente`K+ RS+ RB return R end update produto set 6uantdisponivel k 6uantdisponivel U6uantretirada "here codproduto k Ucodproduto if UU;rror `k J return UU;rror else return J 8O
191
3sar o 'rocedimento Documentador ; 'or,ue ele utili8a cursor e W um e(em'lo de como utili8ar tabelas de sistemas1
create procedure -ocumentador Utabela varcharA?JB k #.LL as if Utabela 'S #.LL declare SOFM cursor for //declarando cursor com nome SOFM select id+name from sLsob:ects "here tLpe k K.K order bL name else declare SOFM cursor for select id+name from sLsob:ects "here name k Utabela declare Uid int+ Unome$abela varcharA?JB declare Umsg varcharARJJB // -epois de criado tenho 6ue abrir o cursor + ap5s a abertura ele fica posicionado no in%cio. open SOFM fetch ne4t from SOFM into Uid+ Unome$abela // busca o pr54imo registro e guarda esses valores nas vari/veis id+ nometabela+ para percorrer a tabela tem 6ue colocar num la o. "hile UUfetchDstatus `k -R begin select Umsg k Kddddd $abela& K e Unome$abela print Umsg select sc.colid #um+ sc.name Coluna+ convertAvarcharAPJB+ case "hen st.name in ACcharC+ CvarcharC+ CbinarLCB then st.name e CAC e convertAvarchar+sc.lengthBeCBC "hen st.name in ACnumericC+ CdecimalCB then st.name e CAC e convertAvarchar+sc.precB e C+C e convertAvarchar+sc.scaleB e CBC else st.name endB $ipo+ case "hen sc.status u J4J@ k J then C#O$ #.LL C else C#.LL C end e case "hen sc.status u J4@J `k J then C'-;#$'$^C else null end Op 1es+ sc.length K$am.bLtesK+ sc.cdefault+ sc.domain from sLscolumns sc L;T$ MO'# sLstLpes st O# sc.usertLpe k st.usertLpe "here sc.id k Uid fetch ne4t from SOFM into Uid+ Unome$abela end close SOFM deallocate SOFM // destroi o cursor do banco de dados 8O
Modelo de e(em'lo
76ui voc3 tem a descri o de uma solu o de banco de dados para uma empresa fict%cia. Com base na realidade da empresa+ dedu2em-se os re6uisitos de sistema. Ta2-se ento o modelo de dados para o sistema. 192
&e,uisitos do Sistema
%ontatos
.ma empresa precisa manter os dados dos seus CcontatosC+ ou se:a+ das v/rias pessoas e empresas 6ue se relacionam com ela+ se:am eles clientes+ fornecedores+ distribuidores etc. =ara cada empresa cadastrada+ preciso manter seu nome e ra2o social. Cada empresa tem uma ou mais subdivis1es. .ma subdiviso representa uma filial ou departamento da empresa+ 6ue pode ter uma locali2a o f%sica separada. .ma empresa no pode ser cadastrada sem nenhuma subdiviso. Cada subdiviso pode ter um endere o+ 6ue dividido em rua/n)mero+ bairro+ cidade+ estado e C;=. 7lm disso+ uma subdiviso tem um telefone+ opcionalmente um fa4 e opcionalmente um C8C. =ara cada pessoa+ preciso manter seu nome e se4o+ alm dos dados de endere o como na subdiviso. .ma pessoa pode ter+ opcionalmente+ um telefone+ um fa4 e o seu n)mero de C=T. .ma subdiviso pode ter pessoas 6ue trabalham nela+ sendo necess/rio saber o cargo da pessoa. .ma mesma pessoa pode estar empregada em diferentes subdivis1es+ at mesmo de diferentes empresas. 7s pessoas e empresas so classificadas em categorias+ para maior organi2a o. Cada pessoa ou empresa pode pertencer a mais de uma categoria ou a nenhuma categoria. 7o cadastrar 6ual6uer empresa+ subdiviso ou pessoa+ preciso guardar a sua data de cadastramento e um te4to opcional contendo informa 1es adicionais. Tre6gentemente+ os usu/rios precisam emitir um relat5rio das empresas e pessoas de uma determinada categoria+ em ordem alfabtica. 7 empresa envia mensalmente um informativo para todos os seus clientes Ase:am pessoas f%sicas ou empresasB. O informativo emitido via fa4+ apenas para a6uelas pessoas ou empresas 6ue esto na categoria CClientesC e possuem n)mero de fa4. 7 lista de clientes deve ser ordenada por estado+ depois por cidade e depois por bairro. .m srio problema do sistema anterior 6ue durante a consulta para essa mala direta Aem hor/rio de trabalhoB+ todo o processamento ficava mais lento.
7rodutos
7 empresa mantm um controle dos produtos 6ue ela comerciali2a. =ara cada produto so mantidos um nome informal+ uma descri o mais detalhada+ a locali2a o no esto6ue+ a 6uantidade dispon%vel em esto6ue e a 6uantidade m%nima em esto6ue. Cada entrada ou sa%da de produto deve ser registrada. =ara uma entrada+ necess/rio saber 6ual o contato Aempresa ou subdivisoB 6ue forneceu o produto. 'gualmente+ para uma sa%da+ preciso saber 6ual o contato para o 6ual o produto foi vendido. $anto para entradas como sa%das+ preciso registrar a 6uantidade do produto e a data em 6ue foi feita essa movimenta o. O sistema anterior da empresa+ 6ue usava ar6uivos -FT+ tinha um cadastro de produtos. N importante 6ue esse cadastro de produtos se:a reaproveitado. Os programadores conseguiram e4port/-lo para um ar6uivo te4to+ separado por tabula 1es. #o entanto+ alguns campos so diferentes do novo sistema. 7 ger3ncia precisa dos seguintes relat5rios& Quais as vendas de cada 'roduto em determinado 'er6odoS Quais as vendas e com'ras de cada 'roduto num determinado 'er6odoS 7or e(em'lo@
=roduto $otal vendas $otal compras =rimeiro =roduto RPJ.J?J+OJ OJ.Q?S+JJ Segundo =roduto O.Q?G+RJ P.JJJ+@G ... ... ... 193
Modelos de dados
76ui voc3 ver/ os modelos de dados para solu o do problema de dados da empresa fict%cia+ usada como e4emplo no decorrer do curso. =artimos do pressuposto 6ue voc3 familiari2ado com modelos relacionais+ entidades+ atributos e coisas do tipo. O modelo foi dividido em duas partes+ pois a segunda Arelacionamentos entre produto e contatoB no se relaciona com a primeira.
194
195
,icrosoft SQL Server S.?; caso voc3 este:a com o SQL Server S.? ativo+ o %cone ,icrosoft SQL Server G.J. 7o clicar nesse %cone+ aparece uma cai4a de di/logo avisando 6ue o SQL Server est/ restaurando as informa 1es do SQL Server S.? Aou G.JB. ;nto voc3 alterna entre um e outro SQL Server com facilidade. ;sse s"itch cuida de parar e iniciar os servi os necess/rios para 6ue cada uma das vers1es do SQL Server possa rodar.
197
-o ,enu 'niciar+ selecione ,icrosoft SQL Server S"itch e ento selecione SQL Server .pgrade !i2ard+ como na figura abai4o& & 7parece a cai4a de di/logo SQL Server .pgrade !i2ard+ como mostrado abai4o&
198
;ssa apenas uma tela de boas vindas. Cli6ue em #e4t para continuar.
#esta cai4a de di/logo+ voc3 pode determinar o 6ue voc3 6uer e4portar do SQL Server S.? e o 6ue voc3 6uer importar para o SQL Server G.J. Os valores padro so para e4portar e importar dados e ob:etos+ usar =ipes #omeados A#amed =ipesB para a transfer3nca de dados Aesse o -irect =ipelineB. =ode-se mudar 6uais6uer das sele 1es padro. Se a op o #amed =ipe estiver selecionada Aa op o $ape s5 selecion/vel 6uando se tem uma unidade de fita no computadorB+ no se pode desmarcar as cai4as C;4port from S.4 ServerC nem a 199
C'mport into G.J ServerC+ pois o mtodo de =ipeline direto A#amed =ipeB fa2 a e4porta o e importa o simultZnea. 7 op o de Yerifica o+ permite 6ue se valide os dados depois da transfer3ncia AYalidate successful ob:ect data transferB. Quando esta op o selecionada+ pode-se pedir 6ue se:a feita uma verifica o de C0C A6uase bLte a bLteB nos dados Amarcando a op o ;4haustive data integritL verificationB. Quando ela selecionada+ aparece uma cai4a de di/logo avisando 6ue esta op o pode dobrar o tempo necess/rio para a atuali2a o. 7bai4o esto os passos e4ecutados pelo 7ssistente de 7tuali2a o de Yerso 6uando se escolhe um dos dois mtodos Aunidade de fita ou =ipe #omeadoB. 3nidade de +ita R. ;4porta os ob:etos S.4 P. Techa o SQL Server S.4 O. ;4prta os dados S.4 Q. Ta2 bac9up e copia os dispositivos AdevicesB S.4 ?. 'nicia o SQL Server G.J S. 'mporta os ob:etos do SQL Server S.4 para o SQL Server G.J G. 'mporta os dados do SQL Server S.4 para o SQL Server G.J Direct 7i'eline R. ;4porta os ob:etos S.4 P. Techao SQL Server S.4 O. 'niica o SQL Server G.J Q. 'mporta os ob:etos S.4 ?. ;4porta e importa os dados do SQL Server S.4 para o SQL Server G.J #ota& Quando se seleciona a o mtodo de transfer3ncia com a unidade de fita+ voc3 tem a a op o de copiar os dispositivos do SQL Server S.4 para uma uniadde de rede.
200
Selecione em Server #ame+ o servidor S.4 de 6uem voc3 6uer e4portar os dados. ;ntre com nome e senha do administrador Aconta CsaCB+ e 6uais6uer op 1es de linha de comando adicionais necess/rias para iniciar o servidor. O mesmo deve ser feito para o servidor G.J 6ue voc3 6uer importar os dados para ele. -igite nome e senha do administrador+ e parZmetros adicionais para iniciar o servidor. Quando se clica em #e4t+ aparece uma cai4a de di/logo di2endo 6ue ser/ parado o SQL Server G.J e iniciado o SQL Server S.? e 6ue ningum pode estar acessando os servidores Ao SQL Server S.? e o G.JB+ e se voc3 tem certe2a 6ue 6uer continuar. Caso voc3 tenha certe2a 6ue no h/ ningum acessando algum dos servidores+ cli6ue em ^es. 7parece ento uma :anela indicando 6ue o SQL Server G.J est/ sendo finali2ado e o SQL Server G.J iniciado.
7 cai4a de di/logo de sele o da p/gina de c5digo te permite escolher a p/gina de c5digo usada pra gerar os ar6uivos de script usados na atuali2a o. 0ecomenda-se a op o padro. Cli6ue em #e4t para continuar.
201
Selecione 6uais bancos de dados voc3 6uer atuali2ar colocando-os do lado C'nclude these databasesC. Os 6ue voc3 no 6uer atuali2ar+ dei4e-os do lado C;4clude these databasesC. Caso voc3 decida-se por no atuali2ar todos os bancos de dados+ aparece uma mensagem di2endo 6ue recomend/vel 6ue se atuali2e todos os bancos de dados de uma ve2+ e se voc3 6uer de fato fa2er assim. Caso 6ueira+ cli6ue em ^es. 7p5s selecionados os bancos de dados 6ue se 6uer atuali2ar+ cli6ue em #e4t.
=ara ter seus bancos de dados criados com as op 1es padro+ os ar6uivos de dados locali2ados no diret5rio de dados do SQL Server G+ e um mapeamento um-para-um dos dispositivos AdevicesB do SQL Server S.? para 202
ar6uivos do SQL Server G.J+ use a configura o padro. =ara mudar ar6uivos ou locais+ cli6ue no boto ;dit. =ara usar bancos de dados :/ criados no G.J+ selecione a op o C.se databases alreadL created in SQL Server G.JC. =ara e4ecutar um script personali2ado para cria o dos bancos de dados+ escolha a op o C.se the follo"ing SQL ScriptC+ e entre com o caminho e o nome do script a ser e4ecutado. -epois 6ue voc3 tiver feito suas escolhas+ cli6ue no boto #e4t.
203
cli,ue em $dvanced e111 #essa :anela pode-se ver o espa o necess/rio para os bancos de dados G.J e o espa o livre no disco r%gido. =ara ver o espa o livre se for feita a remo o dos bancos de dados S.?+ selecionar COptionsC e CTree Space 'ncludes S.4 filesC. #essa :anela voc3 pode definir outros ar6uivos para colocar os bancos de dados e+ estando satisfeito com o definido cli6ue em 7ccept. 7% volta-se para a tela de cria o dos bancos de dados A-atabase creationB. Cli6ue em #e4t para continuar.
204
Os valores pado so para transferir as configura 1es e4istentes de servidor e tambm as configura 1es do SQL ;4ecutivo+ bem como desativar 7#S' #ulls e ativar o modo misto de Quoted 'dentifiers. Selecionar as op 1es dese:adas e cli6ue em C#e4tC.
76ui+ voc3 pode conferir todas suas sele 1es de op 1es de atuali2a o e deve-se a:ustar o 6ue se 6uiser mudar at estar satisfeito com as sele 1es. Tinalmente+ clicar em CTinishC para come ar a atuali2a o.
205
;ssa :anela nos d/ informa 1es sobre o andamento do processo de atuali2a o+ como situa o da tarefa+ a tarefa sendo e4ecutada+ e hora de in%cio e trmino de cada uma das tarefas envolvidas na atuali2a ao. #essa :anela+ podemos pausar 6ual6uer tarefa+ Aselecionando =ause $as9B+ pausar entre tarefas Aselecionando =ause Fet"een StepsB+ abortar o processo de atuali2a o ACloseB+ abortar uma tarefa espec%fica ACancel $as9B+ ou concluir uma tarefa pausada. Quando a atuali2a o se completar com sucesso+ aparece um aviso C.pgrade CompleteC.
206