Você está na página 1de 265

Apostila Microsoft SQL Server 7.

0
Apostila Microsoft SQL Server 7.0
Instalao, configurao e gerenciamento
1
Apostila Microsoft SQL Server 7.0
1 - Introduo........................................................................................................................................ 4
Viso Geral do SQL Server...................................................................................................................................4
Sistemas Gerenciadores de Banco de Dados.........................................................................................................6
2 - Instalao e Configurao............................................................................................................... 8
Requisitos de Sistema............................................................................................................................................8
Op!es "sadas na #nstalao.................................................................................................................................$
#nstalando o so%t&are de servidor .......................................................................................................................'(
Veri%icando se o SQL Server %oi instalado corretamente....................................................................................()
#nstalando o so%t&are de cliente..........................................................................................................................(4
Re*istrando um servidor......................................................................................................................................+)
Soluo de pro,lemas de instalao ...................................................................................................................4)
3 - Ferramentas de gerenciamento do SQL Serer...........................................................................43
SQL Server -nterprise .ana*er.........................................................................................................................44
SQL Server /lient 0et&or1 "tilit2.....................................................................................................................48
SQL Server 3ro%iler.............................................................................................................................................4(
SQL Server Quer2 5nal26er...............................................................................................................................44
SQL Server Boo1s Online...................................................................................................................................46
5sistentes do SQL Server 7SQL Server 8i6ards9...............................................................................................4:
4 - Fundamentos de ar!uitetura do SQL Serer..............................................................................."1
O /at;lo*o do Sistema .......................................................................................................................................6'
/omponentes do Banco de Dados ......................................................................................................................64
-strutura dos ,ancos de dados.............................................................................................................................64
# - Criando $ancos de %ados.............................................................................................................."&
Gerenciando Bancos de Dados ...........................................................................................................................6:
5rquvos e *rupos de arquivos.............................................................................................................................:6
/riando <a,elas ..................................................................................................................................................:$
5lterando a estrutura das ta,elas ........................................................................................................................84
De%inindo op!es de ,ancos de dados.................................................................................................................88
/onsidera!es para mel=or *erenciamento.........................................................................................................$'
Documentao dos passos de criao de ,ancos de dados no SQL Server.........................................................$(
" - Consultando %ados........................................................................................................................ '#
5 Sinta>e do S-L-/< ........................................................................................................................................$4
.anipulando e>press!es ....................................................................................................................................$$
/ondi!es de pesquisa ......................................................................................................................................')4
Outros recursos .................................................................................................................................................'):
(lterao de %ados............................................................................................................................1)'
#nserindo lin=as ................................................................................................................................................')$
->cluindo lin=as ...............................................................................................................................................'''
8 - Consultas (anadas...................................................................................................................113
Dados de resumo ..............................................................................................................................................''+
?un!es de ta,elas .............................................................................................................................................''6
Su,consultas .....................................................................................................................................................'(+
' - Im*lementando +ndices................................................................................................................12"
3or que @ndicesA ................................................................................................................................................'(6
<ipos de Bndices ................................................................................................................................................'(:
/aracter@sticas dos Bndices ...............................................................................................................................'(8
Otimi6ando /onsultas ......................................................................................................................................'++
2
Apostila Microsoft SQL Server 7.0
1) - Integridade de %ados................................................................................................................. 13"
5 propriedade #D-0<#<C ...............................................................................................................................'+6
"sando De%aults e Re*ras ................................................................................................................................'+8
De%inindo e usando restri!es 7constraints9 .....................................................................................................'4)
11 - ,is-es./atil0os e 1rocedimentos...............................................................................................14"
Vis!es 7Vie&s9 .................................................................................................................................................'46
3rocedimentos 5rma6enados ...........................................................................................................................'4)
Gatil=os 7<ri**ers9 ...........................................................................................................................................'4+
12 - Segurana.................................................................................................................................... 1#&
/onceitos ..........................................................................................................................................................'4:
3apDis 7Roles9....................................................................................................................................................'6(
Visuali6ando in%orma!es de se*urana...........................................................................................................'6$
3ermiss!es ........................................................................................................................................................':8
13 - $ac2u* e 3estaurao................................................................................................................1'4
/onceitos ..........................................................................................................................................................'$4
Dispositivos de Bac1up ....................................................................................................................................'$4
#mplementando um ,ac1up ..............................................................................................................................'$6
Restaurando um Bac1up ...................................................................................................................................()'
5*endando Bac1ups 5utom;ticos ...................................................................................................................()4
14 - 4utros 3ecursos......................................................................................................................... 21)
/on%i*urao do SQL Server ...........................................................................................................................(')
-ntendendo as <a,elas de Sistema ...................................................................................................................('(
#mportao e ->portao de Dados ..................................................................................................................('4
3u,licando dados na #nternet ............................................................................................................................('4
.odelo de e>emplo ..........................................................................................................................................(4+
Requisitos do Sistema........................................................................................................................................(4+
.odelos de dados .............................................................................................................................................(46
"3GR5D- do SQL Server 6.> para a verso :.).............................................................................................(44
5sssistente de 5tuali6ao de Verso...............................................................................................................(44
3
Apostila Microsoft SQL Server 7.0
1 - Introduo
,iso geral do SQL Serer
Sistemas /erenciadores de $ancos de %ados
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.
,iso /eral do SQL Serer
O SQL Server um sistema de gerenciamento de bancos de dados cliente/servidor de
alto desempenho com alta integrao com o Windows NT. Suas caractersticas so:
ntegrao com os servios de multithreading [mltiplas linhas], agendamento, Monitor
de Desempenho, e log de eventos do Windows NT. Um usurio pode se conectar ao
SQL Server com a mesma senha usada para a rede Windows NT.
Replicao nativa permite disseminar informaes para vrios locais, reduzindo a
dependncia de um servidor nico, e deixando a informao necessria mais prxima
de quem realmente precisa dela.
Arquitetura paralela, que executa as funes de banco de dados simultaneamente para
diversos usurios e tira proveito de sistemas com mltiplos processadores.
Gerenciamento centralizado de todos os servidores atravs de uma arquitetura de
gerenciamento distribuda, com uma interface visual de gerenciamento.
%istri5uted 6anagement Frame7or2 8%6F9
O SQL Server possui uma arquitetura distribuda de gerenciamento [distributed
management framework], composta de objetos, servios e componentes. Atravs dela,
vrios servidores podem ser gerenciados completamente a partir de qualquer local na
rede. Entre outros componentes, essa arquitetura composta de:
SQL-DMO: biblioteca de objetos ActiveX que expe interfaces para todas as funes
de gerenciamento do SQL Server e pode ser usada em qualquer linguagem compatvel
com automao ActiveX. Permite gerenciar servidores, bancos de dados, tabelas e
outros objetos relacionados ao banco de dados.
SQL nterprise Manager: ferramenta grfica de administrao que, utilizando os
objetos SQL-DMO, simplifica o gerenciamento de um ambiente de mltiplos servidores.
Servi!os SQLServerAgent e MSSQLServer" executando no servidor NT, o servio
SQLServerAgent permite agendar tarefas, como backups, por exemplo, e definir alertas
para informar quando ocorrem condies de erro diversas. O servio MSSQLServer o
4
Apostila Microsoft SQL Server 7.0
componente central, que permite inserir, atualizar e consultar dados armazenados no
SQL Server.
Ferramentas de (dministrao
O SQL Server vem com vrias ferramentas de administrao que podem ser
executadas a partir de um servidor Windows NT, de uma estao Windows NT
Workstation, ou at mesmo a partir do Windows 95/98. So elas:
nterprise Manager: como j foi dito, gerencia vrios servidores, permitindo executar
qualquer tarefa relacionada ao SQL Server. Como ser visto adiante, ele roda dentro
MMC (Microsoft Management Console). Para execut-lo atravs de niciar, Executar,
entre com a seguinte instruo:
mmc /s "pasta-base_do_SQLServer\BNN\SQL Server Enterprise Manager.MSC",
substituindo pasta-base_do_SQLServer pela pasta onde voc instalou o SQL Server 7.
Por padro, C:\MSSQL7.
Service Manager#SQLMA$%&.'(: permite iniciar, pausar, continuar e parar
("finalizar") os servios do SQL Server.
Quer) Anal)*er#+SQL,.'(" permite administrar diretamente o SQL Server usando
comandos Transact-SQL. Os comandos SQL podem ser executados interativamente,
ou podem ser executados de procedimentos armazenados ou scripts.
-rofiler #SQL.&A/.'(" permite monitorar toda a atividade do servidor e registrar
essa atividade em arquivos de log, incluindo comandos SQL executados pelo
servidor.
/lient$et0or1 2tilit) /L+/O$3%.'(" configura o software de acesso cliente numa
estao.
-erformance Monitor #SQL/.&S.-M/" integra o Performance Monitor
("Desempenho do Sistema") do Windows NT com o SQL Server, para monitorar o
desempenho do sistema.
Server $et0or1 2tilit) #S&4$./$.'(: permite adicionar, remover ou configurar
as Net-libraries, que so os protocolos aceitos para comunicao do cliente com o
servidor.
SQL Server 5oo1s Online" toda a documentao do SQL Server, para consultar on-
line. Permite fazer pesquisas de texto na documentao. Para execut-lo, em niciar,
Executar, entre com HH pasta_base_do_SQLServer\BOOKS\SQLBOL.CHM, onde
5
Apostila Microsoft SQL Server 7.0
pasta_base_do_SQLServer o diretrio onde o SQL Server foi instalado. Por padro,
C:\MSSQL7.
2ninstall SQL Server 7.0" permite que voc remova a instalao existente do SQL
Server 7.0
Sistemas /erenciadores de $anco de %ados
Um sistema gerenciador de banco de dados (SGBD) como o SQL Server responsvel
por armazenar dados de forma confivel e permitir fcil recuperao e atualizao
desses dados. Um SGBD relacional armazena dados de forma relacional, isto na
forma de linhas e colunas.
Conceitos 3elacionais
Um registro [record] ou linha [row] um grupo de variveis com tipos de dados
diferentes, que armazenam dados relacionados. Por exemplo, um registro pode conter
os dados relativos a um produto vendido pela empresa, como descrio, cdigo de
identificao, quantidade em estoque.
Um campo [field] ou coluna [column] um dos itens de informao dentro de uma linha
da tabela, como a descrio da informao.
Uma ta6ela [table] um conjunto de linhas (registros) com a mesma estrutura,
armazenados de forma permanente em disco.As tabelas so compostas de linhas(row)
ou registros (record) e colunas(column) ou field(campo).
Um 6anco de dados [database] um conjunto de tabelas que contm dados
relacionados. Por exemplo, 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.
Um 7ndice [index, plural 'indexes' ou 'indices'] um mecanismo que permite pesquisar
rapidamente por linhas em uma tabela, dado o valor de uma determinada coluna (ou
algumas colunas) da tabela. Um 7ndice prim8rio ou chave prim8ria define um valor
nico, que no pode ser repetido em outras linhas da tabela.
Uma consulta [query] um pedido de pesquisa no banco de dados, que permite obter
todo um subconjunto da tabela ou de vrias tabelas, especificando as condies de
seleo.
%es2to* : Cliente;Seridor
Uma aplicao que utiliza bancos de dados composta de trs partes:
+nterface com o usu8rio" responsvel por validar as entradas do usurio, e iniciar
pesquisas de acordo com um pedido do usurio.
Mecanismo de acesso [database engine]" responsvel pela manuteno das
estruturas de dados necessrias em arquivos, pelos detalhes internos do acesso aos
dados, e pela manuteno da integridade dos dados.
Arma*enamento de dados" arquivos que contm os dados em si.
Um banco de dados "desktop" (ou baseado em arquivos) aquele no qual a interface
com o usurio e o mecanismo de acesso ficam no mesmo computador (a estao) e
6
Apostila Microsoft SQL Server 7.0
apenas os arquivos de dados ficam num servidor de rede. Operaes de consulta ou
pesquisa devem passar atravs da rede.
Por exemplo, quando um usurio quer ver uma relao de contas a pagar, mas apenas
em determinado perodo, o sistema deve selecionar alguns registros baseado na data
informada. No ambiente desktop, a estao traz todos os registros atravs da rede,
mesmo os que no so utilizados. O trfego gerado na rede grande, principalmente
quando vrias estaes acessam simultaneamente o servidor.
J num banco de dados cliente/servidor, a interface com o usurio fica na estao e se
comunica remotamente com o mecanismo de acesso, que um sistema gerenciador
de 6anco de dados (SGBD) rodando no servidor. Quando o SGBD recebe um pedido
para selecionar alguns dados, ele acessa localmente os dados no servidor e retorna
apenas o resultado pedido. No caso de uma atualizao, no necessrio nem mesmo
retornar um resultado, apenas informar que a atualizao foi feita.
O diagrama abaixo resume as diferenas entre os ambientes:
Desktop clienteservi!or
O SQL Server, como j foi dito, um sistema de gerenciamento de bancos de dados
cliente/servidor.
7
Apostila Microsoft SQL Server 7.0
2 - Instalao e Configurao
3e!uisitos de <ard7are e Soft7are
4*-es usadas na instalao
Instalando o soft7are de seridor
,erificando a instalao
Instalando o soft7are de cliente
3egistrando um seridor
Soluo de *ro5lemas de instalao
3emoendo o SQL Serer &.)
Objetivos:
- Saber o que necessrio para instalar o SQL Server em um computador;
- Aprender a instalar o SQL Server em um servidor Windows NT e a configurar as
estaes de rede para utiliz-lo.
3e!uisitos de Sistema
Antes de instalar o SQL Server, preciso saber quais os requisitos mnimos e
recomendados para a instalao.
/omputador: ntel e sistemas compatveis, ou DEC Alpha e compatveis:
recomendvel que todos os componentes de hardware escolhidos estejam listados
na HCL (lista de compatibilidade de hardware) do Windows NT.
Mem9ria: Mnimo de 32 Mb. Recomendvel memria adcional, especialmente se o
servidor j estiver processando outras funes alm de banco de dados, ou se forem
usados bancos de dados grandes e replicao
Sistema Operacional" O SQL Server pode ser instalado no Windows NT 4.0 ou
superior, com o Service Pack 3 ou posterior, nas plataformas de hardware citadas
acima, ou no Windows 9x (no NT ele roda como um servio e no 9x como uma
aplicao). O software de cliente, para acesso ao SQL Server nas estaes, pode ser
instalado em Windows NT Server, Windows NT Workstation, Windows 95/98, ou
Windows 16-bits (3.x), MS-DOS, UNX, Macintosh, ou navegadores nternet.
spa!o em disco" Numa instalao mnima, so usados 70 MB, e numa instalao
completa, 160 MB, incluindo todos arquivos de programas, documentao online,
ferramentas de desenvolvimento, e arquivos de exemplo. Uma instalao de um novo
servidor, s com as ferramentas de gerenciamento, exige 70 MB
Soft0are de rede" Numa rede Windows NT, o SQL Server usa o software de rede
integrado. No necessrio software adicional, exceto para conectar a alguns outros
8
Apostila Microsoft SQL Server 7.0
tipos de rede. No caso da Novell Netware, o suporte fornecido pelo protocolo NWLink
do Windows NT.
No recomendado instalar o SQL Server num computador que seja controlador
primrio de domnio (PDC) ou controlador reserva (BDC).
4utras considera-es
Sistemas de ar:uivos" o Windows NT suporta FAT ou NTFS. O SQL Server pode usar
qualquer um dos dois indiferentemente e o tipo de sistema usado no afeta seu
desempenho (exceto quando se usa compresso no NTFS, que reduz o desempenho).
Recomenda-se o NTFS para a instalao do servidor, pelas suas vantagens de
recuperao e segurana..
$ome do Servidor" o nome do computador usado para o SQL Server deve seguir certas
regras:
Nomes no devem ter mais de 128 caracteres.
Nomes no podem conter espaos.
Nomes devem comear com uma letra (maiscula ou minscula) ou sublinhado
('_'). Nomes tambm podem comear com @ ou #, mas como nomes
comeados por essas letras tm um significado especial, no sero usados na
maioria dos casos.
Caracteres no nome depois da primeira letra, podem ser qualquer letra, nmero,
ou os smbolos @, _, #, ou $.
4*-es =sadas na Instalao
Informao de 3egistro
Nessa fase, informe seu nome, nome da empresa e nmero de identificao do
produto.
>scol0a do ti*o da instalao
O SQL Server oferece trs tipos de instalao: Tpica (Typical), Mnima (Minimal), e
Personalizada (Custom).
Instalao t?*ica
Automaticamente instala o SQL Server e utilitrios de cliente com as opes padro de
instalao. So instalados: SQL Server, Book Online, Quick Tour, e What's New. Essa
oo exige cerca de 163 MB de espao em disco, e no instala o softwarede Full Text
Search, as ferramentas de desenvolvimento ou os arquivos de exemplo.
Instalao Com*acta
Essa opo instala o mnimo de arquivos necessrios para operar o SQL Server, e usa
todas as opes padro de instalao. Uma instalao compacta como uma
instalao tpica, exceto que as ferramentas de gerenciamento, os livros on-line, Quick
Tour e What's New no so instalados. Esta opo exige cerca de 74 MB de espao
em disco.
9
Apostila Microsoft SQL Server 7.0
Instalao 1ersonali@ada
Essa opo permite fazer a escolha de quais componentes exatamente sero
instalados, alm de permitir escolher muitas opes diferentes do SQL Server, ao invs
de apenas aceitar automaticamente as opes padro.
Instalao remota
possvel instalar o SQL Server remotamente em outro computador. Nesse caso, voc
pode informar o nome do computador e as localizaes do Windows NT e da unidade
onde o SQL Server ser instalado.
%iretArios
O SQL Server instalado por default no diretrio C:\MSSQL, mas isso pode ser
alterado. O nome do diretrio pode ser longo, mas no deve conter espaos. Dentro
desse diretrio, todos os arquivos possuem nomes curtos (FAT 8.3), mesmo num drive
que suporta nomes longos. Nessa apostila, ao fazermos referncia a /";MSSQL, note
que voc pode ter instalado em um diretrio diferente. Nesse caso, substitua o nome
pelo do seu diretrio.
O SQL cria os seguintes subdiretrios durante a instalao:
BACKUP - Contm arquivos de backup.
BNN - Contm arquivos executveis das ferramentas de administrao do SQL e
arquivos do Help Online, e DLLs.
FTDATA - S instalado se o componente de procura por texto completo [Full-Text
Search] tiver sido instalado. Utilizada para lidar com arquivos de catlogo somente de
texto.
DEVTOOLS - Essa pasta, e suas subpastas, s so criadas, se escolher-se instalar
as ferramentas opcionais de desenvolvimento e exemplos.
HTML - Armazena arquivos HTML e arquivos relacionados.
DATA - Contm os arquivos de dados.
JOBS - Armazena informaes sobre tarefas [Jobs] do SQL Server
NSTALL - Scripts de instalao e arquivos de sadas.
LOG - Contm arquivos de log de erro.
REPLDATA - Diretrio de trabalho usado para replicao.
UPGRADE - Arquivos do assistente de atualizao de verso. No criada se voc
no instalar o assistente de atualizao.
ConBunto de caracteres. ordem de classificao. e com*arao =nicode
O con<unto de caracteres [character set] usado determina os tipos de caractere que o
SQL reconhece nos seus dados e a ordem de classifica!=o [sort order] determina como
o SQL Server compara dados em forma de caractere e como eles so classificados.
Voc deve escolher essas opes durante a instalao. A nica forma de alter-las
posteriormente reinstalando o SQL Server.
Como geralmente so usadas aplicaes Windows para acesso aos dados,
altamente recomendvel usar o conjunto de caracteres SO 8859-1 (Code Page 1252),
tambm chamado Latin-1 ou "ANS". Esses caracteres so os mesmos usados no
Windows. (Esse o conjunto de caracteres default durante a instalao). Existe outros
10
Apostila Microsoft SQL Server 7.0
caracteres como: 850(multilingual) que inclui todos os caracteres da Europa,Amrica
do Norte e Amrica do Sul , 437(US English) que contm o alfabeto completo do
Estados Unidos, 932(Japanese) contm o alfabeto completo do Japo.
A ordem de classificao determina, por exemplo, se o SQL Server considera ou no
as letras acentuadas (, , ) como diferentes dos caracteres no acentuados. Para a
lngua portuguesa, recomendvel usar a ordem "Dictionary order, case-insensitive,
accent-insensitive" [ordem de dicionrio, insensvel ao caso, insensvel a acentos].
Dessa forma, caracteres acentuados e no-acentuados so tratados da mesma forma,
como tambm letras maisculas e minsculas. Por exemplo, ao pesquisar "CAMARA"
no banco de dados, "Cmara" ser considerado igual. (Mas 'c' e '', ou 'C' e '' so
diferentes). Existem outras opes para ordem de classificao como: Dictionary
order,case-insensitive [ordem de dicionrio insensvel ao caso] , neste caso as letras
maisculas so tratadas da mesma forma que as letras minsculas, mas os caracteres
acentuados so tratados de forma diferente dos caracteres no acentuados (essa a
ordem de classificao default durante a instalao).
O SQL Server tem a capacidade de armazenar caracteres ASC padro, e caracteres
Unicode. Os caracteres Unicode so capazes de representar mais de 64000 caracteres
diferentes., embora os caracteres ASC sejam capazes de representar apenas 256
caracteres. Depois de escolher o conjunto de caracteres e a ordem de classificao,
voc deve escolher uma comparao Unicode [Unicode collation], que funciona como
uma ordem de classificao para os caracteres Unicode armazenados no SQL Server.
Uma comparao Unicode consiste de um local e vrios estilos de comparao. Locais,
normalmente nomeados de por pases ou regies culturais, ordenam caracteres de
acordo com o padro naquela rea. O programa de instalao do SQL Server vai
fornecer uma comparao Unicode padro, com base no conjunto de caracteres e
ordem de classificao que voc escolheu. recomendvel que no se altere essa
seleo, pois caso ela seja alterada, a migrao de Unicode para no-Unicode torna-se
mais difcil, e dados Unicode e no-Unicode podem ser ordenados de maneiras
diferentes.
1rotocolos de 3ede
Para cada tipo de cliente de rede, o SQL Server possui uma $et-li6rar), um driver que
suporta comunicao atravs desse tipo de rede. As opes disponveis so:
$amed -ipes #$et6eui(" Suporta o protocolo Netbeui. instalado por default. Voc
no deve remov-lo pois os utilitrios do SQL Server depende desta Net-Library.
Multi-protocol" suporta a conexo atravs de vrios protocolos de rede, suportando
tambm segurana integrada e criptografia (caso a aplicao suporte).
$,Lin1 +-'>S-'" comunica-se com clientes Netware. O SQL Server pode se registrar
como um servio numa rede Netware.
./->+- soc1ets" suporta comunicao atravs de Windows sockets, por exemplo,
com um cliente de nternet.
5an)an 4+$S? Apple.al1 ADS-? D/net" outros tipos de rede.
11
Apostila Microsoft SQL Server 7.0
4*-es de auto-iniciali@ao
Servio um programa executvel que no tem interface com o usurio, mas tem
formas de controlar. Como iniciar e parar o servio determinado.
Definem se os servios MSSQLServer e SQLServerAgent iniciaro automaticamente
com o Windows NT ou sero iniciados manualmente. Essa opo pode ser alterada
depois no Painel de Controle [Control Panel] do Windows NT, opo Servios
[Services].
Para o servio SQLServerAgent, voc pode tambm definir qual o nome de usurio e
senha que ele utiliza para se conectar ao sistema.
6odo de licenciamento
O SQL Server pode ser licenciado por servidor [per server], onde para cada servidor
adquire-se N licenas de acesso, ou por esta!=o [per seat], onde existe uma licena
para cada estao, independentemente do nmero de servidores usados. Durante a
instalao voc pode definir qual dos modos utilizar. Para alterar essas opes
posteriormente, use o cone Licenciamento [Licensing] no Painel de Controle do
Windows NT.
Instalando o soft7are de seridor
Criando uma conta *ara o SQLSerer(gent
Durante a instalao, SETUP pede um nome de conta de usurio e a senha dessa
conta, para uso do servio SQLExecutive. Existem duas maneiras de selecionar o
usurio :
Criar uma conta no Windows NT .
Utilizar a conta Local System do Windows NT. Mas nesse caso nem todos os
recursos do SQLExecutive podem ser usados. Por exemplo:
Ao utilizar Backups poder no se ter acesso ao driver de destino do Banco de Dados.
recomendvel criar uma nova conta de usurio antes de instalar. Essa conta no
deve ser usada por usurios para logar no computador. Ela ser exclusiva para o SQL
Executive.
Para isso, abra o Gerenciador de Usurios [User Manager] do Windows NT, no
grupo/menu de programas Ferramentas Administrativas [Administrative Tools]. Clique
em "su#rio$%ovo usu#rio... [User|New user...]. nforme o nome de usurio
"SQLExecutive" (o nome pode ser qualquer). nforme uma senha e anote-a para usar
mais tarde com o SETUP. Desmarque a opo "O usurio deve alterar a senha no
prximo logon" [The user must change password...] e marque "A senha nunca expira"
[Password never expires].
Depois acrescente esse usurio ao grupo local "Administradores" [Administrators]. Use
o menu Diretivas$Direitos !e usu#rio... [Policies|User rights] para conceder os direitos
de "Logon como servio" [Logon as a service], "Agir como parte do sistema
operacional" [Act as part of the operating system], "Aumentar cotas" [ncrease quotas],
"Substituir um token de nvel de processo" [Replace a process level token] conta
12
Apostila Microsoft SQL Server 7.0
'SQLExecutive' . Como so direitos avanados, marque a opo Exibir direitos
avanados do usurio [Advanced User Rights].
Iniciando o S>C=1
Para instalar o SQL Server 7, efetue logon no Windows NT com uma conta que tenha
privilgios administrativos, coloque o CD de instalao na unidade de CD . Em alguns
segundos, o programa de nstalao do SQL Server ir iniciar automaticamente e
mostrar a tela abaixo:
Nessa tela voc tem diversas opes. Para iniciar a instalao do SQL Server,
selecione "nstall SQL Server 7.0 Components". A prxima tela permite que se
selecione quais componentes se quer instalar.
%ota& Se voc tiver a opo de autoReproduo do CD desativada, voc pode iniciar
manualmente o programa de instalao do SQL Server. Para faz-lo, v para o
diretrio raiz do CD de instalao do SQL Server, e execute o programa "setup.bat".
Ento ser mostrada a tela acima. Se o SQL Server estiver sendo instalado de um
compartilhamento da rede, mude para a pasta do compartilhamento que contem o SQL
Server e execute o arquivo "setup.bat".
%ota& A opo "nstall SQL Server Prerequisites" permite intalar os softwares
necessrios para se poder instalar o SQL Server. Estes so o service pack 4 do
Windows NT e o nternet Explorer 4.01.
13
Apostila Microsoft SQL Server 7.0
Install SQL Serer &.) Com*onents
Nessa tela, selecione "Database Server- Standard Edition" se voc quiser instalar o
SQL Server no Windows NT, ou "Database Server- Desktop Edition" se voc quiser
instalar o SQL Server no windows 9x.
Select Install 6et0od
14
Apostila Microsoft SQL Server 7.0
Se voc quisesse instalar em um computador remoto, clicaria em "Remote nstall" e
informaria as opes do computador remoto. No nosso caso, clique em Next para fazer
a instalao local.
A, aparece a tela de boasa-vindas:
Clique em Next para continuar.
Aparece a tela de "Acordo de Licena de Software" [Software License Agreement]. Se
voc aceita os termos do acordo, clique em Yes para continuar. Voc deve selecionar
Yes se voc quer instalar o SQL Server.
A aparece a tela de informao do usurio. Aqui, entre seu nome e o nome da
companhia. Depois que tiver entrado com essas informaes, clique em Next para
continuar.
A seguir ser pedido o nmero de srie do SQL Server. Este pode ser encontrado no
adesivo amarelo colado na caixa do CD. Depois de entrar com esse nmero, clique em
Next para continuar.
15
Apostila Microsoft SQL Server 7.0
Setu* CD*e
Aqui, voc deve selecionar se voc quer fazer uma instalao mnima, tpica, ou
personalizada. J discutimos sobre cada uma das opes anteriormente. Aqui,
usaremos a instalao personalizada, j que ela fornece a maior flexibilidade quando
instalano o SQL Server. Clique no boto perto de "Custom" para escolher a instalao
personalizada.
Ainda nesta janela, voc deve decidir onde armazenar os arquivos de programa e de
dados do SQL Server. Podem ser instalados no mesmo local, ou em locais diferentes.
Use os botes "Browse" para selecionar outros locais que no sejan os locais padro
selecionados. Use as informaes de espao exigido [Required] e disponvel [Available]
para decidir melhor onde instalar os arquivos.
16
Apostila Microsoft SQL Server 7.0
Feitas as selees, clique em Next para continuar.
Select Com*onents
Aqui, voc deve escolher aqueles componentes do SQL Server que voc quer
carregar. Perceba que no lado esquerdo da tela esto os componentes, e no lado
direito os sub-componentes. Primeiro, voc seleciona um componente clicando dentro
da caixa de verificao, e se houver subcomponentes, voc os escolhe clicando em
caixas de verificao do lado direito. Enquanto voc escolhe os componentes para sua
instalao, perceba que voc pode determinar o tamanho da instalao observando o
17
Apostila Microsoft SQL Server 7.0
espao disponvel em disco na parte inferior da janela. Depois de escolhido o que for
apropriado, clique em Next para continuar.
C0aracter Set; Sort 4rder; =nicode Collation
Aqui voc escolhe tanto o conjunto de caracteres [Character Set] quanto o ordem de
classificao [Sort Order] da caixa de lista correspondente no topo da tela. Conforme j
discutido, recomenda-se deixar o padro para o "Character Set" e pr a "Sort Order"
como "Dictionary order, case-insensitive, accent-insensitive".
Como j citado, a no ser que voc tenhas uma razo realmente boa para mudar essa
opo, deixe a opo padro selecionada. Depois de terminar as suas escolhas, clique
em Next para continuar.
'onsi!era(es importantes& Um conjunto de caracteres pode ser modificado depois
da instalao, mas exige que voc reconstrua todos seus bancos de dados e
recarregue os dados (uma tarefa dispendiosa!). Tambm recomendvel que todos as
instalaes do SQL Server que precisem comunicar-se usem o mesmo conjunto de
caracteres,e ordem de classificao, ou voc poder ter resultados inesperados.
Eet7or2 Li5raries
Nessa janela, de seleo das bibliotecas de rede [Network Libraries], voc deve, para
cada biblioteca de rede que for instalar, entrar com alguns parmetros adicionais, como
18
Apostila Microsoft SQL Server 7.0
a porto em que o servidor vai escutar, para a biblioteca de rede TCP/P, e outras de
acordo com a biblioteca de rede a ser instalada. Como j foi dito, a biblioteca de rede
Named Pipes deve ser selecionada, pois utilizada durante a instalao. Depois da
instalao concluda, ela pode ser retirada, apesar de no ser recomendvel.
Normalmente, as opes padro funcionam bem. Depois de feitas as selees
necessrias, clique em Next para continuar.
Nota: Para mudar uma net-Library depois da isntalao, use o "SQL Server Network
Utility" (SRVNETCN.EXE)
Serices (ccounts
Aqui voc pode usar a mesma conta para os dois servios (SQLServer e
SQLServerAgent), iniciando automaticamente o servio SQL Server. Para isso,
selecione o primeiro boto [Use the same account for....]. Caso voc queira usar uma
conta diferente para cada servio, selecione "Customize the settings for each service" e
os botes SQL Server e SQL Server Agent se tornaro ativos. A as opes do servio
[Service Settings] sero referentes ao servio selecionado.
Se foi criada a conta do usurio para uso do SQLServerAgent, informe o nome do
usurio, a senha e confirme a senha (o default o nome de usurio conectado
atualmente). nforme tambm o domnio do NT Server onde essa conta existe. Caso
no tenha criado a conta marque a opo nstall to log on as Local System account (
uma conta predefinida do Windows NT).
%ota& Caso se escolha usar a conta de sistema local, o SQL Server no ser capaz de
se comunicar com outros servidores.
Clique em Next para continuar.
A seguir aparece a tela de seleo do modo de licenciamento [Choose Licensing
Mode]. Escolha o licenciamento Per Server ou Per Seat, levando em conta o que foi
discutido anteriormente. Clique em Next para continuar.
19
Apostila Microsoft SQL Server 7.0
FCo*Ding FilesF e FS>C=1 is...F
...
O SETUP vai copiar os arquivos necessrios para o diretrio de instalao, reindexar
as tabelas de sistema, e definir a configurao inicial do SQL Server. Esse processo
leva cerca de 10-15 minutos, dependendo da velocidade do seu computador.
Aps esse processo, o SQL Server ter sido instalado e estar pronto para usar. As
ferramentas do SQL Server estaro disponveis no submenu "Microsoft SQL Server
7.0", dentro do menu niciar|Programas [Start|Programs] do Windows NT 4.0. Voc
precisar de iniciar seus servios antes de poder conectar-se pela primeira vez ao
servidor SQL Server.
Depois que o SQL Server estiver instalado, h alguns passos a serem completados
antes de se poder dizer que o SQL Server est pronto para rodar. Alguns desses
passos devem ser executados apenas uma vez para se assegurar que o SQL Server
foi instalado corretamente e para prepar-lo para rodar corretamente no futuro. Aqui
vamos citar esses passos. Outros passos, que incluem configuraes, ajustes e
otimizao, estabelecimento de Ds para login e Ds de usurios do banco de dados, e
claro, a criao de novos bancos de dados, sero discutidos em outras sees.
Nesta seo o objetivo ser verificar se o SQL Server foi instalado corretamente.
,erificando se o SQL Serer foi instalado corretamente
Depois que o SQL Server estiver instalado, voc deve gastar alguns minutos para
verificar que o mesmo foi instalado e est rodando adequadamente. Use os passos
abaixo para verificar a instalao.
20
Apostila Microsoft SQL Server 7.0
,erifi!ue se as *astas de *rogramas e dados foram criadas
Use o NT Explorer (ou Windows Explorer) para verificar que os arquivos de programas
do SQL Server e os arquivos de dados foram instalados nas pastas que voc
especificou durante o processo de instalao.
Cada pasta deve conter pastas adicionais de acordo com o que foi dito anteriormente
(em Diretrios). Verifique se todas as subpastas tanto nas pastas de programas quanto
de arquivos existem.
Deve-se verificar o contedo da subpasta /data, que est abaixo da pasta de dados
que voc especificou. a que o SQL Server cria e armazena vrios bancos de dados
padro e logs de transaes. A pasta /data deve se parecer com a figura abaixo.
Os arquivos so:
Distmdl.mdf e Distmdl.ldf (apenas se obejetos opcionais de replicao foream
instalados.
Northwnd.mdf e Northwnd.ldf
Master.mdf e Mastlogldf
Model.mdf e Modellog.ldf
Msdbsdata.mdf e Msdbblog.ldf
Pubs.mdf e Pubs_log.ldf
Tempdb.ldf e Templog.ldf
21
Apostila Microsoft SQL Server 7.0
,erificar !ue todas as ferramentas de gerenciamento do SQL Serer esto
instaladas
Verifique se as ferramentas de gerenciamento do SQL Server que voc especificou
durante a instalao foram instaladas. O modo mais fcil de fazer isso clicando em
niciar | Programas | Microsoft SQL Sever 7.0. A voc ver um menu com a listagem
de todos os programas, utilitrios e documentao online que voc especificou durante
a instalao.
,erifi!ue !ue os serios do SQL Serer esto carregados e e:ecutando
Quando voc instalou o SQL Server, seus dois servios principais - SQLServerAgent e
MSSQLServer - foram instalados e configurados para iniciar automaticamente
(assumindo que voc quis inicializao automtica). Quando o SQL Server instalado
pela primeira vez, os dois servios no so iniciados automaticamente at que o NT
Server seja reiniciado.
%ota& Veja mais sobre os servios na seo do Service Manager.
'onferin!o se os !ois servios foram instala!os, e manualmente inician!o)os
pela primeira ve*
1. Abra o Painel de Controle do NT, e ento d um duplo clique no cone Servios.
Aparece ento a caixa de dilogo de Servios.
2. Percorra a lista de servios at que voc veja pela primeira vez o servio
MSSQLServer. Se voc no reinicializou o computador desde que instalou o
SQL Server, ele deve ter um Estado [Status] em branco. E em nicializao
[Startup], deve estar configurado como automtico.
3. Para iniciar manualmente o servio, clique nele uma vez para que o mesmo
fique selecionado, e ento clique no boto niciar [Start]. Depois de uns 30
segundos, o Estado [Status] vai mudar para niciado [Started] e o servio est
agora sendo executado.
4. Percorra a lista um pouco mais at que voc veja o servio SQLServerAgent, e
ele tambm deve estar com o Estado em branco e a nicializao como
Automtica.
5. Para inici-lo manualmente, faa da mesma maneira que foi feito com o servio
MSSQLServer, mas agora selecionando o servio SQLServerAgent. Depois de
22
Apostila Microsoft SQL Server 7.0
uns 15 segundos, o Estado [Status] vai mudar para niciado [Started] e o servio
est agora sendo executado.
6. Se tudo estiver correto, feche a caixa de dilogo de Servios e o Painel de
Controle.
E se os servios no estiverem a? Se os servios no estiverem listados, sua
instalao do SQL Server falhou e voc vai ter que reinstal-lo, mas isso raro.
Voc pode ter notado que na coluna nicializao [Startup], estava a a palavra Manual,
ao invs de Automtico. Se voc se vir nessa situao, voc provavelmente esqueceu
de escolher a opo auto-iniciar [Auto-start] quando voc instalou o SQL Server. bem
fcil corrigir isso.
+scol,en!o auto)iniciar
1. Um de cada vez, selecione cada um dos servios do SQL Server na caixa de
dilogo de Servios e clique no boto nicializao [Startup]. sso mostra a janela
abaixo.
2. Nessa janela, selecione Automtico como o tipo de nicializao [Startup type].
3. Clique em OK, e voc retornar para a caixa de dilogo de Servios.
4. Repita os passos 1 a 3 para o outro servio do SQL Server.
5. O ltimo passo iniciar manualmente os servios como descrito anteriormente.
Se os servios no iniciarem conforme descrito, e se voc receber uma
mensagem de erro, veja a soluo de problemas de instalao para tentar
resolver o problema.
,erifi!ue !ue ocG consegue se logar no SQL Serer
A ltima maneira de verificar que o SQL Server foi instalado corretamente tentar se
logar e executar uma pequena consulta. Se voc puder executar essas duas tarefas
com sucesso, voc saber que o SQL Server foi instalado sem problemas.
Aqui vamos demonstrar como se logar ao servidor usando a ferramenta SQL, que o
programa baseado em linha de comando fornecido com o SQL Server, utilizado para
23
Apostila Microsoft SQL Server 7.0
executar comandos Transact-SQL. Embora haja outros programas ou utilitrios do SQL
Server que voc poderia usar ao invs do SQL, ele recomendado para este teste
porque h menos coisas para dar errado quando da execuo do teste.
+-ecute e se logue ao ISQL, e ro!e uma pe.uena consulta para verificar .ue o
SQL Server foi instala!o corretamente.
1. V para o prompt de comando do NT.
2. No prompt de comando, escreva o seguinte e pressione Enter:
isql /Usa /P
3. Se tudo estiver funcionando corretamente, o prompt do SQL dever aparecer ao
invs do prompt de comando. Ele se parece com isso:
1>
4. Escreva a seguinte consulta para testar se o SQL Server vai responder.
Pressione Enter depois de cada linha.
select @@servername
go
5. Assumindo que tudo esteja funcionando, o nome do seu servidor deve ser
mostrado no prompt do SQL. A resposta deve se parecer (o nmero e nome do
servidor vai variar) com isso:
PDC
(1 row affected)
1>
6. Para sair do programa SQL, digite e-it no prompt do SQL e pressione Enter, e
voc retornar para o prompt de comando do NT.
Se tudo tiver ocorrido como descrito, voc sabe que o SQL Server foi instalado
corretamente e est funcionando adequadamente. Se voc encontrar problemas ou
mensagens de erro, veja a soluo de problemas de instalao para tentar resolver o
problema.
Instalando o soft7are de cliente
Quando voc j tiver instalado o SQL Server, hora de pensar em instalar as
ferramentas de gerenciamento nas estaes de trabalho que iro ser utilizadas para
administrar remotamente o SQL Server. Tambm pode ser interessante instalar as
ferramentas de gerenciamento nas estaes de trabalho dos desenvolvedores.
As ferramentas de gerenciameno so as mesmas que voc teve a chance de instalar
quando da instalao do SQL Server (afinal, mesmo na mquina onde o servidor est
instalado, vocv precisa de software de cliente para conectar ao servidor). A vantagem
de instalar as ferramentas de gerenciamento em outras mquinas que voc pode
gerenciar remotamente o SQL Server de virtualmente todos computadores, no apenas
do servidor fsico em que o SQL Server est sendo executado.
As ferramentas de gerenciamento do SQL Server podem ser instaladas no NT Server,
NT Workstation, e Windows 9x. Ao contrrio de algumas das ferramentas de
gerenciamento includas no SQL Server 6.5, as ferramentas de gerenciamento do sQL
Server 7.0 no podem ser executadas sob o Windows 3.x ou DOS.
Aqui descreveremos as ferramentas de gerenciamento, como instalar e utiliz-las.
Todas as ferramentas de cliente aqui descritas so as mesmas descritas em
24
Apostila Microsoft SQL Server 7.0
Ferramentas de gerenciamento, mas algumas delas, especificamente o Service
Manager e o Server Network Utility s so instaladas no servidor. Onde se vir escrito
"Ferramentas de gerenciamento" nesta seo, subentende-se que se est citando as
ferramentas de cliente (que nada mais so do que as ferramentas de gerenciamento
instaladas em um cliente).
%ota& Qualquer das ferramentas de gerenciamento s podem ser utilizadas por um
usurio que tenha as permisses necessrias para tal tarefa.
Ferramentas de cliente
O SQL Server inclui uma poro de ferramentas de administrao para serem
instaladas no cliente, que podem ser usadas para gerenciar o SQL Server. Durante o
processo de instalao, voc pode instalar quantas ferramentas de gerenciamento
voc achar necessrio. O SQL Server oferece estas opes:
SQL Server +nterprise Manager& Se voc quer administrar remotamente o
SQL Server, ento a instalao do Enterprise Manager necessria. Este
programa permite ao DBA executar virtualmente qualquer tarefa administrativa
no SQL Server.
SQL Server /rofiler& Esta ferramenta usada para monitorar e registrar a
atividade dos bancos de dados entre o SQL Server e os clientes. Apenas instale
esta ferramenta nas mquinas que executaro esta tarefa.
SQL Server Quer0 Anal0*er& Esta ferramenta utilizada para enviar
manualmente comandos Transact-SQL e procedimentos armazenados para o
mecanismo de banco de dados do SQL Server. Voc provavelmente instalar
esta ferramenta na maioria, talvez em todas as mquinas de gerenciamento
remoto.
'lient Diagnostic "tilities& Esta ferramenta utilizada para verificar qual DB-
Library est instalad em um cliente, e para configurar as ferramentas de
gerenciamento para se comunicar com o SQL Server em uma rede.
MS D1' 'lient Support& A ferramenta de Coordenao de Transaes
Distribudas (DTC) da Microsoft fornece suporte aos clientes DTC. Apenas
necessita ser instalada em clientes que executem uma aplicao do SQL Server
que exigam o DTC.
Development files& Esses arquivos so necessrios para desenvolvedores
OLE-DB para a criao de programas utilizando ODBC, DB-Library, ODS, SQL-
DMO, Embedded SQL for C, e MS DTC. Geralmente, apenas desenvolvedores
SQL Server precisaro desses arquivos.
Sample files& Estes arquivos so arquivos de exemplo feitos para os
desenvolvedores analisarem e aprenderem com eles. Assim como os arquivos
de desnvolvimento, apenas desenvolvedores precisaro deles.
2eplication 'onflict 2esolution 1ool& Utilizada para ajudar a resolver conflitos
de replicao entre dois servidores SQL Server. Voc apenas precisa desta
ferramenta se voc implementar replicao em seus servidores.
Livros online& Esta uma documentao completa e comprensiva do SQL
Server, e interessante instal-la em todo cliente. Ocupa cerca de 15 MB de
25
Apostila Microsoft SQL Server 7.0
espao no disco, mas vale a pena. Se voc no quiser ocupar todo esse espao
em um cliente, voc tambm pode instalar os livros online em um
compartilhamento de rede, e ento conectar a ele quando necessrio. Voc
tambm tem a opo de execut-lo a partir de um drive de CD instalado
localmente.
No importa quais das opes acima voc decidir instalar, as seguintes ferramentas e
arquivos so instalados automaticamente. eles incluem bcp, isql, osql, ODBC, e DB-
Library. Falaremos deles mais tarde.
Soft7are e <ard7are necessHrio *ara a instalao do soft7are de cliente
'/"& No mnimo um Alpha AXP ou um ntel de 32 bits (80486). Recomenda-se
um Pentium 200 ou mais veloz.
2AM& No mnimo 32 MB. Recomenda-se 32 MB no Windows 9x, e 64 MB ou
mais no Windows NT.
Monitor e placa !e v3!eo& Qualquer placa de vdeo que esteja instalada
corretamente funcionar. Recomenda-se pelo menos um monitor de 15" com
resoluo de 1024x768.
+spao em !isco& 73 MB para a instalao de todas as ferramentas de
gerenciamento. Como provavelmente no sero instaladas todas elas, pode ser
suficiente menos espao.
Drive !e 'D)24M& Apenas exigido se a instalao estiver sendo feita a partir de
um CD.
/laca !e re!e: Qualquer placa de rede que funcione no sistema operacional
ser aceita. Recomenda-se uma placa de 10 ou 100 Mbits se voc estiver
acessando um ou mais servidores SQL Server pesadamente a partir da estao
trabalho.
Sistema operacional& No mnimo NT Server ou Workstation 4.0 (com Service
Pack 3), ou Windows 9x. Recomenda-se usar sempre o Service Pack mais
recente em qualquer desses sistemas.
%e onde instalar as ferramentas de gerenciamento
As ferramentas de gerenciamento do SQL Server podem ser instaladas a partir dos
seguintes locais.
'D !e instalao !o SQL Server& As ferramentas de grenciamento podem ser
instaladas diretamente do CD executando-se o programa de instalao do SQL
Server. Este o mesmo programa utilizado para instalar o SQL Server.
'ompartil,amento !e re!e: O meio mais flexvel de se instalar as ferramentas
de gerenciamento instal-las a partir de um compartilhamento na sua rede. O
processo de instalao se inicia quando se executa o arquivo setup.bat, o
mesmo utilizado para instalar o SQL Server. Se voc pretende isntalar diversas
cpias das ferramentas de administrao em vrias mquinas, este o meio
mais eficiente.
26
Apostila Microsoft SQL Server 7.0
Como instalar as ferramentas de gerenciamento
A instalao das ferramentas de gerenciamento do SQL Server um processo simples,
Na verdade, os passos exigidos para a instalao das ferramentas de gerenciamento
so praticamente os mesmos necessrios para instalar o SQL Server. sso significa
que voc j conhece o processo. Abaixo listam-se os passos necessrios para a
instalao das ferramentas de gerenciamento do SQL Server em um cliente.
1. Se voc estiver instalando as ferramentas de cliente no Windows NT, voc deve
efetuar logon com uma conta que tenha privilgios administrativos. Se voc
estiver instalando-as no Windows 9x, voc pode efetuar logon com qualquer
conta de usurio.
2. Certifique-se de que no h nenhum outro programa sendo executado, antes de
iniciar o processo de instalao. Se houver, feche-os antes de continuar.
Confirme tambm se h alguma verso antiga das ferramentas de
gerenciamento instaladas na mquina. Se houver, remova-as antes de instalar a
nova verso.
3. Se voc estiver fazendo a instalao a partir de um CD, apenas insira o CD do
SQL Server no drive de CD. Em alguns segundos, a tela do programa de
instalao do SQL Server vai surgir automaticamente. Caso voc no esteja
instalando de um CD, execute o arquivo setup.5at do compartilhamento de rede
onde esto os arquivos de instalao. Aparece a tela abaixo.
27
Apostila Microsoft SQL Server 7.0
Nesta tela, voc tem uma poro de opes. Selecione nstall SQL Server 7.0
Components.
4. Na prxima tela, escolha Database Server- Desktop Edition.
5. Depois voc deve escolher se vai fazer uma instalao para a mquina local ou
para uma mquina remota. Supondo que voc esteja instalando as ferramentas
de gerenciamento estando fisicamente na mquina em que elas sero
executadas, escolha Local nstall.
6. Depois de passar por estas telas introdutrias, aparece a primeira tela da
instalao do SQL Server.
7. O programa de instalao um assistente que te encaminha pelo processo de
instalao. Embora o processo seja o mesmo que o da instalao do SQL
Server, voc no repetir exatamente os mesmos passos. Aqui, voc quer
instalar apenas as ferramentas de gerenciamento. Clique em Next para
continuar.
8. Aparece a tela do acordo de licena de software. Clique em Yes para continuar.
9. Agora, voc deve digitar seu nome e o nome da sua organizao, e a seguir o
nmero de srie do produto. Clique em Next para continuar.
10. Agora, aparece a tela de tipo da instalao [Setup Type].
28
Apostila Microsoft SQL Server 7.0
11. Para instalar apenas as ferramentas administrativas, escolha Custom e clique
em Next. Antes de prosseguir, verifique se as pastas escolhidas esto corretas,
e se voc tem espao em disco suficiente.Se no, mude as pastas ou discos,
clicando no boto Browse.
12. Na tela de seleo de componentes, voc deve selecionar os componentes que
voc deseja instalar e desmarcar os que voc no instalar.
29
Apostila Microsoft SQL Server 7.0
Geralmente, voc desmarcar Server Components (afinal, voc s quer as
ferramentas de administrao, e no o SQL Server). Selecione Client
Connectivity, e Management Tools. Do lado direito da tela, voc pode desmarcar
componentes individuais das mesmas. Depois que voc escolher o que achar
adequado, clique em Next para continuar.
13. Finalmente, a instalao vai comear. Lhe mostrada a tela final, onde voc
pode conferir as opes que voc selecionou. Se estiver satisfeito com as
selees feitas, clique em Next para comear a instalao. Caso contrrio,
clique em Back, e altere o que achar necessrio.
Depois que voc clica em Next, os arquivos so copiados para seu computador.
Quando o processo de instalao finalizar, voc volta apara a primeira tela do
programa de instalao. Para sair dessa tela, clique em Exit.
Quando as ferramentas de gerenciamento j estivrem instaladas, voc pode testar se a
instalao foi bem-sucedida. Veja, se em niciar | Programas | Microsoft SQL Server
7.0, as ferramentas que voc selecionou tem seus atalhos. Para verificar se as
ferramentas funcionam, escolha alguma e a execute, vendo se voc pode se conectar
a um servidor remoto. Claro, para que este teste funcione, voc deve ter uma conta
legal e as permisses necessrias no servidor SQL Server. Se voc puder fazer uma
conexo com o servidor SQL Server, voc confirma que as ferramentas foram
instaladas com sucesso.
Na maioria dos casso, assim que as ferramentas de gerenciamento forem instaladas,
voc ser capaz de us-las imediatamente sem qualquer configurao adicional. Mas
se a sua rede no for uma rede Microsoft pura, ento voc pode ter que mudar
algumas opes de configurao usando a ferramenta de configurao de clientes
[Client Network Utility]. Veja na seo Client Network Utility como utilizar essa
ferramenta.
3egistrando um seridor
Quando voc tiver certeza que o SQL Server est instalado e voc pode se conectar a
ele (confira em verificando se voc pode se logar no SQL Server), a prxima etapa se
registrar com o SQL Enterprise Manager. Enterprise Manager o principal programa
usado para gerenciar o SQL Server (veja mais sobre o SQL Enterprise Manager). Ele
tem a capacidade de no apenas gerenciar um servidor SQL Server local, mas tambm
servidores mltiplos conectados em qualquer lugar na mesm rede fsica. Mas antes de
tornar o SQL Enterprise Manager capaz de fazer isso, voc deve lhe contar sobre os
diversos servidores SQL Server que voc possa ter, e isso feito atravs do processo
de registrar-se. Quando um servidor SQL Server est registrado com uma cpia do
Enterprise Manager, essa cpia do SQL Enterprise Manager capaz de gerenciar
aquele servidor SQL Server, no importando onde ele esteja na ree.
%ota& Por padro, para administrar um servidor, voc deve ser membro do grupo local
Administradores no computador onde o SQL Server foi instalado. Administradores de
domnio do Windows NT so membros do grupo local Administradores.
30
Apostila Microsoft SQL Server 7.0
O registro um processo que precisa ser feito apenas uma vez, embora voc possa
desresgistrar e registrar novamente queal servidor SQL Server quantas vezes voc
quiser. As informaes de registro do SQL Server so mantidas no registro do
Windows NT. O Enterprise Manager usa essa informao a cada vez que voc se
conecta com um servidor SQL Server registrado.
H duas maneiras de registar um servidor SQL Server usando o Enterprise Manager:
manualmente, ou com o Assitente de Registro [Registration Wizard]. Aqui olharemos os
dois mtodos, comeando pelo Assistente de Registro.
%ota: Diversas cpias do Enterprise Manager podem estar distribudas em diversos
computadores ao longo da empresa. sso pode fazer com que seja necessrio voc
registrar diversas vezes o(s) servidor(es) que voc quer administrar. sso ocorre pois o
registro feito com o Enterprise Manager e portanto, em cada cpia do Enterprise
Manager devem ser registrados os servidores que se deseja administrar.
3egistrando um seridor utili@ando o 3egistration Ii@ard
Antes de tentar resgistrar um servidor SQL Server com o SQL Enterprise Manager,
confirme que o SQL Server est instalado e rodando adequadamente (ver em
verificando a instalao). Se ele no estiver instalado e rodando corretamente, voc
no ser capaz de registr-lo com o SQL Enterprise Manager.
31
Apostila Microsoft SQL Server 7.0
3egistrando um seridor SQL Serer com o SQL >nter*rise 6anager *ela *rimeira e@.
1. A partir do Grupo de programas do Microsoft SQL Server (niciar | Programas |
Microsoft SQL Server 7.0 | Enterprise Manager), execute o SQL Server
32
Apostila Microsoft SQL Server 7.0
Entreprise Manager. sso inicia o Microsoft Management Console (MMC).
2. Agora voc est pronto para iniciar o assistnte de registro [Registration Wizard].
Para inici-lo, clique com o boto direito em Microsoft SQL Servers, que aparece
abaixo de Console Root. Aparecem ento diversas opes, e voc quer registrar
um servidor [New SQL Server Registration...]
3. Depois de escolher a opo New SQL Server Registration, aparece a primeira
tela do Assistente de Registro [Registration Wizard]. Clique em Next para
continuar.
4. A seguir, o assistente te pde para selecionar qual servidor SQL Server que voc
quer registrar, como na figura abaixo:
Os servidores SQL Server disponveis aparecem no lado esquerdo da tela. Se o
seu servidor no estiver sendo mostrado, talvez ele no tenha sido instalado
adequadamente, ou os dois servios do SQL Server podem no estar iniciados
(ver em verificando a instalao se eles esto iniciados). Supondo que seu
servidor esteja listado (local o servidor SQL Server local), clique no servidor
que voc quer registrar e clique em Add. sso move o servidor SQL Server para
o lado direito da janela, embaixo de Servidores Adicionados [Added Servers].
Voc pode registrar mais de um servidor de uma vez se voc quiser.
5. Depois que voc tiver adicionado os servidores SQL Server desejados, clique
em Next, e vai aparecer uma janela perguntando a voc qual opo de conexo
que voc quer utilizar para se conectar ao SQL Server.
Voc tem duas opes: autenticao do Windows NT ou autenticao do SQL
Server. Se esta a primeira instalao do SQL Server na sua organizao,
escolha por agora autenticao do SQL Server; isso pode ser mudado mais
tarde se voc mudar seu modo de segurana. Mas se no for a primeira
instalao do SQL
Servre, escolha o
modo de
segurana que
os outros
servidores
SQL Server
estiverem
utilizando. O
exemplo a
seguir supe
que voc
tenha
escolhido a
autenticao
33
Apostila Microsoft SQL Server 7.0
do SQL Server [SQL Server authentication]. Depois de feita sua escolha, clique
em Next.
6. A seguir, o assistente quer que voc escolha se o SQL Enterprise Manager se
lembre do seu nome de login e senha.
A primeira opo, "Efetuar logon automaticamente usando minha informao de
conta do SQL Server" [Login Automatically Using My SQL Server Account
nformation], pode ser escolhida para que o Enterprise Manager se lembre de sua
senha e nome de login. Assim, voc no precisa de, a cada vez que iniciar o
Enterprise Manager, ficar digitando essa informao novamente.
Se voc no quiser que o Enterprise Manager lembre-se de seu login e senha,
escolha a opo "Perguntar a informao da conta do SQL Server quando se
conectar" [Prompt for the SQL Server account information when connecting].
Se voc escolher a primeira opo, digite SA como nome de login, e deixe a senha
[Password] em branco. Voc deve usar esse nome de login e senha quando registra
pela primeira vez um novo servidor SQL Server poque voc ainda no atribuiu
conta SA uma senha, nem criou qualquer outro nome de login. Clique em Next para
continuar.
7. Voc deve adicionar um servidor SQL Server a um grupo de servidores.
Nessa tela, voc pode adicionar ao grupo padro SQL Server Group, ou a um outro
grupo preexistente (selecionando a primeira opo). Voc pode ainda criar um novo
grupo (selecionando a segunda opo [Create a new top-level SQL Server group to
add the SQL Server(s) to.]), e seu servidor ser adicionado a esse grupo. Grupos de
servidores so usados para agrupar servidores SQL Server de usos semelhantes,
para fins de aministrao, e so completamente opcionais. Tudo que os grupos de
servidores fazem agrupar grupos de servidores semelhantes para visualizao no
Enterprise Manager. Escolha a opo mais adequada e clique em Next para
continuar.
34
Apostila Microsoft SQL Server 7.0
8. O assitente de registro mostra sua ltima tela.
Se voc quiser fazer quaisquer mudanas, voc pode faz-las clicando no boto
Back. Ou, se tudo estiver conforme voc queria, clique em Finish para concluir.
A caixa de dilogo de registro do SQL Server aparece, e voc recebe uma
mensagem dizendo se o registro foi bem-sucedido. Se voc receber uma
mensagm de erro, veja a seo de soluo de problemas.
9. Clique em Close, e volta-se para o SQL Entrprise Manager. Embaixo de Console
Root, voc ver o cabealho Microsoft SQL Servers. Clique no sinal de mais
perto deste cabealho, e um ou mais grupos de servidores sero mostrados.
O(s) servidor(es) que voc acabou de registrar aparecero dentro do grupo que
voc definiu para ele(s). Supondo que voc no tenha criado nenhum grupo e
tenha adicionado-os ao grupo padro, o nico grupo listado ser o padro SQL
Server Group. Para ver o servidor que voc acabou de registrar, clique no sinal
de mais perto do grupo de servidores em que voc adicionou o(s) servidor(es).
Se o servidor no aparecer dentro de nenhum grupo de servidores, ele no foi
registrado corretamente com o Enterprise Manager.
3egistrando um seridor manualmente
Se voc no quiser usar o Assistente de Registro, voc no precisa.
Registrando um servidor manualmente com o Enterprise Manager
35
Apostila Microsoft SQL Server 7.0
1. O primeiro passo desligar o Assistente de registro. Depois que ele estiver
desligado, ento dessa vez em diante, voc ser capaz de registrar
manualmente qualquer servidor com o Enterprise Manager. Para desligar o
assistente de registro, voc deve primeiro inici-lo clicando com o boto direito
no texto Microsoft SQL Server, ou em qualquer grupo de servidores, ou em
qualquer servidor registrado, e ento selecionar a opo Novo registro de
servidor [New SQL Server Registration]. sso mostra a primeira tela do
Assistente de registro.
2. Para deslig-lo, selecione a opo "A partir de agora eu quero realizar essa
tarefa sem usar um assistente" [From now on want to perform this task without
using a wizard]. Clique em Next e na outra janela em Cancel. sso fechar o
assistente de registro e tambm o impedir de ser executado a cada vez que
voc for registrar um servidor.
3. Agora, para regsitrar um servidor manualmente, clique com o boto direito no
texto Microsoft SQL Server, ou em qualquer grupo de servidores, ou em
qualquer servidor registrado, e ento selecionar a opo Novo registro de
servidor [New SQL Server Registration]. sso mostra a caixa de dilogo
"Propriedades do servidor SQL registrado" [Registered SQL Server Properties]
36
Apostila Microsoft SQL Server 7.0
4. Complete essa janela usando o mesmo tipo de informaes que foram descritas
quando descrevemos o Assistente de registro. Uma diferena entre o Assistente
de registro e essa caixa de dilogo so as trs opes na parte de baixo da
janela.
Display SQL Server State in console - Esta opo, se selecionada, faz com que
o Entrprise Manager regularmente interrogue o servio MSSQLServer para
saber se ele est rodando, e mostra uma luz verde no cone no console quando
ele est rodando, e uma luz vermelha se o servio no estiver sendo executado.
Show System Databases and System Objects - Se esta opo for escolhida,
todos os bancos de dados e objetos do sistema sero mostrados no console.
Caso no seja escolhida, os mesmos no aparecem no console.
Automaically Start SQL Server when connecting - Assumindo que o servio
MSSQLServer no esteja ajustado para iniciar automaticamente, esta opo
pode ser usada para iniciar automaticamente este servio quando da primeira
conexo com o servidor.
Por padro, as trs opes esto escolhidas agora, e so escolhidas
automaticamente quando se usa o assistente de registro. Voc pode fazer
qualquer escolha que achar adequada. Quando voc tiver completado suas
escolhas, voc pode registrar o servidor clicando em OK.
37
Apostila Microsoft SQL Server 7.0
Como editar as informa-es de registro do seridor SQL Serer
s vezes, voc pode precisar de editar as configuraes de registro do SQL Server,
como quando voc mudar o login ou a senha que voc usou originalmente para
registrar o servidor.
Fa@endo mudanas em um seridor registrado
1. No Enterprise Manager, selecione o servidor cujo registro voc quer alterar.
2. Clique com o boto direito no nome do servidor e ento escolha Edit SQL Server
Registration no menu. sso mostra a caixa de dilogo Registered SQL Server
Properties, que foi mostrada na figura acima.
3. Faa quaisquer mudanas necessrias. Quando terminar, clique em OK para
salvar essas configuraes e voltar para o Enterprise Manager
Como cancelar o registro de um seridor
De tempos em tempos, pode ser necessrio cancelar o registro de um servidor, no
Enterprise Manager. Para isso, faa:
1. No Enterprise Manager, selecione o nome do servidor cujo registro voc quer
cancelado.
2. Clique com o boto direito em seu nome, e selecione Delete do menu.
3. Uma caixa de confirmao aparece, pedindo-lhe para clicar em Yes para
remover o servidor, ou No para cancelar a operao. Clique em Yes para
cancelar o registro do servidor.
/erenciando gru*os de seridores
Embora voc possa criar novos grupos a partir do assistente de registro, ou a partir da
caixa de dilogo Registered SQL Server Properties, voc tambm pode crirar,
renomear e excluir grupos de servidores manualmente. Voc tambm pode mudar um
servidor de um grupo para outro se voc quiser. Para gerenciar os grupos de
servidores, faa o seguinte:
38
Apostila Microsoft SQL Server 7.0
1. A partir do Enterprise Manager, clique no sinal de mais perto do cabealho
Microsoft SQL Servers. sso mostra todos os grupos de servidores atualmente
embaixo dele. Clique com o boto direito no nome Microsoft SQL Server, ou em
qualquer grupo de servidores, e ento selecione Novo grupo de servidores [New
SQL Server Group] do menu. Aparece a caixa de dilogo de Grupos de
Servidores.
2. Para criar um novo grupo de servidores, entre com o nome do novo grupo na
caixa Name e clique em OK. sso far esse grupo automaticamente um grupo de
servidores do nvel mais alto. Se voc quiser, voc pode escolher criar um grupo
como subgrupo de algum outro grupo, escolhendo a opo "Sub-grupo de" [Sub-
group of:]. Na maioria dos casos, grupos de servidores do mais alto nvel so
mais do que suficientes.
3. Se voc quiser remover um grupo de servidores, clique com o boto direito no
nome do grupo de servidores que voc quer remover, e ento selecione Delete
do menu. O grupo removido imediatamente sem nenhum aviso.
(tri5uindo uma sen0a ao (dministrador do Sistema 8S(9
Se voc estiver usando o mtodo de autenticao do NT, voc no precisa executar
este passo porque no se exige que voc efetue logon no servidor SQL Server
diretamente usando um nome de login [login D].
Mas se voc estiver usando o mtodo de autenticao do SQL Server, uma das
primeiras coisas que voc vai querer fazer definir uma senha para a conta SA. O SA
tem a capacidade de executar qualquer funo no SQL Server, e voc deve evitar que
usurios no autorizados efetuem logon no servidor SQL Server.
Colocando uma senha para a conta SA
1. Do Enterprise Manager, abra a pasta que representa o servidor SQL Server,
cuja senha do SA precisa ser alterada.
2. Abra a pasta Security [Segurana], e clique uma vez em Logins, e ento no lado
direito da janela, os logins atualmente disponveis so exibidos.
39
Apostila Microsoft SQL Server 7.0
3. Clique com o boto direito no nome de login SA, e selecione Propriedades
[Properties] no menu; a caixa de dilogo Propriedades aparece.
4. Para adicionar uma senha paa a conta SA, digite-a na caixa identificada por
Password. Voc vai notar que a caixa da senha est preenchida com asteriscos.
sso no significa nada, j que atualmente no h senha para o login SA.
Escolha uma senha que no seja fcil de adivinhar.
5. Depois que voc tiver colocado uma senha, clique em OK. sso salvar a senha
e fechar a caixa de dilogo. Agora voc precisa de voltar ao registro desse
servidor e edit-lo para indicar a nova senha da conta SA. (para editar o registro
do servidor, faa como indicado em Registrando um servidor manualmente)
O restante desta tela de Propriedades ser visto no decorrer do curso.
Agora, o SQL Server est funcionando e pronto para ser configurado para qualquer
aplicao na qual ele esteja sendo utilizado.
Soluo de *ro5lemas de instalao
Se voc seguiu corretamente os avisos e instrues at aqui, voc no deve encontrar
problemas na instalao do SQL Server. Quase todos os prbblemas que voc
encontrar so porque voc deixou passar uma etapa, ou cometeu algum engano
durante o processo de instalao. Aqui, vamos comentar alguns prblemas comuns de
instalao e como corrig-los.
Como identificar *ro5lemas na instalao do SQL Serer
H muitas maneiras de identificar que sua instalao do SQL Server falhou. Entre eles:
Mensagens de erro. A resposta mais comum que o SQL Server te fornece so
mensagens de erro. Embora as mensagens que voc receba possam no ser
sempre precisas, a primeira suposio que se deve fazer quando receber uma
mensagem de erro que ela precisa e que voc precisa encontrar a causa
dela. Algumas mensagens so bvias, j outras so bem obscuras. Se voc no
puder determinar a partir da prpria mensagem, qual o problema, escreva a
mensagem por inteiro e procure nos livros on-line do SQL Server (SQL Server
books on-line). Se l voc no encontrar a mensagem, tente olhar na Microsoft
TechNet (voc tem que ser um assinante para receb-la) ou no site da Microsoft
na nternet.
Se voc no encontrar a mensagem de erro, voc pode checar o Visualizador de
Eventos [Event Viewer] do Windows NT, no log de aplicativo, para alguma
mensagem relacionada. Voc ainda pode ver os logs de erro do SQL Server, se
houver algum, para pistas. Os logs de erro do SQL Server esto localizados na
pasta \log abaixo da pasta onde o SQL Server foi instalado. Encontre o arquivo
chamado Errorlog e abra-o com o Notepad ou Wordpad.
H tambm o arquivo Sqlstp.log, nas pasta C:\WNNT, que lhe d informaes
sobre o processo de instalao do SQL Server.
40
Apostila Microsoft SQL Server 7.0
Todos os logs de erros so arquivos ASC e podem ser facilmente visualizados
com qualquer editor de textos, Os logs de erros do SQL Server so difcieis de
interpretar, mas podem te dar uma dica do que aconteceu.
No foi possvel verificar a instalao. Se voc tentou verificar a instalao como
descrito em Verificando a instalao, e o problema parece ser algo faltando da
instalao que deveria estar a, voc tem duas opes. Ou execute o programa
de instalao novamente sobre a instalao atual, ou voc pode primeiro excluir
a instalao danificada, e ento reinstalar.
Verificar o arquivo Cnfgsvr.out. Esse arquivo, localizado na pasta \NSTALL,
abaixo da pasta onde o SQL Server foi instalado, um arquivo de sada gerado
pelos scripts que rodam durante a instalao e grava mensaegns de erro DBCC.
A seguir so descritos alguns dos problemas mais comuns que so encontrados
quando da instalao do SQL Server.
=so da erso errada do EC Serer
O uso da verso errada do NT Server, ou o uso de um Service Pack antigo, pode
causar uma grande variedade de prblemas, muito deles difceis de diagnosticar. Se a
instalao produz mensagens de erro obscuras sem razo aparente, assegure-se de
que a verso do NT Server que voc est usando seja adequada. Se voc descobrir
que tem a verso errada, desinstale o SQL Server, atualize o NT Server para uma
verso aceitvel, e ento reinstale o SQL Server.
(r!uios a5ertos durante a instalao
Durante o processo de instalao, o SQL Server substitui alguns arquivos do NT
Server. Se algum desses arquivos estiver aberto durante a instalao, eles podem
causar a exibio de uma mensagem de erro crtico. Essa a razo de ser importante
cetificar-se de que no h nenhum outro programa rodando quando o SQL Server for
instalado. Se voc descobrir que tem um ou mais utilitrios do NT aberto que pode
estar causando o erro, feche-os, e clique no boto de Retry mostrado pela mensagem
de erro. Se isso no funcionar, voc pode ter que abortar a instalao do SQL Server e
tentar de novo, desta vez sem nenhum programa rodando.
4s serios 6SSQLSerer ou SQLSerer(gent no iniciam
Este provavelmente o problema mais comum encontrado quando se instala o SQL
Server. Siga os passos abaixo para te ajudar a determinar a possvel causa desse
problema:
Voc criou uma conta de servio como descrito na instalao do software de
servidor?
A conta de servio foi criada adequadamente, com direitos administrativos e os
outros direitos avanados exigidos?
A conta de servio foi criada no domnio de contas correto do NT?
A conta de servio foi informada corretamente quando pedida durante o
processo de instalao? Voc usou acidentalmente sua conta de logon on NT
como a conta de servio?
41
Apostila Microsoft SQL Server 7.0
Voc digitou tudo corretamente?
Se voc no conseguir descobrir o problema, delete a conta de servio que voc criou
e crie uma nova, seguindo cuidadosamente as recomendaes da instalao do
software de servidor. Ento v para o Painel de Controle, onde esto os servios, e
asegure-se de que voc selecionou a conta de servo para os dois servios, junto com
as senhas corretas. Com frequncia, esse um erro simples que facilmente corrigido.
42
Apostila Microsoft SQL Server 7.0
3 - Ferramentas de gerenciamento do SQL
Serer
66C - 6icrosoft 6anagement Console
>nter*rise 6anager
Serice 6anager
Client Eet7or2 =tilitD
Serer Eet7or2 =tilitD
1erformance 6onitor
1ofiler
QuerD (nalD@er
$oo2s online
(ssistentes do SQL Serer
Objetivos:
- Conhecer os conceitos de alocao de espao usados pelo SQL Server;
- Ter uma viso geral dos itens que compem o catlogo do sistema;
- Saber o que um banco de dados e o que ele contm;
- Aprender a criar, usar e gerenciar dispositivos de banco de dados.
43
Apostila Microsoft SQL Server 7.0
SQL Serer >nter*rise 6anager
O "SQL Server Enterprise Manager" a porta de entrada para a nterface de usurio do
SQL Server. Para inici-lo, selecione niciar, Programas, Microsoft SQL Server 7.0,
Enterprise Manager. Aparece o Enterprise Manager dentro do MMC, como abaixo.
A temos uma poro de menus e botes. Os itens de menu importantes so Action,
View e Tools:
Action te permite fazer coisas tais como registrar um novo servidor ou um novo
grupo (conforme visto na seo de instalao).
Views te fornece uma lista dos diferentes tipos de vises disponveis para voc.
Voc pode selecionar as vises grande, pequeno, detalhe ou lista dos cones e
suas propriedades associadas. Ainda possvel definir quais itens e quais
barras de ferramentas voc ver. Exatamente como no Windows Explorer.
44
Apostila Microsoft SQL Server 7.0
O menu Tools lista todas as ferramentas e assistentes do SQL Server. Voc
pode fazer backup de um banco de dados; parar, iniciar e configurar a
replicao; e iniciar ferramentas como o Query Analyzer (Analisador de
consultas), entre outras.
mediatamente direita dos menus h outros itens de barras de ferramentas. Estes so
basicamente atalhos para os itens mais usados da barra de menu. Temos, entre
outros:
Anterior
Prximo
Atualizar
Registrar Servidor
Novo Banco de Dados
Novo Login
QuerD %esigner
O SQL Server 7.0 tem uma ferramenta muito til, que se parece com o Query By
Example (QBE) do Microsoft Access, e um timo substituto para a MS Query (do SQL
Server 6.5). O nome dessa aplicao Query Designer e faz parte das Ferramentas
Visuais de Banco de Dados. uma tima ferramenta, mas no est listada como uma
ferramenta do SQL Server, e um pouco difcil ach-la diretamente. Para localiz-la,
faa assim:
Do Enterprise Manager, expanda o banco de dados Northwind, e expanda as
tabelas.
Clique com o boto direito na tabela Categories.
Selecione Open Table, e ento Return All Rows.
45
Apostila Microsoft SQL Server 7.0
%ota& O que foi citado acima para a tabela Categories, do banco de dados Northwind,
aplica-se a qualquer tabela, de qualquer banco de dados, assim como no
necessrio selecionar Return All Rows. Poderia ter sido selecionado Return Top... que
te perguntaria quantos registros voc quer ver. A diferena no comando SQL gerado
para cada uma das selees.
Depois que voc abrir a tabela, toda a janela estar envolvida com o Query Designer.
Ele permite que voc veja propriedades da consulta, execute consultas de seleo, de
ao (insero, atualizao, excluso, e criao de tabelas), validao da sintaxe SQL,
ordenao, filtragem, e agrupamentos.
Provavelmente, estaremos vendo a seo dos Resultados (Results Pane), acionada
com o boto , que mostra os resultados atuais da consulta. Porm, ainda h
outras trs sees para se escolher ou adicionar janela atual. Estas so,
Show Diagram, Show Grid, e Show SQL Pane. Elas so selecionadas pelos botes no
topo da janela.
S0o7 %iagram 1ane
Esta seo te permite visualizar graficamente o banco de dados ou as tabelas. Por
padro, s a tabela atual que estiver aberta ser mostrada nesta seo. Para adicionar
outr tabela, simplesmente clique com o boto direito em qualquer lugar da seao
(exceto na representao grfica de alguma tabela). Aparece um menu com algumas
opes.
46
Apostila Microsoft SQL Server 7.0
Selecione Add Table. sso mostrar todas as tabelas e vises (views) disponveis no
seu banco de dados, conforme abaixo.
Adicione a tabela Products (supondo que voc seguiu o exemplo acima e est vendo
as tabelas do banco de dados Northwind), selecionando-a e clicando em Add, ou
dando um duplo clique no nome da tabela . Note que 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 muitos(1:N) com CategoryD na tabela
Categories como a chave primria. Pode-se selecionar para a consulta, colunas
47
Apostila Microsoft SQL Server 7.0
individuais ou todas as colunas marcando as caixas de verificao apropriadas perto do
nome de cada coluna.
S0o7 /rid 1ane
Esta seo permite detalhar mais a consulta sendo criada. Por exemplo, podemos
selecionar a ordem para uma coluna particular, seu alias (nome que ser mostrado no
grid). Tudo isso de uma maneira visual.
S0o7 SQL 1ane
Esta seo mostra a declarao SQL gerada pelas selees feitas nas sees acima.
Pode-se agora copiar e colar cdigo desta janela, para o Query Analyzer, pra um
ambiente de programao, entre outros.
%ota& A seo de resultados (Results Pane) no se atualiza automaticamente. Para
atualiz-la, clique no ponto de exclamao vermelho (Run)
No Query Designer, podemos criar consultas complexas muito mais rapidamente que
no Query Analyser (que ser visto adiante). Depois de criarmos as consultas, podemos
coloc-las no Query Analyzer e testar sua performance.
SQL Serer Client Eet7or2 =tilitD
A ferramenta SQL Server Client Configuration utilizada para configurar as
ferramentas de gerenciamento, de modo que elas possam comunicar-se com sucesso
com um servidor SQL Server.
A ferramenta SQL Server Client Configuration Utility est localizada no grupo de
programas do SQL Server 7.0 (niciar | Programas | Microsoft SQL Server 7.0 | Client
Network Utility. Essa ferramenta chamada de /lient /onfigruation 2tilit) e de $et0or1
/onfiguration nos livros on-line.
Na maioria das situaes, voc no precisar de executar este programa porque as
configuraes padro que foram utilizadas durante a instalao vo funcionar na
maioria das configuraes de estaes de trabalho. Mas se voc descobrir que as suas
ferramentas de cliente no conseguem se comunicar com o servidor SQL Server, voc
pdoe utilizar esse utilitrio para configurar adequadamente o cliente de modo que ele
possa comunicar-se com o servidor SQL Server.
Iniciando a Client Eet7or2 =tilitD
Provavelmente, esta ferramenta foi instalada quando voc instalou as outras
ferramentas de gerenciamento em uma estao de trabalho. Se voc no instalou esta
ferramenta, voc deve instal-la seguindo os passos descritos em nstalando as
ferramentas de cliente. Uma vez que a Client Netowrk Utility esteja instalada, execute-a
seguindo os passos abaixo:
1. Efetue lgon na estao de trabalho usando uma conta com as permisses
adequadas.
48
Apostila Microsoft SQL Server 7.0
2. Para executar a Client Network Utility, clique em niciar | Programas | Microsoft
SQL Server 7.0 | Client Network Utility.
3. Aparece a janela da Client Network Utility.
4. Essa ferramenta inclui trs guias que separam cada uma das trs opes
principais. Elas so General, Netowrk-Libraries, e DB-Library Options. A seguir
descreveremos cada uma delas.
/eral
A guia geral (figura acima) tem duas sees. Na parte superior da tela voc pode
especificar qual Net-Library voc quer usar como o protocolo padro de rede para este
cliente. A segunda parte da tela utilizada para especificar configuraes opcionais do
protocolo de rede/
49
Apostila Microsoft SQL Server 7.0
Como voc deve se lembrar, quando o SQL Server foi instalado, voc teve que
especificar uma ou mais Net-Libraries para serem instaladas. Este o software
utilizado para estabelecer uma conexo de rede entre o servidor SQL Server e o
software de cliente. O SQL Server usa as bibliotecas de rede [Net-Libraries] para se
comunicar com um protocolo de rede especfico e enviar pacotes atravs da rede entre
um cliente e um servidor. O servidor escuta simultaneamente em diversas portas,
enquanto o cliente se comunica com o servidor usando uma Net-Library especfica.
Para que um cliente se conecte a um servidor, ele deve usar alguma das Net-Libraries
que o servidor tem instaladas.
Voc pode fazer com que cliente e servidor usem a mesma Net-Library de duas
maneiras: adicionar no cliente, uma Net-Library que est instalada no servidor; ou o
contrrio: no cliente, instalar uma Net-Library que esteja instalada no servidor.
Normlamente, mais fcil adicionar a Net-Library ao servidor, do que aos clientes.
A configurao de uma Net-Library no cliente, para se comunicar com um servidor,
opcional. Por padro, Named Pipes a Net-Library dos clientes, instalada durante a
instalao do SQL Server para computadores executando Windows NT ou Windows
9x. Named Pipes deve funcionar bem na maioria dos casos. Mas, se esse protocolo
no conectar-se com seu servidor, voc vai precisar de reconfigurar o cliente com a
configurao correta.
Ento, caso voc precise mudar o protocolo de rede para uma estao de trabalho
(cliente), voc pode fazer isso selecionando o protocolo apropriado da lista Protocolo
de rede padro [Default network Protocol].
A Net-Library de cliente padro para os clientes SQL Server fazendo conexes remotas
Named Pipes, a qual no suportada em servidores rodando Windows 9x. Clientes
conectando-se com servidores rodando Windows 9x devem usar a ferramenta SQL
Server Client Network Utility para executar uma das seguintes opes:
Mudar a Net-Library padro do cliente.
Definir uma entrada de configurao para uma Net-Library de cliente na qual o
servidor rodando Windows 9x esteja escutando.
A parte de configurao do protocolo de rede da guia Geral [General] s usada em
casos especiais. Voc s vai utiliz-la se se ver em uma das seguintes situaes:
As ferramentas de gerenciamento esro em uma estao de trabalho rodando
Windows NT, conectando-se a um servidor executando Windows 95.
Voc precisa adicionar uma configurao exclusiva de protocolo para as
comunicaes entre um servidor SQL Server especfico e um cliente executando
as ferramentas de gerenciamento.
O servidor SQL Server com o qual voc quer se comunicar a partir de um cliente
escuta em uma oprta no-padro.
Normalmente, voc no usar esta opo.
%ota& Para o processo Servidor, o SQL Server escuta as Net-Libraries Named Pipes,
sockets TCP/P, e Mutliprotocolo em computadores rodando Windows NT. Entretanto,
Named Pipes no aceito em commputadores rodando Windows 9x. O SQL Server
instalado em computadores rodando Windows 9x escuta as Net-Libraries sockets
TCP/P e Mutliprotocolo do servidor. Se a conexo local com o servidor (tal como um
50
Apostila Microsoft SQL Server 7.0
cliente e servidor na mesma mquina), o SQL Server vai escutar ento a Net-Library de
Memria Compartilhada do servidor.
Eet7or2 Li5aries
A guia Network Libraries usada somente para mostrar quais Network Libraries esto
atualmente instaladas no cliente e permitir que voc saiba suas verses. Essa guia se
parece com a figura abaixo.
%$-Li5rarD 4*tions
O principal objetivo da guia DB-Librarey lhe permitir determinar se voc tem ou no a
verso mais atual dos arquivos de DB-Library instalados no cliente.
51
Apostila Microsoft SQL Server 7.0
Outra parte da guia DB-Library Options formada pelas duas caixas de verificao que
podem ser usadas para configurar como a DB-Library se comunica com o SQL Server.
Eis o que elas fazem:
Automatic ANS to OEM: Quando esta opo estiver selecionada, a DB-Library
converte caracateres do formato OEM para ANS quando ocorre a comunicao
do cliente para o servidor SQL Server, e converte caracteres do formato ANS
para OEM quando se comunica do servidor para o cliente. Esta opo exigida
frequentemente poruqe o conjunto de caracteres utilizado pelo SQL Server
diferente daquele utilizado pelo sistema operacional do cliente. Esta opo faz
automaticamente a traduo adequada entre os dois conjuntos de caracteres.
Essa opo deve estar selecionada se o cliente estiver executando Windows NT
ou Windows 9x. Se estiver sendo utilizado um cliente Windows 3.x, esta opo
no deve ser selecionada.
Use nternational Settings: Quando esta opo estiver selecionada, permite-se
que a DB-Library pegue as configuraes de formato de data, hora e moeda do
sistema operacional local ao invs de utilizar a configurao definida no cdigo
do SQL Server. Esta opo deve ser selecionada se o cliente estiver sendo
executado no Windows 9x ou NT.
SQL Serer 1rofiler
O SQL Server Profiler uma tima ferramenta para se ver um registro contnuo da
atividade do servidor em tempo real. O Profiler monitora os eventos produzidos atravs
do SQL Server, filtra esses eventos baseados em critrios especficos do usurio, e
mostra a sada traada na tela, em um arquivo ou uma tabela.. Voc pode at repetir
traados capturados anteriormente.
6onitorando com o SQL Serer 1rofiler
O SQL Server Profiler uma ferramenta grfica que permite aos adminsitradores do
sistema monitor eventos de mecanismo do SQL Server. Eventos so a nova maneira
de se comunicar com e do SQL Server. Com eventos de mecanismo, um objeto COM
pode interceptar esses eventos e agir de acordo. Exemplos de eventos de mecanismo
incluem:
Comandos Transact-SQL: SELECT, NSERT, UPDATE e DELETE.
Conexo, falha ou desconexo de login.
O comeo ou fim de um procedimento armazenado (stored procedure).
O comeo ou fim de um lote de comandos SQL.
Um erro escrito no log de erros do SQL Server.
Um bloqueio adquirido ou liberado em um objeto de banco de dados.
Um cursor que for aberto
Os dados gerados sobre cada evento podem ser capturados e salvos em um arquivo
ou uma tabela do SQL Server para anlise posteriro. Para coletar os dados dos
52
Apostila Microsoft SQL Server 7.0
eventos de mecanismo voc define traos. Exemplos de dados capturados com um
trao incluem:
O tipo (classe) de um evento, tal como Object:Created, o qual indica que um
objeto de banco de dados foi criado.
O nome do computador em que o cliente est rodando.
O D do objeto afetado pelo evento, tal como um nome de tabela.
O nome no SQL Server, do usurio que executou comando.
O texto do comando Transact-SQL ou procedimento armazenado.
A hora em que o evento comeou e terminou.
Voc pode filtrar os dados de modo que apenas um subconjunto dos dados do evento
seja coletado. sso te permite coletar apenas os dados de evento em que voc est
interessado. Por exemplo, se voc apenas est interessado em um usurio particular
ou nos efeitos de um certo banco de daos, voc pode filtrar esses objetos especficos e
ignorar os outros. Voc tambm pode definir filtros em itens que demorem mais do que
o esperado, tal como uma consulta que demore mais do que 40 segundos.
O SQL Server Profiler tambm permite que os dados de eventos (capturados) sejam
recolocados no SQL Server, sso vai efetivamente reexecutar os eventos salvos como
eles originalmente ocorreram.
O SQL Server Profiler pode ser usado para:
Monitorar o desempenho do SQL Server.
Depurar comandos Transact-SQL e procedimentos armazenados.
dentificar consultas que executam com lentido.
Corrigir problemas no SQL Server. Por exemplo, voc pode capturar os eventos
que possam estar levando a um problema potencial e ento replicar o processo
em um sistema de teste para isolar e corrigir o problema.
Abaixo voc v a cauxa de dilogo inicial para a criaao de um trao. Veremos a
criao de traos em mais detalhes posteriormente.
53
Apostila Microsoft SQL Server 7.0
SQL Serer QuerD (nalD@er
O Analizador de Consultas [Query Analyzer] fornece uma interface grfica para analisar
o plano de execuo de uma ou mltiplas consultas, ver os dados de resultado, e
recomendar indces .
O Query Analyzer se parece com a janela Query que havia no Enterprise Manager do
SQL Server 6.5. Se voc j for familiarizado com a verso 6.5, essa ferramenta ser
bem fcil de se usar; mas, de qualquer maneira, aqui ser explicado como utiliz-la.
Essa uma ferramenta bem fcil de se usar. Vamos comear pela execuo de uma
consulta simples.
=sando o QuerD (nalD@er
1. A partir do MMC, selecione Tools | Query Analyzer. Voc tambm pode executar
o Query Analyzer pelo grupo de programas do SQL Server (niciar | Programas |
Microsoft SQL Server 7.0 | Query Analyzer).
2. Conecte-se ao servidor SQL Server local. Efetue logon com a conta e senha (se
houver) do SA que voc especificou na instalao. Caso voc tenha privilgios
administrativos nessa mquina, voc tambm pode se logar com a conta do NT
[use Windows NT autenthication]. Dessa maneira, voc tambm efetuar logon
como SA.
3. Selecione pubs da lista na janela de consulta. Esse ser o banco de dados no
qual executaremos a consulta.
Voc tambm poderia ao invs de especificar o banco de dados, usar a
declarao Use antes de sua consulta.
4. Escreva o seguinte na parte superior da janela se a janela tiver mais de uma
parte.
SELEC ! "#$% a&t'ors
5. Selecione o mtodo de execuo. So disponveis quatro opes diferentes de
execuo:
Execuo padro (Ctrl+T) mostra os resultados na forma de um arquivo texto,
como na figura abaixo. F5 (run) executa a consulta, qualquer que seja o modo
de execuo selecionado.
Executar para uma grade (Ctrl+D) fornece um formato mais agradvel de se
visualizar, em uma planilha, uma estrutura parecida com tabelas (um layout de
linha-coluna). A figura abaixo mostra o resultado em uma grade.
Plano de execuo (Ctrl+L), mostrado na prxima figra, mostra o processo real
de execuo que ocorreu. Essa consulta no mostrou nada de interessante
porque s havia uma tabela envolvida, mas se fosse executada uma consulta
mais complexa com junes internas ou externas, voc visualizaria sua
54
Apostila Microsoft SQL Server 7.0
representao grifca.
Anlise de ndice [ndex Analysis] provavelmente lhe avisar que ele foi incapaz de
recomendar quaisquer ndices. Entretanto, se voc comear a escrever consultas
complexas que so usadas frequentemente, voc pode col-las nesse utilitrio e
test-las para sugestes de ndice.
Quando voc decide fazer uma nova consulta, voc pode faz-la em outra janela,
clicando no boto New Quey (Ctrl+N), ou ento apagar a consulta j feita e digitar
novos comandos.
Note que a cada nova janela aberta, ou seja, a cada consulta feita em outra janela, est
sendo estabelecida uma nova conexo. Observe na parte inferior da janela do Query
Analyzer (ao lado de Connections), quantas so as conexes estabelecidas.
Durante a instalao, se voc optou por licenciar o SQL Server como Per Server, seu
servidor s suportar tantas conexes simultneas quantas houverem sido definidas
nessa fase da instalao. Ento, se voc receber uma mensagem como a mostrada
abaixo
55
Apostila Microsoft SQL Server 7.0
voc deve fechar algumas conexes (janelas de consulta) antes de tentar abrir alguma
nova, ou ento, no menu File | Configure, deve definir o nmero mximo de conexes
aceitas, na opo nmero mximo de conexes (Maximum number of connections).
SQL Serer $oo2s 4nline
O SQL Server Books Online um grande recuro para ter em mos. O guia de ajuda
MS books online est se tornando o modo pardro de acessar a ajuda com aplicaes,
servios e linguagens de progrmao Microsoft. Os livros online so um lugar onde
voc vai encontrar tudo a respeito de um produto particular, e em alguns casos, a
combinao de vrios produtos.
Books Online tem uma navegao simples, como mostrado abaixo.
O books online lembra o MMC ou o Wndows Explorer. O lado esquerdo tem uma viso
de estrutura de rvore enquanto o lado direito tem um E (navegador nternet Explorer).
As pginas mostradas no lado direito so simples pginas HTML (voc pode inclusive
visuzalizar seu cdigo fonte).
1rocura *or conteJdo KContentsL
Uma busca por contedo como procurar em um livro baseado no sumrio dos
captulos. O sumrio do captulo visvel como uma estrutura de rvore. Clicar em um
livro no lado esquerdo da janela causa a abertura do livro revelando pginas, ou
captulos. Clique em uma pgina e a pgina ser exibida na parte direita da janela.
Clicar em um captulo (que se parece com um outro livro) vai abrir mais captulos, e
mais pginas do lado esquerdo.
56
Apostila Microsoft SQL Server 7.0
1rocura *or ?ndice KInde:L
A procura pelo ndice vai pesquisar todas as palavras que foram indexadas quando da
criao do material de ajuda. Ocasionalmente, voc pode no encontrar o item que
voc est procurarndo e precisar de uma procura mais geral. Use a guia Pesquisar
[Search] para pesquisas mais gerais.
=sando a guia 1es!uisar KSearc0L
A guia de consulta permite que voc digite uma palavra e ser pesquisado em todos os
documentos atrs daquela palavra. O lado esquerdo da tela vai ser preenchido com os
documentos que contm a(s) palavra(s) que voc pediu.
/uia Faoritos KFaoritesL
A guia favoritos um livro de marcadores bem fcil de se usar. Se voc gostou da
informao que voc encontrou e quer torn-las mias fcil de ser encontrada
posteriormente, simplesmente selecione a guia Favoritos. A parte inferior da guia vai
mostrar-lhe o tpico atual. Clique em Add para coloc-lo como parte do seu marcador.
Se voc precisar de excluir um item, simplesmente selecione-o e aperte o boto
Remove.
Se voc est inseguro a respeito de como algumas das ferramentas funcionam, ou
apenas esqueceu, lembre-se de que os assistentes so timas ferramentas para o
aprendizado. Eles fazem um trabalho excelente de apontar as tarefas necessrias que
esto sendo realizadas. Depois de executar os assistents algumas vezes, voc ter
uma boa idia do processo como um todo. Mesmo que voc no tenha, use esta
apostila ou os livros on-line.
(sistentes do SQL Serer KSQL Serer Ii@ardsL
Os assistentes do SQL Server te ajudam a crirar seus objetos de banco de dados e
servios sem precisar de estar sempre olhando em suas notas sobre como fazer algo
corretamente. Ter um assistente para te encaminhar em cada tarefa uma maneira
tima de se aprender o que necessita ser feito. Quase tudo tem um assistente. Voc j
deve alguma vez ter evitado uma certa tarefa s porque voc no tinha tempo para
pesquisar como realiz-la. Como voc deve saber, a no ser que voc conhea o
procedimento completamente, voc cometer algum erro ao realiz-lo. Seu tempo j
bem escasso sem ter que se recuperar de erros. Se voc no estiver certo do que voc
est fazendo, ou se voc est fazendo certo, deixe o assistente ser seu guia. Alguns
desses assistentes so simples, enquanto outros so mais complexos. Todos os
assistentes esto disponveis no Enterprise Manager. Para ver uma lista dos
assistentes disponveis, selecione algum servidor, e no menu Ferramentas [Tools] do
Enterprise Manager, escolha a opo Assistentes [Wizards]. Aparece a janela mostrada
abaixo:
57
Apostila Microsoft SQL Server 7.0
Aqui sero discutidos alguns assistentes e os passos principais para o assistenete,
dando o mximo de detalhe possvel, mas sem exagerar. Bem, assistenstes esto a
pra te ajudar, e supe-se que eles tornem as tarefas difceis mais fceis. Ento, vamos
comear.
(ssistente de registro de seridor K3egister Serer Ii@ardL
O Assistente de registro de servidor obviamente, registra seu servidor. O ato de
registrar o seu servidor o processo de contar ao SQL Server o nome do servidor que
voc quer registrar, o tipo de segurana que voc est utilizando, seu nome de login e
senha (se no estiver usando autenticao do NT), e o grupo de servidor do qual esse
servidor vai fazer parte. Voc j deve ter utilizado esse assistente em Registrando um
servidor.
Voc pode criar um novo grupo de servidor quando da criao de um novo banco de
dados. Um servidor somente pode existir como parte de um grupo.
(ssistente de segurana KSecuritD Ii@ardL
O assistente de segurana automatiza a tarefa de criao de logins para um servidor
SQL Server. O assistente te permite especificar ou uma conta de usurio do NT ou
criar uma autenticao do SQL Server. Veja mais sobre segurana.
58
Apostila Microsoft SQL Server 7.0
(sistente de criao de 5ancos de dados KCreate %ata5ase Ii@ardL
O assistente de criao de banco de dados automatiza a tarefa de criar um banco de
dados. O assistente te acompanha nos passos principais para criao de um banco de
dados. Estes passos incluem o nome do banco de dados, os arquivos do banco de
dados, os arquivos de log, o tamanho inicial dos arquivos, e como esses arquivos iro
crescer. Tabelas no so criadas aqui. Elas so criadas por comandos Transact-SQL
ou clicando com o boto direito em um banco de dados e escolhendo Nova Tabela
[New Table]. Saiba mais sobre a criao de bancos de dados e tabelas.
(ssistente de criao de alertas KCreate (lerta Ii@ardL
Quando ocorre um erro ou quando o SQL Server dispara um evento, eles so
guardados no log de eventos de aplicao, com o nome de SQL Server. O SQL Server
Agent l o log de eventos e faz uma comparao dos eventos com um alerta (que voc
define). Se houver uma combinao, um alerta disparado.
(ssistente de criao de tra5al0os KCreate Mo5 Ii@ardL
Um trabalho algo que executado com uma freqncia regular. O trabalho pode ser
um comando Transact-SQL, um executvel, ou mesmo um script (VB-Script). Por
exemplo, voc pode querer limpar todas as visitas que o seu banco de dados monitora
para uma pgina Web. sso pode ser feito a cada dia, ms, semana ou ano. O trabalho
pode ser simples ou bastante complexo.
(ssistente de *lano de manuteno de 5anco de dados K%ata5ase 6aintenance
1lan Ii@ardL
Este assistente creia uma srie de trabalhos que ajudam o seu banco de dados a
funcionar melhor. Por exemplo, ele pode agendar a realizao de backups em uma
base regular e checar por quaisquer inconsistncias. Veja um exemplo de seu uso
Agendando um backup completo de banco de dados ou de log de transaes utilizando
um assistente.
(ssistente de criao de ?ndices KCreate Inde: Ii@ardL
ndices so criados automaticamente quando voc cria restries PRMARY e
UNQUE; entretanto, voc tambm pode querer criar ndices em outros campos que
sero consultados com frequncia. Este assistente permite que voc selecione uma
tabela e crie ndices em um campo dado. Se ndices j existem, o assistente te
notificar disso. Voc ppode especificar o ndice como um ndice clusterizado (se
algum ainda no existe), um ndice no-clusterizado, ndice nico, os fatores de
preenchimento tambm podem ser definidos. Se um item no puder ser indexado, tal
como um tipo de dados imagem, que aramzaena as informaes em um formato
binrio (que no bom para indexao), o SQL Server bloquear esse campo para
indexao. Aprenda mais sobre ndices.
59
Apostila Microsoft SQL Server 7.0
(ssistente de criao de *rocedimentos arma@enados KCreate Stored
1rocedure Ii@ardL
Procedimentos armazenados so consultas compiladas. Por que voc as quereria e o
que elas so? Toda vez que voc executa uma consulta, o SQL Engine deve examinar
a consulta e certificar-se de que todos os campos e tabelas so vlidos. Ento, ele
deve se decidir a executar a consulta.
Quando voc cria um procedimento armazenado, tudo isso feito de uma vez. O fato
de no ter o trabalho adicional de encontrar o melhor caminho a tomar quando da
execuo de uma consulta pode melhorar o desempenho. Ver mais detalhes em
Procedimentos Armazenados.
(ssistente de criao de is-es KCreate ,ie7 Ii@ardL
Uma viso uma tabela virtual que representa uma maneira diferente de se visualizar
uma tabela. Ela pode ser usada por vrios motivos, incluindo mas no limitada a
mostrar apenas a informao que interessa em uma tabela muito grande. Permisses
de segurana podem ser administradas para permitir que apenas os pessoal de RH
veja toda a tabela que mostra salrios, enquanto usurios normais enxergam apenas a
informao bsica na viso. Veja mais sobre vises.
(ssistente de Im*ortao;>:*ortao %CS K%CS Im*ort;>:*ort 7i@ardL
O assistente DTS [Data Transformation Services - Servios de Transformao de
Dados] permite que voc utilize facilmente o DTS para importar ou exportar
informaes heterogneas utilizano OLE DB e ODBC; voc tambm pode copiar
esquemas e dados de bancos de dados entre bancos de dados relacionais.
Dado heterogneo o dado que armazenado em diferentes formatos de arquivo. A
utilizao do DTS com OLE DB e ODBC te permite recuperar dados de um formato de
arquivo e us-los com outro formato.
Ie5 (ssistant Ii@ard
Este assistente gera pginas HTML baseado em dados do servidor SQL Server,
consultas, procedimentos armazenado, e por a vai. Os arquivos HTML podem ser
publicados de modo que sejam visveis na intranet da companhia ou na nternet para
que o mundo veja. As pginas por si no consultam o banco de dados e assim no so
dinmicas. Entretanto, pode-se cirar trabalhos que recriem as pginas regularmente, ou
um gatilho poderia lanar um atarefa para recriar a pgina quano um item fosse
inserido, atualizado ou excludo. Veja o uso desse asistente.
60
Apostila Microsoft SQL Server 7.0
4 - Fundamentos de ar!uitetura do SQL
Serer
4 CatHlogo do Sistema
Com*onentes do $anco de %ados
>strutura dos 5ancos de dados
Objetivos:
- Conhecer os conceitos de alocao de espao usados pelo SQL Server;
- Ter uma viso geral dos itens que compem o catlogo do sistema;
- Saber o que um banco de dados e o que ele contm.
4 CatHlogo do Sistema
Um 6anco de dados uma coleo de tabelas e outros objetos relacionados. Existem
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 armazenar os seus prprios dados. O catlogo do sistema composto de tabelas
no banco de dados master.
$ancos de %ados do Sistema
Ao instalar o SQL Server, so criados os seguintes bancos de dados do sistema:
master Controla os bancos de dados do usurio e a operao do SQL Server. Tem
como tamanho inicial 16 MB. importante manter um backup atualizado desse banco
de dados. Contm informaes sobre:
- Contas de login
- Processos em execuo
- Mensagens de erro
- Bancos de dados criados no servidor
- Espao alocado para cada banco de dados
- Travas [locks] de linha ativas
- Espao alocado para cada banco de dados
- Procedimentos armazenados do sistema
model um modelo usado para criao de novos bancos de dados, que pode ser
usado para definir padres, como autorizaes default de usurio, opes de
configurao, tipos de dados etc. Sempre que um banco de dados do usurio criado,
o contedo de model copiado para ele. Seu tamanho inicial 2.5 MB. Esse modelo
pode ser alterado.
tempd6 Usado para armazenar tabelas temporrias e resultados intermedirios de
consultas. Geralmente o seu contedo excludo sempre que um usurio se
61
Apostila Microsoft SQL Server 7.0
desconecta. Ele cresce automaticamente confome necessrio. Seu tamanho inicial
de 8 Mb.
msd6 Usado pelo servio SQLServerAgent, para controlar tarefas como replicao,
agendamento de tarefas, backups e alertas. Contm algumas tabelas de sistema, que
armazenam informaes usadas pelo SQLExecutive.Seu tamanho inicial 12 Mb.
Ca5elas do Sistema
As tabelas do sistema, armazenadas no banco de dados master e em cada banco de
dados de usurio, contm informaes sobre o SQL Server e sobre cada banco de
dados de usurio. Existem 17 tabelas em cada banco de dados que formam o cat8logo
do 6anco de dados. Todas comeam com o prefixo s)s e contm as seguintes
informaes:
s)scolumns
nformao sobre cada coluna de cada tabela, e cada parmetro
de procedimento.
s)scomments
Para cada objeto de banco de dados (viso, regra, default,
trigger, procedimento) contm o texto de sua definio.
s)sconstraints
nclui informaes sobre todas as restries usadas no banco de
dados.
s)sdepends Registra as dependncias entre objetos do banco de dados.
s)sfilegroups
Tem uma linha para cada grupo de arquivos armazenado em um
banco de dados.
s)sfiles nformaes sobre cada arquivo de um banco de dados.
s)sforeign1e)s
nformaes sobre todas as restries de chaves estrangeiras
encontradas em todas as tabelas de um banco de dados.
s)sfullte@tcatatalogs
Lista todos os catlogos de texto completo para esse banco de
dados.
s)sinde@es
nformao para cada ndice criado e para cada tabela sem
ndices, alm de informaes para cada tabela que possui
colunas te@t ou image.
s)sinde@1e)s nformao sobreas chaves e as colunas de um ndice.
s)smem6ers nformaes sobre os membros de cada papel.
s)so6<ects
nformao sobre cada objeto do banco de dados (tabelas,
vises, procedimentos, regras, defaults e gatilhos).
s)spermissions
nformao sobre permisses atribudas a usurios, grupos e
papis em um banco de dados.
s)sprotects Permisses atribudas contas de segurana.
s)sreferences
nformao sobre toda restrio de integridade referencial usada
numa coluna ou tabela de um banco de dados.
s)st)pes
nformao sobre cada tipo de dados (do sistema ou definido
pelo usurio).
s)susers
nformao sobre cada usurio que pode ter acesso ao banco de
dados.
Existem tambm tabelas localizadas apenas no banco de dados master, que compem
o cat8logo do sistema. Elas contm as seguintes informaes:
s)sallocations nformaes sobre cada unidade de alocao gerenciada pelo
62
Apostila Microsoft SQL Server 7.0
SQL Server
s)saltfiles nformaes sobre cada arquivo gerenciado pelo SQL Server
s)scharsets
nformao sobre conjuntos de caracteres [character sets] e
ordens de classificao [sort orders].
s)sconfigures?
s)scurconfigs
Parmetros de configurao do SQL Server.
s)sdata6ases nformao sobre os bancos de dados existentes.
s)sdevices nformao sobre os dispositivos, tais como o dispositivo de fita.
s)slanguages diomas suportados pelo servidor.
s)sloc1info Travas (locks) ativas.
s)slogins Contas de login.
s)smessages Mensagens de erro do sistema
s)soled6users
Contm uma linha para cada usurio e senha mapeados em um
servidor.
s)sperfinfo nformao sobre os monitores de performance.
s)sprocesses Processos em execuo
s)sremotelogins Contas de login remotas.
s)sservers Servidores remotos conhecidos.
1rocedimentos (rma@enados do Sistema
Um procedimento arma*enado [stored procedure] uma seqncia de comandos da
linguagem Transact-SQL, compilados e armazenados num banco de dados. Os
procedimentos arma*enados do sistema [system stored procedures] so fornecidos
pelo SQL Server, armazenados no banco de dados master e automatizam vrias
tarefas comuns de gerenciamento.
Por exemplo, o procedimento spAdata6ases mostra quais os nomes de bancos de
dados existentes. Para executar esse procedimento, use o Query Analyzer (niciar |
Programas | Microsoft SQL Server 7.0 | Query Analyzer). Na pgina "Query" digite:
s()data*ases
E clique no boto Execute. Ele mostra um resultado como:
D++,+SE)-+%E
...................
master
model
msd*
(&*s
tem(d*
D++,+SE)S/0E
...............
11234
1352
4165
7315
5324
#E%+#8S
....................
(n&ll)
(n&ll)
(n&ll)
(n&ll)
(n&ll)
(9 row(s) affected)
Outro procedimento til spAhelpd6. Ele mostra informaes sobre um banco de
dados.
Sinta-e&
sp_helpdb [Banco de Dados]
+-emplo&
s()'el(d* master
O resultado ser algo como:
name d*)si:e owner d*id created stat&s
63
Apostila Microsoft SQL Server 7.0
.........
master
..........
11;33 %,
.......
sa
......
1
.......
+(r 7 166<
..................
tr&nc; log on c'=(t;
name
.......
......
master
mastlog
file
id
....
...
1
5
filename
................................
.............................
">?%SS@L1?data?master;mdf
">?%SS@L1?data?mastlog;ldf
filegro&
(
........
......
P#/%+#A
-ULL
si:e
....
..
6352
8,
1543
8,
maBsi:e
.......
.....
Unlimit
ed
Unlimit
ed
grow
t'
....
...
13C
13C
&sage
......
....
data
onlD
log
onlD
Note que todos os procedimentos armazenados do sistema tm nomes que comeam
com 'sp_' (abrev. de system procedure).Ao executar um procedimento que inicie com
'sp_' o procedimento ser procurado no banco de dados atual, se no for encontrado
ele ser procurado no banco de dados Master.
Quando um procedimento inicia com 'xp_' ele um procedimento estendido, quer dizer
que no foi escrito em SQL, mas foi compilado como parte de uma DLL.
Por exemplo, o procedimento xp_cmdshell executa um programa. Para executar o
procedimento necessrio que esteja posicionado no banco de dados Master.
Sinta-e
xp_cmdshell 'nome_arquivo'
Onde:
nome_arquivo o nome do programa que deseja executar.
+-emplo&
B()cmds'ell Ecalc;eBeE
Para mais informaes consulte SQL Server Books Online em Transact-SQL tem
Stored Procedures ou no Help existe tpicos para cada procedimento.
Com*onentes do $anco de %ados
Um banco de dados composto de o6<etos, 7ndices, tipos de dados e restri!Bes" Cada
objeto tem uma linha correspondente na tabela sysobjects. Seu tamanho mnimo 1
Mb.
45Betos
Um objeto contm dados ou interage com os dados. Cada objeto tem uma linha
correspondente a tabela sysobjects.Existem os seguintes tipos de objetos:
.a6ela [table]
Conjunto de linhas, compostas de colunas. Cada coluna
armazena um item de dado.
4is=o [view]
Uma forma alternativa de visualizar dados em uma tabela
ou mais.
Default
Um valor que inserido numa coluna caso no tenha sido
informado um valor.
&egra [rule] Valida os dados que podem ser inseridos em uma coluna.
-rocedimento
arma*enado [stored
procedure]
Uma seqncia de comandos SQL, compilados e
armazenados no banco de dados.
64
Apostila Microsoft SQL Server 7.0
%atilho [trigger]
Uma seqncia de comandos executados automaticamente
quando os dados so modificados numa tabela.
+ndices
Um ndice composto de ponteiros para os dados, ordenados pelo valor de uma ou
mais colunas. Atravs de um ndice, possvel acessar mais rapidamente os dados,
dado o valor de algumas colunas.
Ci*os de dados
Um tipo de dados especifica quais os valores que podem ser armazenados em uma
coluna.
3estri-es KconstraintsL
Uma restrio refora a integridade dos dados em uma tabela, ou entre duas tabelas,
controlando quais dados podem ser inseridos.
>strutura dos 5ancos de dados
Todo banco de dados do SQL Server constitudo de dois ou mais arquivos fsicos de
sistema operacional. Podem haver trs tipos diferentes de arquivos fsicos:
Arquvios primrios: Todo banco de dados inclui ao menos um arquivo primrio,
que feito para armazenar todos os objetos de banco de dados, tais como
tabelas e ndices. Este arquivo tambm usado para apontar para o resto dos
arquivos que constituem o banco de dados.
Arquivo secundrio: Um banco de dados s ter um arquivo secundrio se o
arqvuivo primrio no for grande o suficiente para aramzenar todos os dados.
Um banco de dados pode ter um, ou muitos arquivos secundrios.
Arquivo de log: Todo banco de dados tem um arquivo de log, que usado para
rgistrar todas informaes antes que elas sejam escritas em um arquivo primrio
ou secundrio. Esses dados so utilizados para ajudar na recuperao, no caso
de um problema com o banco de dados. Um banco de dados pode ter um ou
vrios arquivos de log se o arquivo de log original ficar sem espao.
Eomes lAgicos e f?sicos
Um dispositivo de banco de dados um arquivo do sistema operacional, por exemplo,
o banco de dados MASTER o arquivo C:\MSSQL7\DATA\master.mdf, localizado no
servidor. Como default, os bancos de dados so criados no diretrio
/";MSSQL7\DATA, mas podem ser criados em qualquer drive ou diretrio acessvel ao
SQL Server.
Cada banco de dados tem um nome f7sico (o caminho e nome do arquivo) e um nome
l9gico (nome usado dentro do SQL Server). Os dois no precisam estar relacionados.
Por exemplo, ao criar um banco de dados chamado VENDAS, o SQL Server, por
default, cria um arquivo chamado VENDAS.mdf, no diretrio /";MSSQL7;DATA.
65
Apostila Microsoft SQL Server 7.0
O nome fsico pode ser qualquer nome suportado pelo sistema operacional. O nome
lgico pode ter at 30 caracteres e geralmente s contm letras e nmeros (espaos
no so recomendados).
Su5diis-es de es*ao
Cada banco de dados dividido ainda em:
2nidades
de
aloca!=o:
Cada unidade de alocao tem 512 Kb (meio megabyte). Um banco de
dados ocupa sempre um nmero inteiro de unidades de alocao.
@tents:
Um e@tent tem 64 Kb. Cada objeto de banco de dados (tabelas, ndices)
ocupa um nmero inteiro de e@tents
-8gina
[page]:
Uma pgina (8Kb) a unidade mais bsica de armazenamento. Um objeto
do banco de dados sempre cresce em pginas e em alguns casos pode
ficar fragmentado, disperso em pginas distantes uma da outra.
(r!uios *redefinidos
Ao instalar o SQL Server, so criados quatro bancos de dados, com os seguintes
nomes lgicos:
MASTER: composto pelos arquivos master.mdf e mastlog.ldf (arquivo primrio e de log)
MSDB: composto pelos arquivos msd6data.mdf e mastlog.ldf (arquivo primrio e de log,
que por sinal o mesmo arquivo de log do banco de dados master)
MODEL: composto pelos arquivos model.mdf e modellog.ldf.
TEMPDB: composto pelos arquivos tempd6.mdf e templog.ldf
66
Apostila Microsoft SQL Server 7.0
# - Criando $ancos de %ados
/erenciando $ancos de %ados
(r!uios e gru*os de ar!uios
Criando Ca5elas
(lterando >strutura das Ca5elas
%efinindo o*-es de 5ancos de dados
Considera-es *ara mel0or gerenciamento
%ocumentando a criao de 5ancos de dados
Objetivos:
- Aprender a gerenciar bancos de dados, criando, alterando ou excluindo-os com o
Enterprise Manager ou com comandos SQL;
- Aprender a criar tabelas e alterar sua estrutura.
/erenciando $ancos de %ados
Voc cria um banco de dados [database] definindo o seu nome, nome do arquivo,
tamanho inicial, tamanho mximo e taxa de crescimeno. nicialmente apenas o
administrador do sistema (SA) pode criar, modificar o tamanho e excluir os bancos de
dados, mas ele pode conceder permisses a outros usurios para isso. Em verses
anteriores do SQL Server, havia a a necessidade de criao de dispositivos [devices], e
dentro destes deviam ser criados os bancos de dados. Bem, no existem mais
dispositivos no SQL Server 7.0.
Depois de fazer excluir ou fazer alteraes no do banco de dados recomendvel
fazer backup do banco de dados master, porque ele contm informaes sobre cada
banco de dados. Mais especificamente, a tabela de sistema s)sdata6ases, do banco de
dados master, armazena as informaes sobre todos os bancos de dados. Mais
adiante, discutiremos com mais detalhes as tabelas de sistema.
4 Log de Cransa-es KCransaction LogL
Quando voc cria um banco de dados, criado tambm um log de transa!Bes
[transaction log] para esse banco de dados. Esta uma rea reservada onde todas as
alteraes feitas no banco de dados so registradas. Qualquer comando SQL que
modifica os dados registra as alteraes antes no log de transaes, depois nas
tabelas alteradas.
Quando executado um comando que altera os dados (insere, altera ou exclui linhas
numa tabela), essa alterao salva primeiro no log de transaes, escrevendo
diretamente em disco. Os dados so alterados apenas em memria.
67
Apostila Microsoft SQL Server 7.0
Periodicamente, o SQL Server faz um chec1point, um processo que grava em disco as
alteraes feitas em memria. (Geralmente um checkpoint feito uma vez por minuto).
O log de transaes permite recuperar o banco de dados a um estado consistente, em
caso de uma pane no sistema. Sempre que o SQL Server inicia, ele verifica o log de
transaes para saber se alguma alterao foi iniciada, mas no salva nos dados. As
transaes que no foram confirmadas (commited) so canceladas.
Pode ser interessante colocar o log fisicamente em um disco diferente dos dados, o
que melhora o desempenho, pois as operaes de E/S podem ser feitas
simultaneamente nos dois.
Por padro, ao se criar um banco de dados, o log de transaes criado com 25% do
tamanho do banco de dados. Pode-se mudar o tamanho do mesmo. Recomenda-se
alocar para o log de 10 a 25% do tamanho do banco de dados.
Criando 5ancos de dados com o >nter*rise 6anager
Vamos criar um banco de dados com o SQL Enterprise Manager.
No SQL Enterprise Manager, conecte-se ao servidor desejado. Clique em "Databases"
com o boto direito e selecione %e6 Data5ase...
Em "Name" coloque Exemplo. Note que ao definir o nome, o nome do arquivo [File
Name] (que no necessariamente o mesmo nome definido em "Name", apesar de
poder ser), muda para o nome que voc est digitando seguido de _data. Se voc
clicar na guia Transaction Logs, ver que o arquivo de log est sendo criado, com o
nome do banco de dados seguido de _log, e no caminho definido para o banco de
dados.
Em "Location", o local no disco onde voc quer armazen-lo. Por padro, o SQL Server
define o local como sendo a subpasta \DATA, na pasta de instalao do SQL Server. O
tamanho usado, "Size", aparece como 1 Mb por default, substitua esse valor por 10 Mb.
O tamanho alocado para o log, por default, tambm 1 Mb, como voc pode ver
clicando na guia Transaction Logs. Mude o tamanho para 2Mb.
A opo "Automatically grow file" determina se o arquivo poder ser expandido
medida que for ficando cheio. Se essa opo estiver marcada, voc pode determinar a
taxa de crescimento (a cada vez que ele for expandido, ser expandido em N% ou N
megabytes) do arquivo [File growth] em porcentagem ou megabytes. Tambm
possvel determinar um tamanho limite para o arquivo [Restrict file growth] ou deix-lo
crescer indeterminadamente [Unrestricted file growth].
Por padro, como se percebe, o banco de dados tem como propriedades crescer
automaticamente, em incrementos de10 por cento, e sem limite de crescimento.
Clique em 4k e aguarde alguns instantes: o banco de dados ser criado, com 10 Mb
para os dados e 2 Mb para o log de transaes.
%ota& O arquivo de banco de dados gravado com a extenso .m!f ou .n!f,
dependendo se ele for um arquivo primrio ou no-primrio no banco de dados.
Veremos isso melhor em Grupos de Arquivos. O arquivo de log gravado com a
extenso .l!f.
%ota& Ao ser criado, um banco de dados uma cpia do banco de dados mo!el.
Quaisquer opes ou configuraes do banco de dados mo!el so copiadas no novo
banco de dados.
68
Apostila Microsoft SQL Server 7.0
Criando 5ancos de dados com comandos SQL
Para gerenciar os bancos de dados com comandos SQL necessrio que se esteja
posicionado no banco de dados master.
Voc tambm pode criar um banco de dados com o comando SQL, CREATE
DATABASE.
Sinta-e
C#E+E D++,+SE nome)*ancodedados
F$- G
FP#/%+#AH (-+%E I nome)lJgico)arq&ivoK
"/LE-+%E I Ecamin'o)e)nome)arq&ivoE
FK S/0E I taman'oH
FK %+LS/0E I taman'o)mMBimoH
FK "/LEN#$OP I taBa)crescimentoH
QFK;;;nH
H
FL$N $-
G
(-+%E I nome)lJgico)arq&ivoK
"/LE-+%E I Ecamin'o)e)nome)arq&ivoE
FK S/0E I taman'oH)
QFK;;nH
H
Onde:
nomeA6ancodedados o nome do banco de dados que se deseja criar.
nomeAlogicoAar:uivo um nome usado para referenciar o arquivo em quaisquer
comandos SQL executados depois que o banco de dados tiver sido criado.
-&+MA&C: Esta opo especifica o grupo de arquivos primrio. O grupo de arquivos
primrio deve contre todas as tabelas de sistema para o banco de dados. Um banco de
dados s pode ter um grupo de arquivo PRMARY. Se no for especificado algum, o
primeiro listado ser o primrio. (Veremos grupos de arquivos em breve).
3+L$AM: Aqui deve-se especificar o caminho e nome do arquivo que voc est
criando. O arquivo deve estar localizado na mesma mquina que o servidor SQL
Server. Ele pode estar em uma unidade de disco diferente contanto que esteja na
mesma mquina.
S+D: Especifica o tamanho em megabytes que voc quer alocar para o seu banco de
dados. O valor mnimo 1MB, e o padro 3MB para arquivos de dados, e 1MB para
arquivos de log. (Obs.: o padro aqui diz respeito criao do banco de dados por
comandos SQL. Como vimos, quando criado pelo Enterprise Manager, o padro 1MB
de tamanho tanto para arquivos de banco de dados quanto para arquivos de log).
MA'S+D: Esta opo lhe permite especificar o tamanho mximo at o qual seu
arquivo pode crescer. O padro permite que seu arquivo cresa at que o disco esteja
cheio.
3+L%&O,.E: Especifica a taxa de crescimento do arquivo. Este ajuste no pode
exceder a configurao de MAXSZE. Um valor de 0 indica que no permitido
crescimento. O padro 10 por cento, significando que a cada vez que o arquivo
cresce, ser alocado um espao adicional de 10 por cento para ele. Um banco de
69
Apostila Microsoft SQL Server 7.0
dados que esteja em mais de um arquivo (veja Arquivos para maiores detalhes), s
expandido depois que o ltimo arquivo estiver cheio.
Na opo LOG ON se aplicam as mesmas definies acima, exceto pelo fato de no
ser o arquivo de dados, mas sim o arquivo de log de transaes que estar sendo
criado.
Caso LOG ON seja omitido, criado um nico arquivo de log com um nome gerado
pelo sistema e um tamanho que seja 25 por cento da soma dos tamanhos de todos os
arquivos de dados para o banco de dados.
%ota& A opo FOR LOAD pode ser adicionada antes da declarao LOG ON. No
recomenda-se us-la, j que existe apenas para compatibilidade com verses
anteriores. Esta opo coloca a opo for !5o use onl0 como verdadeira, e o status
como para carregar [for load]. Essa opo no necessria, pois no SQL Server 7,
temos o comando RESTORE pode recriar um banco de dados como parte de uma
operao de recuperao.
Como exemplo, vamos criar um banco de dados, entrando com o seguinte cdigo SQL
no Query Analyzer.
C#E+E D++,+SE EBem(lo5
$-
P#/%+#A (-+%EIEBem(lo5)dataK
"/LE-+%E I EC>?%SS@L1?D++?EBem(lo5;mdfEK
S/0E I 13%,K
%+LS/0E I 19%,K
"/LEN#$OP I 59C)
L$N $-
(-+%E I EBem(lo5)logK
"/LE-+%E I EC>?%SS@L1?D++?EBem(lo5;ldfEK
S/0E I 2%,K
%+LS/0E I <%,K
"/LEN#$OP I 5%,)
Abaixo, vemos o resultado da execuo deste comando:
70
Apostila Microsoft SQL Server 7.0
Criando um 5anco de dados com o assistente de criao de 5anco de dados
O assistente de criao de banco de dados te encaminha atravs dos passos
necessrios para a criao de um banco de dados e de um log. Para inici-lo, faa o
seguinte:
1. A partir do Enterprise Manager, com algum servidor selecionado, selecione
Tools | Wizards. Todos os objetos que tm assistentes so listaos em ordem
alfabtica.
2. Depois que voc selecionar Databases (bancos de dados) a rvore deve se
expandir para lhe mostrar uma lista dos assistentes disponveis para bancos de
dados.
3. Selecione Create Database Wizard. Aparece a tela de boas-vindas. Clique em
Next para continuar.
4. Escolha o nome do banco de dados, e o local onde ficaro seus arquivos de
dados e de log. Clique em Next.
5. Mude o nome do arquivo e seu tamanho inicial, conforme desejar.
6. Por fim aparecem as opes, que so no permitir o crescimento do banco de
dados [Do not automatically grow the database]. Caso voc escolha por crescer
automaticamente o banco de dados [Autmotaically grow database files], voc
tem as opes de increment-lo em megabytes [Grow the files in Megabytes], ou
porcentagem [Grow the files by percent], e definir as taxas de incremento. Por
fim, voc pode limitar o tamanho mximo do arquivo [Restrict file growth to (MB)]
71
Apostila Microsoft SQL Server 7.0
ou deix-lo crescer o quanto for necessrio [Unrestricted File Growth]. Faa suas
opes e clique em Next para continuar.
7. Ento, defina o nome do arquivo e tamanho inicial para o arquivo de log. Clique
em Next para continuar.
8. Finalmente, defina o mesmo citado no item 6 acima, para o arquivo de log.
Clique em Next.
9. Aparece a tela final, mostrando-lhe o que voc definiu. Se estiver satisfeito,
clique em Finish para criar o banco de dados. Caso contrrio, clique em Back e
altere as opes que achar necessrio.
(lterando um 5anco de dados *elo >nter*rise 6anager
Aps criar um banco de dados, voc pode aument-lo ou reduz-lo. No Enterprise
Manager, clique no banco de dados com o boto direito e em /roperties. Voc ver os
tamanhos atuais dos dados e do log e quanto espao disponvel existe em cada um.
Para aumentar o tamanho do banco de dados, informe o novo tamanho em "Space
Allocated" (que deve ser maior que o tamanho original). Note que voc s pode alterar,
na guia General, o espao alocado para o banco de dados, e as opes de
crescimento [File Properties]. s clicar em Ok ou em Apply que as mudanas so
aplicadas.
Vamos aumentar o tamanho do banco de dados de 10 para 11 Mb. Basta para isso,
digitar 11 em "Space Allocated", e clicar em Ok.
Para reduzir um banco de dados pelo Enterprise Manager, selecione o banco de dados
que se quer reduzir, clique com o boto direito nele, selecione All Tasks | Shrink
database, como mostrado abaixo
72
Apostila Microsoft SQL Server 7.0
Na janela que aparece a seguir, voc tem algumas opes, que so:
Reorganize database: esta opo, se selecionada, faz uma espcie de
desfragmentao do banco de dados, agrupando as pginas preenchidas, e
deixando as pginas livres no fim do arquivo.
Shrink database files: esta opo disponnibiliza o espao livre que houver no fim
do arquivo, para o sistema operacional.
(lterando um 5anco de dados com comandos SQL
Para expandir o banco de dados, pode-se usar ALTER DATABASE. Para utilizar este
comando, deve-se estar posicionado no banco de dados master:
Sinta-e
+LE# D++,+SE nome)*ancodedados
%$D/"A "/LE
(-+%E I nome)logico)arq&ivoK
S/0E I novo)taman'o
)
Onde:
nomeA6ancodedados o nome do banco de dados que se deseja alterar.
nomeAlogicoAar:uivo o nome lgico dado ao arquivo na sua criao.
novoAtamanho o tamanho novo do banco de dados. Esse tamanho fornecido em
MegaBytes.
Por exemplo:
Vamos fazer o banco de dados aumentar para 12 Mb. Para isso, digite:
+LE# D++,+SE EBem(lo5
%$D/"A "/LE
73
Apostila Microsoft SQL Server 7.0
(-+%E I EBem(lo5)dataK
S/0E I 15%,
)
Para expandir o log de transaes do banco de dados Exemplo2 para 3MB, faa:
+LE# D++,+SE EBem(lo5
%$D/"A "/LE
(-+%E I EBem(lo5)logK
S/0E I 7%,
)
Com o comando SQL ALTER DATABASE, tambm possvel acrescentar arquivos ao
banco de dados. Para isso, usa-se a opo ADD FLE. Vamos adicionar um arquivo
secundrio ao banco de dados Exemplo2, com 4MB iniciais, e tamanho mximo de
7MB. Veja mais sobre arquivos secundrios.
+LE# D++,+SE EBem(lo5
+DD "/LE (-+%EIEEBem(lo5)dados5EK
"/LE-+%EIEC>?mssql1?data?EBem(lo5;ndfEK
S/0EI2%,K
%+LS/0EI1%,)
Para reduzir o tamanho de um banco de dados, usa-se o comando DBCC
SHRNKDATABASE. Este comando reduz o tamanho de todos os arquivos de dados
no banco de dados mas no diminui o tamanho dos arquivos de log.
Sinta-e
D,CC SP#/-8D++,+SE
(-ome),ancodeDados K(orcentagem)final
FK G-$#U-C+E R #U-C+E$-LAQH
)
Onde:
nome6ancodedados o nome do banco de dados que se deseja alterar o tamanho.
porcentagemAfinal a porcentagem de espao livre a ser deixada no banco de dados
depois que o mesmo for reduzido.
$O.&2$/A. faz com que o espao liberado permanea nos arquivos de banco de
dados. Se no especificado, o espao liberado tornado disponvel para o sistema
operacional.
.&2$/A.O$LC faz com que o espao no utilizado em arquivos de dados seja
liberado para o sistema operacional e encolhe o arquivo at o ltimo espao utilizado,
reduzindo o tamanho do arquivo sem mover quaisquer dados. Nenhuma tentativa
feita para relocar colunas em pginas no-alocadas. porcentagemAfinal ignorado
quando TRUNCATEONLY for utilizado.
No se pode diminuir o tamanho do banco de dados para um tamanho menor do que o
tamanho mnimo do arquivo, que espcificado quando o arquivo foi originalmente
criado.
%ota& O banco de dados no pode ficar menor que o tamanho do banco de dados
mo!el.
Pode-se tambm reduzir todo o banco de dados usando o comando DBCC
SHRNKFLE. Este comando reduz o tamanho de um arquivo de dados especfico em
um banco de dados.
Sinta-e
D,CC SP#/-8"/LE (Gnome_arquivoRid_arquivoQK Fnovo_tamanhoHFK
74
Apostila Microsoft SQL Server 7.0
GE%PA"/LE R -$#U-C+E R #U-C+E$-LAQH)
Todas as opes j foram explicadas para o comando DBCC SHRNKDATABASE, com
duas excees:
Aqui se especifica o nome do arquivo, e no do banco de dados.
O novo tamanho dado em MB, no em porcentagem como acima.
A opo EMPTYFLE migra todos os dados do arquivo especificado para outros
arquivos no mesmo grupo de arquivos. O SQL Server no permite mais que
dados sejam colocados no arquivo em que foi utilizada a opo EMPTYFLE.
Esta opo permite que o arquivo seja excludo com o comando ALTER
DATABASE, com a opo REMOVE FLE.
%ota& Quando se usa qualquer das opes EMPTYFLE, NOTRUNCATE ou
TRUNCATEONLY, no se especifica o novo tamanho.
Como exemplo, vamos reduzir o arquivo secundrio do banco de dados Exemplo2
(Exemplo2.ndf), que chamamos de Exemplo2_Dados2 para 2MB. Para isso, entre com
o seguinte comando no Query Analyzer:
D,CC SP#/-8"/LE (EBem(lo5)Dados5K5)
O banco de dados a ser reduzido no precisa estar em modo de nico usurio, outros
usurios podem estar trabalhando com o banco de dados quando ele reduzido.
>:cluindo um 5anco de dados *elo >nter*rise 6anager
Para excluir um banco de dados no Enterprise Manager, clique no Banco de Dados e
com o boto direito , clique em Delete. Confirme a excluso. Aps excluir um banco de
dados, no possvel recuperar os dados, a no ser que voc tenha feito um backup.
Como iremos usar este banco de dados nos exemplos posteriores, crie-o novamente
com as mesmas caractersticas que foi criado anteriormente.
>:cluindo um 5anco de dados com comandos SQL
Para excluir um banco de dados, usa-se:
Sinta-e
D#$P D++,+SE nome)*ancodedadosFK nome)*ancodedados;;;H
Onde:
nomeA6ancodedados o nome do banco de dados que se deseja excluir.
Voc pode excluir um banco de dados ou mltiplos banco de dados.
Exemplo:
Para excluir vrios banco de dados ao mesmo tempo , usa-se:
D#$P D++,+SE EBem(loK EBem(lo5
Se quisssemos ter excluido somente o banco de dados Exemplo2, teramos usado:
D#$P D++,+SE eBem(lo7
Se executar este comando crie o banco de dados Exemplo novamente, pois iremos
us-los nos exemplos posteriores.
75
Apostila Microsoft SQL Server 7.0
(r!uos e gru*os de ar!uios
Arquivos e grupos de arquivos so a nova estrutura de armazenamento do SQL Server.
Um banco de dados armazenado em uma estrutura de arquivos, e ento um grupo de
arquivos padro criado quando voc cria seu banco de dados. Outros arquivos
podem ser acrescentados ao seu projeto. Estes arquivos podem ser agrupados com
base em grupos de arquivos definidos pelo usurio. Na maioria dos casos, voc usar
apenas o grupo de arquivos padro, e ter apenas um arquivo para a sua estrutura de
banco de dados. Como veremos, entretanto, assim que voc estiver familizarizado com
o conceito de arquivo e grupo de arquivo, o desempenho pode ser aumentado e a
administrao tornada mais fcil.
O uso de grupos de arquivos uma tcnica avanada de projeto de banco de dados.
Voc deve compreender a estrutura, transaes, consultas, e dados de seu banco de
dados profundamente de modo a determinar a melhor maneira de aramazenar tabelas
w ndices em grupos de arquivos especficos. Em muitos casos, o uso das capacidades
de sistemas RAD (Redundant Array of nexpensive Disks) fornece quase o mesmo
ganho em desempenho que voc poedr obter com o uso de grupos de arquivos sem o
encargo administrativo extra de definir e gerenciar grupos de arquivos.
(r!uios
Como dito anteriormente, o SQL Server cria bancos de dados e logs baseado em uma
estrutura de arquivos ao invs da especificao de Dispositivo [Device] de verses
anteriores. sso permite que os arquivos de bancos de dados e de log sejam escalados
com maior facilidade. Cada arquivo pode ser usado por apenas um banco de dados.
Ele no pode ser compartilhado entre vrios bancos de dados. Quando um banco de
dados for excludo, seja atravs de DROP DATABASE ou do Enterprise Manager, o
arquivo associado tambm excludo.
O SQL Server tem trs tipos de arquivos:
/rim#rio. O arquivo primrio o ponto de partida do banco de dados e aponta
para o resto dos arquivos no banco de dados. Todo banco de dados deve ter ao
menos um arquivo de dados primrio. A extenso padro e recomendada
.m!f.
Secun!#rio. Arquivos de dados secundrios so os outros (no-primrios)
arquivos no banco de dados. Alguns bancos de dados podem no ter quaisquer
arquivos secundrios de dados, enquanto outros podem ter mltiplos arquivos
secundrios. A extenso padro e recomendada .n!f.
76
Apostila Microsoft SQL Server 7.0
Log. Um arquivo de log uma rea de armazenamento para todas as mudanas
nos bancos de dados. Tdo banco de dados deve ter pelo menos um arquivo de
log. A extenso recomendada .l!f.
%ota& o SQL Server no te fora a usar a extenso recomendada para os arquivos.
Elas existem simplesmente para te ajudar a gerenciar seus arquivos de bancos de
dados.
/ru*os de ar!uios
Os arquivos de bancos de dados so agrupados para fins de alocao e administrao.
Alguns sistemas podem ter seu desempenho aumentado pelo controle do
armazenamento de dados e ndices em unidades e disco especficas. Grupos de
arquivos podem auxiliar nesse processo. O administrador de sistema pode criar grupos
de arquivos para cada unidade de disco, e ento definir que certas tabelas, ndices,
entre outros objetos, sejam armazenados em grupos de arquivos especficos.
Quando um banco de dados criado, o grupo de arquivos primrio contm o arquivo
primrio.
Outros grupos de arquivos (grupos de arquivos definidos pelo usurio) podem ser
criados e agrupados para fins de alocao e administrao. Voc cria um grupo de
arquivos como uma coleo nomeada de arquivos. Nenhum arquivo pode ser membro
de mais de um grupo de arquivos.
Existem trs tipos de grupos de arquivos
/rim#rio. O grupo de arquivo primrio contm o arquivo de dados primrio e
quaisquer outros arquivos de dados no atribudos a outros grupos de arquivos.
Todas as tabelas de sistema so armazenadas no grupo de arquivos primrio.
Defini!o pelo usu#rio 7"ser)!efine!8. Grupos de arquivos definidos pelo
usurio so criados usando a palavra-chave FLEGROUP quando se utiliza os
comandos CREATE DATABASE ou ALTER DATABASE.
/a!ro. O grupo de arquivos padro contm todas as tabelas e ndices que no
tm um grupo de arquivo especificado quando eles so criados. Em cada banco
de dados, apenas um grupo de arquivos de cada vez pode ser o grupo de
arquivos padro.
%ota& Arquivos de log nunca fazem parte de um grupo de arquivos. O espao do log
gerenciado separadamente do espao dos dados.
Vamos agora criar um grupo de arquivos chamado Grupo1_Exemplo2 no banco de
dados Exemplo2, e ento adicionar um arquivo secundrio chamado Teste ao banco
de dados Exemplo2, com o nome fsico de TesteGrupo1_Exemplo2.ndf, com 3MB de
tamanho, mas este arquivo ser adicionado ao grupo Grupo1_Exemplo2. Entre com o
seguinte cdigo SQL:
+LE# D++,+SE EBem(lo5
+DD "/LEN#$UP Nr&(o1)EBem(lo5
N$
+LE# D++,+SE EBem(lo5
+DD "/LE
(-+%EIesteK
"/LE-+%EIEC>?%SS@L1?D++?esteNr&(o1)EBem(lo5;ndfEK
77
Apostila Microsoft SQL Server 7.0
S/0EI7%,)
$ "/LEN#$UP Nr&(o1)EBem(lo5
N$
Note que o parmetro TO FLEGROUP simplesmente especifica o grupo em que o
arquivo criado deve ser adicionado.
Agora, vamos usar o comando CREATE DATABASE para criar um arquivo de dados
primrio, um grupo de arquivos definido pelo usurio, e um arquivo de log. Ento,
emitiremos o comando ALTER DATABASE para mudar o grupo de arquivos padro
para o grupo de arquivos definido pelo usurio.
USE %+SE#
N$
.. dois traSos indicam &m comentMrio
.. C#/+# $ ,+-C$ DE D+D$S
C#E+E D++,+SE EBem(lo-ovo
$-
P#/%+#A (-+%EIEBem(lo-ovo)dataK
"/LE-+%E I Ec>?mssql1?data?EBem(lo-ovo;mdfEK
S/0EI13%,K
%+LS/0EI19%,K
"/LEN#$OPI13C)K
"/LEN#$UP EBem(lo-ovo)"N1
(-+%EIEBem(lo-ovo)"N1)D+1K
"/LE-+%EIEc>?mssql1?data?EBem(lo-ovo)"N1)D+1;ndfEK
S/0EI7%,K
%+LS/0EI13%,K
"/LEN#$OPI13C)K
(-+%EIEBem(lo-ovo)"N1)D+5K
"/LE-+%EIEc>?mssql1?data?EBem(lo-ovo)"N1)D+5;ndfEK
S/0EI7%,K
%+LS/0EI13%,K
"/LEN#$OPI13C)
L$N $-
(-+%EIEBem(lo-ovo)logK
"/LE-+%EIEc>?mssql1?data?EBem(lo-ovo;ldfEK
S/0EI9%,K
%+LS/0EI19%,K
"/LEN#$OPI13C)
N$
.. Use +LE# (ara m&dar o gr&(o de arq&ivos (adrTo
+LE# D++,+SE EBem(lo-ovo
%$D/"A "/LEN#$UP EBem(lo-ovo)"N1 DE"+UL
N$
,isuali@ando informa-es de ar!uios e gru*os de ar!uios
Os seguintes procedimentos armazenados do sistema exibem informaes sobre
grupos de arquivos
sp9,elpfile [fileAname]: exibe os nomes fsicos e atributos dos arquivos
associados com o banco de dados atual. Use este procedimento armazenado
para determinar os nomes dos arquivos a serm anexados ou removidos do
servidor.
78
Apostila Microsoft SQL Server 7.0
sp9,elpfilegroup [filegroupAname]: exibe os nomes e atributos de grupos de
arquivos associados com o banco de dados atual.
Criando Ca5elas
Uma tabela [table] um objeto do banco de dados, composto de zero ou mais linhas
[rows], contendo os dados, organizados em uma ou mais colunas [columns]. Para criar
a tabela, voc pode usar o Enterprise Manager ou comandos SQL DDL (Data Definition
Language - linguagem de definio de dados). Antes de criar suas tabelas,
importante levar em conta um bom projeto do banco de dados, que determina quais as
informaes a serem guardadas. Aps criar as tabelas, voc utiliza comandos SQL
DML (Data Manipulation Language - linguagem de manipulao de dados) para inserir
novas linhas numa tabela, alterar colunas das linhas existentes, excluir linhas e
consultar dados.
Ci*os de %ados
Cada coluna tem um tipo de dados [datatype], que determina que tipo de informao
(caracteres, nmeros, datas/horas) pode ser colocada na coluna e quais as
caractersticas desses dados. O tipo determinado quando a tabela criada e no
pode ser alterado posteriormente. Voc pode usar tipos de dados do sistema [system
datatypes], predefinidos, ou criar novos tipos de dados, chamados tipos de dados do
usu8rio [user datatypes], baseados nos tipos preexistentes.
Os tipos de dados existentes so:
/ara !a!os 1ipo 1aman,o
Caractere char(n), varchar(n), nvarchar(n)? nchar(n) at n bytes
Numrico exato decimal(p,e) ou numeric(p,e) -depende-
Numrico aproximadofloat, real 8, 4 bytes
Numrico inteiro int? smallint? tin)int 4, 2, 1 byte
Monetrio mone)? smallmone) 8, 4 bytes
Data e hora datetime? smalldatetime 8, 4 bytes
Binrio 6inar)(n)? var6inar)(n) n bytes
Texto e imagens te@t? image? nte@t -varivel-
Outros 6it? timestamp 1 bit, 8 bytes
Para dados contendo caracteres, char(n) armazena um nmero fixo de caracteres. Por
exemplo, uma coluna do tipo char#F0( tem sempre 30 caracteres. Se forem informados
menos, o restante completado com espaos. J o tipo varchar(n) armazena uma
quantidade varivel de caracteres, at o mximo informado. Os tipos nchar(n) e
nvarchar(n), armazenam dados Unicode, de comprimento fixo ou varivel, e usam o
conjunto de caracteres UNCODE UCS-2.
Os tipos "numricos exatos", decimal e numeric, permitem armazenar dados exatos,
sem perdas devidas a arredondamento. Ao usar esses tipos, voc pode especificar
uma precis=o, que indica quantos dgitos podem ser usados no total e uma escala, que
indica quantos dgitos podem ser usados direita do ponto. Por exemplo, decimal(9,2)
permite guardar 7 dgitos antes do ponto decimal e 2 aps, num total de 9, assim o
maior valor possvel 9999999,99.
79
Apostila Microsoft SQL Server 7.0
Os tipos "numricos inexatos", float e real, armazenam dados numricos, mas nem
sempre mantm a preciso suficiente para armazenar corretamente nmeros de vrios
dgitos.
O tipo mone) usado para valores monetrios, ocupando 8 bytes em disco e
permitindo valores entre -922.337.203.685.477,5808 e +922.337.203.685.477,5807
(922 trilhes). O tipo smallmone) permite valores entre - 214.748,3648 e
+214.748,3647 (214 mil) e ocupa 4 bytes em disco.
Dos tipos inteiros, int usa 32 bits (4 bytes), permitindo armazenar at +/-2.147.483.647,
smallint usa 16 bits (2 bytes) permitindo +/-32767 e tin)int usa 8 bits (1 byte),
permitindo nmeros no-negativos de 0 a 255.
O tipo datetime armazena valores contendo a data e hora, com preciso de 1/300 de
segundo, entre 1 de janeiro de 1753 e 31 de dezembro de 9999 (o sculo sempre
armazenado). O tipo smalldatetime ocupa menos espao e armazena datas e horas de
1 de janeiro de 1900 at 6 de junho de 2079, com preciso de 1 minuto.
Tipos binrios so usados para dados que o SQL Server no interpreta, por exemplo, o
contedo de um arquivo binrio. O tipo te@t usado para colunas com dados "memo",
ou seja, com texto de tamanho varivel; o tipo nte@t armazena dados Unicode de
tamanho varivel. O tipo image armazena imagens, tambm de tamanho varivel.
Os tipos te@t e nte@t, armazenam dados de tamanho varivel, mas podem armazenar
1.073.741.823 caracteres, para o caso do nte@t, e 2.146.483.647 caracteres para o
caso do tipo te@t. Enquanto isso, os tipos varchar e nvarchar armazenam "somente"
8000 caracteres (varchar) ou 4000 caracteres (nvarchar)
O tipo 6it armazena valor 1 ou 0. Uma coluna do tipo timestamp no pode ser alterada
pelo usurio. Ela definida automaticamente com a data e hora atual quando a linha
inserida ou atualizada.
%efinindo noos ti*os de dados
Voc pode criar seus prprios tipos de dados, para facilitar a padronizao, usando o
procedimento de sistema spAaddt)pe ou o Enterprise Manager.
Usando o procedimento de sistema spAaddt)pe"
Sinta-e
s()addtD(e nome)ti(oK ti(o)dado FK valor)n&llH
Onde:
nomeAtipo o nome do tipo de dado que deseja criar.
tipoAdado o tipo de informao que ira conter este tipo criado. Exemplo: char,
int,..etc.
valorAnull identifica se este tipo pode ou no conter valores nulos.
Exemplos:
No Query Analyzer na lista "DB", selecione o banco de dados "Exemplo". Digite e
execute os seguintes comandos:
s()addtD(e c(fK Ec'ar(11)E
go
s()addtD(e nome(essoaK Ec'ar(93)E
go
s()addtD(e valorgrandeK En&meric(19K5)E
go
80
Apostila Microsoft SQL Server 7.0
s()addtD(e ti(oo(eracaoK ESmall/ntEK -$-ULL
A palavra reservada go indica final de comando.
Com isso, usar o tipo 'cpf', por exemplo, o mesmo que usar char(11), mas mais
intuitivo e fcil de entender. Se voc especificar NONULL no tipo significa que ele no
aceita valores nulos.
Voc pode excluir um tipo com spAdropt)pe:
Sinta-e
s()dro(tD(e nome)ti(o
Onde:
nomeAtipo o nome do tipo de dados que deseja excluir.
Exemplo:
Para executar este exemplo continue posicionado no banco de dados Exemplo.
s()dro(tD(e nome(essoa
Para criar, alterar ou excluir tipos com o Enterprise Manager, voc deve abrir $ome-do-
6anco-de-dados clique em User Defined Datatypes com o boto direito clique em
2efres, (para atualizar os dados ) e com o boto direito clique em %e6
"serDefine!Data10pe....
Ser mostrada a seguinte tela:
'Name ' indica o nome do tipo de dados.
'Data type' o tipo de informao que ir conter esse tipo criado.
'Length' indica o tamanho do tipo de dado.
'Allow Null' se esta opo estiver marcada indica que o tipo criado aceita valores nulos.
As opes 'Default' e 'Rule' permitem que voc selecione uma regra ou um default, se
houver algum, e ligue-o ao tipo de dados definido por voc.
Para apagar algum tipo de dados, selecione-o do lado direito (quando voc estiver com
User Defined DataTypes selecionado do lado esquerdo do Enterprise Manager). Clique
com o boto direito no tipo de dados que voc quer excluir, e ento selecione a opao
Delete.
81
Apostila Microsoft SQL Server 7.0
Apague todos os tipos de dados e crie o tipo de dados Sexo. Em "Name" coloque
dmSexo, "Data Type" selecione char, "Length" coloque 1. Mais tarde veremos como
restringir o valor de um tipo.
Criando uma ta5ela com o >nter*rise 6anager
Um banco de dados pode ter no mximo 2 bilhes de tabelas e cada tabela pode ter no
mximo 1024 colunas.
Para criar uma tabela com o Enterprise Manager, abra o banco de dados Exemplo.
Dentro dele, selecione o item Tables. Clique em "Tables" com o boto direito e em %e6
1a5le. Entre com o nome da tabela a ser criada. No caso Cliente; clique em Ok. Entre
com os campos da tabela, conforme mostrado abaixo:
Veja que no ttulo da janela, aparece o nome do banco de dados em que a tabela est
sendo criada (no caso 'exemplo').
As colunas para as quais a opo "Nulls" est marcada permitem o valor NULL, ou
seja, podem ser deixados sem preencher ao inserir dados. J os outros so NOT
NULL, ou seja, obrigatrio informar um valor para eles.
Note que definimos algumas colunas com o tipo char, como CPF e UF, porque elas
geralmente tm tamanho fixo. J outras como Nome, Cidade e Pas, geralmente tm
tamanho varivel, por isso, para economizar espao no banco de dados, usamos
varchar.
A coluna Default especifica um valor default que inserido caso nada tenha sido
informado. No caso da data de cadastro, usamos a funo getdate(), que retorna a data
do dia. No caso do pas, o default a string "Brasil" caso nada seja informado.
Agora clique no boto "Save" para salvar a tabela.
%ota& Voc pode ter um identificador exclusivo em todo o banco de dados, para uma
coluna. Para isso, selecione o tipo de dados da coluna como uni.uei!entifier, e
marque a caixa de verificao sRowGuid. sso far com que seja atribudo um valor
82
Apostila Microsoft SQL Server 7.0
default [Default Value] igual a (newid()). Veja mais sobre identificadores globalmente
exclusivos.
Criando ta5elas com comandos SQL
Uma tabela tambm pode ser criada com o comando CREATE TABLE do SQL. Por
exemplo, a mesma tabela do exemplo anterior poderia ser criada com o comando
abaixo, iremos mudar somente o nome da tabela e esta tabela ser criada no banco de
dados Exemplo:
C#E+E +,LE Cliente1
(
CodCliente int -$ -ULLK
-ome varc'ar(93)K
CP" varc'ar(11) -ULLK
DataCadastro datetime -$ -ULL DE"+UL (getdate())K
Cidade varc'ar(53) -ULLK
U" c'ar(5) -ULLK
PaUs varc'ar(53) DE"+UL (E,rasilE)
)
Note que a lista de colunas delimitada com parnteses. Para cada coluna, deve-se
informar NULL ou NOT NULL, indicando se esta permite valores nulos ou no. Caso
essa opo no seja informada, como no caso de 'Nome' e 'Pas' acima, o SQL Server
assume que a coluna NOT NULL (geralmente).
Para saber se o SQL usa NULL ou NOT NULL por default execute o procedimento sp9
!5option. Se aparecer na primeira linha ''ANS null default' indica que o valor default
NULL, se no aparecer esta string a opo default NOT NULL.
Sinta-e
s()d*o(tion nome)*ancodedados Eansi n&ll defa&ltEK o(cao
Onde:
nomeA6ancodedados o nome do banco de dados em que se deseja verificar a opo
default.
opcao se for true o valor default ser NULL, se for false o valor default ser NOT NULL.
Observao: O padro ANS utiliza Null como default, ao desativar esta opo no SQL,
pode ser que esta opo na sua tabela no esteja de acordo com o que voc esperava.
Veja outros parmetros de sp_dboption em "Definindo opes do banco de dados"
Execute os seguintes comandos para criar duas tabelas no banco de dados Exemplo:
C#E+E +,LE De(artamento
(
CodDe(artamento intK
-ome varc'ar(93)K
CodDe(tS&(erior int -&ll
)
go
C#E+E +,LE "&ncionario
(
Cod"&ncionario intK
-ome varc'ar(93)K
CodDe(artamento intK
#amal int -&llK
83
Apostila Microsoft SQL Server 7.0
Salario moneDK
Data+dmissao datetimeK
DataCadastro datetime -$ -ULL DE"+UL (getdate())K
SeBo c'ar(1)
)
>:cluindo uma ta5ela
Para excluir uma tabela (chamado de drop no SQL Server) com o Enterprise Manager,
clique na tabela com o boto direito, clique em Delete e pressione o boto Drop All .
Como iremos usar a tabela Cliente nos exemplos posteriores , crie-a novamente com a
mesma estrutura definida anteriormente.
84
Apostila Microsoft SQL Server 7.0
Atravs do SQL, pode-se usar o comando DROP TABLE.
Sinta-e&
D#$P +,LE FF*anco)dados;H$wner;Hnome)ta*ela
FK FF*anco)dados;Howner;Hnome)ta*ela;;;H
Onde:
6ancoAdados o nome do banco de dados a que a tabela pertence. Essa opo
opcional, ela ser usada somente quando se estiver posicionado num determinado
banco de dados e se deseja excluir a tabela de outro banco de dados.
nomeAta6ela o nome da tabela que se deseja remover.
Este procedimento pode ser usado para excluir vrias tabelas ao mesmo tempo.
Exemplos:
Dro( a*le Cliente1
ou
Dro( a*le EBem(lo;d*o;cliente1
(lterando a estrutura das ta5elas
Depois que uma tabela for criada, pode-se mudar vrias das opes que foram
definidas qunado a tabela foi originalmente criada, incluindo:
Colunas podem ser acrescentadas, modificadas ou excludas. Por exemplo, o
nome da coluna, comprimento, tipo de dados, preciso, escala, e o fato de
aceitar ou no valores nulos, podem todos ser mudados, embora existam
algumas restries.
Restries PRMARY KEY e FOREGN KEY podem ser acrescentadas ou
excludas.
Restries UNQUE e CHECK e definies DEFAULT podem ser acrescentadas
ou excludas.
Uma coluna identificadora pode ser acrescentada ou removida usando a
propriedade DENTY ou ROWGUDCOL. A propriedade ROWGUDCOL
tambm pode ser adicionada ou removida de uma coluna existente, embora
apenas uma coluna em uma tabela possa ter a propriedade ROWGUDCOL de
cada vez.
O nome ou o dono de uma tabela tambm podem ser modificados. Quando voc faz
isso, tambm deve-se mudar o nome da tabela em quaisquer gatilhos, procedimentos
85
Apostila Microsoft SQL Server 7.0
armazenados, scripts SQL, ou outro cdigo de programao que utilize o nome ou
proprietrio antigo da tabela.
%ota& importante considerar que a mudana de tipo de dados em uma coluna pode
causar truncamento dos dados, ou mesmo ser impossvel de ser feita (por exemplo, se
voc quiser converter um tipo char para um tipo inteiro e j houver valores no-
numricos armazenados nessa coluna).
(lterando a ta5ela com o >nter*rise 6anager
Essas modificaes podem ser feitas no Enterprise Manager. Por exemplo, clique na
tabela "Cliente" (dentro de "Exemplo\Tables", as tabelas do banco de dados Exemplo
aparecero do lado direito do Enterprise Manager) com o boto direito e clique em
Design 1a5le. No final da lista de colunas, acrescente uma nova coluna, com o nome
"dade", do tipo "tinyint" (idades no sero maiores que 255). Note que quando voc
adiciona uma nova coluna, a opo "Allow Nulls" deve ficar marcada.
Altere o comprimento de Cidade para 30. Tambm clique na coluna "UF" e altere o
nome para "Estado". Aps fazer isso, clique no boto "Save" para atualizar a tabela.
(lterando a ta5ela com comandos SQL
Tambm possvel alterar uma tabela com comandos SQL. Para isso, use o comando
ALTER TABLE. Abaixo ser mostrada uma sintaxe simples deste procedimento:
Sinta-e&
+LE# +,LE F*anco)dados;Fowner;HHnome)ta*ela
G
F+LE# C$LU%- nome)col&na
Gnovo)ti(o)de)dados F((recisToFK escalaH)H
R +DD Gnome)col&na dados)col&na
R FO/P CPEC8 R O/P -$CPEC8HQ
Onde:
6ancoAdados o nome do banco de dados a que a tabela pertence. Essa opo
opcional, ela ser usada somente quando se estiver posicionado num determinado
banco de dados se e deseja excluir a tabela de outro banco de dados.
nomeAta6ela o nome da tabela que deseja alterar.
86
Apostila Microsoft SQL Server 7.0
nomeAcoluna a coluna que se quer alterar.
novoAtipoAdeAdados o tipo de dados que a coluna aceitar a partir de agora.
WTH CHECK | WTH NOCHECK Especificam se os dados na tabela devem ou no ser
validados contra uma nova ou reabilitada restrio FOREGN KEY ou CHECK. Se no
especificada, assume-se WTH CHECK para novas restries e WTH NOCHECK para
restries reabilitadas. Veja mais sobre restries.
Exemplo:
+LE# +,LE Cliente
+DD ender varc'ar(93) -ULL
N$
+LE# +,LE Cliente
+LE# C$LU%- C/D+DE V+#CP+# (59)
Para renomear uma coluna, usa-se o procedimento spArename:
s()rename ECliente;enderEK Endereco
%ota& Perceba que ao
executar o comando
acima, voc recebe
um aviso que diz:
"Cuidado: Mudar
qualquer parte do
nome de um objeto
pode invalidar scripts
e procedimentos
armazenados.
Criando um FScri*tF das ta5elas
Algumas tarefas so mais fceis de fazer com os comandos CREATE TABLE. Por
exemplo, para recriar um banco de dados em outro servidor, voc pode salvar um
arquivo (um script) contendo todos os comandos SQL CREATE TABLE usados para
criar suas tabelas. Um script em geral um arquivo contendo comandos SQL.
Se voc no usou um comando SQL, pode fazer o prprio SQL Server gerar um script
para voc a partir da tabela existente. Para isso, no Enterprise Manager, clique no
nome da tabela com o boto direito, e em "All tasks", e depois em "Generate SQL
Scripts". Por enquanto, deixe as opes default. Clique em "Preview" para ver como
87
Apostila Microsoft SQL Server 7.0
ficam os comandos. Depois clique em "Save As..." para salvar o arquivo Script. Salve o
arquivo com o nome Cliente (a terminaao .SQL j colocada por padro).
Feche as janelas.
Para executar esse script em outro servidor ou outro banco de dados, basta abrir o
SQL Query Analyzer (niciar | Programas | Microsoft SQL Server 7.0 | Query Analyzer),
abrir o arquivo de script e execut-lo. Para abrir o arquivo Script clique em e procure o
nome do arquivo. Note que voc pode tambm modificar os comandos do script para
criar tabelas com colunas ligeiramente diferentes.
Tambm possvel criar um script com todas as tabelas do banco de dados, ou com
todos os objetos. Para isso, d uma olhada em "Documentando a criao de bancos de
dados" (veremos outros tipos de objetos mais tarde).
%efinindo o*-es de 5ancos de dados
Uma poro de opes de bancos de dados podem ser definidas para cada banco de
dados. Apenas o Administrador de Sistema (SA) ou o proprietrio do banco de dados
pode mudar estas opes. A mudana destas opes s modificar o banco de dados
atual; no afetar outros bancos de dados.
As opes de bancos de dados podem serm modificadas com o procedimento
armazenado de sistema sp9!5option, ou atravs do Enterprise Manager. O
procedimento armazenado sp9!5option s afeta o banco de dados atual, mas para
modificar opes a nvel de servidor, use o procedimento armazenado de sistema
sp9configure.
Depois de fazer alguma mudana, emitido automaticamente um checkpoint, de modo
que as mudanas so imediatas.
4*-es dis*on?eis
A seguir, temos uma lista das opes mais comuns de banco de dados. Para maiores
detalhes em cada uma das opes, veja no Books Online.
As opes marcadas com um asterisco (*) indicam que essa opo pode ser
configurada pelo Enterprise Manager; caso contrrio, uma opo s altervel atravs
de procedimentos armazenados.
N(ESI null default
Controla se o valor padro para todos os tipos de dados NULL. A Microsoft pe o
padro em NOT NULL. Se esta opo estiver em TRUE, o padro ser NULL para o
banco de dados. Quando se entrar com o comando CREATE TABLE, a no ser que o
criador indique explicitamente NOT NULL, a regra se aplicar tambm criao da
tabela.
88
Apostila Microsoft SQL Server 7.0
(ESI Eulls
Quando em TRUE, as comparaes de NULL com qualquer valor vo retornar um
NULL. Quando em FALSE, apenas comparao de valores no-Unicode retornaro
TRUE se e somente se ambos valores forem nulos. O padro para essa opo
FALSE.
(ESI Iarnings
Quando em TRUE, avisos de erro so exibidos, quando ocorrerem condies tais como
diviso por zero ou valores nulos aparecerem em funes de agregao. Por padro,
FALSE.
Nautoclose
Quando em TRUE, o banco de dados fechado automaticamente quando o ltimo
usurio encerra a conexo. sto muito til para ambientes pequenos, mas deve ser
evitado nos casos em que conexes so constantemente feitas e encerradas. A
quantidade de carga adicional gerada pela abertura e fechamento de um banco de
dados poe ter efeitos negativos em um ambiente de produo.
autos0rin2
Quando em TRUE, o SQL Server periodicamente reduzir os arquivos do banco de
dados se necessrio.
Nd5o use onlD
Quando em TRUE, apenas o dbo (proprietrio do banco de dados) tem acesso ao
banco de dados. Use esta opo quando estiver executando reparos nem bancos de
dados.
*u5lis0ed
Utilizado para relicao, quando pu6lished estiver em TRUE, indica que a publicao
est habilitada. Colocar essa opo em FALSE desabilita a publicao.
Nread onlD
Se TRUE indica que o banco de dados somente para leitura. FALSE permite acesso
para leitura/escrita.
Nrecursie triggers
Quando TRUE, permitido o disparo de gatilhos recursivos [recursive triggers].
Quando FALSE (o padro), gatilhos no podem disparar recursivamente. Um gatilho
recursivo aquele que dispara na tabela que o originou, causando uma atualizao em
outra tabela, a qual causa uma atualizao na tabela que originou o gatilho.
Nselec into ; 5ul2 co*D
Permite que o banco de dados aceite aes no registradas em log, tais como SELECT
NTO e o utilitrio BCP fazem.
Nsingle user
Permite que apenas um usurio acesse o banco de dados.
89
Apostila Microsoft SQL Server 7.0
su5scri5ed
Quando em TRUE, o banco de dados pode ser assinado para publicao.
Ntorn *age detection
Se TRUE, o SQL Server detectar leituras incompletas em disco, e far com que sejam
marcadas. Quedas de energia ou outros defeitos podem causar essas leituras
incompletas.
Cruncate log on C0ec2*oint 8Ntrunc. Log on c02*t.9
Quando estiver em TRUE, o SQL Server trunca o log de transaes toda vez que
encontrar um checkpoint. Esta opo usada frequentemente para desenvolvimento,
fazendo com que o log de transaes no fique cheio com tanta frequncia. Voc no
deve utilizar esta opo em um sistema "real".
%efinindo o*-es do 5anco de dados com s*Od5o*tion
Para mudar as opes de um banco de dados com o procedimento armazenado
sp_dboption, faa o seguinte:
Sinta-e&
s()d*o(tion FE*anco)de)dadosEH FKEo(SToEH FKEvalorEH
Por exemplo:
s()d*o(tion E(&*sEK Eread onlDEK Etr&eE
Para ver o estado atual das opes do banco de dados pu5s, entre com o seguinte
comando:
s()d*o(tion E(&*sE
Todas as opes que estiverem ativadas so listadas.
%efinindo o*-es do 5anco de dados *elo >nter*rise 6anager
Quando se utiliza o Enterprise Manager para configurar as opes do banco de dados,
voc s tem acesso a um subconjunto (cerca de metade) das opes realmente
disponveis.
Para mudar opes do banco de dados com o Enterprise Manager, faa assim:
1. Expanda o grupo do servidor.
2. Expanda o servidor.
3. Expanda os bancos de dados.
4. Clique com o boto direito no banco de dados que voc quer mudar, e ento
clique em Propriedades [Porperties ].
5. Selecione as opes a mudar.
6. Clique em OK quando tiver acabado.
,erificando *ro*riedades do 5anco de dados
A seguir voc v alguns procedimentos armazenados de sistema, frequentemente
utilizados, que exibem informaes sobre bancos de dados e opes de bancos de
dados.
sp9!5option: como visto acima, mostra todas as opes disponveis para o
banco de dados em que se estiver posicionado.
90
Apostila Microsoft SQL Server 7.0
sp9,elp!5: informaes sobre todos bancos de dados em um servidor. Fornece
nome do banco de dados, tamanho, proprietrio, D, data de criao, e opes.
sp9,elp!5 nomeA6ancoAdeAdados: informaes sobre um banco de dados
especfico apenas. Fornece nome do banco de dados, tamanho, proprietrio, D,
data de criao, e opes. Alm disso, lista os arquivos para dados e log de
transaes.
sp9spaceuse! [nomeAo6<eto]: resumo do espao de armazenamento que um
banco de dados, log de transaes, ou objeto de banco de dados utiliza.
Considera-es *ara mel0or gerenciamento
Para que voc possa trabalhar com mais tranquilidade e eficincia com bancos de
dados, considere os seguintes fatos.
Para obter melhor desempenho e segurana, aramazene o banco de dados e o
log de transaes em discos fsicos separados.
Desabilite o cache de escrita nos controladores de disco, a menos que o
mecanismo de cache de escrita seja especificamente projetado para servidores
de bancos de dados.
Faa backup do banco de dados master imdediatamente depois de cirar ou
modificar bancos de dados. Em geral, uma boa idia fazer backup dos bancos
de dados regularmente.
Garanta que voc tenha espao suficiente para o log de transaes. Se voc
ficar sem espao, voc no ser cpaaz de modificar ou acessar seu banco de
dados. Para evitar ficar sem espao, faa o seguinte:
Aloque espao suficiente para acomodar o crescimento.
Monitore frequentemente o espao total sendo usado.
Use a opo de crescimento automtico para aumentar o espao em
disco automaticamente.
Configure um alerta para te avisar quando o espao disponvel no log de
transaes esteja abaixo de 25 por cento do espao total do log de
transaes.
>:cluso de 5ancos de dados
Voc no pode excluir bancos de dados que estejam:
Atualmente aabertos para leitura ou escrita por outro usurio.
Sendo restaurados.
Publicando qualquer de suas tabelas (parte da replicao SQL).
Voc tambm no pode excluir os seguintes bancos de dados:
Master
Model
Tempdb
91
Apostila Microsoft SQL Server 7.0
Embora lhe seja permitido excluir o banco de dados de sistema msdb, voc no deve
exclu-lo se usa ou pretende usar:
Replicao
SQL Server Agent
Assistente de criao de pginas Web
Histrico de backups
Servios de transformao de dados
Quando excluir um banco de dados, considere os seguintes fatos:
Com o mtodo SQL DROP DATABASE, voc pode excluir vrios bancos de
dados de uma vez.
O Enterprise Manager s lhe permite excluir um banco de dados de cada vez.
Depois que voc excluir um banco de dados, qualquer D de login que usava o
banco de dados excludo como seu banco de dados padro, usar agora o
banco de dados master.
Voc deve SEMPRE fazer backup do banco de dados master, sempre que
qualquer novo banco de dados for adicionado ou excludo.
%ocumentao dos *assos de criao de 5ancos de dados no
SQL Serer
Documentar os passos de criao de bancos de dados SQL Server pode ser til por
diversas razes, mas claro que a principal e mais motivadora o fato de ter um back
up do trabalho que voc fez. sso no necessariamente vai lhe prevenir de perdas de
dados, mas vai salvar seu modelo, e um modelo de banco de dados uma coisa
terrvel a se perder.
O SQL Server tem um gerador de script que torna fcil para voc documentar, e se
necessrio reconstruir, seu banco de dados. O gerador de scripts pode construir o
banco de dados e os objetos criados no banco de dados. Voc tem a opo de
selecionar desde todos at um nico objeto. Voc pode pegar um script de um banco
de dados e rod-lo em outro para criar cpias exatas de procedimentos armazenados,
regras, gatilhos, etc. Voc pode gerar scripts para os seguintes objetos:
Tabelas [Tables]
Procedimentos armazenados [Stored procedures]
Gatilhos [Triggers]
ndices [ndexes]
Vises [Views]
Usurios e Grupos [Users and Groups]
Tipos de dados definidos pelo usurio [User-defined data types]
Logins
92
Apostila Microsoft SQL Server 7.0
Regras [Rules]
Default
Tabelas-chave / DR
O esquema pode ser salvo em um arquivo nico ou voc pode querer divid-lo baseado
em objetos. ndependentemente do seu mtodo, voc no tgem mais uma boa
desculpa para um banco de dados no documentado.
/erando um scri*t a *artir do >nter*rise 6anager
1. Expanda o grupo de servidores.
2. Expanda o servidor.
3. Expanda os bancos de dados.
4. Clique com o boto direito no banco de dados escolhido, e selecione All Tasks.
5. Selecione Gerar Scripts SQL [Generate SQL Scripts], como indicado abaixo.
93
Apostila Microsoft SQL Server 7.0
6. Selecione os objetos que voc deseja criar da janela que aparece a seguir,
mostrada abaixo:
Voc pode prever o arquivo primeiro ou simplesmente clicar em OK para salv-lo em
um arquivo.
94
Apostila Microsoft SQL Server 7.0
" - Consultando %ados
,iso /eral do Cransact-SQL
( Sinta:e do S>L>CC
6ani*ulando >:*ress-es
Condi-es de 1es!uisa
4utros 3ecursos
Objetivos:
- Entender a diviso de comandos da linguagem Transact-SQL;
- Aprender a usar o comando SELECT e suas vrias opes para fazer consultas aos
dados.
( Sinta:e do S>L>CC
O comando SELECT recupera dados de uma ou mais tabelas. A sua sintaxe mais
simples pode ser resumida da forma:
Sinta-e&
SELEC lista_de_colunas
"#$% lista_de_tabelas
OPE#E condies
Onde
A listaAdeAcolunas especifica quais colunas sero retornadas como resultado,
separadas por vrgulas ou um asterisco (*) que indica todas as colunas da tabela.
A clusula FROM, com uma listaAdeAta6elas, especifica quais tabelas sero
consultadas.
A clusula WHERE especifica condi!Bes que devem ser satisfeitas pelas linhas das
tabelas.
O comando Select pode ser utilizado para mostrar o contedo de variveis, valores
literais, etc...
Como exemplo execute o seguinte comando no Query Analyzer:
Select @@VE#S/$-
O resultado ser:
95
Apostila Microsoft SQL Server 7.0
@@Version uma varivel global do SQL Server que contm a verso do SQL Server
utilizado.
Para mostrar um valor literal digite o comando:
Select EesteE
O resultado ser a palavra Teste.
>:em*loP Consultando Codas as Colunas
Para nossos exemplos, vamos usar o banco de dados pu6s, um banco de exemplo que
instalado pelo SQL Server. Esse banco de dados armazena informaes sobre livros,
na tabela titles e sobre autores de livros, na tabela authors (entre outras coisas).
Execute o Query Analyzer e se conecte ao servidor como "sa". Na lista "DB", selecione
"pubs". Digite e execute o seguinte comando:
select ! from a&t'ors
O resultado ir mostrar todas as colunas e todas as linhas da tabela 'authors' (ou seja,
todo o seu contedo), como abaixo (algumas linhas e colunas foram omitidas):
96
Apostila Microsoft SQL Server 7.0
Note a mensagem "23 row(s) affected" [23 linhas afetadas]. sso indica quantas linhas
foram retornadas pelo SELECT.
Voc poderia escolher ver os resultados em uma grade, ao invs de em modo texto.
Para isso basta selecionar, clicando na seta direita no cone, a opo "Results in
Grid" (Ctrl+D).
Caso voc no queira selecionar na lista 'DB' o banco de dados a que a tabela que
deseja procurar pertence, ser necessrio indicar no comando a qual banco de dados a
tabela pertence, e o comando seria o seguinte:
select ! from (&*s;;a&t'ors
Nessa tabela de exemplo, a coluna 'au_fname' o primeiro nome do autor, 'au_lname'
o sobrenome [last name] e 'au_id' o nmero de identificao. Agora suponhamos
que voc quer consultar apenas essas trs primeiras colunas, omitindo a informao de
telefone (phone) e endereo (address).
O '*' no comando acima especifica que todas as colunas da tabela so retornadas, mas
voc pode listar s as que so desejadas. Clique na pgina Query, e altere o comando
anterior para o seguinte:
select a&)idK a&)fnameK a&)lname from a&t'ors
97
Apostila Microsoft SQL Server 7.0
Execute o comando. Agora apenas as colunas 'au_id', 'au_fname' e 'au_lname' so
retornadas, nessa ordem:
Note que a ordem das colunas no precisa ser a mesma ordem presente na definio
da tabela.De fato, na maioria das aplicaes bem construdas, a ordem das colunas na
tabela no tem a menor importncia.
Voc tambm pode mudar o cabealho das colunas retornadas, criando um alias de
coluna. Execute o seguinte comando:
select a&)id /dentifK a&)fname -omeK a&)lname So*renome
from a&t'ors
O resultado ser o mesmo do comando anterior, mas a coluna 'au_id' aparece como
dentif, 'au_fname' como Nome etc.
A palavra reservada as pode ser utilizada para indicar um alias, mas opcional. Por
exemplo:
select a&)id as /dentifK a&)fname as -omeK a&)lname as So*renome
from a&t'ors
98
Apostila Microsoft SQL Server 7.0
=sando Condi-es
Os comandos que j usamos no tm a clusula WHERE. Nesse caso, todas as linhas
da tabela so retornadas. Se o WHERE estiver presente, ele especifica uma condio
que seleciona as linhas, e apenas as que satisfazem essa condio sero mostradas.
Por exemplo, se quisermos os autores que moram na Califrnia, podemos consultar as
linhas cuja coluna 'state' (estado) tem o valor 'CA':
select a&)fnameK a&)lnameK citDK state
from a&t'ors
w'ere stateIEC+E
O resultado ser:
Note que o resultado mostra apenas 15 linhas (15 rows affected) e no 23, que o total
da tabela. As linhas que aparecem so apenas as que satisfazem a consulta. Existem
vrios tipos de condies de pesquisa, como veremos.
6ani*ulando e:*ress-es
Um comando SELECT pode retornar nas colunas de resultado uma coluna da tabela,
ou um valor calculado. Por exemplo, a tabela titles contm os ttulos de livro (title) e os
preos de cada um (price). Se quisermos ver como fica o preo de cada um aps um
aumento de 10%, pode ser feito o seguinte:
select (rice PreSo K ((rice ! 1;1) WPreSo com 13C de
a&mentoWK title from titles
Note que "Preo com 10% de aumento" o nome do cabealho da expresso (price *
1.1), como o nome colocado possui espaos, foi necessrio coloca-lo entre aspas.
Ou seja, a segunda coluna , cujo nome "Preo com 10% de aumento " mostra o
resultado de price * 1.1 para cada linha. Voc pode tambm usar vrios operadores em
99
Apostila Microsoft SQL Server 7.0
expresses com colunas numricas: adio (+), subtrao (-), multiplicao (*), diviso
(/) e mdulo (%). O mdulo s pode ser usado com tipos inteiros e calcula o resto da
diviso de dois nmeros inteiros (Ex.: 13 % 4 = 1).
Fun-es matemHticas
Alm de operadores, voc pode usar funes matemticas do SQL Server, por
exemplo:
ABS(valor) retorna o valor absoluto (sem sinal) de um item.
POWER(valor,p) retorna o valor elevado potncia p.
ROUND(valor?n) arredonda o valor para n casas decimais.
SQRT (valor) retorna a raiz quadrada do valor especificado.
P valor constante 3.141592563589793
Para outras funes, consulte o help do Transact-SQL em 'Math functions'.
Por exemplo, para arredondar o valor do preo de cada livro para duas casas decimais,
pode ser feito o seguinte:
Select (rice PreSo K #$U-D((riceK 1) WPreSo com 1 casa
decimalWK title Ut&lo from titles
O resultado ser:
Fun-es de caracteres
Voc pode usar funes para manipular dados do tipo caracter (char ou varchar), por
exemplo, para pegar uma sub-string de uma seqncia de caracteres. E voc pode
usar o operador + para concatenar dois valores de tipo caracter.
Por exemplo, digite o seguinte comando:
select a&)fname X E E X a&)lname E-ome com(letoEK
citD X EK E X state ECidadeE
from a&t'ors
100
Apostila Microsoft SQL Server 7.0
O resultado ser:
O que fizemos foi concatenar o primeiro nome e segundo nome do autor, inserindo um
espao no meio (au_fname + ' ' + au_lname), para gerar a coluna Nome completo e
depois juntar o nome da cidade com o nome do estado, inserindo uma vrgula (city + ',
'+state).
Existem vrias funes de manipulao de strings que podem ser usadas para outras
tarefas, por exemplo:
ASC(caractere) retorna o cdigo ASC de um caractere.
CHAR(inteiro) retorna o caractere, dado o seu cdigo ASC
LOWER(e@pr) converte para minsculas
UPPER(e@pr) converte para maisculas
LTRM(e@pr) retira espaos esquerda
RTRM(e@pr) retira espaos direita
REPLCATE(e@pr, n) repete uma expresso n vezes
SUBSTRNG(e@pr?in7cio?ta
manho)
extrai uma parte de uma string desde in7cio e com tamanho
caracteres
RGHT(e@pr?n) retorna n caracteres direita da string
REVERSE(e@pr) inverte uma string
CHARNDEX(GcaractereG?
e@pr)
retorna a posio de um caractere dentro da string
SPACE(n) retorna uma string com n espaos
STR(nHmero?n?d)
converte um valor numrico para string, formatado com n
caracteres na parte inteira (antes da vrgula) e d casas
decimais depois da vrgula.
STUFF(e@prI?in7cio?tamanh
o?e@prJ)
substitui em e@prI, os caracteres desde in7cio at tamanho
por e@prJ
DATALENGTH(e@pr) retorna a quantidade de caracteres em e@pr
101
Apostila Microsoft SQL Server 7.0
Por exemplo digite o seguinte comando:
Select s&*string(titleK 1K 73) Ut&lo K str((riceK 9K 1) PreSo
from titles
O que fizemos foi mostrar at 30 caracteres da coluna title e mostramos a coluna price
com no mximo 5 nmeros antes da vrgula e 1 casa decimal depois da vrgula.
Ento o resultado ser:
Digite o seguinte comando :
Select #e(licate(EaEK 13)
Com este comando a letra a foi mostrada 10 vezes.
Fun-es de %ata;0ora
O tipo datetime, como vimos, armazena datas e horas. Algumas funes trabalham
com esse tipo de dados:
DATEADD(parte?nHmero
?data)
adiciona um certo nmero de dias (ou meses, anos etc.)
data
DATEDFF(parte?dataI?d
ataJ)
subtrai as duas datas (dataJ - dataI), retornando um
resultado em dias, meses etc. dependendo de datepart
DATEPART(parte?data) retorna a parte especificada da data
DATENAME(parte?data) retorna o nome por extenso da parte especificada
GETDATE() retorna a data e hora atuais
Nas funes acima, o argumento parte? especifica qual parte da data usar. Ele pode ser
um dos seguintes valores:
yy o ano
qq o trimestre
mm o ms
dy o dia do ano (1-365)
dd o dia do ms
wk o nmero da semana (0-51)
dw o dia da semana (domingo=1, segunda=2,...)
hh a hora (0-23)
mi os minutos
102
Apostila Microsoft SQL Server 7.0
ss os segundos
ms os milisegundos
Por exemplo, digite o seguinte comando:
Select (&*dateK date(art(DDK (&*date) +no from titles
O resultado ser:
O que fizemos foi mostrar o campo pubdate(Data de publicao do livro) e o de
publicao do livro. Para mostrar o ano utilizamos a funo de data datepart .
Conerso de dados
A funo CONVERT permite converter de um tipo de dado para outro. A sua forma
geral de uso :
CONVERT(tipoAdeAdados, valor)
Por exemplo:
select convert(c'ar(13)Ka&)fname) X E EX convert(c'ar(13)Ka&)lname)
from a&t'ors
Ao executar este comando o resultado ser:
Com valores datetime, convert pode ter um parmetro a mais, que especifica o formato
de data a ser usado. Os formatos mais usados so 3 (padro brasileiro dd/mm/aa), 103
(dd/mm/aaaa) e os padres americanos 1 (mm/dd/yy) e 101 (mm/dd/yyyy). O default
0, que mostra datas como:
Jan 01 1997 01:13:23 PM
Por exemplo, para ver a data de hoje em formato brasileiro, execute:
103
Apostila Microsoft SQL Server 7.0
select convert(c'arKgetdate()K137)
Para converter valores numricos em char pode ser utilizado a funo CONVERT, por
exemplo:
select convert(c'arK(&*)id) from titles
Condi-es de *es!uisa
Como vimos, a clusula WHERE permite selecionar quais as linhas da tabela a serem
includas no resultado. Existem vrias formas de montar uma clusula WHERE, usando
um dos seguintes elementos:
Operadores de compara!=o"
= igual a
> maior que
< menor que
>= ou !< maior ou igual (no menor)
<= ou !> menor ou igual (no maior)
<> ou != diferente
3ai@as" BETWEEN valor-ini AND valorl-fin
Listas" N (lista)
/asamento de padrBes" LKE padr=o
4alores nulos: S NULL, S NOT NULL
/om6ina!=o de condi!Bes" AND, OR, NOT
=sando o*eradores
As condies mais simples so formadas usando operadores de comparao, como
vimos no exemplo anterior:
select a&)lnameK citD from a&t'ors
w'ere state I EC+E
Note que constantes do tipo char (ou varchar), bem como datas, devem ser colocadas
entre apstrofos (').
Se quisermos fazer o contrrio, isto , procurar os autores que NO so da Califrnia,
podemos fazer:
select a&)lnameK citD from a&t'ors
w'ere state Y> EC+E
Note que diferente tambm pode ser representado por !=.
=sando fai:as
Na tabela titles, para cada livro, est guardada a sua data de publicao na coluna
'pubdate'. Se quisermos saber quais os livros publicados no ano de 1991, podemos
fazer a consulta:
select (&*dateK title
from titles
w'ere (&*date *etween E1/1/61E and E15/71/61E
104
Apostila Microsoft SQL Server 7.0
Onde BETWEEN...AND... seleciona os valores de 'pubdate' que esto dentro de uma
determinada faixa. Para fazer o contrrio, bastaria usar NOT BETWEEN (mas nesse
caso no to eficiente a consulta).
=sando listas
Voc pode selecionar valores de acordo com uma lista. Se o valor pertence lista, a
linha ser includa no resultado. Por exemplo:
select a&)lnameK citDK state
from a&t'ors
w'ere state in (EUEKEC+E)
O resultado contm as linhas onde 'state' tem um dos valores 'UT' ou 'CA'. Equivale ao
mesmo que usar uma condio composta:
w'ere state I EUE $# state I EC+E
Para retornar os valores que n=o esto na lista, pode-se usar NOT N.
Casamento de *adr-es
O operador LKE [como] faz casamento de padres. Um padr=o uma string contendo
caracteres que podem ser combinados com parte de outra string.
Por exemplo, o caractere % em um padro representa qualquer quantidade de
caracteres. Por exemplo, para obter todos os autores cujo (primeiro) nome comea
com A, use:
select a&)fnameK a&)lname from a&t'ors
w'ere a&)fname li=e E+CE
Para obter todos os nomes que contm as letras 'en' no meio (ou no incio ou no fim),
use:
select a&)fnameK a&)lname from a&t'ors
w'ere a&)fname li=e ECenCE
Outro caractere para usar em padres o sublinhado (_). Ele combina com um nico
caractere. Por exemplo, se nos seus dados existem pessoas com nome 'Sousa' ou
'Souza', voc pode usar: LKE '%sou_a%'.
Finalmente, possvel usar os colchetes para combinar com uma determinada faixa de
caracteres. Por exemplo, LKE '[CK]%' encontra os nomes que iniciam com C ou K e
LKE '[A-E]%' os que comeam com as letras de A at E. J LKE '[^V]%' encontra os
nomes que n=o comeam com V (o caractere ^ indica no).
Note que as comparaes feitas com LKE dependem da ordem de classificao [sort
order] escolhida durante a instalao do SQL Server. Se foi usada a ordem "accent-
insensitive", como foi recomendado, ele consegue procurar ignorando acentos. Por
exemplo, LKE 'camara' vai encontrar tambm 'Cmara'.
1rocurando alores nulos
O valor NULL no SQL Server indica "no informado" ou "desconhecido". Ele inserido
numa coluna quando aquele valor no conhecido ou no se aplica. Praticamente
qualquer coluna pode ter valores NULL, exceto se tiver sido declarada como NOT
NULL na criao da tabela.
105
Apostila Microsoft SQL Server 7.0
NULL no tratado como outros valores. Especialmente, qualquer operao com
NULL tem como resultado NULL e qualquer comparao com NULL tem resultado
FALSO. Por exemplo, veja as duas consultas a seguir:
select (riceK title from titles
w'ere (rice I 16;66
select (riceK title from titles
w'ere (rice Y> 16;66
Algumas linhas da tabela 'title' tm 'price'=NULL. Essas linhas no vo aparecer nem
na primeira nem na segunda consulta, porque NULL=19.99 falso e NULL<>19.99
tambm falso. Para ver essas linhas com valores nulos, use:
select (riceK title from titles
w'ere (rice is -ULL
Para ver as linhas onde o valor est preenchido (no NULL), use:
select (riceK title from titles
w'ere (rice is -$ -ULL
Usar 'price = NULL' funciona no SQL Server, mas no compatvel com o padro
ANS.
Muntando Hrias condi-es
Voc pode fazer condies compostas com AND, OR ou NOT.
O operador AND (E) liga duas condies e retorna verdadeiro apenas se am6as so
verdadeiras e falso se pelo menos uma delas falsa. J OR (OU) retorna verdadeiro se
pelo menos uma delas for verdadeira e falso se ambas forem falsas. O operador NOT
(NO) inverte uma condio. Por exemplo:
select titleK (&*)idK (rice
from titles
w'ere (title li=e ECE $# (&*)id I E3411E)
+-D ((rice > Z1<;33)
sso retorna os livros onde:
Am6as as condies 1 e 2 so verdadeiras:
1-2ma das seguintes verdadeira
o ttulo ('title') comea com T,
4"
o cdigo da editora ('pub_id') '0877'
+
2- o preo ('price') maior que 16.00
Os parnteses indicam a precedncia das condies. Na falta de parnteses, o
operador NOT, se presente, aplicado primeiro, depois as condies com AND so
agrupadas, depois as condies com OR so agrupadas. Voc pode usar parnteses,
mesmo se no necessrios, para tornar a expresso mais legvel.
106
Apostila Microsoft SQL Server 7.0
4utros recursos
No comando SELECT, a clusula DSTNCT elimina valores duplicados no resultado e
ordena a lista de resultados. Para apenas ordenar por uma ou mais colunas, use
ORDER BY. possvel tambm combinar o resultado de dois comandos SELECT em
um nico conjunto com o operador UNON.
>liminando alores du*licados
Se voc quiser saber quais as cidades e estados nas quais mora algum autor, pode
usar a seguinte consulta:
select citDK state
from a&t'ors
Mas note que algumas cidades, como Oakland, CA, aparecem vrias vezes. Para
eliminar duplicaes, use a clusula DSTNCT. O SQL leva em conta as duas colunas
em conjunto, para remover duplicatas.
select distinct citDK state
from a&t'ors
O resultado ser:
Note que o resultado ter apenas 16 linhas. O SQL Server ordena os dados
implicitamente, para poder eliminar as duplicatas.
4rdenando resultados
Para ver o resultado numa ordem particular, use a clusula ORDER BY. Se estiver
presente, deve ser a ltima clusula do comando SELECT. Por exemplo, para ver os
livros em ordem de preo:
select titleK tD(eK (rice
from titles
order *D (rice
Voc pode indicar aps o nome da coluna, se a ordem ascendente ou descendente,
por exemplo:
select titleK tD(eK (rice
from titles
107
Apostila Microsoft SQL Server 7.0
order *D tD(e ascK (rice desc
Se nem ASC nem DESC estiverem presentes, o default ASC.
Em vez de colocar o nome da coluna, voc pode usar o nmero relativo (1,2,...). A
mesma consulta anterior poderia ser:
select titleK tD(eK (rice
from titles
order *D 5 ascK 7 desc
=nio de conBuntos
O comando SELECT retorna um con<unto de linhas, e permite tambm operaes com
a noo matemtica de conjuntos. Por exemplo, o resultado de dois comandos
SELECT pode ser combinados com o operador UNON. Os dois comandos podem at
mesmo trazer dados de tabelas diferentes, desde que com o mesmo nmero de
colunas, e tipos de dados compatveis para cada coluna correspondente de um com o
outro.
Por exemplo, no banco de dados pu6s, a tabela authors contm informao sobre cada
autor, o que inclui a cidade e estado onde ele mora (colunas cit) e state). A tabela
pu6lishers contm informao sobre as editoras e suas cidades e estados. Para
sabermos o conjunto de todas as cidades onde existem autores ou editoras, pode ser
feita uma unio dos dois conjuntos, com:
select citDK state from a&t'ors
union
select citDK state from (&*lis'ers
Note que na unio de dois conjuntos, os elementos repetidos so eliminados, como
quando se usa o DSTNCT. O resultado tambm aparece em ordem crescente, pois o
SQL Server ordena os resultados antes de eliminar repeties.
Se voc quer ordenar de modo diferente os resultados da unio, usando ORDER BY,
essa clusula s pode aparecer no segundo comando SELECT, ou seja, no final dos
comandos, por exemplo:
select citDK state from a&t'ors
&nion
select citDK state from (&*lis'ers
order by state
108
Apostila Microsoft SQL Server 7.0
(lterao de %ados
Inserindo Lin0as
(tuali@ando Lin0as
>:cluindo Lin0as
Objetivos:
- Aprender a inserir , atualizar e excluir linhas.
Inserindo lin0as
O comando NSERT insere linhas em uma tabela. A forma mais simples do comando
NSERT insere somente uma linha , dados os valores.
Sinta-e
/-SE# F/-$H nome)ta*ela (col&nas)
V+LUE (valores)
Onde:
nome_tabela o nome da tabela que deseja incluir os dados.
colunas o nome das colunas da tabela que deseja acrescentar os dados.
valores o contedo de cada coluna.
Exemplos:
Vamos usar a tabela 'funcionario', do banco de dados Exemplo, criada anteriormente,
para inserir linhas. Na janela SQL Query Tool, selecione em "BD" o banco de dados
Exemplo. Digite o seguinte:
insert into "&ncionario
val&es (1K EPrimeiro "&ncionMrioEK 5K 155K 572;57K
E31/31/1664EK E31/31/1664EK E%E)
Nesse caso, so informados os valores de todas as colunas da tabela, na ordem em
que elas foram definidas na tabela. Mas possvel tambm inserir dados parciais de
apenas algumas colunas. Para testar, digite os seguintes comandos e depois execute:
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissao)
val&es (5K ESeg&ndo "&ncionMrioEK 1K E"EK 27<3;33K E31/31/166<E)
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissaoK #amal)
val&es (7K Eerceiro "&ncionMrioEK 1K E"EK 1933;33K E15/73/1669EK 155)
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissao)
val&es (2K E@&arto "&ncionMrioEK 1K E%EK 1933;72K E13/73/166<E)
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissao)
val&es (9K E@&into "&ncionMrioEK 7K E%EK 933;72K E31/73/1661E)
109
Apostila Microsoft SQL Server 7.0
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissao)
val&es (<K ESeBto "&ncionMrioEK 7K E"EK 1333;72K E34/73/1669E)
insert into "&ncionario (Cod"&ncionarioK -omeK CodDe(artamentoK SeBoK
SalarioK Data+dmissao)
val&es (1K ES[timo "&ncionMrioEK 7K E"EK 633;72K E31/31/1661E)
Nesse caso, os nomes das colunas que sero inseridas so especificados entre
parnteses aps o nome da tabela. A ordem no precisa ser a mesma das colunas na
tabela. Mas a ordem dos valores em VALUES corresponde ordem dos nomes de
colunas informados.
Nesse caso, se uma coluna omitida da lista, o SQL Server faz o seguinte:
Se a coluna tem um valor default , o valor default inserido.
Caso contrrio, se a coluna permite valores NULL, ser inserido um NULL.
Caso a coluna no tenha default e tenha sido criada como NOT NULL, o SQL Server
gera uma mensagem de erro e cancela a execuo do comando.
Digite agora 'SELECT * from Funcionario'. Voc ver que os funcionrios 2 , 3 e 4 a
data de cadastro a data de hoje, porque o default para essa coluna a funo
GETDATE(). Em outros casos, o valor da coluna ficou NULL quando no informado.
A palavra reservada DEFAULT insere o valor default da coluna. Como exemplo
execute o seguinte comando:
insert into "&ncionario
val&es (4K E$itavo "&ncionMrioEK 5K 155K <33;57K E31/31/1664EK DE"+ULK E%E)
Digite agora 'Select * from funcionario where codfuncionario = 8'.Ser mostrado os
dados do funcionrio cujo cdigo igual a 8. O contedo da data do cadastro a data
de hoje, isto ocorreu devido ao seu valor default.
No acrescente nenhuma linha a mais na tabela de 'funcionario', porque ela ser usada
posteriormente nos nossos exemplos. Caso acrescente o resultado dos exemplos que
iremos utilizar no ir coincidir.
Vamos inserir alguns dados na tabela 'departamento' do banco de dados Exemplo.Esta
tabela possui trs colunas. A coluna CodDeptSuperior indica o cdigo do departamento
que o departamento que esta sendo cadastrado subordinado.
Execute os seguintes comandos:
insert into De(artamento Val&es (1K EDiretoriaEK 3)
insert into De(artamento Val&es (5K EDe(artamento +dministrativoEK 1)
insert into De(artamento Val&es (7K EDe(artamento PessoalEK 1)
No acrescente nenhuma linha a mais na tabela de 'departamento', porque ela ser
usada posteriormente nos nossos exemplos. Caso acrescente o resultado dos
exemplos que iremos utilizar no ir coincidir.
Acrescente dados para a tabela de clientes. Observe que as colunas DataCadastro e
Pas possuem valores Default , as colunas CPF, Cidade, Estado pode conter o valor
null.
110
Apostila Microsoft SQL Server 7.0
=sando IES>3C com S>L>CC
Voc tambm pode inserir o resultado de uma consulta SELECT dentro de uma tabela.
Para testar, crie uma nova tabela no banco de dados Exemplo, usando o Enterprise
Manager (ou com o comando CREATE TABLE), com o nome de CopiaCliente. A tabela
dever ter as seguintes colunas:
%ome 1ipo
Codigo int
Nome varchar(50)
Para copiar as linhas 2 e 4 da tabela Cliente, use o seguinte comando:
insert into Co(iaCliente
select CodClienteK -ome
from Cliente
w'ere CodCliente in (5K2)
Cada linha retornada pelo SELECT interno ser inserida na tabela CopiaCliente. Esse
comando muito til para copiar dados entre tabelas semelhantes. Note que nesse
caso, as regras que vimos anteriormente ainda se aplicam, a cada linha que o
comando est tentando inserir. As colunas da tabela de destino e os valores de
resultado do SELECT devem ser compatveis, ou seja, devem ter o mesmo tipo de
dados ou tipos compatveis e devem estar na mesma ordem (mas os nomes no
precisam ser os mesmos, como no caso de 'CodCliente' e 'Codigo').
Se as duas tabelas fossem idnticas, poderia ser usado * no select em vez de uma lista
de colunas. Se a tabela CopiaCliente tivesse colunas a mais, alm de CodCliente e
Nome, teria de ser especificada a lista de colunas a ser inseridos, como vimos
anteriormente.
>:cluindo lin0as
O comando DELETE exclui permanentemente uma ou mais linhas de uma tabela,
baseado em alguma condio.
Sinta-e
DELEE "#$% nome)ta*ela OPE#E condicao
Onde:
nome_tabela o nome da tabela que deseja excluir os dados.
condicao condio para selecionar as dados que deseja excluir.
Por exemplo, para excluir o cliente n 2 (Codigo =2) da tabela CopiaCliente, execute o
seguinte comando no banco de dados Exemplo:
delete from Co(iaCliente
w'ere Codigo I 5
Note que a excluso no pode ser desfeita.
=sando su5-consultas
Assim como UPDATE, o comando DELETE tambm pode usar sub-consultas para
excluir linhas baseado nos dados de outra tabela.
Para testar, copie novamente as linhas de cliente para CopiaCliente e depois insira
duas novas linhas em CopiaCliente, como abaixo:
111
Apostila Microsoft SQL Server 7.0
insert into Co(iaCliente
select CodClienteK -ome from Cliente
insert into Co(iaCliente (9K ECliente CincoE)
insert into Co(iaCliente (<K ECliente SeisE)
Agora vamos apagar de CopiaCliente apenas as linhas que existem na tabela Cliente.
Para isso, use o comando abaixo:
delete from Co(iaCliente
w'ere Codigo in
(select CodCliente from Cliente)
Lim*ando uma ta5ela
Para excluir todas as linhas de uma tabela, existem duas opes. Uma usar um
comando DELETE sem condio WHERE:
delete from Co(iaCliente
Outra opo o comando TRUNCATE TABLE, que quase sempre mais rpido que o
DELETE, especialmente em tabelas grandes:
tr&ncate ta*le Co(iaCliente
Mas TRUNCATE TABLE no salva informaes no log de transaes, o que tem
algumas conseqncias com relao a backups, como veremos.
112
Apostila Microsoft SQL Server 7.0
8 - Consultas (anadas
%ados de 3esumo
Mun-es de Ca5elas
Su5-consultas
Objetivos:
- Aprender a gerar dados de resumo com funes agregadas e GROUP BY;
- Aprender a consultar dados a partir de duas ou mais tabelas.
%ados de resumo
Alm da sintaxe bsica do SELECT que j vimos, alguns elementos a mais podem ser
includos, as clusulas GROUP BY e HAVNG:
Sinta-e
SELECT listaAdeAcolunas
FROM listaAdeAta6elas
WHERE condi!Bes
GROUP BY listaAdeAe@pressBes
HAVNG condi!Bes
Como j vimos, o WHERE (se presente) separa as linhas que satisfazem as condies
iniciais. A clusula GROUP BY organiza as linhas de resultado em grupos de acordo
com os valores das expresses informadas. A clusula HAVNG (opcional) seleciona
os grupos de acordo com os resultados. O resultado do SELECT...GROUP BY... tem
uma linha para cada grupo, que pode conter valores de resumo (somatrio, mdia,
contagem etc.) calculados dentro do grupo.
Quando o GROUP BY est presente, possvel usar fun!Bes agregadas, que calculam
valores baseado nas linhas de um grupo e geram valores de resumo.
>:em*lo
Para saber quantas linhas existem na tabela GfuncionarioG do banco de dados Exemplo,
pode-se usar a funo agregada COUNT(*):
select co&nt(!)
from f&ncionario
O resultado ser 8. Quando a clusula GROUP BY omitida, como nesse exemplo,
todas as linhas da tabela so agrupadas para formar uma linha de resultado. Voc
pode tambm acrescentar uma condio:
select co&nt(!)
from f&ncionario
w'ere ramal is not n&ll
Neste caso o resultado 3. Estamos contando quantos funcionarios tem a coluna
Ramal diferente de null. Quando se utiliza o GROUP BY com o nome de uma coluna,
113
Apostila Microsoft SQL Server 7.0
os resultados so agregados por essa coluna. Por exemplo, para saber quantos
funcionarios existem por departamento:
select co&nt(!) E@&antidade "&ncionMrioEK CodDe(artamento
from f&ncionario
gro&( *D CodDe(artamento
O resultado ser:
Ou seja, todos os trs funcionrios cujo cdigo do departamento 1 foram agrupados
para gerar uma s linha de resultado. Depois todos os funcionrios com
coddepartamento = 3 (caso houvesse algum funcionrio cadastrado com cdigo
departamento = 2, viria logo aps o de cdigo departamento = 1) e assim por diante.
No resultado mostrada a coluna 'coddepartamento' (que foi usada no GROUP BY
para definir os grupos) e o resultado da funo COUNT(*), que a contagem de
elementos de cada grupo.
Fun-es agregadas
Alm da funo COUNT, existem outras funes agregadas que podem ser usadas
para fazer operaes sobre os elementos do grupo:
AVG(e@pr)
Calcula o valor mdio da expresso e@pr dentro do grupo. A
expresso pode ser um nome de coluna ou calculada a partir
de colunas e/ou constantes. (Por exemplo,
+VN (salario!1;1)
)
COUNT(e@pr)
Conta quantos valores existem da expresso dada dentro do
grupo (se e@pr for NULL para uma linha, a linha no includa
na contagem).
COUNT(*) Conta quantas linhas existem dentro do grupo.
MAX(e@pr) Retorna o mximo valor de e@pr dentro do grupo.
MN(e@pr) Retorna o mnimo valor de e@pr dentro do grupo.
SUM(e@pr) Retorna o somatrio da expresso dentro do grupo.
114
Apostila Microsoft SQL Server 7.0
As funes AVG e SUM podem ser usadas apenas com dados numricos. As outras
podem ser usadas com qualquer tipo de coluna. As funes SUM, AVG e
COUNT(e@pr) permitem especificar tambm o operador DSTNCT, que indica para
considerar apenas os valores distintos. Por exemplo, a tabela 'funcionarios' do banco
de dados Exemplo contm informao sobre qual departamento este funcionrio
trabalha. Para saber quais os departamentos que tm ao menos um funcionario ,
execute o seguinte comando:
select co&nt(distinct codde(artamento)
from f&ncionario
O resultado 3, o nmero de valores distintos de 'departamentos'. Sem usar
DSTNCT, o resultado seria 8 (o nmero de linhas da tabela 'funcionario').
Outro exemplo usando a tabela 'funcionario': para saber o total de salrios pagos por
cada departamento, pode-se usar GROUP BY e a funo SUM calculando o somatrio
da coluna 'Salario':
select codde(artamento De(artamentoK S&m(Salario) Eotal SalMrioE
from f&ncionario
gro&( *D codde(artamento
O resultado ser:
%etal0es do /34=1 $Q
A clusula GROUP BY agrupa valores baseado em uma ou mais colunas. No ltimo
SELECT acima, group by coddepartamento significa que todas as linhas que tm o
mesmo valor da coluna 'coddepartamento' sero agrupadas em uma s. Uma funo
agregada, como SUM, COUNT, AVG calcula valores sobre todos os elementos do
grupo. Uma linha de resumo gerada para o grupo, contendo o valor representante do
grupo, 'coddepartamento' e o resultado de SUM(Salario).
Note que as colunas de resultado da clusula SELECT (a lista de colunas aps o
SELECT) podem ser apenas:
115
Apostila Microsoft SQL Server 7.0
- Uma coluna presente na lista do GROUP BY
OU
- Um valor gerado por uma funo agregada
Outras colunas no podem ser includas no resultado, porque teriam valores diferentes
para cada linha do grupo.
=sando a clHusula <(,IE/
Aps feito o agrupamento, pode-se usar a clusula HAVNG para selecionar quais os
grupos a serem includos no resultado. Por exemplo, para selecionar os departamentos
que pagam mais que 1000.00, pode-se fazer:
select codde(artamento De(artamentoK s&m(Salario) ESalMrio otalE
from f&ncionario
gro&( *D codde(artamento
'aving s&m(Salario) > 1333;33
Note que as clusulas WHERE e HAVNG so semelhantes. Mas WHERE seleciona as
linhas da tabela que iro participar da gerao do resultado. Essas linhas sero
agrupadas e depois HAVNG aplicado ao resultado de cada grupo, para saber :uais
grupos vo aparecer no resultado. Nas condies usadas por HAVNG s podem
aparecer valores que sejam os mesmos em todos os elementos do grupo.
Mun-es de ta5elas
Um comando SELECT tambm pode fazer uma consulta que traz dados de duas ou
mais tabelas. Esse um processo chamado de <un!=o [join]. As tabelas tm uma
coluna em comum que usado para fazer as junes.
Antes de executar os exemplos mostrados abaixo, vamos inserir um departamento na
tabela 'departamento' que neste caso no ter nenhum funcionrio relacionado.
Execute o seguinte comando:
insert into de(artamento val&es (2K EConta*ilidadeEK 5)
Por exemplo, no banco de dados @emplo, a tabela 'departamento' contm dados de
departamentos. Cada departamento tem um nmero de identificao nico,
'CodDepartamento'. Na tabela 'funcionario' esto os dados dos funcionrios. Para
identificar o departamento do funcionrio, a tabela 'funcionario' tem tambm uma
coluna 'CodDepartamento' que pode ser usada para procurar na tabela 'departamento'.
Por exemplo, digite:
select ! from f&ncionario
O resultado ser:
116
Apostila Microsoft SQL Server 7.0
...e veja que na primeira linha da tabela, o nome do funcionrio 'Primeiro Funcionrio'
e o valor da coluna 'coddepartamento' 2. Agora digite:
select ! from de(artamento
Depois de executar, note que na segunda linha o nome do departamento , cujo cdigo
igual a 2 , 'Departamento Administrativo'.
Se quisermos ver uma listagem mostrando os funcionrios e seus respectivos
departamentos, basta fazer uma juno das duas tabelas. Uma das formas de fazer
isso :
select de(artamento;nome EDe(artamentoEK f&ncionario;nome
from f&ncionarioK de(artamento
w'ere f&ncionario;codde(artamento I de(artamento;codde(artamento
O resultado ser:
117
Apostila Microsoft SQL Server 7.0
Neste exemplo como as duas tabelas tem o mesmo nome de coluna necessrio
qualificar o nome com o nome da tabela, como "funcionario.nome",
"departamento.nome". Em geral, recomendvel sempre qualificar os nomes para
maior clareza.
Sinta:e da Muno
O SQL Server aceita duas sintaxes diferentes para juno de tabelas. Uma delas,
mostrada acima, especfica ao SQL Server e, s vezes, um pouco mais simples de
utilizar.
Na sintaxe do SQL Server, na lista do FROM as duas (ou mais) tabelas so
especificadas, separadas por vrgulas. Na clusula WHERE deve haver uma condio
ligando as duas, a condi!=o de <un!=o [join condition]. Na lista de colunas do SELECT
podem ser includos colunas de qualquer uma das tabelas.
No exemplo acima foram especificadas as colunas 'departamento.nome' (o nome da
departamento, que vem da tabela 'departamento') e 'funcionario.nome' (nome do
funcionario, que vem da tabela 'funcionario').
A outra forma de sintaxe que pode ser usada a sintaxe do padro ANS SQL. O
exemplo anterior, com a sintaxe ANS, ficaria:
select de(artamento;nomeK f&ncionario;nome
from f&ncionario inner join de(artamento
on f&ncionario;codde(artamento I de(artamento;codde(artamento
Nessa sintaxe, o tipo de <un!=o entre as tabelas deve ser especificado entre elas
(veremos os diferentes tipos abaixo) e a condio de juno especificada com a
palavra ON.
Muno interior
O exemplo acima uma <un!=o interior de tabelas [inner join]. Esse tipo de juno
conecta as duas tabelas e retorna apenas as linhas que satisfazem a condio de
juno. No exemplo, isso significa que, se existirem funcionrios para os quais no h
departamento relacionado eles no sero includos no resultado. gualmente, se
existirem departamentos que no tm empregados(como 'Contabilidade') , eles no
aparecem no resultado.
Uma juno interior chamada de e:ui<oin quando as colunas so comparadas usando
o =, e as duas colunas aparecem no resultado, mostrando dados redundantes, j que
elas tm o mesmo valor. Uma juno interior chamada <un!=o natural quando a
coluna usada para juno aparece apenas uma vez no resultado, vinda de uma ou
outra tabela.
Na sintaxe ANS, junes interiores so indicadas da forma:
tabela1 /--E# \$/- tabela2 $- condio_de_juno
Muno cru@ada ou irrestrita
Uma <un!=o cru*ada [cross join] de tabelas, tambm chamada <un!=o irrestrita de duas
tabelas gera um resultado formado por todas as combinaes possveis de uma linha
da primeira tabela com uma linha da segunda. No existe uma condio de juno.
Esse resultado chamado produto cartesianodas duas tabelas. Na sintaxe ANS,
junes cruzadas so indicadas com CROSS JON, por exemplo:
118
Apostila Microsoft SQL Server 7.0
select de(artamento;nomeK f&ncionario;codde(artamento
from f&ncionario cross join de(artamento
Nesse caso, como a tabela 'funcionario' tem 8 linhas e a tabela 'departamento' tem 4
linhas , o resultado final ser 32 linhas que 8 * 4 = 32 linhas, formadas por todas as
combinaes possveis de funcionarios e departamento.
Na sintaxe do SQL Server, basta especificar a lista de tabelas, sem usar uma condio
de juno:
select de(artamento;nomeK f&ncionario;nomeK salario
from f&ncionarioK de(artamento
Esse exatamente um dos problemas com a sintaxe informal: se voc incluir mais de
uma tabela mas no colocar uma condio de juno( fcil esquecer uma condio
quando existem vrias outras envolvidas), o banco de dados vai simplesmente fazer
um produto cartesiano sem nenhum aviso.
119
Apostila Microsoft SQL Server 7.0
Junes cruzadas raramente so usadas, mas importante saber como evitar us-las.
Para isso, sempre crie uma juno interior ou exterior (veremos abaixo) , em casos de
ter vrias tabelas envolvidas.
Muno e:terior
Uma juno exterior [outer join] mostra todas as linhas de uma tabela, mesmo quando
elas no satisfazem a condio de juno. Por exemplo:
select de(artamento;nome EDe(artamentoEK f&ncionario;nome
E"&ncionarioE
from de(artamento left o&ter ]oin f&ncionario
on de(artamento;codde(artamento I f&ncionario;codde(artamento
O resultado ser algo semelhante a isso:
Se usado LEFT OUTER JON indica que todas as linhas da tabela esquerda (no
caso, 'departamento') so includas no resultado. Nesse caso, so mostrados todos os
departamentos, mesmo aqueles que no tem funcionrio. Quando um departamento
no tem funcionrio, as colunas da tabela 'funcionario' ir mostrar o valor NULL . A
tabela 'departamento' chamada de a ta6ela e@terior e 'funcionario' a ta6ela interior
da juno.
Se fosse usado RGHT OUTER JON, a tabela direita ('funcionario') mostraria todas
as linhas e a tabela esquerda, apenas as relacionadas. Se for usado FULL OUTER
JON, todas as linhas de ambas as tabelas so includas, mesmo as que no esto
relacionadas com a outra tabela.
Mun-es com mais de duas ta5elas
Para falarmos de junes entre duas tabelas crie uma tabela chamada 'cargo', utilize o
Enterprise Manager ou o comando Create table. Esta tabela ter as seguintes colunas:
'olumn%ame Datat0pe Si*e
CodCargo int
120
Apostila Microsoft SQL Server 7.0
Nome varchar 50
Ao criar esta tabela adicione os seguintes dados:
insert into cargo val&es (1K Ecargo1E)
insert into cargo val&es (5K Ecargo5E)
insert into cargo val&es (7K Ecargo7E)
insert into cargo val&es (2K Ecargo2E)
insert into cargo val&es (9K Ecargo9E)
Na tabela 'funcionario' acrescente a seguinte coluna:
'olumn%ame Datat0pe
CodCargo int
Utilize o Enterprise Manager ou o comando Alter Table.
Vamos atualizar a tabela 'funcionario' para acrescentar dados a coluna cargo, execute
os seguintes comandos:
&(date f&ncionario set codcargo I 1 w'ere codf&ncionario I 1
&(date f&ncionario set codcargo I 5 w'ere codf&ncionario I 5
&(date f&ncionario set codcargo I 7 w'ere codf&ncionario I 7
&(date f&ncionario set codcargo I 2 w'ere codf&ncionario I 2
&(date f&ncionario set codcargo I 9 w'ere codf&ncionario I 9
possvel juntar trs ou mais tabelas com informaes relacionadas. No banco de
dados 'Exemplos', por exemplo, a tabela 'cargo' contm uma linha que representa cada
cargo do funcionrio. Entre os dados, esta a identificao do cargo ('codcargo') . A
coluna 'codcargo' pode ser usada para buscar o nome do cargo, fazendo uma juno
com a tabela 'funcionario'. A tabela 'departamento' contm uma linha que representa
cada departamento do funcionrio. A coluna 'coddepartamento'pode ser usada para
buscar o nome do departamento, fazendo uma juno com a tabela 'departamento'.
Faremos o seguinte:
select f&ncionario;nome E"&ncionMrioEK cargo;nome ECargoEK
de(artamento;nome EDe(artamentoE
from f&ncionario
inner ]oin cargo
on f&ncionario;codcargo I cargo;codcargo
inner ]oin de(artamento
on f&ncionario;codde(artamento I de(artamento;codde(artamento
O resultado ser semelhante a este:
121
Apostila Microsoft SQL Server 7.0
Note que as duas junes de tabela so representadas com um NNER JON aps o
outro. O primeiro NNER JON cria uma "tabela" virtual reunindo 'funcionario' e 'cargo'.
O segundo rene essa tabela virtual tabela 'departamento'.
(*elidos de ta5ela
Para simplicar a qualificao de colunas, pode-se usar um apelido [alias] de tabela, um
nome colocado imediatamente aps o nome da tabela, na lista do FROM. Esse nome
representa a tabela nas qualificaes. Por exemplo, a consulta anterior pode ser
reescrita da forma:
select f;nome E"&ncionMrioEK c;nome ECargoE K d;nome EDe(artamentoE
from f&ncionario f
inner ]oin cargo c
on f;codcargo I c;codcargo
inner ]oin de(artamento d
on f;codde(artamento I d;codde(artamento
Nesse caso, 'f' o apelido para a tabela 'funcionario', 'c' para a tabela 'cargo' e 'd' para
a tabela 'departamento'. Note que os aliases podem ser usados na lista do SELECT ou
nas condies de juno (ou em outros lugares, como numa clusula WHERE).
(uto-Bun-es
Uma auto-<un!=o [self join] uma juno da tabela com ela mesma. Na tabela
departamento, por exemplo, cada departamento est subordinado a outro. A coluna
'coddeptsuperior' indica o cdigo do departamento superior. Para mostrarmos uma lista
de todos os departamentos, cada um com seus sub-departamentos, podemos usar:
select d1;nomeK d5;nome from de(artamento d1 inner ]oin de(artamento
d5 on d1;codde(artamento I d5;codde(ts&(erior
Nesse caso, obrigatrio usar um apelido de tabela para distinguir as duas "cpias" da
tabela que esto sendo relacionadas: 'd1' no exemplo representa uma linha da tabela
'departamento' e 'd2' representa outra linha que esto sendo comparadas entre si. O
resultado dessa consulta :
122
Apostila Microsoft SQL Server 7.0
Su5consultas
Uma su6-consulta [subquery] uma consulta SELECT aninhada dentro de outro
comando SQL. Ela pode retornar um valor s ou uma lista de valores para ser usada
numa comparao.
Por exemplo, para saber o gasto que a empresa tem com funcionrios, pode-se usar:
select s&m(salario) from f&ncionario
...que d como resultado o valor 10.595,82 . Agora suponhamos que queremos saber
qual a porcentagem do total que o salrio do funcionrio representa. Digite o seguinte
comando:
select nome E"&ncionMrioEK Salario ESalMrioEK
Porcentagem I 133!(salario!1;3/
(select s&m(salario) from f&ncionario) )
from f&ncionario
O resultado ser:
A coluna 'Porcentagem' calculada como a quantidade dividida pelo resultado da sub-
consulta (select sum(salario) from funcionario), que = 10.595,82 nesse caso. Note
portanto que a sub-consulta executada e seu resultado substitudo dentro da outra
consulta, como se tivssemos escrito:
select nome E"&ncionMrioEK Salario ESalMrioEK
Porcentagem I 133!(salario!1;3/ 10.595,82 )
from f&ncionario
Subconsultas so sempre colocadas entre parnteses e podem retornar no resultado
apenas uma coluna (embora em alguns casos podem retornar mais de uma linha). No
exemplo acima, se a subconsulta retornasse mais de um valor, haveria um erro de
execuo.
Su5consultas com o*eradores
Uma sub-consulta pode ser inserida nos resultados, como acima, ou pode ser usada
numa expresso WHERE, com um operador de comparao, como =, <, >, <=, >= ou
123
Apostila Microsoft SQL Server 7.0
<>. Nesse caso ela deve retornar apenas um valor. Esse valor substitudo na
consulta principal no momento da execuo.
Listas de alores
Uma sub-consulta pode retornar uma lista de valores e essa lista de valores pode ser
usada em comparaes com o operador N. Por exemplo, para saber quais so os
funcionarios que possuem cargos, pode ser usado:
select f&ncionario;nome
from f&ncionario
w'ere codcargo in (select codcargo from cargo)
Uma sub-consulta pode ser usada tambm com um operador de comparao
modificado com as palavras ANY [qualquer] ou ALL [todos]. Por exemplo, > ALL [maior
que todos] significa que para que a condio seja satisfeita, o valor comparado deve
ser maior que todos os elementos da lista:
O exemplo abaixo utiliza o banco de dados Pubs.
select title
from titles
w'ere advance > +LL
(select advance
from (&*lis'ersK titles
w'ere titles;(&*)id I (&*lis'ers;(&*)id
and (&*)name I E+lgodata /nfosDstemsE)
A subconsulta retorna uma lista de valores de 'advance' [adiantamento] que contm
todos os valores de adiantamento de livros publicados pela editora 'Algodata
nfosystems'. Seu resultado (5000, 5000, 5000, 7000, 8000) A consulta externa
retorna os livros cujo 'advance' maior do que todos os itens dessa lista.
As seguintes combinaes que podem ser usadas:
> ALL maior que todos os elementos da lista
< ALL menor que todos
<> ALL diferente de todos (o mesmo que NOT N)
= ANY igual a algum dos elementos da lista (o mesmo que N)
> ANY maior que algum dos elementos da lista
< ANY menor que algum dos elementos
<> ANY diferente de algum dos elementos da lista (falso se igual a todos)
Alm disso, podem ser usadas combinaes com >= e <=, de forma anloga. Note que
no permitido o uso de = ALL.
Cestes de e:istGncia
Um teste de existncia uma condio que envolve a palavra EXSTS e uma sub-
consulta. A condio verdadeira se a sub-consulta retorna alguma linha e falsa se
ela retorna zero linhas. Por exemplo, para saber quais os departamentos que possue
funcionrios cujo cargo igual a cargo1, utilize o banco de dados Exemplos e execute
o seguinte comando:
select d;nome
from de(artamento d
w'ere eBists (select !
from f&ncionario fK cargo c
w'ere f;codcargo I c;codcargo
124
Apostila Microsoft SQL Server 7.0
and c;nome I ECargo1E
and d;codde(artamento I f;codde(artamento)
O resultado da sub-consulta no importa, pois est apenas sendo testada a existncia
de um resultado. Nesse caso, a lista de colunas sempre um asterisco (*).
Su5consultas correlacionadas
As sub-consultas que foram vistas at agora nos exemplos podem ser avaliadas uma
vez s e depois substitudas no corpo da consulta principal. J uma sub-consulta
correlacionada [correlated subquery] depende dos valores da consulta principal onde
ela est alinhada, por isso deve ser avaliada uma vez para cada linha do resultado
externo.
Por exemplo, a seguinte utilize o banco de dados Pubs para consultar a lista, para cada
livro, o autor que tem a maior porcentagem de royalties sobre o livro (a tabela
'titleauthor' relaciona livros e autores de forma N x N):
select title)idK a&)idK roDaltD(er
from titlea&t'or ta
w'ere roDaltD(er I (select maB(roDaltD(er)
from titlea&t'or
w'ere title)id I ta;title)id)
Essa uma sub-consulta correlacionada porque ela faz referncia a uma tabela da
consulta mais externa. A sub-consulta avaliada repetidas vezes, uma para cada linha
da tabela 'titleauthor'.
125
Apostila Microsoft SQL Server 7.0
' - Im*lementando +ndices
1or !ue ?ndicesR
Ci*os de +ndices
4timi@ando Consultas
Objetivos:
- Aprender a criar ndices;
- Entender o funcionamento do otimizador de consultas.
1or !ue ?ndicesR
Kndice [index] um mecanismo que acelera bastante o acesso aos dados. Consiste de
uma estrutura de dados que contm ponteiros ordenados para os dados. O SQL Server
usa ndices [indexes ou indices] automaticamente em vrias situaes para acelerar a
pesquisa e atualizao de dados, como por exemplo onde houverem restries
[constraints] PRMARY KEY e UNQUE.
Recomenda-se considerar o seguinte para a criao de ndices:
Se uma coluna est presente na clusula WHERE em um comando SELECT,
UPDATE ou DELETE, o SQL Server consegue verificar as condies mais
rapidamente se houver um ndice. Caso contrrio, ele faz uma varredura
seqencial da tabela [table scan].
Se uma coluna muito usada para ordenar valores (com ORDER BY), essa
ordenao muito mais eficiente se ela tiver um ndice.
Se uma coluna usada para fazer juno de duas tabelas, essas junes
podem ser feitas mais eficientemente se ela estiver inde@ada.
ndices no apenas aceleram a recuperao de linhas em consultas, mas eles tambm
aumentam a velocidade de atualizaes e excluses. sso ocorre porque o SQL Server
deve encontrar uma linha, antes de poder atualiz-la ou exclu-la. No entanto, ndices
levam tempo para serem criados e ocupam espao em disco. Cada atualizao na
tabela tambm atualiza dinamicamente todos os ndices definidos. Portanto, se voc
criar muitos ndices inteis numa tabela, pode estar atrapalhando o desempenho da
atualizao de dados sem agilizar muito o tempo de resposta nas consultas.
No geral, o aumento da eficincia obtido com o uso de ndices para localizar a linha
sobrepuja a carga extra de trabalho necessria para atualizar os ndices, a no ser,
como mencionado acima, que a tabela tenha muitos ndices.
4 4timi@ador
O otimizador o componente do SQL Server que analisa as consultas SQL e decide
quando vale a pena utilizar um ndice ou no. s vezes, mesmo quando voc define
126
Apostila Microsoft SQL Server 7.0
um ndice em uma coluna, o otimizador resolve no utiliz-lo por determinar que ele
no ajudaria no desempenho.
Por exemplo, no vale a pena utilizar um ndice que retorna uma porcentagem muito
grande de linhas, pois levaria mais tempo analisando o ndice do que o tempo que ele
economizaria filtrando os resultados. Por exemplo, se uma coluna tem apenas trs
valores possveis, 0, 1, e 2, no vale a pena indexar, pois qualquer consulta pode
retornar at 33% das linhas. O otimizador descobre isso e ignora esse tipo de ndice.
Ci*os de +ndices
Clustered
Um ndice clustered [agrupado] aquele onde a ordem fsica das pginas de dados a
mesma ordem do ndice. A cada insero, numa tabela que tem um ndice agrupado, a
ordem fsica dos dados pode mudar. S pode haver um nico ndice agrupado por
tabela.Se voc no especificar o indice Clustered a sua tabela ser criada com o ndice
Non-clustered (ver abiaxo).
Recomenda-se criar um ndice agrupado antes de qualquer outro, pois ao cri-lo, as
linhas da tabela so reordenadas fisicamente e todos os outros ndices so
reconstrudos.
recomendvel usar um ndice agrupado para a coluna que representa a ordem mais
natural da tabela, ou seja, a ordem na qual geralmente os resultados sero
apresentados.
Recomenda-se utilizar ndice agrupado [Clustered] nos seguintes casos:
Os dados das colunas so acessados frequentemente. Por exemplo na tabela
de 'funcionario'do banco de dados Exemplo , vamos supor que so feitas vrias
pesquisas com o nome do funcionario, neste caso voc poderia criar um ndice
clustered com o nome do funcionrio.
Em colunas usadas com ORDER BY e GROUP BY.
Em colunas que so alteradas frequentemente.
Em chaves primrias, contanto que no haja outras colunas melhores.
Em chaves estrangeiras, porque geralmente elas no so nicas.
Eon-clustered
Um ndice non-clustered [no-agrupado] possui uma ordem fsica diferente da ordem
dos dados. Existe um nvel a mais, de ponteiros para os dados, que permite acess-los
indiretamente.
Pode haver mais de um ndice no-agrupado na tabela, at o mximo de 249 ndices,
incluindo qualquer ndice criado com restries PRMARY KEY ou UNQUE.
Quando o tipo de ndice da tabela no for especficado ele ser criado como um ndice
Nonclustered.
recomendado utilizar ndices no agrupados [Nonclustered] para:
Colunas que so usadas nas clasulas ORDER BY e GROUP BY.
127
Apostila Microsoft SQL Server 7.0
Colunas que so frequentemente utilizadas como condies na clasula
WHERE.
Caracter?sticas dos +ndices
Snico
Um ndice Hnico [unique] aquele onde os valores da chave no podem ser repetidos,
ou seja, os valores das colunas do ndice, tomados em conjunto, no podem se repetir.
Um ndice nico pode ser agrupado ou no-agrupado.
Por exemplo, na tabela Cliente, poderia ser criado um ndice nico para a coluna
CodCliente, significando que no pode haver valores duplicados nessa coluna. Se voc
tenta inserir dados em uma tabela com valores repetidos para CodCliente, a insero
falha.
Quando da criao de um ndice nico, no pode haver valores duplicados nas colunas
do ndice. Se houver, a criao do ndice falha e voc deve alterar as colunas antes de
tentar cri-lo novamente.
Com*osto
Um ndice composto aquele formado por duas ou mais colunas. Esse tipo de ndice
til quando duas ou mais colunas so sempre pesquisadas em conjunto. Por exemplo,
poderia ser criado um ndice na tabela Cliente para as colunas (Cidade,Estado). A
ordem das colunas importa: um ndice com (Estado,Cidade) seria completamente
diferente.
Se voc criar um ndice composto, o otimizador vai utiliz-lo mesmo quando apenas a
primeira coluna especificada, por exemplo em:
SELEC ! "#$% Cliente OPE#E Cidade I ENoi^niaE
Um ndice composto tambm pode ser nico. Nesse caso, o que no pode se repetir
o valor das duas ou mais colunas, tomadas em conjunto. Por exemplo, os valores
poderiam ser (1,1), (1,2), (2,1), (2,2) etc. Mas no poderia haver duas linhas com os
valores (1,1).
128
Apostila Microsoft SQL Server 7.0
Criando e e:cluindo ?ndices utili@ando o >nter*rise 6anager
Um ndice pode ser criado no Enterprise Manager. Basta clicar na tabela desejada com
o boto direito, selecionar All 1asks e Manage In!e-es.
Na opo 'Table' informe a tabela em que deseja criar o ndice. Clique no boto %e6....
Aparece a tela abaixo:
Em 'Column', marque na caixa de verificao a(s) coluna(s) que voc quer que faa(m)
parte do ndice. Voc pode mover qualquer coluna selecionada para cima ou para
baixo (lembrando que em um ndice ocmposto a colunas em ordens diferentes formam
ndices diferentes)
Em 'ndex name:' coloque o nome do ndice que deseja criar ou visualizar.
As prximas opes iro definir o tipo e as caractersticas do ndice:
Em 'ndex options', pode-se definir o seguinte, com a seleo das opes adequadas:
se voc marcar "Unique values" [valores nicos], o ndice ser um ndice nico.
No caso de um ndice nico, se voc marcar a opo "gnore Duplicate values"
[ignorar valores duplicados], ao executar um comando NSERT ou UPDATE em
vrias linhas, apenas as linhas que no tm chave duplicada sero
inseridas/atualizadas; para as outras, o SQL Server mostra uma mensagem de
aviso e ignora (no insere) as linhas duplicadas. Se esta opo no for marcada,
o comando NSERT ou UPDATE falha e no insere/atualiza nenhuma linha.
129
Apostila Microsoft SQL Server 7.0
%ota& Um ndice nico no pode ser criado em uma coluna que j tenha valores
duplicados, mesmo que voc selecione a opo de "ignorar valores duplicados".
Se voc tentar, o SQL Server mostra uma mensagem de erro e lista os valores
duplicados. Elimine os valores duplicados antes de criar um ndice nico na
coluna.
Para criar um ndice agrupado, marque a opo "Clustered". Com o ndice
agrupado, voc no pode ignorar valores duplicados ( permitido marcar a
opo, mas ao clicar em OK, surge uma mensagem de erro, avisando que as
duas opes so mutuamente exclusivas). Porm, se voc marcar, junto com a
opo "Clustered", a opo "Unique values", permitido ignorar valores
duplicados (selecionando "gnore Duplicate Values", que sero tratados da
mesma forma que no caso do ndice ser apenas nico (com a diferena que
agora ele um ndice nico agrupado).
Se j houver um ndice agrupado na tabela, na criao de um novo ndice, no
se permite selecionar a opo "clustered"(pois s pode haver um ndice
agrupado em qualquer tabela).
"Do not recompute statistics": com esta opo marcada, as estatsiticas do
ndice no so recalculadas automaticamente quando o ndice atualizado.
Filegroup: especifica em que grupo de arquivos ser criado o ndice. Clique no
nome do grupo de arquivos. (veja grupos de arquivos)
"Drop existing": para excluir qualquer ndice existente com o mesmo nome antes
de criar o novo ndice. Utilizada quando voc altera um ndice j criado. Voc
no pode marcar ou desmarcar essa opo.
%ota& Voc no pode transformar um ndice agrupado em um ndice no
agrupado, editando-o. Voc deve exclu-lo, para ento criar outro ndice (que
pode ter o mesmo nome).
"Fill factor": (fator de preenchimento) especifica o quo cheio o SQL Server deve
fazer o nvel folha de cada pgina de ndice durante a criao do
mesmo.Quando uma pgina de ndice fica cheia, o SQL Server deve gastar
tempo para dividir a pgina, liberando espao para novas colunas, o que tem um
custo computacional alto. Para tabelas em que so feitas muitas atualizaes,
um valor para "Fill factor" bem escolhido gera um melhor desempenho em
atualizaes do que um valor mal escolhido. O valor de "Fill factor" fornecido
na forma de porcentagem.
"Pad index": Especifica o espao a ser deixado desocupado em cada pgina nos
nveis intermedirios do ndice. S til quando selecionado em conjunto com
"Fill factor", pois o "pad index" usa a porcentagem definida em "Fill factor".
ndependentemente do valor de "Fill factor", o nmero de colunas numa pgina
intermediria nunca menor do que duas.
Definidas todas as opes desejadas, clique em Ok, e o ndice ser criado (ou
alterado). Voc pode ver e alterar o cdigo SQL usado na criao do ndice, bastgando
para isso clicar no boto "Edit SQL". Quando editando o cdigo, voc pode verific-lo
antes de executar, bastando para isso clicar em "Parse". Clicar em "Execute", tem o
mesmo efeito de clicar em Ok na tela anterior.
130
Apostila Microsoft SQL Server 7.0
Para excluir um ndice qualquer, pelo Enterprise Manager, basta selecion-lo, na tela
"Manage ndexes", e clicar em Delete.
Para criar um ndice na criao de uma tabela basta , no modo de edio da tabela,
selecionar qualquer coluna, clicar com o boto direito, e em Properties, na janela que
aparece, que a janela abaixo, selecionar a guia ndexes/Keys:
131
Apostila Microsoft SQL Server 7.0
Criando e e:cluindo ?ndices com comandos SQL
Tambm possvel criar um ndice com o comando SQL CREATE NDEX e excluir um
ndice com DROP NDEX.
C#E+E FU-/@UEH FCLUSE#ED R -$-CLUSE#EDH
/-DEL nome)indice $- ta*ela (nome)col&na1 FK nome)col&na5K ;;;nH)
FO/P
FP+D)/-DELH
FFKH "/LL"+C$# I fator)(reenc'imentoH
FFKH /N-$#E)DUP)8EAH
FFKH D#$P)EL/S/-NH
FFKH S+/S/CS)-$#EC$%PUEH
H
F$- gr&(o)arq&ivosH
Onde:
nomeAindice o nome do ndice que deseja criar.
nomeAta6ela o nome da tabela que deseja criar o ndice.
nomeAcolunaI o nome da coluna que ir fazer parte do ndice.Se o ndice tiver mais
de uma coluna acrescente a vrgula e coloque o nome das outras colunas.
UNQUE indica se o ndice ser nico. opcional. Se o ndice fo nico voc pode
acrescentar a opo GNORE_DUP_KEY [ignorar chaves duplicadas].
CLUSTERED indica se o ndice ser agrupado. Com o ndice agrupado e a opo
UNQUE, voc pode tambm usar a opo GNORE_DUP_KEY,
132
Apostila Microsoft SQL Server 7.0
FLLFACTOR o fator de prenchimento, ou seja, a porcentagem de espao livre que
ser deixado em cada pgina do ndice.
DROP_EXSTNG exclui o ndice existente com o mesmo nome. Se voc for criar um
ndice cujo nome no existe e usar esta oo, o SQL Server retornar uma mensagem
avisando que o ndice com o nome sendo criado no foi encontrado.
STATSTCS_NORECOMPUTE faz com que as estatsticas do ndice no sejam
recalculadas automaticamente com a atualizao do ndice.
PAD_NDEX deixa espaos vazios nas pginas dos nveis intermedirios do ndice. S
faz sentido se usado em conjunto com FLLFACTOR.
%ota& Para criar qualquer ndice, voc deve estar posicionado no banco de dados em
que o mesmo ser criado, ou informar o nome completo da tabela
(nome_banco_de_dados..nome_tabela). Tambm possvel usar a clusula USES
antes do comando de criao do ndice (USES nome_banco_de_dados).
Para excluir algum ndice, use o comando DROP NDEX, com a seguinte sintaxe:
D#$P /-DEL Eta*ela;UndiceE FK;;;nH
Onde tabela.indice o nome da tabela, seguido do nome do ndice que se deseja
excluir. Caso voc queira excluir mais de um ndice de uma vez, basta colocar uma
vrgula e indicar o nome do(s) outro(s) ndice(s) a ser(em) excludo(s).
4timi@ando Consultas
O otimizador escolhe uma de duas alternativas ao fazer uma consulta: ou varre a
tabela ou usa um ndice. Ele decide o que fazer baseado em:
Estimativa aproximada de quanto trabalho necessrio para usar o ndice ou
no. Essa estimativa baseada em informaes estatsticas sobre o ndice, que
dizem qual a distribuio dos dados. Essas informaes podem ficar
desatualizadas. Para corrigi-las, execute o comando UPDATE STATSTCS
nomeAdaAta6ela.
Se uma tabela muito pequena, ou se o otimizador espera que ser retornada
uma grande porcentagem de linhas, ele faz uma varredura.
133
Apostila Microsoft SQL Server 7.0
Se na clusula WHERE da consulta esto presentes colunas indexadas, bem
provvel que o otimizador resolva utilizar o ndice.
(nalisando o 4timi@ador
Para saber se o otimizador est usando seus ndices ou no, no Query Analyzer,
clique no boto "Show Execution Plan" (Ctr+L). Quando da execuo de uma
consulta, voc agora tem duas guias, como pode ser visto abaixo:
Essa guias podem ser selecionadas na parte inferior da janela da consulta. Uma o
"Estimated Execution Plan" e a outra "Results". Na guia "Estimated execution plan",
voc pode ver a anlise de cada linha da sua consulta ou qualquer comando SQL. Para
cada linha da consulta, voc ver seu custo "Query cost" como uma porcentagem do
custo total da sequncia de comandos, e seu texto "Query text". Na guia "Results" voc
ver o resultado da consulta.
Alm disso, para cada linha da consulta, mostrada uma representao grfica (que
deve ser lida da direita para a esquerda), que especifica os operadores lgicos e fsicos
utilizados na execuo de cada parte da consulta ou comando. Para saber mais sobre
a representao grfica do plano de execuo, procure por"Graphically Displaying the
Execution Plan Using SQL Server Query Analyzer" no Books Online.
Cada um dos cones (que so chamados de operadores, fsicos e lgicos) mostrados
no plano de execuo, quando se passa o mouse por cima dos mesmos, mostram
informaes especficas a seu respeito, como seu nome, o custo computacional em
termos de CPU e de /O, alm dos parmetros que foram usados com o mesmo e uma
breve descrio de sua funo.
Quando voc passa o mouse por cima da seta que liga os cones, voc v quantas
linhas foram retornadas (no caso de um SELECT) pelo seu comando, e o tamanho
estimado de cada linha.
Caso voc queira ver os resultados da anlise do otimizador em modo texto, use o
comando
SE SP$OPL+-)+LL $-
sso faz com que o SQL Server no execute comandos SQL. Ao invs disso, ele
retorna informaes detalhadas sobre como os comandos so executados e estima os
custos dos comandos. A informao retornada como um conjunto de linhas que
formam uma rvore hierrquica que representa os passos dados pelo processadore de
consultas do SQL Server na execuo de cada comando, seguida por algumas linhas
com os detalhes dos passos de execuo.
Esse comando no pode ser parte de um procedimento armazenado; deve ser o nico
comando em um batch (lote de comandos). O comando destinado a aplicaes
escritas para lidar com sua sada. Para retornar sadas compreensveis para aplicaes
MS-DOS, use
SE SP$OPL+-)EL $-
Os resultados so retornados na forma de anlise da consulta, sem sua execuo, at
que voc "desligue" essas opes, bastando para isso digitar
134
Apostila Microsoft SQL Server 7.0
SE SP$OPL+-)+LL $""
ou
SE SP$OPL+-)EL $""
dependendo de qual das opes estiver "ligada"
135
Apostila Microsoft SQL Server 7.0
1) - Integridade de %ados
Conceitos
( *ro*riedade I%>ECICQ
=sando %efaults e 3egras
%efinindo e =sando 3estri-es KConstraintsL
Quando =sar Cada Com*onente
Objetivos:
- Aprender a criar colunas com auto-incremento;
- Aprender a utilizar as opes defaults e Regras nas colunas;
- Aprender a definir restries nas tabelas para garantir a integridade dos dados;
- Saber quando escolher cada um dos recursos de integridade de dados.
( *ro*riedade I%>ECICQ
Uma coluna criada com a propriedade DENTTY tem um valor nico que gerado
automaticamente pelo sistema. Somente uma coluna pode ter essa propriedade. Por
exemplo, crie uma nova tabela no banco de dados Exemplo, com o seguinte comando:
create ta*le Prod&to
(CodProd&to int -$ -ULL /DE-/AK
-ome varc'ar(<3)K
PreSo moneD)
Uma coluna DENTTY no aceita um valor explicitamente inserido. Ao inserir dados na
tabela, a coluna deve ser omitida. Execute agora:
insert into Prod&to (-omeK PreSo)
val&es (EPrimeiro Prod&toEK 133;3)
insert into Prod&to (-omeK PreSo)
val&es (ESeg&ndo Prod&toEK 193;3)
insert into Prod&to (-omeK PreSo)
val&es (Eerceiro Prod&toEK 153;3)
Execute agora:
select ! from Prod&to
Note que a coluna CodProduto foi preenchida automaticamente com um valor auto-
incrementado pelo sistema:
CodProd&to -ome PreSo
........... ................... ..........................
1 Primeiro Prod&to 133K33
5 Seg&ndo Prod&to 193K33
7 erceiro Prod&to 153K33
Opcionalmente, na criao da tabela, pode ser informado uma semente (valor inicial
para a coluna) e um incremento, como em:
CodProd&to int /DE-/A(3K13)
136
Apostila Microsoft SQL Server 7.0
Onde o 0 a semente e o 10 o incremento.
%esa5ilitando I%>ECICQ
Voc pode temporariamente desativar a propriedade DENTTY, para que voc possa
inserir valores explicitamente numa coluna com DENTTY. Pode ser necessrio que
voc insira valores explicitamente em tabelas que tm itens deletados com
frequncia.nserir valores explicitamente na coluna com DENTTY lhe permite
preencher espaos vazios deixados na tabela.
Para desativar a gerao automtica de valores, use:
set identitD)insert nome_da_tabela on
Para voltar ao funcionamento normal, use:
set identitD)insert nome_da_tabela off
A qualquer instante, somente uma ta6ela em uma sesso pode ter a propriedadede de
DENTTY_NSERT em ON. Esta propriedade s vlida para o usurio atual e a
sesso atual (perde o efeito quando voc se desconecta do SQL Server).
Se j houver uma tabela com esta propriedade em ON, e se entrar com o comando
SET DENTTY_NSERT ON para outra tabela, ser retornado uma mensagem de erro
dizendo que essa propriedade j est em ON e qual a tabela para a qual essa
propriedade est em ON.
Identificador glo5almente e:clusio 8/=I%9
Embora a propriedade DENTTY automatize a numerao de colunas dentro de uma
tabela, tabelas separadas, cada uma com sua prpria coluna de identificador, pode
gerar os mesmos valores. sso ocorre porque se garante que a propriedade DENTTY
seja nica apenas para a tabela na qual ela for usada. Se uma aplicao deve gerar
uma coluna de identificador que seja nica em todo o banco de dados ou em todos
bancos de dados de cada computador ligado em rede no mundo, use a propriedade
ROWGUDCOL, o tipo de dados uni.uei!entifier, e a funo NEWD.
O tipo de dados uni.uei!entifier armazena valores binrios de 16 bits que operam
como nmeros globalmente exclusivos de identificao (GUD). Um GUD um nmero
binrio que se garante ser exclusivo; nenhum outro computador no mindo gerar uma
cpia daquele valor GUD. A principal utilidade de um GUD a atribuio de um
identificador que deva ser exclusivo em uma rede que tenha diversos computadores
em diversos locais.
Quando voc usar a propriedade ROWGUDCOL para definir uma coluna com
identificador globalmente exclusivo, considere que:
Uma tabela s pode ter uma coluna ROWGUDCOL, e essa coluna deve ser
definida utilizando o tipo de dados uniqueidentifier.
O SQL Server no gera automaticamente valores para a coluna. Para inserir um
valor globalmente exclusivo, crie uma definio DEFAULT na coluna que usa a
funo NEWD para gerar um valor globalmente exclusivo.
Como a propriedade ROWGUDCOL no fora a unicidade, a restrio UNQUE
deve ser usada para se assegurar que valores exclusivos sejam inseridos na
coluna ROWGUDCOL.
137
Apostila Microsoft SQL Server 7.0
O tipo de dados uni.uei!entifier no gera automaticamente novos Ds para colunas
inseridas, como a propriedade DENTTY o faz. Para obter novos valores
uni.uei!entifier, uma tabela deve ter uma clusula DEFAULT especificando a funo
NEWD, ou os comandos NSERT devem usar a funo NEWD. Por exemplo:
C#E+E +,LE a*elaEBcl&siva
(Col&naEBcl&siva U-/@UE/DE-/"/E# DE"+UL -EO/D()K
Caracteres V+#CP+#(13))
N$
/-SE# /-$ a*elaEBcl&siva(Caracteres) V+LUES (Ea*cE)
/-SE# /-$ a*elaEBcl&siva V+LUES (-EO/D()K EdefE)
N$
A principal vantagem do tipo de dados uni.uei!entifier que se garante que os
valores gerados pela funo Transact-SQL, NEWD, sejam exclusivos ao redor do
mundo.
Mas por outro lado, o tipo de dados uni.uei!entifier tem srias desvantagens:
Os valores so longos e obscuros. sso os torna difceis de serem digitados
corretamente pelos usurios, e mais difcil ainda de serem lembrados.
Os valores so aleatrios e no aceitam quaisquer padro que os torne mais
significativos para os usurios.
No h como determinar a sequncia em que os valores uni.uei!entifier so
gerados. Eles no se adequam a aplicaes existentes que incrementem
serialmente valores-chave.
Como tm 16 bytes, os dados do tipo uni.uei!entifier so relativamente
grandes se comparados com outros tipos de dados tais como inteiros de 4 bytes.
sto significa que ndices construdos usando chaves do tipo uni.uei!entifier
podem ser relativamente mais lentos do que se implementados utilizando uma
chave int.
=sando %efaults e 3egras
Um default um valor que usado para colunas quando seus valores no so
explicitamente informados. Um default pode ser criado como um objeto parte ou
como restri!=o de uma coluna, como veremos mais tarde.
Uma regra uma condio que verificada quando dados so inseridos numa tabela.
Ela tambm pode ser criado como um objeto parte ou como uma restrio CHECK,
como veremos.
138
Apostila Microsoft SQL Server 7.0
Criando e utili@ando um %efault
Para criar um default no Enterprise Manager, clique no item "Defaults" com o boto
direito e em %e6 Default. Digite o nome do default, nesse caso 'PrecoDefault'. Em
'Description', digite o valor dele, que ser 50.00 e clique no boto Ok.
Para vincular um default a uma coluna, de forma que ela passe a usar esse valor
default, selecione o default que voc acabou de criar, clique nele com o boto direito e
em Properties. Clique no boto "Bind Columns". Selecione a tabela, no caso "Produto".
Clique em Preo, na coluna "Unbound Columns" e clique em Add>>. A coluna que voc
tiver selecionado aparece agora do lado direito, em baixo de Bound Columns. Clique
em Apply. Feche todas as janelas clicando em Ok.
Para testar o default, insira valores na tabela "Produto" sem informar o preo:
insert into Prod&to (-ome) val&es (EProd&to defa&ltE)
Verifique o contedo da tabela. O 'Produto default' deve ter o Preo=50.00.
Criando e =tili@ando uma 3egra
Uma regra verifica o valor de uma coluna para saber se esse valor ser aceito ou no.
Se um valor inserido com NSERT ou atualizado com UPDATE no satisfaz a regra,
ocorre um erro e a operao cancelada. Uma regra contm uma condio qualquer
(semelhante a uma clusula WHERE) que tem um parLmetro a ser verificado. Esse
parmetro substitudo pelo valor da coluna no momento de execuo da regra.
Um parmetro sempre iniciado com @ e pode ter qualquer nome. Ele pode ser usado
mais de uma vez no texto da regra, se necessrio.
Vamos criar uma regra para verificar se um estado vlido. Ela ir verificar se o valor
informado pertence a um conjunto de siglas vlidas de estado. No Enterprise Manager,
clique em "Rules" com o boto direito e em %e6 2ule. Digite no nome da regra
"RegraEstado" e em "text", digite:
@valor in (EN$EK E$EK E#\EK ESPE)
Note que para simplificar no colocamos todos os estados vlidos. O nome do
parmetro valor, e a condio verifica se @valor um dos valores da lista. Clique no
boto Ok.
Agora essa regra pode ser usada em uma coluna qualquer. Clique com o boto direito
na regra que voc acabou de criar, selecione Properties, clique no boto "Bind
Columns"e vamos ligar essa regra, na tabela Cliente, coluna "Estado". Faa isso,
selecionando a tabela Cliente, selecionando o campo Estado em "Unbound Columns",
e clicando no boto Add. Feche as janelas, clicando em Ok duas vezes. Note que a
regra s se aplica aos novos dados que sero inseridos e no afeta os anteriores.
Agora tente inserir um dado na tabela Cliente, como por exemplo:
insert into Cliente (CodClienteK -omeK Estado)
val&es (13K ED[cimo ClienteEK ELAE)
Como 'XY' no satisfaz a regra, o SQL Server vai mostrar uma mensagem indicando
isso.
,inculando a ti*os de dados
Um default ou uma regra pode ser vinculado(a) a um tipo de dados definido pelo
usurio. Nesse caso, todas as colunas que forem criadas com aquele tipo tero o
139
Apostila Microsoft SQL Server 7.0
mesmo valor default (caso no tenha sido especificado um outro, que nesse caso tem
precedncia) ou a mesma regra de validao.
Para testar isso, vamos criar um novo tipo de dados chamado 'estado'. Clique com o
boto direito em "User defined data types" e em %e6 "ser Define! Data 10pe. Chame
o tipo de 'estado' e na sua descrio coloque CHAR(2). Na coluna "Default", voc pode
selecionar um valor default, e o SQL Server deixa voc selecionar mesmo valores
incompatveis.
Se uma coluna tem um default e uma regra associados a ela, o valor default no pode
violar a regra. Um default que conflite com uma regra nunca inserido, e a cada vez
que se tentar inserir o default, o SQL Server gera uma mensagem de erro.
Se voc selecionar um default que use um dado de tipo incomptivel com o tipo de
dados da coluna, quando tentar inserir dados nessa coluna, ser inserido o valor NULL
na mesma. Mas, se a coluna no aceitar valroes NULL, o SQL Server reportar um
erro na hora de tentar inserir valores nessa coluna, que tentem usar o default
Logo, no selecione nenhum valor para Default. Na coluna "Rule", selecione
"RegraEstado".
Se for criada uma nova tabela, com uma coluna que utiliza o tipo 'estado', ela ter essa
verificao da "RegraEstado", automaticamente.
=sando comandos SQL
Um default tambm pode ser criado com o comando CREATE DEFAULT, como:
create defa&lt PrecoDefa&lt as 93;33
Uma regra pode ser criada com o comando CREATE RULE, como:
create r&le #egraEstado as @estado in (ESPEK EN$EK E#\E)
Para vincular uma regra ou default a uma coluna ou a um tipo de dados, usa-se o
procedimento spA6indrule ou spA6indefault:
s()*indefa&lt nome_defaultK nome_objeto, f&t&reonlD
s()*indr&le nome_regraK nome_objeto, f&t&reonlD
Onde nomeAo6<eto pode ser nomeAta6ela.nomeAcoluna, no caso de uma coluna ou o
nome de um tipo de dados e futureonl0 um parmetro opcional dizendo que, no caso
de um tipo de dados, o item afeta apenas colunas a serem criadas, mas no as
existentes.
Para desvincular a regra ou default, usa-se:
s()&n*indefa&lt nome_objetoK f&t&reonlD
s()&n*indr&le nome_objetoK f&t&reonlD
Ao desvincular um default ou uma regra, se voc usar a opo futureonl0, colunas
existentes do tipo de dados no perdem o default ou regra especificado.
Finalmente, para excluir um default ou regra, podem ser usados os comandos:
dro( defa&lt nome_default
dro( r&le nome_regra
Lembre-se de desvincular um default ou regra que estejam vinculados a uma coluna
antes de exclu-los.
%efinindo e usando restri-es KconstraintsL
Uma restri!=o [constraint] uma propriedade de uma coluna usada para reforar a
integridade de dados. Geralmente restries so definidas quando a tabela criada
140
Apostila Microsoft SQL Server 7.0
(com CREATE TABLE), mas podem tambm ser definidas ou retiradas quando a tabela
j contm dados (com o comando ALTER TABLE). Se um comando de alterao
(NSERT ou UPDATE) no satisfaz uma das restries, o comando cancelado.
Toda restrio tem um nome, que voc pode informar nos comandos CREATE TABLE
e ALTER TABLE. Se voc no informar um nome, o SQL gera um automaticamente,
como PK_titleauth_au_id_154Af3e0.
De forma geral, a sintaxe para uma restrio :
CONSTRANT nomeAdaArestri!=o defini!=o
Onde a defini!=o inicia com as palavras PRMARY KEY, UNQUE, CHECK, FOREGN
KEY ou DEFAULT. A palavra CONSTRANT e o nomeAdaArestri!=o podem ser
omitidos. Nesse caso, o nome ser gerado automaticamente.
C0ae *rimHria K13I6(3Q T>QL
A chave prim8ria [primary key] de uma tabela uma coluna ou seqncia de colunas
que identificam unicamente uma linha dentro da tabela, ou seja, seu valor no pode ser
repetido para outras linhas. Ao definir uma chave primria, automaticamente criado
um ndice na tabela. S pode haver uma chave primria na tabela. No se pode entrar
com um valor nulo em qualquer coluna de uma chave primria (lembrando que nulo
um valor desconhecido, diferente de 0 ou de espao em branco). Recomenda-se uma
coluna inteira, pequena, como uma chave primria.
Na criao da tabela, essa restrio pode ser definida da seguinte forma (quando a
chave primria composta de uma s coluna):
create ta*le "ornecedor (
Cod"ornecedor int not n&ll primary keyK
-ome varc'ar(93) n&llK
Endereco varc'ar(93) n&llK
elefone varc'ar(53) n&ll
)
Note que 'CodFornecedor' deve ter a opo NOT NULL. No possvel criar uma
chave primria com colunas que podem ser NULL. Opcionalmente, poderia ser
informado um nome para a restrio, por exemplo 'ChaveFornecedor'. Nesse caso, a
segunda linha acima seria:
Cod"ornecedor int not n&ll constraint Chaveornecedor primary keyK
Agora, na tabela Fornecedor, no pode haver duas linhas com o mesmo valor de
'CodFornecedor'.
Quando a chave composta de duas ou mais colunas, nesse caso ela tem que ser
especificada com a lista de colunas entre parnteses, por exemplo:
create ta*le Prod&to"ornecedor
(CodProd&to intK Cod"ornecedor intK
primary key (Cod!roduto, Codornecedor))
Uma chave primria pode ser acrescentada tabela depois que ela j foi criada, com o
comando ALTER TABLE. Por exemplo, vamos acrescentar chaves primrias s tabelas
Cliente e Produto:
alter ta*le Cliente
add primary key nonc"ustered (CodC"iente)
alter ta*le Prod&to
add primary key c"ustered (Cod!roduto)
141
Apostila Microsoft SQL Server 7.0
A opo NONCLUSTERED diz respeito ao tipo de ndice que ser criado para a chave
primria. Se no especificada, o ndice ser CLUSTERED (v. captulo anterior). Esse
ndice criado ou excludo automaticamente, junto com a restrio.
Em qualquer um dos casos pode-se especificar ou no o nome da restrio, na forma
CONSTRANT nome logo antes das palavras "PRMARY KEY".
=nicidade K=EIQ=>L
Uma restrio UNQUE em uma coluna ou grupo de colunas determina que o seu valor
deve ser nico na tabela. Esse tipo de restrio usado para chaves alternadas, ou
seja, valores que se repetem na tabela alm da chave primria. Pode haver vrias
restries UNQUE na tabela e as colunas de uma restrio UNQUE permitem valores
nulos.
Esse tipo de restrio pode ser criada com exatamente a mesma sintaxe do PRMARY
KEY, por exemplo (no execute):
alter ta*le Cliente
add uni#ue nonc"ustered (CodC"iente)
Tambm criado um ndice automaticamente, que no permite valores duplicados.
Pode-se especificar ou no o nome da restrio, na forma CONSTRANT nome logo
antes do "UNQUE"..
%efault
Um default pode ser especificado na forma de restrio. Na definio da tabela, como
j vimos, possvel fazer isso:
create ta*le Cliente (
;;;
DataCadastro datetime de$au"t (%etdate())K
;;;
PaUs varc'ar(53) de$au"t &'rasi"&)
O valor de um default pode ser uma constante ou uma chamada funo do sistema,
como GETDATE(). Pode-se especificar ou no o nome da restrio, na forma
CONSTRANT nome logo antes da palavra "DEFAULT", por exemplo:
PaUs varc'ar(53) constraint (e$!ais de$au"t &'rasi"&
Se o default for acrescentado com o comando ALTER TABLE, preciso especificar
para qual coluna ele vai ser ativado, por exemplo:
alter ta*le Cliente
add defa&lt E,rasilE $or !a)s
,erificao KC<>CTL
Uma restrio CHECK muito semelhante a uma regra, que verifica os valores que
esto sendo inseridos. A vantagem que ele pode fazer referncia a uma ou mais
colunas da tabela.
Por exemplo, vamos verificar, na tabela Cliente, se a Cidade e Estado so informados.
Vamos criar uma restrio que impede de inserir o valor de Cidade, se Estado no foi
informado:
alter ta*le Cliente
add check (not (Cidade is not nu"" and *stado is nu""))
142
Apostila Microsoft SQL Server 7.0
Para testar, tente inserir uma linha com Cidade = 'Teste' e Estado no informado (ou
informado = NULL).
Note que a expresso do CHECK deve estar sempre entre parnteses. Sub-consultas
no so permitidas em CHECK; para verificar dados em outras tabelas, use chaves
estrangeiras como abaixo. Pode-se especificar ou no o nome da restrio, na forma
CONSTRANT nome logo antes das palavra "CHECK".
Tecnicamente, o que uma restrio CHECK faz especificar uma condio de
pesquisa Booleana (que retorna verdadeiro ou falso) que aplicada a todos os valores
inseridos para a coluna. Todos os valores que no retornem verdadeiro [TRUE] so
rejeitados. Voc pode especificar vrias restries CHECK para cada coluna.
C0ae estrangeira KF43>I/E T>QL
Uma forma importante de integridade no banco de dados a integridade referencial,
que a verificao de integridade feita entre duas tabelas. Por exemplo, a tabela
'ProdutoFornecedor' ser usada para relacionar dados de produtos e fornecedores. Ela
contm as colunas CodProduto e CodFornecedor. A primeira deve conter um cdigo
vlido que exista na tabela 'Produto'. A outra deve ter um cdigo vlido existente na
tabela 'Fornecedor'. Como validar essa verificao?
Uma chave estrangeira [foreign key] uma restrio de integridade referencial. Ela
consiste de uma coluna ou grupo de colunas cujo valor deve coincidir com valores de
outra tabela. No nosso caso, vamos adicionar duas chaves estrangeiras na tabela
'ProdutoFornecedor': CodProduto faz referncia a /ro!uto.'o!/ro!uto e
CodFornecedor faz referncia a :ornece!or.'o!:ornece!or:
alter ta*le Prod&to"ornecedor
add $orei%n key (Cod!roduto) re$erences !roduto(Cod!roduto)K
$orei%n key (Codornecedor) re$erences ornecedor(Codornecedor)
Note que a chave primria de Produto (CodProduto) e de Fornecedor
(CodFornecedor), como foi definido antes. Se fossem especificados apenas os nomes
das tabelas, sem indicar entre parnteses as colunas, tambm funcionaria:
alter ta*le Prod&to"ornecedor
add $orei%n key (Cod!roduto) re$erences !rodutoK
$orei%n key (Codornecedor) re$erences ornecedor
Porque nesse caso assumida a chave primria. Mas uma chave estrangeira pode
fazer referncia a colunas que no a chave primria, desde que possuam uma restrio
UNQUE definida.
Outra forma de criar essas restries em conjunto com a tabela, da forma:
create ta*le Prod&to"ornecedor
(CodProd&to int $orei%n key re$erences !rodutoK
Cod"ornecedor int $orei%n key re$erences ornecedorK
(rimarD =eD (CodProd&toK Cod"ornecedor))
Esse tipo de restrio no cria um ndice automaticamente, embora muitas vezes seja
recomendvel criar para maior desempenho (geralmente no-clustered). Pode-se
especificar o nome da restrio opcionalmente, na forma CONSTRANT nome? logo
antes das palavras "FOREGN KEY".
143
Apostila Microsoft SQL Server 7.0
/erenciando restri-es com comandos SQL
Como j vimos, CREATE TABLE pode criar as restries junto com a tabela e ALTER
TABLE, com a clusula ADD, permite adicionar restries depois que a tabela foi
criada. Para excluir uma restrio, preciso saber o seu nome. Se voc no informou o
nome na criao, ter que descobri-lo, o que pode ser feito usando-se:
s()'el( nome_da_tabela
Esse comando mostra informaes sobre a tabela, inclusive os nomes de cada
restrio. Para excluir uma restrio, usa-se ALTER TABLE, com a opo DROP
(independente do tipo de restrio). A sintaxe genrica :
alter ta*le nome_da_tabela
dro( constraint nome_da_restrio
Uma restrio tambm pode ser desabilitada temporariamente e depois reabilitada com
o comando ALTER TABLE, usando as opes NOCHECK (para desabilitar) e CHECK
(para habilitar). sso no funciona com PRMARY KEY, UNQUE ou DEFAULT, apenas
com as outras restries. sso pode ser til para inserir dados que fujam aos valores
impostos pelas restries. A sintaxe :
alter ta*le nome_da_tabela noc'ec= constraint nome_da_restrio
alter ta*le nome_da_tabela c'ec= constraint nome_da_restrio
/erenciando restri-es com o >nter*rise 6anager
Todas as operaes sobre restries que fizemos podem ser feitas atravs do
Enterprise Manager. Clique com o boto direito numa tabela, clique em Design 1a5le,
selecione alguma coluna, clique na mesma com o boto direito e selecione Properties.
Aparece a janela abaixo:
144
Apostila Microsoft SQL Server 7.0
Voc tem a pgina ndexes/Keys para criar ou remover a chave primria, e criar ou
excluir restries UNQUE. A pgina "Tables" permite definir restries CHECK, a
pgina "Relationships" permite definir as chaves estrangeiras. Os defaults so tratados
na lista de colunas, na janela de edio da tabela.
Note que nesta janela, voc tambm pode definir em qual grupo de arquivos (ver
grupos de arquivos) voc vai criar cada uma das restries.
145
Apostila Microsoft SQL Server 7.0
11 - ,is-es./atil0os e 1rocedimentos
,is-es K,ie7sL
1rocedimentos (rma@enados
/atil0os KCriggersL
Objetivos:
- Aprender a criar e utilizar vises e saber quais as particularidades do acesso a vises;
- Aprender a criar e utilizar procedimentos armazenados;
- Aprender a criar e utilizar triggers[gatilhos].
,is-es K,ie7sL
Uma viso [view] uma forma alternativa de olhar os dados contidos em uma ou mais
tabelas. Para definir uma viso, usa-se um comando SELECT que faz uma consulta
sobre as tabelas. A viso aparece depois como se fosse uma tabela.
Vises tm as seguintes vantagens:
Uma viso pode restringir quais as colunas da tabela que podem ser acessadas
(para leitura ou para modificao), o que til no caso de controle de acesso,
como veremos mais tarde.
Uma consulta SELECT que usada muito freqentemente pode ser criada como
viso. Com isso, a cada vez que ela necessria, basta selecionar dados da
viso.
Vises podem conter valores calculados ou valores de resumo, o que simplifica
a operao.
Uma viso pode ser usada para exportar dados para outras aplicaes.
Criando uma iso com o >nter*rise 6anager
Para criar uma viso com o Enterprise Manager, expanda um grupo de servidores,
ento o servidor em que est o baco de dados onde ser criada a viso. Clique com o
boto direito em ;ie6s. Aparece uma tela quase idntica do Query Designer. Caso
alguma das sees aqui refrenciadas no esteja aparecendo, confira na seo em que
tratamos do Query Designer, como ativ-la, e entenda melhor cada seo.
146
Apostila Microsoft SQL Server 7.0
1. Na janela superior (logo abaixo dos cones, chamada de seo do diagrama,
clique com o boto direito, e selecione A!! 1a5le.
2. Na guia Tables (ou Views, caso voc j tenha criado alguma viso e queira que
ela faa parte desta que est sendo criada), selecione a tabela (ou viso) a ser
adicionada, e ento clique A!!. Caso voc queira remover alguma tabela
adicionada ao diagrama, clique na mesma com~o boto direito e selecione
2emove.
3. Repita tantas vezes quantas forem as tabelas (ou vises) a serem adicionadas
nova viso. Clique em 'lose quando tiver escolhido todas as tabelas (ou vises)
desejadas.
4. Na caixa Column da seo da grade (parte da janela logo abaixo de onde esto
as tabelas adicionadas), selecione as colunas a serem referenciadas na viso.
Note que caso haja mais de uma tabela na seo do diagrama, quando voc for
selecionar a coluna na seo da grade, aparecer o nome completo da coluna
(tabela.coluna).
5. Marque a caixa 4utput se a coluna deve ser mostrada no resultado da viso.
Note que voc tambm pode escolher as colunas que faro parte da viso,
selecionando-as na representao grfica da tabela, mas as colunas
selecionadas dessa maneira faro parte da sada por padro. Para que no
apaream na sada, desmarque a caixa 4utput.
6. Para agrupar por alguma coluna, clique com o boto direito na coluna (na seo
da grade) e selecione <roup =0.
7. Na coluna 'riteria, digite o critrio especificando quais linhas retornar; isso
determina a clusula WHERE. Se Group By for especificado, isso determina a
clusula HAVNG.
147
Apostila Microsoft SQL Server 7.0
8. Na coluna 4r... entre com qualquer critrio adicional para especificar quais
linhas a serem retornadas.
9. Clique com o boto direito em qualquer lugar da seo da grade, e ento
selecione /roperties.
"Output all columns" mostrar todas as linhas da viso no resultado.
"DSTNCT values" filtra os valores duplicados no resultado.
"Encrypt view" criptografa a definip da viso.
Opcionalmente, em "Top", entre com o nmero de linhas a serem
retornadas no resultado. Digite a palavra PERCENT depois do nmero
para mostrar uma porcentagem das linhas, no resultado.
10. Clique com o boto direito em qualquer lugar da seo do diagrama; clique
ento em 2un (para ver o resultado) ou Save (para salvar a viso). Note que na
seo SQL, aparece o cdigo SQL do SELECT envolvido na criao da viso.
Criando uma iso com comandos SQL
Para criar uma viso atravs de SQL, use o comando CREATE VEW. Esse comando
tem a seguinte sintaxe:
C#E+E V/EO nome)visTo F(col&na FK;;;nH)H
FO/P E-C#AP/$-H
+S
declaraSTo)SELEC
FO/P CPEC8 $P/$-H
nomeAvis=o o nome a ser dados viso
coluna o nome a ser usado para uma coluna em uma viso. Nomear uma coluna em
CREATE VEW s necessrio quando uma coluna obtida por uma expresso
aritmtica, uma funo, ou uma constante, ou quando duas ou mais colunas poderiam
ter o mesmo nome (frequentemente por causa de uma juno), ou quando a coluna em
uma viso recene um nome diferente do nome da coluna da qual se originou. Os
nomes de colunas tambm podem ser atribudos no comando SELECT. Caso voc
queira nomear mais de uma coluna, entre com o nome de cada uma separado por
vrgulas.
WTH ENCRYPTON criptografa as entradas na tabela s0scomments que contm o
texto do comando CREATE VEW.
WTH CHECK OPTON fora todas as modificaes de dados executadas na viso a
aderirem aos critrios definidos na declara!=oASL/.. Quando uma coluna
modificada atravs de uma viso, WTH CHECK OPTON garante que os dados
permaneam visveis atravs da viso depois que as modificaes forem efetivadas.
Vamos criar uma viso no banco de dados Exemplo, usando as tabelas 'Produto',
'Fornecedor' e 'ProdutoFornecedor'. Essa viso vai mostrar o nome do fornecedor e o
nome do produto. Crie-a digitando o texto abaixo no Query Analyzer:
create view Visao"ornecProd&to as
select f;-ome -ome"ornecedorK (;-ome -omeProd&to
from "ornecedor f
inner ]oin Prod&to"ornecedor (f
on f;Cod"ornecedor I (f;Cod"ornecedor
inner ]oin Prod&to (
148
Apostila Microsoft SQL Server 7.0
on (f;CodProd&to I (;CodProd&to
Para criar uma viso voc deve estar posicionado no banco de dados onde a viso
ser criada ou ento especific-lo atravs da clusula USES.
Ao criar uma viso, o texto do comando acima armazenado na tabela s)scomments.
Agora, para testar, digite:
select ! from Visao"ornecProd&to
O resultado ter as colunas 'NomeFornecedor' e 'NomeProduto', mostrando os dados
relacionados entre elas.
Voc pode tambm criar uma viso que calcula valores usando colunas das tabelas, ou
usando GROUP BY e funes agregadas, na declarao SELECT.
(lterando ou e:cluindo uma iso
Para alterar uma viso, voc pode usar tanto o Enterprise Manager quanto o comando
SQL, ALTER VEW. Para alter-la com o Enterprise Manager, selecione a viso que se
quer alterar, clique na mesma com o boto direito e selecione Design ;ie6. Aparecer
a mesma janela vista na criao da viso com o Enterprise Manager, e a voc pode
fazer as alteraes que julgar necessrias viso, salvar as alteraes, executar a
viso, etc.. Tudo da mesma forma que se voc estivesse criando uma nova viso.
O comando SQL ALTER VEW tem a seguinte sintaxe:
+LE# V/EO nome)visTo F(col&na FK;;;nH)H
FO/P E-C#AP/$-H
+S declaraSTo)select
FO/P CPEC8 $P/$-H
Todas as consideraes feitas a respeito do comando CREATE VEW se aplicam aqui.
Caso voc no se lembre do comando usado na criao da viso (o comando CREATE
VEW) , voc pode obt-lo usando o procedimento spAhelpte@t, da forma:
s()'el(teBt Visao"ornecProd&to
Este texto consultado na tabela s)scomments. Algumas linhas podem aparecer
quebradas no resultado.
importante considerar que a alterao de uma viso no afeta os procedimentos
armazenados ou gatilhos dependentes da mesma e no altera as permisses
atribudas mesma (veremos mais sobre permisses em Segurana).
6odificando dados atraUs de uma iso
Voc pode executar um comando UPDATE em uma viso. Se ela foi baseada em uma
nica tabela, isso no provoca grandes problemas. Se a opo WTH CHECK OPTON
acima for usada, as atualizaes devem satisfazer as condies da clusula WHERE
usada na criao da viso. nseres com NSERT tambm podem ser feitas.
Se a viso baseada em duas ou mais tabelas, a atualizao s possvel se o
comando altera dados de apenas uma tabela. Colunas calculadas no podem ser
alteradas. Se foram usadas funes de agregao, tambm no possvel modificar os
dados atravs da viso.
Na insero, se uma coluna de uma tabela subjacente no permite nulos (NOT NULL),
no possvel inserir linhas na viso, pois isso deixaria a coluna sem valor.
149
Apostila Microsoft SQL Server 7.0
1rocedimentos (rma@enados
Um procedimento armazenado [stored procedures] um conjunto de comandos SQL
que so compilados e armazenados no servidor. Ele pode ser chamado a partir de um
comando SQL qualquer.
Em verses anteriores do SQL Server, os procedimentos armazenados eram uma
maneira de pr-compilar parcialmente um plano de execuo. Quando da criao do
procedimento armazenado, um plano de execuo parcialmente compilado era
armazenado em uma tabela de sistema. A execuo de um procedimento armazenado
era mais eficiente do que a execuo de um comando SQL, porque o SQL Server no
precisava compilar um plano de excuo completamente, apenas tinha que terminar a
otimizao do plano armazenado para o procedimento. Alm disso, o plano de
execuo completamente compilado para o procedimento armazenado era mantido na
cache de procedimentos do SQL Server, significando que execues posteriores do
porcedimento armazenado poderiam usar o plano de execuo pr-compilado.
A verso 7.0 do SQL Server apresenta vrias mudanas no processamento de
comandos que estendem muitos dos benefcios de desempenho dos procedimentos
armazenados para todos os comandos SQL. O SQL Server 7.0 no salva um plano
parcialmente compilado para os procedimentos quando os mesmos so criados. Um
procedimento armazenado compilado em tempo de execuo como qualquer outro
comando Transact-SQL. O SQL Server 7.0 mantm planos de execuo para todos os
comandos SQL na cache de procedimentos, no apenas planos de execuo de
procedimentos armazenados. Ele ento usa um algoritmo eficiente para comparao
de novos comandos Transact-SQL com os comandos Transact-SQL de planos de
execuo existentes. Se o SQL Server 7.0 determinar que um novo comando Transact-
SQL o mesmo que um comando Transact-SQL de um plano de execuo existente,
ele reutiliza o plano. sso reduz o ganho relativo de desempenho, na pr-compilao de
procedimentos armazenados, j que estende a reutilizao de planos de execuo
para todos os comandos SQL.
A vantagem de usar procedimentos armazenados que eles podem encapsular rotinas
de uso freqente no prprio servidor, e estaro disponveis para todas as aplicaes.
Parte da lgica do sistema pode ser armazenada no prprio banco de dados, em vez
de ser codificada vrias vezes em cada aplicao.
Criando *rocedimentos arma@enados
Para criar um procedimento, use o comando CREATE PROCEDURE. Por exemplo, o
procedimento abaixo recebe um parmetro (@nome) e mostra todos os clientes cujo
nome contenha o nome informado:
create (roced&re ,&scaCliente
@nome,&sca varc'ar(93)
150
Apostila Microsoft SQL Server 7.0
as
select CodClienteK -ome from Cliente
w'ere -ome li=e ECE X @nome,&sca X ECE
Note que os parmetros so sempre declarados com @, logo aps o nome do
procedimento. Um procedimento pode ter zero ou mais parmetros. Declara-se o nome
do procedimento, e a seguir o tipo de dados do parmetro.
%ota& ao invs de CREATE PROCEDURE, pode-se utilizar CREATE PROC, com o
mesmo efeito.
Dentro do procedimento pode haver vrios comandos SELECT e o resultado desses
comandos ser o resultado do procedimento. O corpo do procedimento comea com a
palavra AS e vai at o final do procedimento.
No se pode usar os comandos SET SHOWPLAN_TEXT, e SET SHOWPLAN_ALL
dentro de um procedimento armazenado, pois os mesmos devem ser os nicos
comandos de um lote (batch).
Dentro de um procedimento, nomes de objetos usados em alguns comandos devem
ser qualificados com o nome do propietrio do objeto, se outros usurios utilizaro o
procedimento armazenado. Os comandos so:
ALTER TABLE
CREATE NDEX
Todos os comandos DBCC
DROP TABLE
DROP NDEX
TRUNCATE TABLE
UPDATE STATSTCS
>:ecutando *rocedimentos arma@enados
Para executar um procedimento, usa-se o comando EXEC (ou EXECUTE). A palavra
"EXEC" pode ser omitida se a chamada de procedimento for o primeiro comando em
um script ou vier logo aps um marcador de fim de lote (a palavra "GO").
Por exemplo, execute o procedimento anterior da seguinte forma:
,&scaCliente EanE
O resultado ser as linhas da tabela Cliente onde o valor de Nome contm 'an' (se
existirem tais linhas).
Ao executar um procedimento, voc pode informar explicitamente o nome de cada
parmetro, por exemplo:
,&scaCliente @nome,&sca I EanE
sso permite passar os parmetros (se mais de um) fora da ordem em que eles foram
definidos no procedimento.
EXEC tambm pode executar um procedimento em outro servidor. Para isso, a sintaxe
bsica :
ELEC nome_servidor.nome_banco_de_dados..nome_procedimento
Comandos *ara uso em *rocedimentos arma@enados
Voc pode declarar uma varivel em um procedimento e us-la para guardar valores.
Por exemplo, exclua o procedimento anterior e crie-o novamente como abaixo:
151
Apostila Microsoft SQL Server 7.0
dro( (roced&re ,&scaCliente
go
create (roced&re ,&scaCliente
@nome,&sca varc'ar(93)
as
declare @contagem intK @mensagem c'ar(133)
select CodClienteK -ome from Cliente
w'ere -ome li=e ECE X @nome,&sca X ECE
.. conta q&antas lin'as foram encontradas
select @contagem I co&nt(!) from Cliente
w'ere -ome li=e ECE X @nome,&sca X ECE
if @contagem I 3
*egin
select @mensagem I E-en'&m cliente cont[m
WEX@nome,&scaXEWE
(rint @mensagem
(rint WW
end
O comando DECLARE declara variveis, que so sempre introduzidas pelo caractere
@. No caso, @contagem uma varivel do tipo int e @mensagem do tipo char(100).
Note que quando voc usa um comando SELECT, o resultado pode ser colocado numa
varivel, como @contagem acima. Esse resultado no aparece no resultado do
SELECT. Essa tambm a nica forma de alterar uma varivel (voc no pode
escrever '@varivel = valor' diretamente).
O comando F verifica uma condio e executa um comando caso a condio seja
verdadeira. Se acompanhado da clusula ELSE, executa um outro comando caso a
condio seja falsa. O comando PRNT usado acima geralmente usado para mostrar
mensagens, que aparecem quando voc chama o procedimento interativamente.
Os comandos BEGN e END so usados para delimitar uma lista de comandos, que
passa a ser tratada como um comando nico. No caso acima, eles so necessrios
para poder executar trs comandos dentro do F (o SELECT e os dois PRNT).
152
Apostila Microsoft SQL Server 7.0
Criando *rocedimentos arma@enados com o >nter*rise 6anager
Tambm possvel a criao de procedimentos armazenados atravs do Enterprise
Manger. Para isso, deve-se expandir um grupo de servidore, um servidor, e o banco de
dados onde o procedimento armazenado ser criado. Clique ento com o boto direito
em Store! /roce!ures, e selecione %e6 Store! /roce!ure. Aparece uma tela como
abaixo
Nessa tela voc deve dar o nome que desejar ao procedimento, substituindo o texto em
preto [PROCEDURE NAME] pelo nome que voc quer dar ao procedimento
armazenado sendo criado.
Logo depois do AS, voc deve entrar com o cdigo do procedimento armazenado,
conforme descrito acima. Voc pode aps entrar com o cdigo desejado, clicar no
boto ',eck S0nta-, que verificar se h erros de sintaxe nas declaraes SQL.
Quando tiver terminado de entrar com o cdigo do procedimento, basta clicar em OK
que o mesmo ser criado.
/atil0os KCriggersL
Um gatilho [trigger] um tipo de procedimento armazenado, que executado
automaticamente quando ocorre algum tipo de alterao numa tabela. Gatilhos
"disparam" quando ocorre uma operao NSERT, UPDATE ou DELETE numa tabela.
Geralmente gatilhos so usados para reforar restries de integridade que no podem
ser tratadas pelos recursos mais simples, como regras, defaults, restries, a opo
NOT NULL etc. Deve-se usar defaults e restries quando eles fornecem toda a
funcionalidade necessria.
153
Apostila Microsoft SQL Server 7.0
Um gatilho tambm pode ser usado para calcular e armazenar valores
automaticamente em outra tabela, como veremos.
>:em*lo de gatil0os
Para utilizar gatilhos, vamos criar antes algumas tabelas que sero usadas como
exemplo. A tabela "NotaFiscal" conter os cabealhos de notas fiscais. A tabela
"temNotaFiscal" ir conter itens de nota fiscal relacionados com as notas fiscais.
Execute o script abaixo para criar as tabelas:
create ta*le -ota"iscal
(-&mero-ota n&meric(13) (rimarD =eDK
Valorotal n&meric(13K5) defa&lt (3) )
N$
create ta*le /tem-ota"iscal
(-&mero-ota n&meric(13) foreign =eD references -ota"iscalK
CodProd&to int foreign =eD references Prod&toK
@&antidade int not n&ll c'ec= (@&antidade > 3)K
(rimarD =eD (-&mero-otaKCodProd&to)
)
Vamos usar gatilhos para duas finalidades: primeiro, quando for excluda uma nota
fiscal, todos os seus itens sero excludos automaticamente. Depois, quando for
includo um item, a coluna 'ValorTotal' ser atualizada, na tabela 'NotaFiscal'.
Criando gatil0os
Gatilhos so sempre criados vinculados a uma determinada tabela. Se a tabela for
excluda, todos os gatilhos dela so excludos como conseqncia. Ao criar um gatilho,
voc pode especificar qual(is) a(s) operao(es) em que ele ser acionado: NSERT,
UPDATE ou DELETE.
/atil0os *ara insero
Quando feita a incluso de uma ou mais linhas na tabela, o SQL Server cria uma
tabela virtual chamada inserted, que contm as linhas que sero includas (mas ainda
no foram). Essa tabela tem a mesma estrutura da tabela principal. Voc pode
consultar dados nessa tabela com o SELECT, da mesma forma que uma tabela real.
Vamos criar um gatilho, chamado nclusaotemNota, que ser ativado por uma
operao NSERT na tabela temNotaFiscal. Primeiro ele vai verificar se os valores
sendo inseridos possuem uma NotaFiscal relacionada ou no. Digite o seguinte
comando:
create trigger /ncl&sao/tem-ota
on /tem-ota"iscal for insert
as
if not eBists (select ! from
insertedK -ota"iscal
w'ere inserted;-&mero-ota I
-ota"iscal;-&mero-ota)
raiserror(EEsse item nTo cont[m &m n_mero de nota vMlidoE)
&(date -ota"iscal
set Valorotal I Valorotal
X (select i;@&antidade ! (;PreSo
from Prod&to (K inserted i
154
Apostila Microsoft SQL Server 7.0
w'ere (;CodProd&to I i;CodProd&to)
w'ere -&mero-ota I (select -&mero-ota from inserted)
Primeiro o gatilho usa as tabelas inserted e $ota3iscal para consultar se existe o valor
de NumeroNota na tabela. Caso no exista, o comando RASERROR gera um erro de
execuo, com uma mensagem que ser retornada para a aplicao. Esse comando
efetivamente cancela o comando NSERT que estiver sendo executado.
Depois verifica a quantidade que est sendo inserida (inserted.Quantidade) e multiplica
pelo preo do produto (Produto.Preo). Esse preo buscado na tabela de produtos,
usando como valor de pesquisa o cdigo do produto inserido (inserted.CodProduto).
Ele atualiza a nota fiscal relacionada com o item que est sendo inserido (para isso
verifica where NumeroNota=(select NumeroNota from inserted)).
/atil0os *ara e:cluso
Na excluso, as linhas da tabela so removidas e colocadas na tabela virtual deleted,
que tem a mesma estrutura da tabela principal. Um gatilho para excluso pode
consultar deleted para saber quais as linhas excludas.
Vamos criar um gatilho, na tabela NotaFiscal para, quando a nota fiscal for excluda,
todos os seus itens de nota relacionados, na tabela temNotaFiscal, sejam excludos
em cascata. Execute o seguinte:
create trigger EBcl&sao-ota
on -ota"iscal for delete
as
.. eBcl&ir todos os itens relacionados
.. (mesmo -&mero-ota q&e deleted)
delete from /tem-ota"iscal
w'ere -&mero-ota in (select -&mero-ota from deleted)
/atil0os *ara atuali@ao
As tabelas inserted e deleted, como j vimos, so tabelas virtuais que podem ser
usadas dentro de um gatilho. A primeira contm os dados que esto sendo inseridos na
tabela real e a segunda contm os dados antigos, que esto sendo includos.
Num gatilho de atualizao (FOR UPDATE), essas duas tabelas tambm esto
disponveis. No caso, deleted permite acessar os dados como eram antes da
modificao e inserted permite acessar os dados depois da atualizao.
Podemos ento considerar uma atualizao como uma excluso seguida de uma
insero (excluem-se valores antigos e inserem-se valroes novos).
Por exemplo, ao mudar a Quantidade em um temNotaFiscal, o total da nota deve ser
recalculado. Para isso, preciso levar em conta a diferena entre a quantidade antiga
(deleted.Quantidade) e a nova (inserted.Quantidade). Vamos criar um gatilho em
temNotaFiscal que faz isso:
create trigger +lteracao/tem-ota
on /tem-ota"iscal for &(date
as
if &(date(@&antidade) or &(date(CodProd&to)
*egin
&(date -ota"iscal
set Valorotal I Valorotal X
(select (;PreSo ! (i;@&antidade . d;@&antidade)
155
Apostila Microsoft SQL Server 7.0
from Prod&to ( inner ]oin inserted i
on (;CodProd&to I i;CodProd&to inner ]oin deleted d
on i;CodProd&to I d;CodProd&to and i;-&mero-ota I d;-&mero-ota)
end
Note acima o uso de 'if update(nomeAdaAcoluna)'. Dentro de um gatilho de atualizao,
isso permite descobrir se a coluna est sendo alterada ou no. sso para evitar trabalho
desnecessrio se no estiver sendo modificada uma dessas colunas.
Criando gatil0os *ara mJlti*las a-es
Um gatilho pode ser criado para uma tabela para mltiplas operaes nessa tabela. Por
exemplo, para criar um gatilho usado em NSERT, UPDATE e DELETE, usa-se uma
sintaxe, como:
create trigger nome_do_gatilho
on nome_da_tabela for /-SE#K UPD+EK DELEE
as
texto_do_gatilho
4utros comandos
Em gatilhos, assim como em procedimentos armazenados, possvel declarar
variveis e usar comandos como F, BEGN..END etc.
Alguns comandos no so permitidos dentro de um gatilho. Estes so:
+LE# D++,+SE +LE# P#$CEDU#E +LE# +,LE
+LE# #/NNE# +LE# V/EO C#E+E D++,+SE
C#E+E DE"+UL C#E+E /-DEL C#E+E P#$CEDU#E
C#E+E #ULE C#E+E SCPE%+ C#E+E +,LE
C#E+E #/NNE# C#E+E V/EO DE-A
D/S8 /-/ D/S8 #ES/0E D#$P D++,+SE
D#$P DE"+UL D#$P /-DEL D#$P P#$CEDU#E
D#$P #ULE D#$P +,LE D#$P #/NNE#
D#$P V/EO N#+- L$+D D++,+SE
L$+D L$N #ES$#E D++,+SE #ES$#E L$N
#EV$8E #EC$-"/NU#E #U-C+E +,LE
UPD+E S+/S/CS
156
Apostila Microsoft SQL Server 7.0
12 - Segurana
Conceitos
Criando logins do SQL Serer
Criando usuHrios do 5anco de dados
Criando gru*os de usuHrios
%efinindo *ermiss-es
Objetivos:
- Conhecer os recursos do SQL Server para controle de acesso ao banco de dados;
- Aprender a criar logins de usurio e usurios do banco de dados.
Conceitos
Os recursos de segurana do SQL Server permitem determinar:
Quais usurios podem usar o SQL Server.
Quais usurios podem acessar cada banco de dados.
As permisses de acesso para cada objeto de banco de dados e para cada
usurio.
As permisses de acesso para cada comando SQL em cada banco de dados,
para cada usurio.
Existem quatro barreiras para que os usurios possam acessar dados em um servidor
SQL Server:
O sistema operacional de rede; o usurio deve efetuar logon na rede.
A autenticao do SQL Server; o usurio deve ter uma conta no SQL Server.
A autenticao de banco de dados; o D do usurio deve existir em uma tabela
de sistema do banco de dados (mais especificamente, a tabela s)susers)
A autenticao de objetos; o usurio deve ter permisses para acessar qualquer
objeto (tabelas, vises, entre outros).
(utenticao de usuHrios
Quando um usurio tenta acessar um servidor SQL Server, ele pode ser autenticado de
duas maneiras: pela Autenticao do Windows NT ou pela Autenticao do SQL
Server. No confunda isso com modo de segurana, que um tpico muito
semelhante.
A autenticao do Windows NT se aproveita da segurana embutida no Windows NT
Server, a qual inclui caractersticas como senhas criptografadas, senhas que expiram,
tamanho mnimo de senhas, bloqueio de conta, e restrio de acesso com base em
nomes de computador.
157
Apostila Microsoft SQL Server 7.0
O SQL Server pode confiar no Windows NT para autenticar logins, ou pode ele mesmo
autenticar os logins.
Quando o Windows NT autentica o login, o SQL Server processa o login assim:
Quando um usurio se conecta ao SQL Server, o cliente abre uma conexo
confivel com o SQL Server, na qual so passadas as contas de usurio e de
grupo do cliente para o SQL Server.
Uma cone@=o confi8vel [trusted connection] uma conexo de rede com o SQL
Server que consegue ser autenticada pelo Windows NT. Para ocorrer uma
conexo confivel, as bibliotecas de rede [net-libraries] Named Pipes ou
Multiprotocol devem estar sendo utilizadas tanto pelo cliente quanto pelo
servidor SQL Server. Caso a biblioteca de rede sendo utilizada pelo cliente ou
pelo servidor no seja uma dessas duas, a conexo de rede n=o-confi8vel e a
autenticao do Windows NT no pode ser utilizada.
Se o SQL Server encontra a conta de usurio ou de grupo na lista de contas de
login do SQL Server, na tabela de sistema s)slogins, ele aceita a conexo.
O SQL Server no precisa de revalidar uma senha, j que o Windows NT j a
validou.
Nesse caso, a conta de login no SQL Server, do usurio, a conta de usurio ou
de grupo do Windows NT, a que tiver sido definida como a conta de login do
SQL Server.
Se vrios computadores com servidores SQL Server participam em um domnio
ou um grupo de domnios confiveis, basta efetuar logon em um nico domnio
para ter acesso a todos os servidores SQL Server.
%ota& O SQL Server no ir reconhecer grupos nem usurios que foram excludos e
depois recriados no Windows NT. Os grupos devem ser excludos do SQL Server e
adicionados novamente, pois o SQL Server usa o identificador de segurana (SD) do
Windows NT para identificar um grupo ou usurio. E um grupo ou usurio excludo e
depois criado novamente com o mesmo nome no Windows NT, ter um SD diferente.
Quando o SQL Server autentica o login, ocorre o seguinte:
Quando um usurio se conecta ao SQL Server com um nome de usurio e
senha de uma conta do SQL Server, o mesmo verifica que um login existe na
tabela de sistema s)slogins e que a senha especificada igual a que se tem
gravada.
Se o SQL Server no tem uma conta de login com esse nome de usurio ou a
senha no a que se tem gravada, a autenticao falha e a conexo
recusada.
6odos de segurana
Um modo de segurana se refere a como o DBA (administrador do banco de dados)
configura o SQL Server para autenticar usurios. Um servidor pode usar um de dois
modos de segurana: Windows NT e mista [mixed]. A diferena entre esses modos de
segurana como a segurana do SQL Server se integra com o Windows NT:
Modo de autentica!=o mista do SQL Server MSQL Server Mi@ed Authentication Securit)
ModeN" Nesse nidi de segurana, um usurio pode conectar-se ao SQL Server usando
158
Apostila Microsoft SQL Server 7.0
a Autenticao do Windows NT, ou a Autenticao do SQL Server. Ao tentar conectar-
se com o SQL Server, verifica-se se voc est usando ou no uma conexo confivel.
Ocorre ento o seguinte:
Se voc estiver usando uma conexo confivel, o SQL Server tentar autenticar
o seu login do Windows NT, verificando se o seu nome de usurio tem
permisso para conectar-se ao servidor SQL Server. Caso seu nome de usurio
no tenha permisso para conectar-se ao SQL Server, lhe ser pedido um nome
de login e senha.
Caso voc no esteja usando uma conexo confivel, 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 vlido e a senha correta, voc poder conectar-se ao servidor SQL
Server.
Quando o SQL Server lhe pede um login e senha, ele usa seu prprio cadastro de
usurios, independente do banco de dados de contas do Windows NT. Os logins de
usurio devem ser cadastrados no SQL Server.
Modo de autentica!=o de seguran!a do ,indo0s $. M,indo0s $. Server
Authtentication Securit) ModeN" Se se opta por usar o modo de segurana do Windows
NT, s o mecanismo de autenticao do Windows NT utilizado para autenticar
usurios para o SQL Server. O nome de usurio que foi usado para se conectar rede
NT o mesmo nome usado para o SQL Server. Esse nome de usurio e a senha no
precisam ser informados novamente. Se o usurio for autorizado (ou seja, tiver um
registro na tabela de sistema s)slogins) a conectar-se ao SQL Server, ento ele poder
conectar-se. Nesse modo de segurana, s possvel se conectar ao SQL Server
atravs de uma cone@=o confi8vel. Se esta opo for escolhida, deve-se ter certeza de
que todos os clientes estejam rodando em sistemas Windows, e que possam conectar-
se ao SQL Server usando uma conexo confivel.
Vantagens de cada um dos modos de segurana
Mo!o !e segurana !o
>in!o6s %1
Mo!o !e segurana mista
Recursos avanados de
segurana
Clientes no-Windows e usando browser podem usar
esse modo para conectar-se.
Adicionar grupos como uma
conta.
Camada adicional de segurana sobre o Windows NT
Acesso rpido.
%efinindo o modo de segurana
Para definir o modo de segurana, voc deve fazer o seguinte:
No Enterprise Manager, selecione o servidor cujo modo de segurana voc quer
definir.
Clique com o boto direito e selecione /roperties.
Na tela que aparecer, selecione a guia Securit0.
159
Apostila Microsoft SQL Server 7.0
160
Apostila Microsoft SQL Server 7.0
Em Authentication, caso voc selecione "SQL Server and Windows NT", o modo
de segurana mista (mixed mode) estar sendo definido.
Caso voc selecione "Windows NT only", o modo de segurana do Windows NT
estar sendo definido.
Em qualquer dos casos, voc deve parar e reiniciar o servio MSSQL Server
para que a mudana tenha efeito. Para isso, voc pode usar, entre outras
ferramentas, o Service Manager.
Logins
Um login do SQL Server (ou login +D) um nome que identifica um usurio para o SQL
Server. Cada login tem uma senha, que deve ser informada no caso da segurana
mista (ver abaixo).
O SQL Server cria automaticamente um login chamado 'sa' (administrador do sistema),
que no deve ser excludo. O 'sa' tem permisso para fazer praticamente tudo no
banco de dados: criar bancos de dados, tabelas, criar outros logins etc. O sa pode
conceder permisses para outros usurios poderem fazer algumas tarefas.
Tambm criado automaticamente o login BULTN\Administrators. Esse login a
conta padro de login para todos os administradores do Windows NT. Esse login tem
todos os direitos no SQL Server e em todos os bancos de dados.
161
Apostila Microsoft SQL Server 7.0
Eomes de usuHrio no 5anco de dados
Se voc possui um login, no quer dizer que tenha acesso a todos os bancos de
dados. preciso ter tambm um nome de usu8rio de 6anco de dados [database user
D], que relacionado com o login e permite acesso a um banco de dados especfico.
O nome de usurio pode ser especfico do login.
O usurio que cria um banco de dados o dono do banco de dados [database owner].
Dentro do banco de dados, o dono conhecido pelo nome especial 'dbo'. Outros
usurios podem ter nomes diferentes, geralmente de acordo com o seu login. O dono
do banco de dados pode conceder permisses para outros usurios de criar e excluir
objetos dentro do banco de dados.
O usurio que cria um objeto (tabela, viso, procedimento etc.) no banco de dados o
dono deste objeto. O dono tem inicialmente todas as permisses no objeto criado, mas
ele pode conceder essas permisses a outros usurios se desejar.
Um login pode ter um alias [apelido] dentro de um banco de dados, que o nome de
outro usurio. Nesse caso, dentro daquele banco de dados, ele funciona como se fosse
aquele usurio e tem as mesmas permisses dele. Vrios usurios (logins) diferentes
podem ter o mesmo alias. Esse um recurso que existe no SQL Server 7.0, apenas
para compatibilidade com verses anteriores, j que atravs de papis [roles] e da
atribuio de permisses aos papis, o que era feito usando aliases, pode ser feito de
maneira muito mais eficaz.
O usurio guest [convidado] um nome especial que existe em todo banco de dados e
permite a qualquer login usar o banco de dados, mesmo que no tenha um nome de
usurio relacionado.
1a*Uis K3olesL
Na sua essncia, um papel [role] um grupo de usurios que tm necessidades
semelhantes de acesso ao SQL Server. Mas, os papis so um pouco mais complexos
do que isso. Por exemplo, h uma poro de tipos diferentes de papis do SQL Server,
incluindo os seguintes:
Papis predefinidos de servidor [Predefined server roles]
Papis predefinidos de bancos de dados [Predefined database roles]
O papel pblico [Public role]
Papis personalizados de bancos de dados [Custom database roles]
-apOis de aplica!=o so um tipo especial de papis que so atribudos a uma
aplicao especfica que foi projetada para acessar os dados do SQL Server. Por
exemplo, se um usurio precisa de acessar um tipo especfico de dados, ao invs de
atribuir permisso explcita ao usurio para acessar os dados, o acesso aos dados
dado ao usurio utilizando a aplicao qual foi atribudo um papel de aplicao. sso
significa que um usurio apenas ter acesso aos dados usando essa aplicao
especfica. Papis de aplicao so atribudos a aplicaes, no a usurios.
162
Apostila Microsoft SQL Server 7.0
1a*Uis *redefinidos de seridor K1redefined Serer 3olesL
Em verses anteriores do SQL Server era difcil delegar atreas administrativas a outras
pessoas. Por exemplo, voc poderia querer se dsignar como o DBA senior, com a
habilidade de excutar qualquer tarefa no SQL Server, que precisasse ser executada.
Alm disso, voc poderia querer delegar algumas das tarefas administrativas para
outros, e ao mesmo tempo restringir exatamente o que eles poderiam fazer. Embora
isso fosse possvel em verses anteriores do SQL Server, era difcil de implementar. O
SQL Server 7.0 solucionou esse problema incluindo o que so chamados de papis
predefinidos de servidor (tambm conhceidos como papis fixos de servidor).
O SQL Server 7.0 inclui um total de sete diferentes papis predefinidos de servidor,
cada um com um conjunto de permisses administrativas diferentes. sso te permite
definir vrios ajudantes administrativos, com diferentes nveis de capacidade, para
ajud-lo a administrar o SQL Server. Tudo que voc precisa fazer adicionar o login
dos mesmos ao papel desejado. Todos os papis de servidor so predefinidos pelo
SQL Server. Voc no pode criar seus prprios papis de servidor.
Os papis predefinidos de servidor so definidos ao nvel do servidor SQL Server, no
ao nvel de banco de dados. sso significa que qualquer um que pertena a um desse
papis predefinidos de servidor tem permisses especficas para gerenciar os servidore
SQL Server e todos os bancos de dados gerenciados pelo SQL Server. As tarefas
administrativas que cada login pode executar dependem apenas de qual papel
predefinido de servidor a que ele pertena. Os papis predefinidos de servidor so:
Administradores de sistema [System Administrators] (sysadmin): Este o mais
poderoso de todos os papis. Qualquer um que pertena a esse papel pode
realizar qualquer tarefa no SQL Server, inclusive sobrepr-se a qualquer dos
outros papis predefinidos de servidor. Esse papel o equivalente conta SA
em verses anteriores do SQL Server (a conta SA, por padro faz parte desse
grupo).
Criadores de bancos de dados [Database Creators] (dbcreator): Eles tm a
habilidade de criar e alterar bancos de dados individuais.
Administradores de discos [Disk Administrators] (diskadmin): Tm a capacidade
de gerenciar arquivos de disco.
Administradores de processos [Process Administrators] (processadmin): Tm a
capacidade de gerenciar os vrios processos sendo executados no SQL Server.
Administradores de segurana [Security Administrators] (securityadmin): Eles
tm a capacidade de gerenciar logins para um servidor.
Administradores de servidor [Sever Administrators] (serveradmin): Tm a
capacidade de realizar configuraes a nvel de servidor.
Administradores de configurao [Setup Administrators] (setupadmin): Tm a
capacidade de instalar a replicao no SQL Server, e gerenciar procedimentos
armazenados.
Geralmente, voc no precisar de todos esses papis quando for delegar tarefas
administrativas do SQL Server para ajudantes. Em muitos casos, voc provavelmente
s atribuir seus ajudantes a um ou dois papis, dando-lhes as permisses especficas
163
Apostila Microsoft SQL Server 7.0
que eles precisam para executar as tarefas que voc delegou a eles. Os usurios
podem pertencer a mais de um papel ao mesmo tempo.
1a*Uis *redefinidos de 5ancos de dados K1redefined %ata5ase 3olesL
Sob vrios aspectos, os papis prdefinidos de bancos de addos so semelhantes aos
papis predefinidos de servidor. Papis predefinidos de bancos de dados atribuem
tipos especficos de permisses a para cada um dos nove papis predefinidos. A
principal diferena entre papis predefinidos de servidor e papis predefinidos de
bancos de dados que os papis predefinidos de bancos de dados so especficos
para cada banco de dados e no se estendem a vrios bancos de dados. Como os
papis predefinidos de servidor, os papis predefinidos de bancos de dados podem ser
usados por voc para ajud-lo a distribuir as tarefas administrativas do SQL Server
para outros. Os papis predefinidos de bancos de dados so:
Proprietrio do banco de dados [Database Owner] (db_owner): Eles tm
permisses de propriedades em um banco de dados e podem executar qualquer
tarefa de configurao ou manuteno em um banco de dados particular. Eles
tambm podem executar todas as atividades dos outros papis de namcos de
dados, e sobrepr-se a qualquer dos outros papis. Em verses anteriores do
SQL Server, esse papel muito semelhante ao D de usurio de banco de
dados DBO. (a conta DBO faz parte desse papel em todos os bancos de dados)
Administrador de acesso do banco de dados [Database Access Administrator]
(db_accessadmin): Tm a capacidade de gerenciar Ds de usurio de banco de
dados para um banco de dados.
Leitor de dados do banco de dados [Database Data Reader] (db_datareader):
Tm a capacidade de ver quaisquer dados de todas as tabelas em um banco de
dados.
Escritor de dados do banco de dados [Database Data Writer] (db_datawriter):
Tm a habilidade de inserir, modificar ou excluir quaisquer dados de todas as
tabelas em um banco de dados.
Administrador da linguagem de definio de dados [Database Data Definition
Language Administrator] (db_ddladmin): Podem criar, modificar, ou excluir
quaisquer objetos de um banco de dados (tabelas, vises, procedimentos
armazenados....).
Operador de backup do banco de dados [Database Backup Operator]
(db_dumpoperator): Podem realizar backups do banco de dados.
Negao de leitura no banco de dados Database Deny Data Reader
(db_denydatareader): Um papel especial que permite a seus membros mudar o
esquema do banco de dados, mas sem poder ver os dados no banco de dados.
Negao de escrita no banco de dados [Database Deny Data Writer]
(db_denydatawriter): Um papel especial que evita que seus membros alterem
qualquer dado em um banco de dados.
Como o DBA, voc provavelmente no usar a maioria desses papis predefinidos de
bancos de dados. provvel que voc precise de apenas alguns de modo a delegar
algumas de suas tarefas administrativas para seus ajudantes. E como com os papis
164
Apostila Microsoft SQL Server 7.0
predefinidos d servidor, usurios podem pertencer a mais de um papel ao mesmo
tempo.
4 *a*el *J5lico K1u5lic 3oleL
O papel pblico semelhante ao grupo pblico que era usado em verses anteriores
do SQL Sever. Quando criado, todo banco de dados tem o papel pblico por padro,
assim como todo banco de dados tem papis predefinidos de banco de dados. O que
nico nesse papel que todos Ds de usurio em um banco de dados automaticamente
pertencem a este papel. Sob vrios aspectos, ele semlhante ao grupo Todos
[Everyone] do Windows NT Server. Voc no pode adicionar ou remover usurios
deste papel, ou modific-lo de qualquer maneira. Tudo que pode ser feito atribuir
permisses a ele. Quaisquer permisses atribudas ao papl pblico so
automaticamente atribudas a todos Ds de usurio no banco de dados. O papel pblico
especialmente til se voc quiser atribuir as mesmas permisses para todos os
usurios de banco de dados em um banco de dados, ao mesmo tempo.
1a*Uis *ersonali@ados de 5anco de dados KCustom %ata5ase 3olesL
Como uma regra geral, voc ir querer se aproveitar do mximo de papis predefinidos
possvel. Mas voc pode encontrar situaes onde nenhum dos grupos predefinidos vai
de encontro s suas necessidades. Se esse for o caso, o SQL Server permite que voc
crie seus prprios papis de banco de dados.
Se voc estiver utilizando a autenticao do Windows NT e usa grupos globais do NT
Server para gerenciar usurios, voc perceber que voc no precisa realmente de
criar papis personalizados de banco de dados, j que voc obtem o mesmo efeitos
com o uso de grupos globais ao invs de agrupar usurios semelhantes. Mas se voc
no for um administrador do NT Server e no tiver permisso para criar os grupos
globais que voc precisa, ou se voc estiver utilizando a autenticao do SQL Server,
voc pode no ter outra escolha, a no ser criar os papis personalizados de bancos
de dados para ajud-lo a gerenciar melhor seus usurios.
Quando for criar papis personalizados de banco de dados, tenha o seguinte em
mente:
Papis personalizados de banco de dados, como ocorre com qualqeur papel do
SQL Server, so utilizados para agrupar usurios semelhantes que precisam do
mesmo conjunto de permisses para acessar o SQL Server.
Papis personalizados de bancos de dados so criados dentro de um banco de
dados e no podem se estender a vrios bancos de dados.
Usurios podem pertencer a mais de um papel, seja personalizado ou
predefinido.
Papis personalizados podem incluir usurios do NT Server, grupos globais do
NT Server, Ds de usurios de bancos de dados do SQL Server, e outros papis
do SQL Server.
%ota& Se voc tiver permisso para a criao de grupos globais e utilizar a
autenticao do Windows NT, voc deve sempre usar grupos globais ao invs de
papis personalizados de banco de dados. O uso de grupos globais ao invs de papis
165
Apostila Microsoft SQL Server 7.0
personalizados de banco de dados geralmente reduz o tempo necessrio para
gerenciar as contas de usurio do SQL Server e do NT Server, pois grupos globais
funcionam com ambos. Papis personalizados de banco de dados funcionam apenas
no SQL Server. Alm disso, grupos globais podem se estender a vrios bancos de
dados, enquanto papis so especficos para cada banco de dados, o que os torna
menos flexveis que grupos globais.
Criando e configurando *a*Uis de 5anco de dados
Veremos agora como criar um papel personalizado de banco de dados. Para isso, n o
Enterprise Manager, expanda o banco de dados para o qual voc quer criar o papel.
Clique em 2oles com o boto direito e selecione %e6 Data5ase 2ole. Aparece a caixa
de dilogo de criao de papis de banco de dados.
Na caixa "Name" digite o nome do papel de banco de dados que voc quer criar .
Depois, voc deve informar se voc est criando um papel padro [Standard Role] ou
um papel de aplicao [Application Role]. Se voc escolher criar um papel padro, voc
tem a opo de adicionar um ou mais Ds de usurios de banco de dados ao papel
agora (clicando em A!!...). Ou ento, voc pode pular este passo agora e adicionar
Ds de usurios de banco de dados posteriormente, usando as tcnicas mostradas em
Gerenciando usurios . Se voc escolher papel de aplicao, voc tambm dever
informar uma senha.
Depois de terminar de informar o que foi pedido, clique em Ok para criar o novo papel
de banco de dados. sso fechar a caixa de dilogo acima e ento o novo papel ser
mostrado no Enterprise Manager.
166
Apostila Microsoft SQL Server 7.0
%ota& Lembre-se que papis de banco de dados so criados para cada banco de
dados. Eles no so compartilhados entre bancos de dados.
>:cluindo um *a*el de 5anco de dados
Como parte da sua responsabilidade cotidiana de manter o SQL Server, voc achar
necessrio s vezes remover Ds de usurio de bancos de dados e, com menor
freqncia, remover papis de banco de dados que no sejam mais necessrios. A
remoo de Ds de usurio de banco de dados ser vista em Como excluir um D de
um usurio de banco de dados).
Os nicos papis de banco de dados que podem ser removidos so aqueles que foram
criados por voc ou por outro DBA. No possvel remover papis predefinidos de
banco de dados. Se um papel de banco de dados tem um ou mais Ds de usurio de
banco de dados associado a ele, voc deve remov-los do papel antes de tentar excluir
o papel. Se voc tentar excluir um papel sem antes remover os Ds de usurios a ele
associados, voc ver uma mensagem de erro.
Para excluir um papel de banco de dados, faa o seguinte:
1. No Enterprise Manager, expanda o banco de dados em que est definido o
papel que voc quer excluir.
2. Clique em Roles e, no lado direito da tela, selecione o papel a ser excludo. D
um duplo clique no mesmo, e verifique se em baixo de "ser, h algum usurio
listado.
3. Caso haja algum usurio, remova-o selecionando-o e clicando no boto
2emove.
4. Feito isso, clique em Ok, selecione o papel a ser excludo, clique no mesmo com
o boto direito e selecione Delete.
5. Lhe ser perguntado se voc de fato quer excluir o papel. Confirme, clicando em
?es.
Caso voc saiba de antemo que no h usurios associados a esse papel, v direto
para o passo 4.
Configurando um *a*el de seridor
Como j foi visto, papis de servidor so usados para atribuir aos logins vrios nveis
de privilgios administrativos no SQL Server. Voc pode atribuir um login a um papel
de servidor quando voc cria um login (como visto em Gerenciando usurios), ou voc
pode fazer como ser descrito aqui.
Os papis de servidor vm embutidos no SQL Server. Novos papis de servidor no
podem ser criados nem os existentes podem ser deletados. Sua nica opo ao
configurar um papel de servidor adicionar ou remover logins do papel de servidor em
questo.
167
Apostila Microsoft SQL Server 7.0
Para adicionar ou remover um loginm de um papel de servidor, faa o seguinte:
No Enterprise Manager, selecione o servidor SQL Server cujos papis voc quer
configurar. Expanda-o e abra a pasta Securit0.
Clique em Server 2oles. No lado direito da tela aparecem os papis de servidor.
Selecione o papel ao qual voc quer adicionar algum login.
Clique no mesmo com o boto direito e selecione Properties. Aparece a janela
abaixo:
Para adicionar um login ao papel de servidor, clique no boto A!!. Aparece a
caixa de dilogo "Adicionar Membros" [Add Mebers], com todos os logins
definidos para o servidor.
Escolha um ou mais logins para adicionar a esse papel de servidor. Cada vez
que voc selecionar um login, ele ficar marcado, e assim ficar at que voc o
clique de novo. Depois de selecionados todos os logins que voc quer
adicionados ao papel de servidor, clique em Ok. Ento voc volta para a caixa
de dilogo de propriedades do papel de servidor (mostrada acima).
Caso voc queira remover algum login que faz parte de um papel de servidor,
selecione-o, na caixa de dilogo de propriedades do papel de servidor, e clique
no boto 2emove.
Quando voc tiver adicionado e/ou removido todos os logins desejados a esse
papel de servidor, clique em Ok para concluir.
168
Apostila Microsoft SQL Server 7.0
Voc pode adicionar logins aos papis de servidor sempre que achar necessrio. Mas
lembre-se que o ato de delegar privilgios administrativos a usurios s vezes pode ser
arriscado, e voc no ir querer dar privilgios demais para usurios. Apenas d aos
logins os privilgios absolutamente mnimos que eles precisam para completar as
tarefas que voc os atribuiu.
,isuali@ando informa-es de segurana
,isuali@ando informa-es de logins do SQL Serer
No Enterprise Manager, expanda o servidor cujas contas voc quer obter informaes,
clique na pasta Security, e ento em logins. Aparece uma tela semelhante mostrada
abaixo:
Observe na parte direita da tela estas informaes:
A coluna "Name" mostra cada login existente. Se algum login tiver um nome de
domnio antes do nome do login, como acima em "MARTNS\Sqlexecutivo",
significa que a conta usa a autenticao do Windows NT. Os que no so
precedidos por um nome de domnio usam a autenticao do SQL Server, como
"a" e "sa" na figura acima.
A coluna "Type" d mais informaes sobre o login. Se o tipo "NT User", a
conta foi o NT Server e adicionada como um login do SQL Server. Se o tipo
"NT Group", isso significa que qualquer usurio que faa parte desse grupo do
Windows NT pode acessar o SQL Server utilizando sua conta de grupo como
login. Se o tipo "Standard", esse login foi criado usando com o Enterprise
Manager.
A coluna "Default Database" mostra qual banco de dados cada usurio usa
como seu banco de dados padro. o banco de dados no qual eles so
automaticamente logados quando eles acessam o SQL Server pela primeira vez.
169
Apostila Microsoft SQL Server 7.0
A coluna "User" mostra o nome de usurio que este usurio recebeu no banco
de dados padro (o que ele automaticamente logado da primeira vez que
efetua logon no SQL Server.
A coluna "Default Language" mostra a lngua especfica para o login. O padro
ingls [English].
Para ver informaes especficas sobre qualquer um dos logins, clique no mesmo com
o boto direito, e selecione Properties. Aparece a tela abaixo:
Aqui voc pode ver e configurar quase todas opes de login. Essa tela tem trs guias.
Na guia General, voc pode alterar a senha para esse login [Password], e definir seu
banco de dados e linguagem padro ([Database] e [Language]).
Na guia "Server Roles" mostra a quais papis de servidor o login pertence. A guia
"Database Access" mostra a quais bancos de dados o login tem acesso (ou seja, tem
um login definido na tabela s)slogins do banco de dados), alm de mostrar a quais
papis de banco de dados o usurio pertence, em cada banco de dados.
Clique em Cancel para sair da jabela de propriedades do login.
,isuali@ando informa-es de I%s de usuHrio do 5anco de dados
Alm de ver as informaes de cada um dos logins definidos para o SQL Server,
tambm possvel ver as informaes dos Ds de usurio definidos para cada banco
de dados.
170
Apostila Microsoft SQL Server 7.0
Para isso, no Enterprise Manager, selecione o banco de dados cujas informaes de
Ds de usurio voc quer ver, expanda-o e clique em "sers.
Note que no lado direito da tela aparecem algumas informaes sobre os Ds definidos
para o banco de dados:
A coluna Name mostra o D de usurio que foi adicionado a este banco de
dados, indicando quem tem a capacidade de acessar este banco de dados.
A coluna "Login Name" mostra qual login est associado com os Ds de usurio
definidos para esse banco de dados.
A coluna "Database Acces" indica o tipo de acesso que o D de usurio tem a
esse banco de dados.
Selecione, do lado direito da tela, o login cujas informaes voc deseja ver, clique no
mesmo com o boto direito e selecione Properties.
Essa tela mostra todos os papis de banco de dados definidos para este banco de
dados (todos que aparecem listados) e tambm a quais deles este usurio especfico
pertence (os que tm a caixa de verificao ao seu lado marcada).
Para sair desta janela, clique em Cancel.
171
Apostila Microsoft SQL Server 7.0
,isuali@ando informa-es de *a*Uis de 5ancos de dados.
Embora voc possa ver informaes sobre papis de bancos de dados com a tcnica
descrita acima, tambm pode ver-se atravs da perspectiva dos papis de bancos de
dados, ao invs do usurio de banco de dados.
Para isso, no Enterprise Manager, expanda o banco de dados de cujos papis voc
quer obter informaes, clique em 2oles.
Na coluna "Name"voc v uma lista de todos os papis para esse banco de dados
particular. Na coluna "Role Type" v-se as palavras "Standard" ou "Application".
Standard significa que um papel normal de banco de dados, ebquanto Application
significa que esse papel um papel de aplicao de banco de dados.
Caso voc queira obter mais informaes sobre qualquer dos papis, clique no mesmo
com o boto direito e selecione /roperties.
172
Apostila Microsoft SQL Server 7.0
173
Apostila Microsoft SQL Server 7.0
174
Apostila Microsoft SQL Server 7.0
175
Apostila Microsoft SQL Server 7.0
Essa caixa de dilogo lista os usurios do banco de dados que fazem parte deste papel
em particular.
Para sair dessa caixa de dilogo, clique em Cancel.
bem provvel que voc ache mais fcil ver estas informaes atravs das
informaes de login, como descrito anteriormente.
,isuali@ando informa-es de *a*Uis de seridor
Muitas vezes, voc ir querer ver os vrios papis de servidor de seu SQL Server e
determinar quais logins pertencem a quais papis de servidor.
176
Apostila Microsoft SQL Server 7.0
No Enterprise Manager, selecione o servidor cujos papis voc quer gerenciar, e
expanda-o. Expanda a pasta Securit0 e selecione Server 2oles.
O nome completo do papel de servidor mostrado na coluna "Full Name", e o seu
nome curto em "Name". A coluna "Description" descreve o que o papel de servidor
pode fazer.
Para descobrir quais logins pertencem a cada um dos papis de servidor, clique com o
boto direito no papel de servidor, e selecione Porperties. Aparece a caixa de dilogo
de "Propriedades do papel de servidor".
177
Apostila Microsoft SQL Server 7.0
Essa caixa de dilogo tem duas guias: a guia "General", que te diz quais logins foram
atribudos a esse papel particular. A guia "Permissions" te mostra as vrias permisses
que esse papel recebeu.
Clique em Cancel para sair dessa janela.
%ota& Esse o nico local onde se pode ver informaes sobre papis de servidor.
1ermiss-es
At agora, j vimos como criar e gerenciar logins que so usados para controlar o
acesso ao SQL Server. Vimos tambm como criar e gerenciar Ds de usurios de
bancos de dados, os quais so usados para controlar o acesso a bancos de dados
individualmente. Mas, mesmo que um usurio tenha um login e um D de usurio
vlido, ele no pode acessar qualquer dado em um banco de dados sem que lhe
tenham sido dadas permisses explcitas para acessar os objetos armazenados no
banco de dados.
-ermissBes so usadas no SQL Server para especificar quais usurios podem ter
acesso a quais objetos de bancos de dados, e o que eles podem fazer com tais
objetos. Se um usurio no receber explicitamente a permisso para acessar um
objeto, ele no ter acesso ao mesmo. Permisses podem ser atribudas a usu8rios
(contas do NT Server ou do SQL Server), grupos (grupos globais do NT Server), e
papOis (papis predefinidos de servidor, de banco de dados e papis personalizados de
bancos de dados). mais fcil atribuir permisses a grupos e papis do que a usurios
individuais (a quantidade de trabalho braal exigida menor).
O SQL Server apresenta trs nveis de permisses:
-ermissBes para comandos SQL: habilitam usurios a executar comandos SQL
especficos que so usados para criar objetos de bancos de dados, fazer backup
de bancos de dados e logs de transao.
-ermissBes de o6<etos: determinam o que um usurio pode fazer a um objeto
preexistente.
-ermissBes impl7citas: so permisses que s podem ser executadas por
membros de papis predefinidos de servidor e de banco de dados, ou pelos
proprietrios do banco de dados.
Atribuem-se permisses aos usurios baseado no que eles precisam de fazer com os
dados armazenados no SQL Server. Alguns usurios podem precisar apenas de
visualizar dados, outros podem precisar de consultar dados e gerar relatrios, outros
podem precisar de alterar dados, etc. Uma das principais responsabilidades do DBA
determinar quais usurios precisam de acessar quais objetos, e quais permisses eles
precisam.
Permisses atribudas em um banco de dados so independentes de permisses
atribudas a outro banco de dados. Se um usurio precisar de acessar tabelas em dois
bancos de dados, o usurio deve ter Ds de usurio nos dois bancos de dados, e as
permisses necessrias atribudas em cada banco de dados, para acesso aos objetos
que ele precisa acessar.
178
Apostila Microsoft SQL Server 7.0
1ermiss-es *ara comandos SQL
Permisses para comandos SQL so dadas a usurios que precisam de criar um
banco de dados ou objetos de bancos de dados, ou que precisam fazer backup de
bancos de dados e seus logs de transaes. Quando voc atribui permisses para
comandos SQL voc na verdade est dando quele usurio especfico a capacidade
de executar comandos SQL especficos. Esses comandos so os seguintes:
CREATE DATABASE: capacita o usurio a criar bancos de dados em um
servidor SQL Server especfico.
CREATE DEFAULT: o usurio pode criar um valor padro que
automaticamente inserido em uma coluna de alguma tabela sempre que a
coluna for deixada em branco quando um novo valor acrescentado a ela.
CREATE PROCEDURE: permite a criao de procedimentos armazenados.
CREATE RULE: permite a criao de uma regra que utilizada para validar
dados que so informados em uma coluna sempre que uma nova linha
adicionada tabela.
CREATE TABLE: permite a criao de uma nova tabela dentro de um banco de
dados
CREATE VEW: permite a criao de tabelas virtuais, que so usadas para
mostrar um subconjunto de uma tabela, ou para juntar duas ou mais tabelas em
uma nica tabela virtual.
DUMP DATABASE: permite fazer backup de um banco de dados.
DUMP TRANSACTON: permite fazer backup do log de transaes de um banco
de dados.
As tarefas descritas acima podem ser realizadas diretamente atravs de comandos
SQL, ou usando o Enterprise Manager. Voc pode atribuir a um usurio uma nica
permisso por vez, todas elas, ou um conjunto das permisses de comando
disponveis.
Na realidade, raramente sero usadas as permisses para comandos SQL, pois o SQL
Server j inclui papis que cumprem as mesmas funes que a atribuio dessas
permisses. Por exemplo, o papel predefinido de servidor Sysadmin consegue realziar
qualquer tarefa que possa ter sido atribuda a um usurio atravs de permisses para
comandos SQL. Assim como o papel predefinido de banco de dados
db_backupoperator pode fazer os backups de um banco de dados da mesma maneira
que quem recebeu a permisso DUMP DATABASE. O mais prtico atribuir os
usurios a papis de servidor ou de banco de dados que lhe permitam fazer as tarefas
que forem necessrias.
1ermiss-es de o5Betos
O tipo mais comum de permisso atribudo a usurios, grupos e papis a permisso
de objetos. Essas permisses determinam quem pode acessar um objeto preexistente
e o que esse usurio pode fazer com tal objeto. Quando voc atribui a um usurio uma
permisso de objeto, voc na verdade est dando a tal usurio a capacidade de
179
Apostila Microsoft SQL Server 7.0
executar certos comandos SQL sobre objetos em um banco de dados. Essas
permisses so as seguintes:
DELETE: permite excluir uma tabela ou viso em um banco de dados.
EXECUTE: premite a execuo de um procedimento armazenado.
NSERT: permite adicionar-se uma nova linha em uma tabela, ou em uma tabela
atravs de uma viso.
REFERENCES: (DR) permite ligar duas tabelas usando uma coluna comum.
SELECT: permite pesquisar e visualizar dados de uma viso, tabela ou coluna.
UPDATE: permite modificar dados em uma tabela, coluna de uma tabela, ou em
uma tabela atravs de uma viso.
As tarefas relacionadas a objetos citadas acima podem ser executadas com o
Enterprise Manager, ou pelo uso de comandos SQL, ou indiretamente atravs do uso
de qualquer aplicao "front-end" de cliente que use comandos SQL para acessar
dados do SQL Server em um servidor. ndependente de como um usurio acessa
objetos em um banco de dados, cada usurio deve receber explicitamente permisses,
em cada objeto, para realizar o acesso.
1ermiss-es im*l?citas
Uma permisso implcita uma permisso que um usurio obtem apenas pelo fato de
pertencer a um papel predefinido de banco de dados ou de servidor, ou por ser o
proprietrio de um objeto de banco de dados. Permisses implcitas no podem ser
atribudas a usurios. Ao invs disso, um usurio que precise de uma permisso
implcita deve ser adicionado a um papel predefinido que j tenha tal permisso.
Permisses implcitas podem assim ser atribudas a usurios, papis personalizados
ou grupos, com a simples atribuio dos mesmos a um papel predefinido de banco de
dados ou de servidor. As permisses implcitas tambm podem ser atribudas a
usurios, grupos ou papis personalizados definindo quaisquer destes como o
proprietrio de um objeto de banco de dados especfico.
Os usurios, grupos ou papis personalizados podem ser atribudos a qualquer um dos
/ap@is pre!efini!os !e Servi!or ou /ap@is pre!efini!os !e =anco !e Da!os,
recebendo as permisses que tal papel tenha. (relembre quais so os Papis
predefinidos de Servidor e Papis predefinidos de Banco de Dados)
Alm de receberem permisses atravs da atribuio aos papis acima, tambm
podemos fazer usurios tornarem-se proprietrios de algum objeto. Como funciona
isso?
Quando um usurio com a permisso de comando adequada cria um novo objeto no
banco de dados, tal como uma tabela, ele se torna o propriet8rio do o6<eto de 6anco de
dados [Database object owner] (DBOO) daquele objeto. Proprietrios de objetos de
banco de addos tm permisses implcitas em todos os objetos que lhes pertenam, o
que os d a capacidade de executar qualquer atividade naquele objeto, tal como
SELECT, NSERT, UPDATE, DELETE, entre outros. Eles tm controle completo dos
objetos que criam.
180
Apostila Microsoft SQL Server 7.0
Como d para perceber, permitir que qualquer um seja um DBOO no uma boa idia.
Normalmente, as nicas pessoas que devem criar objetos de bancos de dados so
DBAs ou desenvolvedores SQL, no usurios comuns.
1recedGncia de *ermiss-es
Cinco nveis de permisses podme ser atribudas a um usurio, conforme segue:
Permisses individuais
Permisses de grupos globais do NT Server
Permisses de papis predefinidos de servidor
Permisses de papis predefinidos de bancos de dados
Permisses de papis personalizados de bancos de dados.
As permisses podem ser dos tipos: implcita, de comandos ou de objetos.
O que ocorre se um usurio receber permisses diferentes atravs de vrias
permisses individuais, vrios grupos ou papis de que o mesmo faa parte?
A priori, as permisses somam-se, ou seja: as permisses que um usurio tenha como
membro de um grupo somam-se s permisses que ele tiver como usurio individual e
assim por diante. Mas h uma exceo! A permisso "negar acesso" [deny access]
sobrepe-se a qualquer outra permisso para o objeto em questo. Quer dizer que se
um usurio tiver obtido permisso para visualizar dados de uma tabela, atravs da
permisso de comando SELECT para a tabela, e o mesmo usurio fizer parte de um
grupo global que tem a permisso de "acesso negado" tabela em questo, sua
permisso efetiva ser a de "acesso negado", ou seja, no lhe ser permitido acessar
tal banco de dados.
Apesar de termos exemplificado aqui citando uma tabela, essa regra vlida para
qualquer objeto de banco de dados.
181
Apostila Microsoft SQL Server 7.0
,isuali@ando informa-es de *ermiss-es
182
Apostila Microsoft SQL Server 7.0
183
Apostila Microsoft SQL Server 7.0
Antes que voc aprenda a conceder e revogar permisses para usurios, grupos ou
papis, importante que voc saiba como visualizar permisses tanto de objetos como
de comandos. sso no apenas te ajudar a trabalhar com permisses, mas tambm te
mostrar como executar uma tarefa que voc estar realizando regularmente como um
DBA. Vamos ver como visualizar as permisses atuais de objeto para todos os
usurios, grupos, e papis em um nico banco de dados utilizando o Enterprise
Manager. Lembre-se que permisses so gerenciadas para cada banco de addos, e
que voc deve realizar estes passos em cad banco de dados no qual voc queira ver
as permisses.
,isuali@ando *ermiss-es *ara comandos SQL
No Enterprise Manager, usando uma conta com privilgios de s)sadmin, expanda o
banco de dados cujas permisses de comando voc quer visualizar. Clique no mesmo
com o boto direito e em /roperties. Aparece a caixa de dilogo de Propriedades do
banco de dados:
Agora, clique na guia /ermissions. mostrada a tela de permisses para comandos
SQL
184
Apostila Microsoft SQL Server 7.0
Na primeira coluna desta tela, embaixo do ttulo "ser2ole, esto listados toos os Ds
de usurios de bancos de dados para esse banco de dados. Lembre-se que essa
coluna pode exibir quaisquer grupos, papis ou usurios. Nas outras colunas esto as
vrias permisses para comandos SQL que podem ser atribudas. Note que esta tela
no exibe todas as permisses de uma vez; voc deve percorr-la para a direita para
poder v-las todas. Depois de ver todas as permisses que podem ser atribudas, saia
desta tela clicando em 'ancel. sso te leva de volta tela do Enterprise Manager.
,isuali@ando *ermiss-es de o5Betos
A visualizao de permisses de objetos m pouco mais difcil do que a visualizao
de permisses para comandos SQL. Voc pode v-las da perspectiva de usurios,
grupos, ou papis, ou ento da perspectiva dos prprios objetos. Analisaremos aqui as
duas maneiras.
So5 a perspectiva !o usu#rio, grupo ou papel, as permiss(es so visuali*a!as
!esta forma&
1. No Enterprise Manager, expanda o banco de dados cujas permisses de objetos
voc quer visualizar.
2. O prximo passo depende se voc quer ver permisses de objetos para grupos
e usurios, ou para papis personalizados.
Caso voc queira ver as permisses de objetos para grupos e usurios,
selecione "sers no banco de dados em questo; todos os usurios e
grupos aparecem do lado direito da tela.
Para ver informaes de permisses de objetos atribudas a papis
personalizados, selecione 2oles no banco de dados em questo; todos
185
Apostila Microsoft SQL Server 7.0
os papis, predefinidos e personalizados so mostrados no lado direito da
tela.
3. Agora, no lado direito da tela, clique com o boto direito em um usurio, grupo
ou papel personalizado, cujas permisses de objetos voc quer visualizar,e
ento selecione Properties. Aparece ento a janela de propriedades do usurio
ou do papel (dependendo do que voc selecionou no passo 2).
186
Apostila Microsoft SQL Server 7.0
4. Clique no boto Permissions para ver as permisses a nvel de objeto que esse
usurio (ou papel) tem.
Veja que h dois botes no topo da tela. Quando o primeiro [List all objects] est
selecionado, todos os objetos pertencentes ao banco de dados so exibidos na
tela. Se a segunda opo [List only objects with permissions for this user] for
selecionada, apenas aqueles objetos para os quais o usurio tm permisso so
listados.
Na primeira coluna h um cone que representa o objeto de banco de dados. A
segunda coluna, lhe mostra o nome do objeto. A coluna Owner mostra quem o
proprietrio do objeto. As outras colunas mostram as permisses de objetos
disponveis. Se alguma coluna estiver marcada (com sua caixa de verificao
ativada), isso indica que esse usurio possui aquela permisso para o objeto em
questo.
Perceba que nem todos os objetos tm todas as permisses de objeto
disponveis. Por exemplo, procedimentos armazenados tm apenas a permisso
de objeto +-ecute.
5. Para terminar de visualizar as permisses de objeto, saia da tela clicando em
'ancel. Clique de novo em 'ancel e voc estar de volta ao Enterprise
Manager.
So5 a perspectiva !os o5Aetos in!ivi!uais !e 5anco !e !a!os, visuali*am)se
assim as permiss(es&
1. No Enterprise Manager, expanda o banco de dados cujas permisses de objeto
voc quer verificar. Aparecem todos os tipos de objetos de bancos de dados.
187
Apostila Microsoft SQL Server 7.0
2. Agora voc deve decidir quais permisses de objetos voc quer visualizar. Voc
pode escolher: tabelas [tables], vises [views], procedimentos armazenados
[stored procedures], regras [rules], defaults [defaults], e tipos de dados definidos
pelo usurio [user defined data types]. Clique no tipo de objeto ^cujas
permisses voc quer visualizar. Aparecem no lado direito da tela todos os
objetos desse tipo.
3. Clique com o boto direito em um dos objetos, e em /roperties. Aparece a
caixa de dilogo de propriedades do objeto que voc selecionou (no caso uma
tabela)
4. Para exibir as permisses para esse objeto, clique no boto Permissions.
Aparece a tela de permisses do objeto, como abaixo:
Note as duas opes na parte superior da tela. Por padro, a primeira [List all
users / user-defined DB roles / public] est selecionada. Assim, todos usurios,
grupos e papis para esse banco de dados so exibidos na tela. Se a segunda
opo [List only users / user-defined DB roles / public permissions on this object],
apenas os usurios, grupos ou papis que tenham permisses definidas para
esse objeto sero exibidos.
A primeira coluna mostra um cone. Uma nica cabea indica um usurio ou um
grupo. Duas cabeas indicam um papel. Todos os usurios, grupos ou papis
para esse banco de dados esto embaixo de "User/DB Role". As colunas
restantes indicam as permisses de objeto disponveis para este objeto. Se a
caixa de verificao estiver selecionada (ativa), indica que um usurio, grupo ou
188
Apostila Microsoft SQL Server 7.0
papel obteve a permisso de objeto associada. Veja que nem todos os objetos
tm todas as permisses de objeto.
5. Depois de terminar de visualizar as permisses de objeto, voc pode sair
clicando em 'ancel duas vezes, primeiro para a tela de permisses, e depois
para a caixa de dilogo de propriedades. Ento voc volta para a tela principal
do Enterprise Manager.
Concedendo e reogando *ermiss-es *ara comandos SQL *elo >nter*rise
6anager
A concesso e revogao de permisses usa as mesmas telas que acabamos de ver.
Mas agora, atriburemos e revogaremos permisses de grupos, usurios, e papis.
Lembre-se que nenhum usurio tem qualquer permisso para acessar qualquer objeto
de dados at que voc explicitamente atribua a ele tais permisses. Quando voc
concede uma permisso de comandos para um usurio, voc est lhe dando a
permisso de executar uma tarefa especfica, tal como criar objetos de banco de dados
ou fazer backup de um banco de dados ou de um log de transaes. Esse usurio
permanece com a permisso que voc lhe deu at que e;a seja explicitamente
removida. Depois que uma permisso for revogada, o usurio no pode mais realizar a
mesma tarefa, at que lhe tenha sido concedida a mesma permisso de comando
novamente.
Para conceder ou revogar uma permisso utilizando o Enterprise Manager, os passos
so os seguintes:
1. No Enterprise Manager, clique com o boto direito no banco de dados cujas
permisses voc quer alterar, e em /roperties. Aparece a caixa de dilogo
189
Apostila Microsoft SQL Server 7.0
abaixo:
2. Essa a mesma tela vista anteriormente (em visualizando permisses de
bancos de dados). Na primeira coluna desta tela, abaixo de "ser2ole esto
listados todos os Ds de usurio de banco de dados para este banco de dados.
Lembre-se que esta coluna pode listar qualquer usuri, grupo ou papel. Nas
outras colunas esto as vrias permisses para comandos SQL que podem ser
atribudas. Note que na tela no cabem todas as permisses existentes; para v-
las, voc tem que rolar horizontalmente para a direita.
3. Para atribuir qualquer das sete permisses para comandos SQL para qualquer
usurio, papel ou grupo exibidos na primeira coluna, clique na coluna da
permisso que voc quer atribuir, na linha do usurio que deve receber tal
permisso. A permisso no concedida at que voc clique em Apply ou Ok.
4. Para revogar uma permisso de comando que tenha sido atribuda
anteriormente, clique na caixa de verificao que representa a permisso de
comando que voc quer revogar do usurio, grupo, ou papel. Quando voc clicar
na caixa de verificao, ela muda paara um X vermelho (como mostrado
abaixo), indicando que a permisso ser revogada. A permisso s de fato
revogada quando voc clica em Ok ou Apply.
5. Depois de revogar e conceder todas as permisses para comandos SQL que
voc queira, saia dessa tela clicando em Ok. Ento voc volta para o Enterprise
Manager.
190
Apostila Microsoft SQL Server 7.0
Concedendo e reogando *ermiss-es de o5Betos *elo >nter*rise 6anager
Quando mostramos como visualizar permisses de objetos para usurios, grupos ou
papis, vimos que h dois modos de visualiz-las. Pode-se ver as permisses de
objeto sob a perspectiva do usurio, grupo ou papel, ou a pela perspectiva do objeto de
banco de dados em si. sso tambm se verifica para a concesso e revogao de
permisses de objeto. Aqui, demonstraremos como conceder/revogar permisses de
objetos pela perspectiva do usurio, grupo ou papel, pois essa a maneira mais prtica
e conveniente.
No se esquea de que um usurio no tem permisso para acessar qualquer objeto
de banco de dados at que tal permisso lhe tenha sido atribuda Quando voc
concede uma permisso de objeto a um usurio, voc est lhe dando a permisso de
executar uma tarefa em um objeto preexistente, tal como SELECT, NSERT, UPDATE,
ou DELETE sobre o objeto. Esse usurio mantm a permisso de objeto at que a
mesma tenha sido explicitamente revogada.
Caso voc queira remover/conceder permisses pela perspectiva do objeto de banco
de dados, voc pode, usando praticamente os mesmos procedimentos que sero
descritos a seguir.
1. Expanda o banco de dados cujas permisses de objeto voc quer alterar. Se
voc for conceder/revogar permisses para usurios ou grupos, clique em
"sers. Caso voc queira alterar permisses para papis, clique em 2oles.
2. Clique com o boto direito no usurio, grupo ou papel cujas permisses voc
quer alterar, e em /roperties. Aparecer uma caixa de dilogo com
propriedades do usurio ou grupo, ou do papel.
191
Apostila Microsoft SQL Server 7.0
3. Clique em /ermissions. Aparece a tela de permisses para o usurio, grupo ou
papel que voc houver selecionado.
A primeira coluna tem um cone que representa o tipo do objeto de banco de
dados, seguido do nome do objeto de banco de dados. A coluna Owner mostra
quem o proprietrio do objeto. As outras colunas mostram as permisses de
objeto existentes. Uma marcao em alguma das caixas de verificao indica
que o usurio em questo tem permisso para esse objeto.
4. Para conceder alguma das seis permisses de objetos para o usurio, grupo ou
papel em questo, marque a caixa de verificao apropriada na coluna referente
ao objeto. A caixa de verificao ficar marcada. A permisso s de fato
concedida quando voc clica em Ok ou Apply.
5. Para revogar uma permisso que j tenha sido atribuda, clique na caixa de
verificao que representa a permisso de objeto que voc quer remover de um
usurio, grupo ou papel. Ao clicar na mesma, ela muda para um X vermelho,
indicando que a permisso ser revogada. A permisso s de fato revogada
ao se clicar em Ok ou Apply.
6. Depois de teminar de definir as permisses de objetos, voc pode sair da tela
clicando em Ok. Voc deve ento clicar em Ok de novo para retornar ao
Enterprise Manager.
Concedendo e reogando *ermiss-es *ara comandos SQL. usando comandos
SQL
Permisses tambm podem ser concedidas ou revogadas atravs de comandos SQL.
Para isso, usa-se os comandos GRANT e REVOKE.
GRANT concede permisses, enquanto REVOKE as revoga. A sintaxe do GRANT :
N#+- G+LL R comando FK;;nHQ
$ conta)seg&ranSa FK;;nH
E a do REVOKE :
#EV$8E G+LL R comandoFK;;;nHQ
"#$% conta)seg&ranSa FK;;;nH
Onde:
comando o comando SQL para o qual a permisso est sendo concedida/removida.
Os comandos podem ser:
CREATE DATABASE
CREATE DEFAULT
CREATE PROCEDURE
CREATE RULE
CREATE TABLE
CREATE VEW
BACKUP DATABASE
BACKUP LOG
ALL indica que todas as permisses da(s) conta(s) de segurana em questo sero
concedidas/revogadas.
192
Apostila Microsoft SQL Server 7.0
contaAseguran!a a conta de segurana no banco de dados atual para a qual as
permisses esto sendo adicionadas ou removidas. Pode ser um:
Usurio do SQL Server ou do NT
Grupo do NT
Papel do SQL Server
n indica que pode ser informado mais de um nome de conta de segurana para se
conceder/revogar permisses, assim como pode-se informar mais de um comando
para tr permisso concedida/revogada. Basta separ-los por vrgula.
Caso quisssemos por exemplo, permitir que um usurio pudesse criar uma tabela,
digitaramos
N#+- create ta*le $ &s&ario
E para revogar essa permisso:
#EV$8E create ta*le "#$% &s&ario
Para revogar todas as permisses de um usurio, digitaramos este comando:
#EV$8E +LL "#$% &s&ario
193
Apostila Microsoft SQL Server 7.0
13 - $ac2u* e 3estaurao
%is*ositios de $ac2u*
Im*lementar $ac2u*
3estaurar um $ac2u*
(gendar $ac2u*s (utomHticos
Objetivos:
- Aprender a gerenciar os dispositivos de backup;
- Aprender como fazer backups, restaurar os dados, e agendar backups automticos.
Conceitos
Um 6ac1up ou dump do banco de dados a operao de copiar os dados para um
dispositivo de backup. Pode ser feito com o Enterprise Manager ou com o comando
BACKUP. No necessrio parar o SQL Server ou desconectar os usurios para fazer
a operao de backup. Ela pode ser feita a qualquer momento. Deve-se considerar que
a realizao do backup com usurios utilizando o banco de dados, causa uma pequena
queda de performance, que pode ser perceptvel aos usurios. importante ento
escolher horas de menor atividade do servidor (ou ao menos do banco de dados cujo
backup est sendo feito) para a realizao do backup.
Uma restaura!=o ou &S.O& do banco de dados a operao de trazer os dados
de um meio de backup de volta para os bancos de dados.
Ci*os de 5ac2u*
Um backup pode ser feito do banco de dados inteiro, que copia todos os dados, mais o
log de transaes (a tabela s)slogs). Se esse backup for restaurado, todo o contedo
do banco de dados restaurado e sobrescreve o contedo atual. Esse tipo de backup
pode ser feito com o comando BACKUP DATABASE ou o Enterprise Manager.
Pode ser feito um backup apenas do log de transaes. Como o log de transaes
contm apenas as modificaes feitas aos dados, se esse backup for restaurado,
apenas essas modificaes sero aplicadas sobre os dados. Esse tipo de backup pode
ser feito com o comando BACKUP LOG ou o Enterprise Manager. Aps um backup
desse tipo, o log de transaes esvaziado (exceto as transaes que ainda esto
sendo atualizadas). Um backup do log de transaes leva muito menos tempo para ser
feito do que um bakcup de todo banco de dados. Assim, em um banco de dados que
bastante modificadao diariamente, pode-se fazer diversos backups dirios do log de
transaes. Ou ento algum backup diferencial, como ser mostrado a seguir.
Pode-se fazer tambm o que chamado de 6ac1up diferencial. Esse tipo de backup
semelhante ao backup do log de transaes, com a diferena de que s far backup
dos valores modificados desde o ltimo backup completo (de todo o banco de dados).
Ou seja, se uma infromao foi modificada vinte vezes desde o ltimo backup, um
194
Apostila Microsoft SQL Server 7.0
backup do log de transaes teria as 20 modificaes feitas nessa informao,
enquanto que um backup diferencial teria apenas o ltimo valor armazenado. Assim,
esse tipo de backup gera arquivos menores, apesar de demorar um pouco mais de
tempo para ser realizado que o backup do log de transaes. Mas, por outro lado,
exige bem menos tempo para restaurao.
Por ltimo, existe a possibilidade de se fazer backup de arquivos individuais do banco
de dados. Lembre-se que um banco de dados pode ser formado por vrios arquivos.
Assim, para um banco de dados muito grande, a ponto de no poder ser "backupeado"
em uma nica noite, por exemplo, podem ser feitos backups dos arquivos que o
formam, um por vez.
%ota& os comandos DUMP DATABASE e DUMP TRANSACTON, existentes em
verses do SQL Server anteriores 7.0, ainda existem, mas apenas por motivos de
compatibilidade. Recomenda-se utilizar BACKUP DATABASE, ao invs de DUMP
DATABASE, e BACKUP LOG ao invs de DUMP TRNSACTON, j que DUMP no
ser mais aceito em futuras verses do SQL Server.
%is*ositios de $ac2u*
Um dispositivo de backup nada mais que um ponteiro para o local onde o backup do
seu banco de dados ser armazenado. Pode-se criar um dispositivo de backup a
qualquer instante, no Enterprise Manager, ou cri-lo apenas quando se for de fato fazer
um backup do banco de dados. Um dispositivo de bakcup opde especificar o nome de
um arquivo em disco rgido que ser escrito quando o bakcup for executado, ou pode
especificar o nome de uma unidade de fita.
A criao de um dispositivo de backup no cria um arquivo at que seja executado o
backup..
/erenciando dis*ositios de 5ac2u*
Para criar um dispositivo de backup, faa o seguinte:
No Enterprise Manager, selecione o servidor do qual se quer fazer backup de
algum banco de dados, abra a pasta Management e clique com o boto direito
em Backup. Selecione %e6 =ackup Device. Cada dispositivo de backup tem
um nome lgico e um nome fsico.
Em Name, informe um "apelido" (nome lgico) que ser utilizado pelo
comando de backup quando da realizao de um backup do banco de
dados. No nosso caso, informemos Backup1.
O campo 1ape Drive %ame ou :ile %ame a localizao fsica do
arquivo em que o dispositivo de backup ir escrever.
Para fitas, informe o nome da unidade de fita, que algo como \\.\TAPE0. Para
arquivos em disco, informe o nome e caminho do arquivo de disco, algo
como \\Servidor\backups\Segunda\master.bak
195
Apostila Microsoft SQL Server 7.0
Clique em Ok para terminar. Aparece agora o nome deste dispositivo de backup
do lado direito da tela, quando se seleciona Backups do lado esquerdo do
Enterprise Manager.
O Enterprise Manager cria o nome fsico do arquivo em /";MSSQL\BACKUP, como
default, mas pode ser mudado. Se voc clica em "Tape backup device", voc deve
escolher um dos dispositivos de fita suportados pelo Windows NT, como nome fsico.
No caso, usaremos "Disk backup device". Clique em Ok.
Note que o arquivo, no caso c";mss:l\backup\Backup1.dat, no criado imediatamente,
s da primeira vez que um backup for feito. Ele tambm expande automaticamente,
dependendo dos dados colocados nele, por isso voc no define o seu tamanho.
%ota& O suporte a fitas do SQL Server depende do suporte fornecido pelo Windows NT
(ver Painel de Controle, cone "Dispositivos de fita" [Tape Devices]).
Im*lementando um 5ac2u*
Para fazer um backup completo do banco de dados Exemplo, faa o seguinte:
196
Apostila Microsoft SQL Server 7.0
197
Apostila Microsoft SQL Server 7.0
198
Apostila Microsoft SQL Server 7.0
1. no Enterprise Manager, localize esse banco de dados sob "Databases" e clique
nele com o boto direito. Selecione All 1asks, e =ackup Data5ase. Aparece a
janela abaixo:
2. nforme um nome para o backup (ou deixe o nome padro, que
nomeA6ancoAdeA dados 6ac1up),e caso queira, uma descrio [Description]
para o backup. Voc pode escolher entre quatro opes de backup:
backup do banco de dados inteiro (Database - complete): a opo
selecionada por padro.
backup diferencial (Database - differential): um backup diferencial faz uma
cpia apenas das mudanas ocorridas no banco de dados desde o ltimo
backup completo.
apenas do log (Transaction Log): uma das razes para se fazer backup
do log de transaes evitar que o mesmo fique cheio. Se voc o
configurou para crescer automaticamente, no se preocupar com isso, a
no ser que o disco onde est armazenado o log de transaes esteja
ficando cheio. Esta opo desabilitada se 1runcate Log on
',eckpoint estiver ativa para o banco de dados em questo.
de algum arquivo ou grupo de arquivos (File and filegroup): esta opo
tambm fica desabilitada se 1runcate log on c,eckpoint estiver ativada
para esse banco de dados. Um backup de grupo de arquivos (filegroup
backup) copia apenas alguns dos arquivos fsicos que formam o banco de
199
Apostila Microsoft SQL Server 7.0
dados. Usa-se esta opo quando no se dispe de tempo para fazer
backup de todo o banco de dados.
3. Clique em Add para para selecionar um destino (em fita ou em disco) para o
backup.
4. Digite o nome do arquivo destino do backup, ou selecione um dispositivo de
backup existente. No nosso caso, selecionaremos o dispositivo backup1, criado
anteriormente. Clique em Ok.
5. Voc pode optar por uma das aes a seguir (deixe a opo default - Append to
media):
Appen! to me!ia: com esta opo selecionada, este backup do banco
de dados ser adicionado a outros backups j existentes na fita,
dispositivo ou arquivo selecionado.
4ver6rite e-isting me!ia far com que este backup subsitutua,
sobrescreva, o contedo da fita ou arquivo para onde ele est sendo
gravado.
6. Clique em Ok para inciar o backup.
Ao clicar na guia Options, voc pode optar por fazer uma verificao completa do
backup aps sua realizao [Verify backup upon completion]. No caso de fazer backup
para fita, voc tambm pode definir uma data de expirao para o backup.
Para conferir o contedo de 'Backup1', selecione Backups, selecione-o na lista de
dispositivos (do lado direito da jnela), d um duplo clique no mesmo e clique no boto
"View Contents". Voc ver qual o contedo atual, que inclui o banco de dados
Exemplo.
A voc v os backups armazenados no arquivo ou dispositivo, com detalhes sobre o
mesmo. Voc v a, o nome do backup [Name], de qual servidor foi feito [Server], de
qual banco de dados [Database], que tipo de backup [Type]. Se voc rolar o contedo
da janela horizontalmente, ver ainda a ver a data [Date] em que foi feito, o tamanho
[Size], a data de expirao [Expiration] (disponvel selecionando backup em fita), e
200
Apostila Microsoft SQL Server 7.0
alguma descrio [Description] que voc tenha colocado. Clique em 'lose para sair
dessa tela.
(crescentando um 5ac2u*
Voc pode acrescentar um backup a um dispositivo. Vamos acrescentar o backup de
exemplo2 (ou outro banco de dados qualquer que no seja o e@emplo) a esse
dispositivo. Para isso, faa o mesmo processo anterior (agora com o outro banco de
dados), selecionando a opo Appen! to me!ia, e clique em "Ok". Note que aqui voc
tambm pode ver o contedo de um arquivo ou dispositivo, clicando em ;ie6
'ontents.
Agora d um duplo clique em "Backup1" na lista de backups, e no boto "View
Contents". Voc ver que l dentro esto os dois bancos de dados.
Fa@endo 5ac2u* do log de transa-es
Um backup do banco de dados inteiro pode tomar muito tempo. Voc pode fazer um
backup do log de transaes, que vai copiar apenas as modificaes feitas.
No Enterprise Manager, selecione o banco de dados "Exemplo" , clique em All 1asks,
=ackup Data5ase. Selecione a opo 1ransaction Log, escolha o dispositivo
Backup1, e selecione Appen! to me!ia. Clique em Ok.
Visualize a informao de 'Backup1' com o boto "View Contents". Note, na coluna
"Backup Size", que o tamanho do log menor do que o banco de dados.
Ao fazer esse tipo de backup, o contedo do log limpo (exceto as alteraes ainda
pendentes no banco de dados). sso signifca que voc deve manter os backups de log
para poder restaurar um banco de dados.
Lim*ando o log de transa-es
Quando o log de transaes no limpado freqentemente, seu espao pode se
esgotar. sso pode acontecer caso no sejam feitos backups freqentes do log.
Se o espao do log se esgotar, no possvel alterar dados no banco de dados. Para
limpar o contedo do log (s as transaes j confirmadas e escritas no log), use o
comando: BACKUP LOG WTH TRUNCATE_ONLY ou, no Enterprise Manager, clique
com o boto direito no banco de dados, All 1asks, 1runcate Log. Aparece uma
mensagem de confirmao, avisando que altamente recomendvel um backup do
banco de dados completo antes de truncar o log de transaes. Clique em Ok.
3estaurando um $ac2u*
Voc pode restaurar um backup atravs do Enterprise Manager.
3estaurando um 5anco de dados e o log *elo >nter*rise 6anager
O Enterprise Manager te oferece uma caixa de dilogo que pode ser usada para
restaurar um banco de dados. Para chegar a ela, selecione o banco de dados que voc
quer restauar, clique no mesmo com o boto direito, selecione All Tasks | Restore
Database. A aparncia da parte de baixo dessa caixa de dilogo depende da opo de
restaurao selecionada na metade superior, opo Restore.
201
Apostila Microsoft SQL Server 7.0
Caso voc selecione Database, ver uma figura semelhante nmero 1.
Se selecionar Filegroups or Files, vers uma figura semelhante nmero 2.
Caso seleciones From Device, vers algo parecido com a figura nmero3.
1
A primeira opo, "Restore Database", que mostra a figura acima, exibe uma lista dos
backups a partir dos quais voc pode pode pode fazer a restaurao, baseado em
tabelas de histrico armazenadas no SQL Server. Por padro, o backup completo do
banco de dados mais recente mostrado primeiro, seguido pelos backups do log de
transaes e diferenciais realizados depois dele. Voc pode usar a barra de rolagem
para selecionar um backup completo feito h mais tempo. Note a sutil diferena entre
os cones de um backup completo do banco de dados e do backup do log de
transaes.
%ota& voc pode saber que tipo de backup est representado pelo cone, entre outros
detalhes, clicando em Properties. Pode ser importante, pois um backup de grupo de
arquivos tem o mesmo cone que um backup completo do banco de dados.
202
Apostila Microsoft SQL Server 7.0
2
A segunda opo, "Restore Filegroups or Files", tambm exibe uma lista de backups a
partir dos quais voc pode fazer a restaurao com base nas tabelas de histrico.
Junto com uma lista de backups anteriores de grupos de arquivos, voc ver que
backups de arquivos completos e de logs de transaes. Eles so mostrados pois um
grupo de arquivos tambm pode ser restaurado a partir de um backup completo do
banco de dados e do log de transaes.
203
Apostila Microsoft SQL Server 7.0
3
A terceira opo, "Restore from Device", utilizada quando o backup que voc quer
restaurar no est listado na tabela de histrico (os backups mostrados pelos cones
citados acima). sso pode ocorrer se voc estiver restaurando um banco de dados
copiado de outro servidor SQL Server.
%ota& S pelo fato de um backup estar listado, no significa que voc seja capaz de
realizar uma restaurao atravs dele. As tabelas de histrico no SQL Server registram
onde foi feito o backup do banco de dados, quando ele foi executado. Se desde ento,
os arquivos foram sobrescritos ou excludos, voc no ser capaz de fazer uma
restuarao a partir desse backup.
Quando voc estiver fazendo a restaurao, o primeiro arquivo selecionado deve ser
um backup completo do banco de dados. A caixa de listagem "First backup to restore",
lista os backups completos conhecidos. A caixa de dilogo mostrar os backups junto
dos logs de transaes e backups diferenciais subsequentes. O SQL Server seleciona
todos ou alguns dos backups diferenciais e de log de transaes a serem recuperados,
em conjunto com o backup completo, automaticamente. A combinao selecionada
pelo SQL Server fornece a imagem mais atualizada do banco de dados com o menor
tempo de recuperao possve;.
Se voc no quiser restaurar tambm os backups do log de transaes, voc pode
desselecion-los clicando na caixa de verificao esquerda de cada log. Se voc
desselecionar algum log, os logs subsequentes tambm no sero mais selecionados,
204
Apostila Microsoft SQL Server 7.0
automaticamente. Voc no pode saltar nenhum log de transaes no processo de
restaurao.
Se um backup diferencial do banco de dados (indicado pelo cone )tiver sido realizado,
ele tambm ser selecionado, junto com o backup completo do banco de dados.
Apenas o backup diferencial mais recente ser selecionado.
Caso voc queira restaurar o banco de dados para um ponto especfico no tempo, voc
deve selecionar um log de transaes, e ento selecionar a caixa de verificao "Point
in Time Restore" e informar a data e hora desejadas para a restaurao na caixa de
dilogo que aparece. Ento o banco de dados retornar ao estado em que se
encontrava na data e hora selecionadas.
3estaurando 5ac2u*s de log
Um backup de log contm apenas as modificaes feitas desde o ltimo backup
completo. Por isso, para restaurar um backup do log (indicado pelo cone ), voc deve
restaurar o backup do banco de dados mais recente anterior a ele.
Por exemplo, suponhamos que voc faz um backup completo toda segunda-feira, e um
backup do log nos outros dias. Se voc quer restaurar um backup, deve recuperar o
backup completo, e depois restaurar cada um dos backups de log, na ordem em que
foram feitos.
(gendando $ac2u*s (utomHticos
Backups devem ser executados frequentemente e regularmente. A melhor maneira de
fazer isso criar um trabalho no SQL Server para que o SQL Server Agent execute-o
regularmente. Como a realizao de backups afeta o desempenho do SQL Server,
geralmente melhor realiz-los durante perodos de baixa atividade, por exemplo nas
primeiras horas do dia.
Importante& Para que qualquer tarefa agendada seja executada, o servio SQL
ServerAgent deve estar iniciado. Veja em Service Manager, uma das maneiras de se
iniciar os servios do SQL Server. Pode ser interessante definir que esse servio inicie
automaticamente na inicializao do computador.
H trs meios de se criar um trabalho de backup:
Utilizar o assistente de plano de manuteno de banco de dados [Database
Mainteinance Plan Wizard]: recomendado porque tambm agenda outras
atividades de manuteno de banco de dados que devem ser realizadas
regularmente.
Agendar um backup atravs da interface de bakcup imediato: a opo mais fcil.
como fazer um backup imediato (mostrado em mplementar um backup),
exceto que se seleciona a opo Sc,e!ule (agendar) antes de se clicar em Ok.
Escrever os comandos SQL voc mesmo e criar a tarefa para execut-lo. Essa
opo a mais demorada para ser ajustada, mas a que oferec maior
flexibilidade.
205
Apostila Microsoft SQL Server 7.0
(gendando um 5ac2u* com*leto de 5anco de dados ou de log de transa-es
utili@ando um assistente
Para agendar um backup de banco de dados com o uso de um assistente, faa o
seguinte:
1. No Enterprise Manager, selecione o banco de dados cujo backup voc quer
agendar.
2. Clique no mesmo com o boto direito, All 1asks, Mainteinance /lan.
3. Clique em Next at chegar tela chamada Especificar o plano de backup do
banco de dados [Specify the Database Backup Plan], mostrada abaixo:
Voc pode optar aqui por verificar a integridade do backup aps seu trmino.
Para isso, clique em "Verify the integrity of the backup on completion of the
backup".
4. Clique em Change para agendar quando o backup ir ocorrer. Note que o
default "Ocorre toda 1 semana no domingo, s 2:00 AM.". Ao clicar em
Change, voc ver a variedade de opes de agendamento disponveis. Voc
pode definir data inicial e final (ou sem data final), ocorrer diariamente,
semanalmente, mensalmente, ou a cada N semanas/meses/dias, a hora em que
ocorrer, o dia da semana, entre outras opes.
Para o teste, clique em "Daily", deixe 1 dia e em "Occurs once", digite o horrio
desejado.
5. Escolha entre armazenar o backup em uma unidade de fita ou disco, e clique em
Next.
6. nforme uma unidade de fita ou diretrio de disco onde o backup dever ser
escrito. O processo de backup ir gerar automaticamente um nome de arquivo
para o backup. Voc pode optar por armazenar o backup de cada banco de
206
Apostila Microsoft SQL Server 7.0
dados em um diretrio separado. Basta clicar em "Create a subdirectory ofr each
database".
7. Se voc quiser que o trabalho de backup exclua arquivos antigos do mesmo
diretrio para liberar espao no disco rgido, opte por "remover arquivos mais
antigos que" [Remove Files Older Than] e informe um nmero de semanas.
8. Clique em Next.
9. A prxima tela permite que voc agende para que ocorra um backup tambm do
log de transaes ao ser realizada a tarefa. Para isso, selecione "Backup
transaction log as part of the mainteinance plan". As opes disponveis para
backup do log de transaes so as mesmas que para o backup do banco de
dados (diretrio, horrios, etc...) Faa suas opes e v clicando em Next at
que aparea a tela de relatrios a gera [Reports to generate], mostrada abaixo:
Nessa tela, voc pode definir se ser gerado um relatrio da operao de
backup, e informar o diretrio onde o relatrio ser armazenado. Pode ainda
definir um operador para receber por e-mail o relatrio (para isso, voc deve ter
algum operador definido. Defina algum, expandindo, no Enterprise Manager,
Management. Clique ento com o boto direito em Operartors, e selecione New
Operator. nforme os dados - nome, e-mail... - do operador, e clique em Ok.).
Selecione da lista, o operador que ir receber um e-mail com o relatrio. Clique
em Next para continuar.
10. Aparece depois uma tela lhe informando onde ser mantido o histrico da
realizao da tarefa, e voc opde definir outro lugar para o mesmo. CLique em
Next.
11. Por fim, lhe ser mostrada uma tela exibindo as opes que voc acabou de
definir para o backup do banco de dados. D um nome tarefa, e clique em
Finish para que ela seja criada.
207
Apostila Microsoft SQL Server 7.0
Tambm possvel agendar o backup completo de um banco de dados executadno os
mesmos passos vistos na criao de um backup imediato, e selecionando Schedule.
Clique no boto de reticncias(...), para definir o agendamento do backup. mais fcil
e mais conveniente definir a tarefa do backup usando assistente de plano de
manuteno de banco de dados, devido variedade de opes disponveis.
Como agendar um 5ac2u* diferencial ou de gru*o de ar!uios
Para agendar um backup de grupo de arquivos ou diferencial, siga os passos para a
criao de um backup imediato, e clique em Schedule, para definir que ele seja
agendado. Clicando no boto de reticncias (...) te permitir escolher quando e com
que frequnciao backup ocorrer.
Criando uma tarefa *ara agendar um 5ac2u*
bastante recomendvel utilizar assistentes para a criao de trabalhos de backup
quando se est iniciando a trabalhar com o SQL Server, mas pode ser que voc queira
modificar tais trabalhos ou mesmo acrescentar um passo para realizao de backup a
um trabalho existente.Aqui ento mostraremos um exemplo simples de como criar um
trabalho a partir do zero, e como usar comandos SQL para realizar tal trabalho e
backup.
1. No Enterprise Manager, expanda a pasta Management, expanda o SQL Server
Agent, e clique com o obto direito em Bo5s. Selecione %e6 Bo5.
2. D um nome para o trabalho e selecione a guia Steps (passos).
208
Apostila Microsoft SQL Server 7.0
3. Escolha Clique no boto %e6... . Aparece a caixa de dilogo abaixo.
4. Na guia <eneral, informe um nome para o passo, por exemplo "Backup do BD
pubs".
5. Na lista 10pe, selecione "Transact-SQL Script". sso lhe permitir entrar com
comandos SQL em 'omman!.
6. O ltimo passo digitar o comando SQL a ser executado na caixa de texto
Command. Para fazer backup completo do banco de dados pu6s para um
dispositivo de backup chamado pu6sA61Adev, o comando seria
,+C8UP D++,+SE (&*s #$ (&*s)*=)dev
Para realizar um backup diferencial em pu6s, o comando seria
,+C8UP D++,+SE (&*s $ (&*s)*=)dev O/P D/""E#E-/+L
Um backup de grupo de arquivos, supondo o arquivo authors no gruop de
arquivos titles, do banco de dados pubs, seria feito com o seguinte comando
,+C8UP D++,+SE (&*s "/LE I Ea&t'orsEK "/LEN#$UP I EtitlesE $
(&*s)*=)dev
Voc pode ver o histrico dos trabalhos de backup, selecionando o trabalho em
questo no Enterprise Manager, e clicando no mesmo com o boto direito,
selecionando ;ie6 Bo5 Cistor0...
209
Apostila Microsoft SQL Server 7.0
14 - 4utros 3ecursos
Configurao do SQL Serer
>ntendendo as Ca5elas de Sistema
Im*ortao e >:*ortao de %ados
1u5licando dados na Internet
Objetivos:
- Entender as configuraes do SQL e tabelas de sistemas;
- Fazer importao e exportao de dados usando o programa BCP;
- Aprender a publicar dados na nternet.
Configurao do SQL Serer
O SQL Server tem vrias opes de configurao, que geralmente podem ser deixadas
com os valores default mas que, em alguns casos, podem ser alteradas para melhorar
o desempenho ou a compatibilidade com os padres ANS.
Para alterar essas opes, use o Enterprise Manager. Selecione o servidor a ser
configurado, clique no mesmo com o boto direito, e em /roperties. Na primeira
pgina, "<eneral" esto informaes gerais sobre o SQL Server, como o sistema em
que ele est rodando, memria, processador, diretrio raiz e as opes para auto-
iniciar os servios. Na pgina "Securit0" esto opes para selecionar o modo de
autenticao (se integrada ao Windows NT, ou mista) e opes de auditoria
relacionadas com a segurana integrada.
Na pgina "Server Settings" esto as opes de configurao do SQL Server. Elas
so:
default language for user: indica que lngua ser usada para mostrar as
mensagens de sistema.
Em server 5e,avior, h trs opes disponveis:
"Allow modifications to be made directly to the system catalogs": se
selecionada permite que mudanas sejam feitas tabelas de sistema
diretamente, atravs de comandos como NSERT, UPDATE, ou DELETE.
Por padro, isso no pode ocorrer. Mudanas s tabelas do sistema s
so feitas atravs de procedimentos armazenados de sistema. Cuidado!!!
Permitir que tabelas de sistema sejam atualizadas diretamente pode fazer
com que seu servidor no funcione adequadamente, ou nem sequer
inicialize.]
"Allow triggers to be fired which fire other triggers (nested triggers)": se
selecionada, permite que se defina gatilhos que, em seu disparo,
disparam outros gatilhos (gatilhos aninhados).
210
Apostila Microsoft SQL Server 7.0
"Use query governor to prevent queries exceeding specified cost": com
essa opo selecionada, voc pode definir um tempo limite, em
segundos, para execuo de consultas. No permitido executar
consultas que ultrapassem tal tempo limite.
A opo referente ao SQL Mail permite que voc defina uma conta MAP para o
SQL Mail utilizar. Com o SQL Mail, mensagens podem ser enviadas por um
gatilho ou porcedimento armazenado. Pode-se tambm processar consultas
recebidas por e-mail e retornar os resultados criando um mail de resposta. Para
maiores informaes sobre como configurar o SQL Mail, consulte o captulo
"SQL Mail", em "ntegrating SQL Server with other tools", dentro do livro
"Administering SQL Server", no books online.
Voc tambm define a como sero tratados os anos informados com dois
dgitos.
Na pgina "'onnections", voc pode definir o nmero mximo de conexes
simultneas com o SQL Server [Maximum concurrent user connections]. O padro 0
(ilimitado). Tambm pode-se definir opes de conexo, em "Default connection
options". Alm disso, voc pode permitir o estabelecimento de conexes remotas
atravs de RPC [Allow other SQL serversto connect remotely to this server using RPC];
pode definir o tempo limite de uma consulta (o padro 0, que indica tempo ilimitado);
por fim, pode forar transaes distribudas.
Na pgina "Data5ase settings" encontram-se algumas opes relativas a bancos de
dados:
a oo "default fill factor" permite que voc determine qual o fator de
preenchimento de pginas padro quando da criao de um novo ndice em
dados existentes. A voc tem duas opes: "Default (optimal)" que faz com que
o SQL ajuste o fator de preenchimento automaticamente, e "Fixed" que te
permite definir o fator de preenchimento (valores em porcentagem).
A opo "Backup/restore" define quanto tempo o SQL Server deve esperar ao
tentar ler uma fita de um dispositivo de fita: ndefinidamente [indefinitely], tentar
uma vez e desistir [try once then quit], ou tentar durante N minutos [try for
minutes].
A opo "default backup media retention" especifica depois de quanto tempo o
SQL Server vai reescrever em uma fita com backup. Ou seja, se voc grava um
backup hoje, e define esta opo para 7 dias, s depois de 7 dias que o SQL
Server vai escrever de novo nessa fita. Se voc tentar escrever antes de
decorrido esse prazo, receber uma mensagem de erro.
"Recovery interval (min)". Use esta opo para determinar o nmero mximo de
minutos por banco de dados que o SQL Server precisa para recuper-los. A
cada vez que o SQL Server inicia, ele recupera cada banco de dados,
desfazendo transaes que no haviam sido finalizadas, e refazendo transaes
que haviam sido finalizadas, mas cujos dados no haviam sido escritos para o
disco quando o SQL Server parou. Aqui voc define um limite superior de tempo
para recuperao de cada banco de dados. O padro 0, indicando
configurao automtica pelo SQL Server. Na prtica, isso significa um tempo
211
Apostila Microsoft SQL Server 7.0
de recuperao de menos de um minuto e um checkpoint aproximadamente a
cada minuto para bancos de dados ativos.
O SQL Server estima quantas modificaes de dados ele pode efetivar no
intervalo, e faz um checkpoint no banco de dados quando o nmero de
modificaes de dados feitas no banco de dados depois do ltimo checkpoint
alcana o nmero que o SQL Server estima que pode efetivar no intervalo.
Na pgina "Memor0", voc pode definir como quer que o SQL Server aloque memria
para si. Voc opde optar entre alocao dinmica, sob demanda, de memria (a opo
padro), definindo a a quantidade mnima e mxima de memria que o SQL Server
pode alocar (por padro, o mnimo 0 e o mximo a memria total do sistema); ou
ento optar por determinar uma quantidade fixa de memria a ser usada pelo SQL
Server [Use a fixed memory size], que sempre estar alocada para o mesmo, e definir
em quanto ficar fixada essa quantidade de memria.A opo "Reserve physical emory
for SQL Server", se selecionada, indica que no ser feito sequer s0ap nas pginas de
memria do SQL Server; as mesmas estaro sempre disponveis em RAM. No use
esta opo se voc permitir que o SQL Server aloque memria dinamicamente. Por
fim, a opo "minimum query memory" indica a quantidade mnima de memria a ser
alocada para a execuo de uma consulta. O aumento desse valor pode resultar em
desempenho melhor na realizao de certos tipos de consultas.
Na pgina "/rocessors" voc encontra opes relativas otimizao do SQL Server
em mquinas multiprocessadas (seo Parallelism). Na seo "Processor control" da
pgina Processors, voc tem as opes "Boost SQL Server priority on Windows NT",
que far com que os processos do SQL Server tenham prioridade maior sobre os
outros processos em execuo (cuidado ao usar essa opo pois outras tarefas
realizadas no NT onde o SQL Server est rodando podem ficar prejudicadas). A opo
"max worker threads" te permite definir o nmero mximo de tarefas (threads) que
estaro disponveis para processos do SQL Server (o padro 255, que funciona bem
na maioria dos casos. s vezes, a diminuio desse nmero, pode melhorar o
desempenho). Se voc marcar a opo "Use NT fibers" voc pode ter um aumento no
desempenho, j que o escalonamento de tarefas (threads) poder ser feito no modo
usurio (pelo uso das fi6ers), sem a necessidade de torca de contexto para o modo
kernel que o uso apenas de threads implica. Procure por "Thread and task architecture"
no Books online para entender melhor isso.
%ota& algumas dessas opes s tm efeito depois de parar e reiniciar o servio MS
SQL Server. Outras delas s permitem alterao se voc definir que sejam mostradas
opes avanadas. Para isso, no Query Analyzer, digite
s()config&re Es'ow advanced o(tionsEK 1
depois pare e reinicie o servio MS SQL Server. A voc poder alterar qualquer das
opes citadas.
>ntendendo as Ca5elas de Sistema
As tabelas de sistema contm informao atualizada automaticamente pelo SQL
Server, que no pode ser alterada diretamente. No entanto, elas so teis para fazer
212
Apostila Microsoft SQL Server 7.0
consultas prpria estrutura do banco de dados. Essas tabelas so todas
documentadas no help do SQL Server (Transact-SQL Help).
Consultando sDso5Bects
A tabela s)so6<ects, por exemplo, contm informaes sobre todos os objetos do banco
de dados. As seguintes colunas so teis:
name
varchar#
F0(
O nome do objeto.
id int
Um nmero de identificao. Pode ser obtido tambm com a funo
OBJECT_D(nome).
t)pe char#J(
Tipo do objeto: U: tabela de Usurio, S: tabela do Sistema, V: Viso, P:
procedimento, R: regra, D: default, TR: trigger [gatilho], C: restrio
Check, K: chave primria ou restrio UNQUE, F: Foreign key (chave
estrangeira)
crdate datetime A data/hora em que o objeto foi criado.
Por exemplo, para saber se uma tabela chamada Cliente j existe e exclu-la caso
exista, pode ser usado o teste:
if eBists (select ! from sDso*]ects w'ere tD(eIEUE
and nameIEClienteE)
dro( ta*le Cliente
Para ver todos os nomes de objetos do banco de dados, use:
select tD(eK nameK id
from sDso*]ects
order *D tD(e
As suas tabelas aparecem perto final da lista, pois so do tipo 'U'.
( ta5ela sDscolumns
A tabela s)scolumns relacionada com s)so6<ects e guarda informao sobre cada
coluna de cada tabela. Tambm guarda informaes sobre parmetros de
procedimentos armazenados. Seus colunas mais importantes so:
id int
dentificador da tabela ou do procedimento armazenado. Faz
referncia a s)so6<ects.id.
colid int
Nmero seqencial da coluna dentro da tabela (ou do parmetro
dentro do procedimento).
t)pe int
dentifica o tipo de dados bsico, que faz referncia a
s)st)pes.t)pe.
length int Tamanho da coluna ou zero se no se aplica.
usert)pe int
Tipo de dados definido pelo usurio. Faz referncia a
s)st)pes.usert)pe.
name varchar#F0( Nome da coluna.
Por exemplo, para listar todas as tabelas de usurio e suas colunas, use:
select so;name a*elaK sc;name Col&na
from sDso*]ects so inner ]oin sDscol&mns sc on so;id I sc;id w'ere so;tD(e I
EUE
Podem aparecer tabelas chamadas dtproperties. Essa tabelas existem para armazenar
diagramas do banco de dados.
213
Apostila Microsoft SQL Server 7.0
Eo-es so5re diagramas
Diagramas servem para permitir que se visualize graficamente a estrutura do banco de
dados sem se alterar os dados do mesmo. Atravs dos diagramas, voc tambm pode
testar novas estruturas para as tabelas, sem alterar o banco de dados. Alm disso,
pode-se criar novos ndices, tabelas e relacionamentos atravs deles.
Para criar um diagrama, voc clica com o boto direito no banco de dados que ter seu
diagrama criado (no Enterprise Manager, claro), seleciona New | Database Diagram. A
aparece o assistente de criao de diagramas, que lhe pergunta quais tabelas voc
quer incluir no diagrama. nforme-as, e quando clicar em Next, aparecer o diagrama
mostrando o relacionamento entre as tabelas (caso exista). Quando voc sai da janela
de diagrama, voc pode salv-lo com um nome qualquer.
Para saber mais sobre diagramas, consulte "Database Diagrams", no captulo "Creating
and Maintaining databases" do books online
Im*ortao e >:*ortao de %ados
O programa BCP um utilitrio de linha de comando (no grfico) usado para importar
ou exportar tabelas de/para o SQL Server. Ele reconhece formatos de texto, bem como
formatos binrios. Para exportar o contedo da tabela Cliente, por exemplo, para um
arquivo chamado CLENTE.TXT, use-o da seguinte forma, na linha de comando
(console do Windows NT ou prompt do DOS no Windows 9x):
,CP EBem(lo;;Cliente $U CL/E-E;L .c .S nome_do_servidor .U sa .P
No caso, 'Exemplo' o nome do banco de dados, a opo OUT especifica que os
dados sero exportados, CLENTE.TXT o nome do arquivo que ser criado. A opo
"-c" indica um arquivo no formato texto. Se fosse usado "-n", seria usado o formato
"nativo", isto , com dados binrios. A opo "-S" especifica o nome do servidor
(substitua nomeAdoAservidor pelo nome do seu servidor). Finalmente "-U" e "-P"
especificam o nome de usurio e senha, respectivamente. Se a senha for vazia, "-P"
deve ser a ltima opo na linha de comando. Note que as opes so sens7veis ao
caso (maisculas e minsculas so diferentes).
O arquivo CLENTE.TXT pode ser alterado em qualquer editor, ou importado em outro
banco de dados.
Se voc executar BCP OUT sem usar "-c", ele ir questionar interativamente o
tamanho de cada coluna a ser usada.
Para importar uma tabela, existem alguns detalhes. A importao muito mais rpida
(especialmente no caso de tabelas grandes) se o banco de dados permitir operao
sem log [nonlogged], ou seja, inserir linhas sem atualizar o log de transaes. Para
ativar essa opo, no Enterprise Manager, clique com o boto direito no banco de
dados e /roperties. Depois clique na pgina "Options", marque "Select into/bulk copy"
e clique Ok.
Para teste, crie uma nova tabela com a mesma estrutura da tabela Cliente chamada
"TempCliente". mporte os dados executando:
214
Apostila Microsoft SQL Server 7.0
%ota& Voc pode criar uma cpia da tabela Cliente, clicando na mesma com o boto
direito, depois em All Tasks | Generate SQL Scripts. A clique em Preview. Depois que
terminar-se de gerar o script, clique em Copy, e o script SQL ser posto na rea de
transferncia. Basta depois col-lo no Query Analyzer, mudando o nome da tabela, e
executar o comando.Lembre-se de retirar as primeiras linhas (at o GO), que verificam
se a tabela existe, e se existir, a excluem, posicione-se no banco de dados onde voc
quer a tabela criada.
,CP EBem(lo;;em(Cliente /- CL/E-E;L .c .S nome_do_servidor .U sa .P
Se a tabela tivesse uma coluna DENTTY, voc deveria incluir tambm a opo "-E"
para usar SET DENTTY_NSERT nomeAta6ela ON durante a importao de dados.
Outras opes, especialmente teis com tabelas grandes, so "-F numeroAlinha" e "-L
numeroAlinha". Elas permitem especificar respectivamente, os nmeros da primeira e
ltima linha que sero importadas ou exportadas. A opo "-b tamanho" diz a
quantidade de linhas que enviada em cada "batch" (lote de atualizaes). Pode ser
aumentada em relao ao default.
1u5licando dados na Internet
O SQL Server Web Assistant permite publicar dados do SQL Server em formato HTML,
ou seja pginas Web. Essas pginas podem ser colocadas num servidor Web e
visualizadas numa ntranet ou na nternet com um browser (programa que visualiza
HTML). As pginas, a priori, no so alteradas dinamicamente, mas com o uso do
Assistente, voc pode definir uma periodicidade de atualizao da pgina.
Para execut-lo, no Enterprise Manager, selecione Tools | Wizards. Clique no sinal de
mais (+) ao lado de Management, e selecione Web Assistant Wizard.
Aparece a tela de boas-vindas do Web Assistant Wizard. Clique em Next.
%ota& voc tambm pode executar o Web Assistant, expandindo o servidor cujos dados
se quer publicar, expandindo a pasta Management. A, clique com o boto direito em
>e5 /u5lis,ing, e em %e6 >e5 Assistant Bo5.
Select %ata5ase
Aqui voc deve informar de qual bancos de dados sero selecionadas as tabelas e
colunas. Escolha da lista o banco de dados desejado. Clique em Next para continuar.
Start a Ee7 Ie5 (ssistant Mo5
nforme um nome para o trabalho do Assistente Web, e informe de que forma viro os
dados que voc deseja publicar. As opes so as seguintes:
"Data from the tables and columns select": selecionando esta opo, lhe ser
permitido escolher quais colunas e tabelas fornecero os dados para
publicao.Caso voc selecione esta opo siga para Seleo de tabelas e
colunas.
215
Apostila Microsoft SQL Server 7.0
"Result set(s) of a stored procedure select": mostrar os resultados da
execuo de um procedimento armazenado sua escolha. Caso voc selecione
esta opo siga para Seleo de procedimentos armazenados.
"Data from the Transact-SQL statement specify": obterm os dados a serem
mostrados atravs de uma sequncia de comandos SQL que voc informar.
Caso voc selecione esta opo siga para nformando comandos.
Feita sua seleo clique em Next para continuar. As prximas janelas a serem
mostradas dependem do que voc selecionou no passo acima.
Seleco de ta5elas e colunas
Na tela mostrada abaixo, selecione as colunas que voc deseja que sejam mostradas
no seu resultado, selecionando-as do lado esquerdo da tela (embaixo de Table
columns) e clicando em A!!. Caso queira selecionar todas colunas da tabela em
questo, clique em A!! All. Note que as tabelas selecionadas aparecem do lado
direito da tela, embaixo de "Selected columns". Para remover alguma coluna
selecionada, selecione-a e clique em Remove.
Caso queira exibir colunas de outras tabelas, selecione-as atravs da lista "Available
tables". Clique em Next para continuar. Aparece a tela Select ro6s, onde voc pode
especificar o critrio de seleo das linhas a serem mostradas. Voc dispe nessa tela
de trs opes, que so:
All of the rows: mostrar todas as linhas da tabela que houver sido selecionada.
"Only those rows that meet the following criteria": aqui voc pode definir um
critrio para exibio das linhas, especificando uma coluna de uma tabela, um
critrio de comparao (=, <>, <, >, >=, <=), e um valor (nmero, string, o que
for). S sero exibidas as colunas que se enquadrarem no critrio especificado.
216
Apostila Microsoft SQL Server 7.0
"Only those rows that qualify using the following Transact-SQL WHERE clause":
s sero exibidas as linhas que atendam declarao WHERE que voc
informar na caixa de texto logo abaixo.
Clique em Next e v para Schedule the Web Assistant job.
Seleo de *rocedimentos arma@enados.
Na tela mostrada abaixo, selecione o procedimento armazenado cujo resultado voc
quer que seja publicado.
Clique em Next. Lhe ser pedido para informar valores para todos os parmetros
necessrios para o funcionamento do procedimento armzaenado. nforme-os, clique
em Next, e v para Schedule the Web Assistant job.
Informando comandos
Digite na caixa de texto a sequncia de comandos SQL que voc quer que seja
executada de modo a mostrar os resultados a serem publicados. Clique em Next e v
para Schedule the Web Assistant job
Sc0edule t0e Ie5 (ssistant Bo5
Nesta tela, voc pode definir quando e com que frequncia ser gerada a pgina Web.
217
Apostila Microsoft SQL Server 7.0
Com a primeira opo selecionada, a pgina ser gerada apenas uma vez quando o
assistente for concludo (no nosso caso, deixaremos essa primeira opo selecionada).
Quando voc seleciona qualquer outra opo, voc pode definir se ser ou no gerada
uma pgina quando da concluso do assistente. (opo "Generate a Web page when
the wizard is completed", se marcada, gera uma pgina quando completa o
assistente.). As outras opes so:
On demand
[Sob demanda]. O trabalho executado mais tarde. Deve-se
executar o Web Assistant de novo para executar a tarefa
Onl) one time at"
[Apenas uma vez em]. A pgina s gerada uma nica vez, no dia
e hora especificados.
,hen the SQL
Server data
changes
[Quando os dados do SQL Server mudarem] Quando uma ou mais
coluna de uma tabela forem alterados. Essa opo cria um gatilho
na tabela para notificar automaticamente o Web Assistant das
alteraes.
At regularl)
scheduled intervals
[Em intervalos regularmente agendados]. Por exemplo, a cada 2
horas, a cada 2 dias etc. Clique em Next e, para esta opo, lhe
ser peritido definir a periodicidade de tais intervalos.
Clique em Next para continuar.
1u5lis0 t0e 7e5 *age
Voc deve informar o nome do arquivo. Para o teste, mantenha
/";MSSQL7\HTML\WebPage1.HTM. Note que o caminho para o arquiv pode ser um
caminho local, um caminho de rede, ou at um caminho de um servidor FTP.Clique em
Next.
Format t0e Ie5 *age
Agora, voc pode obter a ajuda do assistente para formatar a pgina [Yes, help me
format the web page] ou criar o arquvo a partir de um modelo [No, use template file
218
Apostila Microsoft SQL Server 7.0
from...") que usado para definir a formatao da pgina. Caso voc opte por usar a
ajuda do assistente para formatar a pgina, selecione o conjunto de caracteres a ser
usado. Para nosso teste, deixe o padro [Universal Alphabet (UTF-8)]. Clique em Next.
S*ecifD titles
Aqui voc define o ttulo da pgina [What do you want to title the Web page?], e o ttulo
da tabela HTML que conter os dados [What do you want to title the HTML table that
contains the data?]. Vamos informar o ttulo da pgina: "Testando o Web Assistant" e o
ttulo para o resultado: "Relao de Clientes".
Voc ainda pode definir que tamanho ter o ttulo da tabela [What size should the
HTML table title font be?] (H1, H2, H3..). Pode ainda escrever a data e hora de
publicao da pgina [Apply a time and date stamp to the Web page].
Clique em Next.
Format a ta5le
Aqui, voc decide se quer os nomes das colunas sendo exibidas na tabela HTML. [Do
you want column names displayed in the HTML table?]. Ainda possvel definir as
caractersticas da fonte dos dados da tabela [What font characteristics do you want to
apply to the table data?]. Por fim, pode optar por desenhar bordas ao redor da tabela
[Draw border lines around the HTML table].
Clique em Next.
(dd <D*erlin2s to t0e Ie5 1age
Agora, voc pode incluir um ou mais links para outras URLs (endereos nternet), com
vrias opes:
"No". No incluir nenhum link para URLs nas sua pgina.
"Yes, add one hyperlink": especifique a URL que voc quer "linkar" e um rtulo
para esse link [Hyperlink label].
"Yes, add a list of hyperlink URLs. Select them from a SQL Server table with the
following SQL statement": voc pode ainda informar as URLs dando um
SELECT em colunas de tabelas dos seus bancos de dados. Digite os comandos
SQL na caixa de texto.
Limit Rows
Pode-se limitar o nmero de linhas a serem exibidas na pgina, com algumas opes.
As primeiras duas opes definem se sero exibidas todas [No, return all rows of data],
ou as primeiras N linhas [Yes. Return the first rows of data.]
As outras duas opes lhe permitem definir se todos os dados sero postos em uma
nica pgina [No, put all data in one scrolling page], ou em diversas pginas ligadas por
hiperlinks [Yes, link the successive pages togheter.]. No ltimo caso, voc deve
informar quantas linhas sero exibidas por pgina.
Clique em Next.
Finalmente, voc v a tela final do assistente, lhe mostrando as opes deifnidas na
criao dessa tarefa. A, voc ainda tem a opo de escrever o cdigo SQL gerador de
tal tarefa para um arquivo [Write Transact-SQL to File...].
Clique em Finish.
219
Apostila Microsoft SQL Server 7.0
Cestando a *Hgina
Abra a pgina no nternet Explorer para visualizar o seu resultado.
Os lin1s a,ai>o contDm os scripts SQL para %acilitar o acompan=amento da apostila. 5,raEos e
visuali6e no se& F,ro&serF. 3ara utili6;ElosG selecioneEosG copie e cole para o Quer2 5nal26er.
3ara voltar para esta p;*inaG use o ,oto B5/H de seu ,ro&serG ou o menu de nave*ao I
esquerda na tela.
->ecuteEos de pre%erJnciaG em sequJncia.
%efinindo noos ti*os de dados
+ ,dicionando
s()addtD(e ECEPEK Ec'ar(13)EK En&llE
N$
s()addtD(e EEstadoEK Ec'ar(5)EK En&llE
N$
s()addtD(e E@&antidadeEK En&meric(13K5)EK Enot n&llE
N$
s()addtD(e EelefoneEK Evarc'ar (53)EK En&llE
N$
s()addtD(e Ei(o$(eracaoEK ESmall/ntEK En&llE
go
s()addtD(e EValorNranteEK En&meric(19K5)E
+ -emovendo
s()dro(tD(e i(o$(eracao
N$
s()dro(tD(e ValorNrante
'rian!o 1a5elas
/!!!!!! a*le CategoriaContato !!!!!!/
C#E+E +,LE CategoriaContato (
CodCategoria int -$ -ULLK
-ome varc'ar (<3) -ULL
)
N$
/!!!!!! a*le Contato !!!!!!/
C#E+E +,LE Contato (
i(o c'ar(1) -$ -ULL CPEC8 (i(o in (EPEKEEE))K
Codigo int -$ -ULLK
220
Apostila Microsoft SQL Server 7.0
CodigoS&* int -$ -ULLK
-ome varc'ar (<3) -ULL
)
N$
/!!!!!! a*le Em(resa !!!!!!/
C#E+E +,LE Em(resa (
CodEm(resa int -$ -ULLK
-ome varc'ar (<3) -ULLK
#a:aoSocial varc'ar (<3) -ULLK
.. cam(os adicionais
DataCadastro datetime -ULLK
-otas teBt -ULL
)
N$
/!!!!!! a*le Prod&to !!!!!!/
C#E+E +,LE Prod&to (
CodProd&to int -$ -ULLK
-ome varc'ar(<3) -ULLK
Descricao varc'ar(<3) -ULLK
@&antDis(onivel @&antidade -$ -ULL CPEC8 (@&antDis(onivel >I 3)
DE"+UL 3K
@&ant%inima @&antidade -ULLK
Locali:acao varc'ar (93) -ULLK
Preco moneD -$ -ULL CPEC8 (Preco > 3)
)
N$
/!!!!!! a*le %ovimentacaoProd&to !!!!!!/
C#E+E +,LE %ovimentacaoProd&to (
Cod%ovProd&to int -$ -ULLK
.. c'ave estrangeira da ta*ela Contato
i(oContato c'ar(1) -ULLK
CodContato int -ULLK
CodS&*Contato int -ULLK
.. c'ave estrangeira da ta*ela Prod&to
CodProd&to int -$ -ULLK
@&antidade @&antidade -$ -ULLK
Data%ov datetime -$ -ULL DE"+UL (getdate())K
.. E I EntradaK S I SaUda
i(o%ov c'ar(1) -$ -ULL CPEC8 (i(o%ov in (EEEKESE))
)
N$
221
Apostila Microsoft SQL Server 7.0
/!!!!!! a*le Pessoa !!!!!!/
C#E+E +,LE Pessoa (
CodPessoa int -$ -ULLK
-ome varc'ar (93) -ULLK
SeBo c'ar(1) -$ -ULLK
"one elefone -ULLK
"aB elefone -ULL
)
N$
/!!!!!! a*le S&*divisao !!!!!!/
C#E+E +,LE S&*divisao (
.. c'ave (rimMria
CodEm(resa int -$ -ULLK
CodS&*divisao int -$ -ULLK
-ome varc'ar (93) -ULLK
"one elefone -ULLK
"aB elefone -ULLK
.. col&nas de endereSo
#&a varc'ar (93) -ULLK
,airro varc'ar (59) -ULLK
Cidade varc'ar (23) -ULLK
Estado Estado -ULLK
CEP CEP -ULLK
CNC varc'ar (14) -ULLK
.. col&nas adicionais
DataCadastro datetime -ULLK
-otas teBt -ULL
)
N$
/!!!!!! a*le #elEm(resaCategoria !!!!!!/
C#E+E +,LE #elEm(resaCategoria (
CodEm(resa int -$ -ULLK
CodCategoria int -$ -ULL
)
N$
/!!!!!! a*le #elPessoaCategoria !!!!!!/
C#E+E +,LE #elPessoaCategoria (
CodPessoa int -$ -ULLK
CodCategoria int -$ -ULL
)
222
Apostila Microsoft SQL Server 7.0
N$
/!!!!!! a*le #elS&*divisaoPessoa !!!!!!/
C#E+E +,LE #elS&*divisaoPessoa (
CodEm(resa int -$ -ULLK
CodS&*divisao int -$ -ULLK
CodPessoa int -$ -ULLK
Cargo varc'ar (73) -ULL
)
N$
/!!!!!! a*le %ov+c&m&lado !!!!!!/
C#E+E +,LE %ov+c&m&lado (
CodProd&to int -$ -ULLK
otalVendas @&antidadeK
otalCom(ras @&antidade
)
N$
/!!!! a*le em(oraria !!!!!/
C#E+E +,LE em(oraria (
Codigo int -$ -ULLK
-ome varc'ar (93) -ULL
)
/!!!! a*le em(oraria1 !!!!!/
C#E+E +,LE em(oraria (
Codigo int -$ -ULLK
-ome varc'ar (93) -ULL
)
Altera, renomeia e e-clui ta5elas.
(lter Ca5le
+ Campo
+LE# +,LE Pessoa
+DD #&a varc'ar(<3) n&llK
223
Apostila Microsoft SQL Server 7.0
Cidade varc'ar(73) n&llK
,airro varc'ar(73) n&llK
CEP CEP -ULLK
Estado Estado -ULLK
CP" varc'ar (12) -ULLK
DataCadastro datetime -ULL DE"+UL (getdate())K
-otas teBt -ULL
3enomear Ca5ela
s()rename Eem(oraria1EK em(orariaeste
N$
s()rename Eem(oraria;codigoEK cod
3emoer Ca5ela

dro( ta*le em(orariaK em(orariaeste
>staro criadas as ta5elas. todas a@ias. %ee-se e:ecutar o scri*t %adosCodos. !ue
colocarH dados em todas elas.
'oloca !a!os em to!as as ta5elas D.ue A# !evem ter si!o cria!asE.
Insere diersos dados nas ta5elas BH criadas
d&m( transaction Contatos
wit' tr&ncate)onlDK no)log
N$
/!!!! Pessoa !!!!!/
insert into Pessoa(CodPessoaK-omeKSeBoK"oneK"aBK#&aK,airroKCidadeKEstadoKCEP)
val&es (1K E+*`lio "ren=elEK E"EK E555.5413EK E371.569.2369EK E+v; Noi sK
729 sala 5EK EEK ENoianiaEK EN$EK E E)
insert into Pessoa(CodPessoaK-omeKSeBoK"oneK"aBK#&aK,airroKCidadeKEstadoKCEP)
val&es (5K E+dbo DiasEK E"EK E5<1.45<7EK E555.2543EK E#&a C. 12<K <<1EK EEK
ENoianiaEK EN$EK EE)
insert into Pessoa(CodPessoaK-omeKSeBoK"oneK"aBK#&aK,airroKCidadeKEstadoKCEP)
val&es (7K E+dbo PereiraEK E"EK E572.1199EK En3o lem*raEK E #&a 5K 191EK
ESetor Universit rioEK ENoianiaEK EN$EK EE)
insert into Pessoa(CodPessoaK-omeKSeBoK"oneK"aBK#&aK,airroKCidadeKEstadoKCEP)
val&es (2K E+de*aldo -e(om&cenoEK E"EK E527.<2<9EK E561.7591EK E+v; 52 de
$&t&*roK 29EK EEK ENoianiaEK EN$EK E12519.373E)
insert into Pessoa(CodPessoaK-omeKSeBoK"oneK"aBK#&aK,airroKCidadeKEstadoKCEP)
val&es (9K E+driano \es&sEK E%EK E541.<116EK E569.2511EK E+v; Perimetral
-orteK 7571EK E EK ENoianiaEK EN$EK E E)
224
Apostila Microsoft SQL Server 7.0
/**** Produto ****/insert into
Produto(CodProduto,Nome,Descricao,QuantDisponivel,QuantMinima,Localizacao,Prec
o) values(1,"Lmpadas 150 V","",4.00,2.00,"Estante , Prateleira , Diviso
",15.0000)insert into
Produto(CodProduto,Nome,Descricao,QuantDisponivel,QuantMinima,Localizacao,Prec
o) values(2,"Toner/Laser Jet","",1.00,0.00,"Armrio 01, Prateleira 02, ",15.0000)
'onsultan!o !a!os, fun(es matem#ticas, !e caracteres, !ata,ora, converso
!e !a!os e con!i(es !e pes.uisa.
Consultando %ados
Consu"tando vers.o do /01 /erver
Select @@version
2ostrando va"or de uma strin%
Select EesteE
Consu"tando todas as co"unas
! %ostrar q&ais sTo as (essoas eBistente no contatosc
Select ! from (essoa
Consu"tando em outro banco de dados
! %ostrar q&ais sTo os a&tores cadastrados no *ando de dados P&*sc
select ! from (&*s;;a&t'ors
Consu"tando outras co"unas
! %ostrar o nomeK telefone e faB das (essoas cadastradas no contatosc
Select nomeK foneK faB from (essoa
225
Apostila Microsoft SQL Server 7.0
Consu"tando outras co"unas, mudando o cabe3a"ho das co"unas
retornadas
! %ostrar as em(resas cadastradas no contatosc
select nome E-ome "antasiaEK ra:aosocial E#a:To SocialEK
DataCadastro Cadastro from em(resa
4sando condi35es
! @&ais sTo as (essoas K c&]oK estado ig&al a ENoE e cidade ig&al a
ENoi^niaE c
select -omeK "one
from (essoa
w'ere cidade I ENoi^niaE and estado I ENoE
2anipu"ando *6press5es
! %ostrar os (reSos de cada (rod&to K a(Js &m a&mento de 13Cc
select nome Prod&toK Preco PreSoK ((reco ! 1;1) WPreSo com 13C de a&mentoW
from (rod&to
un35es 2atem7ticas
! %ostrar os (reSos de cada (rod&to K a(Js &m a&mento de 13C arredondando o
valor com d&as casas decimaisc
select nome Prod&toK Preco PreSoK
ro&nd(((reco ! 1;1)K 5) WPreSo arredondadoW
from (rod&to
select (ower(2K5)K (i()K ascii(E+E)
un35es de caracteres
! %ostrar os (rod&tos com as descriSdesc
select -ome X E.E X descricao EProd&to/DescriSToE
from (rod&to
! %ostrar os (rod&tos K onde os nomes (odem a(arecer com 53 caracteres e o
(reSo com < casas decimais antes da vUrg&la e 5 casas de(ois da vUrg&lac
Select s&*string(-omeK 1K 53) Prod&to K str((recoK <K 5) PreSo
from (rod&to
! #e(etir a letra a 13 ve:es;
select re(licate(EaEK 13)
226
Apostila Microsoft SQL Server 7.0
un35es de (ata8hora
select datacadastro EData CadastroEK
date+dd(mmK 1Kdatacadastro) E+dicionando 1 %esE K
dateDiff(ddK datacadastroK getdate())
ES&*traindo DatasEK
date(art(DDK datacadastro) +noK
date(art(dwK datacadastro) Semana
from em(resa
Convers.o de (ados
select convert(c'ar(13)K nome) E-ome S&*divisToEK
convert(c'arK datacadastroK 137)
EData "ormato ,rasileiroE
from s&*divisao
Condi35es de !es#uisa
! @&ais sTo os (rod&tosK c&]a q&antidade dis(onUvel em estoq&e [ menor q&e a
q&antidade mUnima (ermitidac
Select nome K q&antdis(onivelK q&ant%inima
from (rod&to
O'ere q&antDis(onivel Y q&ant%inima
! @&ais as (essoas q&e nTo foi informado o telefonec
Select nome from (essoa
w'ere fone is n&ll
! @&ais as s&*divisdes q&e estTo no estado de NoiMs e ocantinsc
select nomeK foneK estado
from s&*divisao
w'ere estado in (ENoEK EoE)
! @&ais as saUdas reali:adas no (erUodo de 31/3</64 a 32/3</64c
select cod(rod&toK q&antidadeK datamov
from movimentacao(rod&to
w'ere data%ov *etween E3</31/64E and E3</32/64E
! @&ais as (essoas q&e cont[m as letras EcrisE no meio (o& no inUcio o& no
fim)c
227
Apostila Microsoft SQL Server 7.0
select nome from (essoa
w'ere nome li=e ECcrisCE
! @&ais as cidades onde a em(resa (oss&U clientesK ide(endente se se]a (essoa
o& s&*divisToc
select cidade from (essoa
&nion
select cidade from s&*divisao
Inserin!o Lin,as
/-SE# /-$ Pessoa
V+LUES (233K EPESS$+ U%EK E%EK E555.5555EK EEK E#; esteEK E,; D$S
L/%$E/#$SEK ENoi^niaEK EN$EK E12363.157EK
E5555555.51EK E31/55/1664EK E$*s; -en'&maE)
/-SE# /-$ Pessoa(CodPessoaK-omeKSeBo)
V+LUES (231KEPessoa231EKE"E)
+ 9nsert com se"ect
Para testar iremos criar a ta*ela co(iaem(resa com a mesma estr&t&ra da
ta*ela em(resa
C#E+E +,LE Co(iaEm(resa (
CodEm(resa int -$ -ULLK
-ome varc'ar (<3) -ULLK
#a:aoSocial varc'ar (<3) -ULLK
.. cam(os adicionais
DataCadastro datetime -ULL DE"+UL (getdate())K
-otas teBt -ULL
)
Copiar as empresas cujo nome seja maior #ue &2&
insert into co(iaem(resa
select ! from em(resa
w'ere nome > EmE
!ara inc"uir os dados numa tabe"a com a estrutura di$erente $a3a:
Criar a tabe"a copiapessoa
C#E+E +,LE Co(iaPessoa (
228
Apostila Microsoft SQL Server 7.0
CodPessoa int -$ -ULLK
-ome varc'ar (93) -ULLK
SeBo c'ar(1) -$ -ULL CPEC8 (SeBo in (E%EKE"E))K
"one elefone -ULL
)
Copiar as pessoa cujo se6o ; &&
insert into Co(iaPessoa
select cod(essoaK nomeK seBoK fone from (essoa
w'ere seBo I E"E

(tuali@ando dados
+ ,"terar o estado das pessoas para &<o& , #uando a cidade $or
i%ua" a &<oi=nia&
&(date Pessoa
set Estado I ENoE
w'ere Cidade I ENoi^niaE
4pdate com se"ect
+t&ali:ar o total de vendas e com(ras q&ando se& valor for
n&ll;
%as nTo eBiste nen'&m registro cadastrado na ta*ela
movac&m&ladoK (ortantoK iremos incl&ir todos os (rod&tos nesta
ta*ela (ara de(ois fa:er as alteraSdes;
dro( ta*le movac&m&lado
go
C#E+E +,LE %ov+c&m&lado (
CodProd&to int -$ -ULL K
otalVendas @&antidade -ULL K
otalCom(ras @&antidade -ULL
)
229
Apostila Microsoft SQL Server 7.0
go
insert movac&m&lado(cod(rod&to)
select cod(rod&to from (rod&to
go
select ! from movac&m&lado
UPD+E %ov+c&m&lado
SE otalVendas I
(select s&m(@&antidade)
from %ovimentacaoProd&to m(
w'ere m(;CodProd&to I
%ov+c&m&lado;CodProd&to
and m(;i(o%ov I ESE)K
otalCom(ras I
(select s&m(@&antidade)
from %ovimentacaoProd&to m(
w'ere m(;CodProd&to I
%ov+c&m&lado;CodProd&to
and m(;i(o%ov I EEE)
w'ere otalVendas is n&ll
or otalCom(ras is n&ll
select ! from movac&m&lado

>:cluindo dados
+ *6c"uir todos os re%istros da tabe"a copiapessoa
delete from co(ia(essoa
+ *6c"uir os re%istros da tabe"a copiaempresa , #uando o c>di%o
da empresa $or i%ua" a ?
delete from co(iaem(resa w'ere codem(resa I 7
*6c"us.o usando subconsu"ta
*6c"uir as "inhas da tabe"a copiaempresa #ue e6iste na tabe"a
empresa
Delete from co(iaem(resa
w'ere codem(resa in (select codem(resa from em(resa)
230
Apostila Microsoft SQL Server 7.0
Coloca dados na tabela de funcionrios
dro( ta*le f&ncionario
go
create ta*le f&ncionario
(
codigo int identitDK
nome c'ar(<3)K
ti(o c'ar(1)K
salario moneD
)
go
insert into f&ncionario
val&es(Ef&nc1EK EEK 733)
go
insert into f&ncionario
val&es(Ef&nc5EK EPEK 733)
go
insert into f&ncionario
val&es(Ef&nc7EK EPEK 1333)
go
insert into f&ncionario
val&es(Ef&nc2EK EEK 233)
go
insert into f&ncionario
val&es(Ef&nc9EK EEK 1533)
go
insert into f&ncionario
val&es(Ef&nc<EK EPEK 1733)
go
insert into f&ncionario
val&es(Ef&nc1EK EPEK 533)
go
insert into f&ncionario
val&es(Ef&nc4EK EPEK <33)
go
insert into f&ncionario
val&es(Ef&nc6EK EPEK 133)
go
insert into f&ncionario
val&es(Ef&nc13EK EEK 433)
%ados de 3esumo
+ 0uantas pessoas est.o cadastradas na tabe"a de pessoas@
Select co&nt(!) from Pessoa
231
Apostila Microsoft SQL Server 7.0
+ 0uantas pessoas e6iste por cate%oria@
select CodCategoria ECJdigo CategoriaEK
Co&nt(!) E@&antidade PessoaE
from #elPessoaCategoria
gro&( *D CodCategoria
+ -e"a3.o de produtos da empresa com sua #uantidade tota"
vendida e ordenado pe"a #uantidade.
select CodProd&toK SU%(@&antidade)
from %ovimentacaoProd&to
w'ere i(o%ov I ESE
and Data%ov *etween E1/</64E and E1/1/64E
gro&( *D CodProd&to
order *D SU%(@&antidade) DESC
Funes Agregadas
select maB(q&antidade) E%aior @&antidadeEK
min(q&antidade) E%enor @&antidadeEK
co&nt(q&antidade) E@&antidade otalEK
avg(q&antidade) E%[diaEK
s&m(q&antidade) EotalE
from movimentacaoProd&to
+ 0ua" a A"tima venda rea"iBada para cada c>di%o do produto@
Select cod(rod&toK maB(datamov)
from movimentacao(rod&to
w'ere ti(omov I ESE
Nro&( *D cod(rod&to
+ 0ua" a menor #uantidade vendida por cada c>di%o do produto@
Select cod(rod&toK min(q&antidade) from movimentacao(rod&to
O'ere ti(omovimentacao I ESE
Nro&( *D cod(rod&to
+ 0ua" a #uantidade tota" de vendas rea"iBadas para cada
c>di%o do produto@
Select cod(rod&toK s&m(q&antidade)
from movimentacao(rod&to
O'ere ti(omov I ESE
Nro&( *D cod(rod&to
<aing
232
Apostila Microsoft SQL Server 7.0
+ 0ua" a menor sa)da rea"iBada para cada c>di%o do produto
#uando a #uantidade vendida $or maior #ue 51@
Select cod(rod&toK min(q&antidade)
from movimentacao(rod&to
O'ere ti(omov I ESE
Nro&( *D cod(rod&to
Paving s&m(q&antidade) > 91
Junes de Tabelas
+ 0uais os produtos #ue $oram vendidos na empresa@
Select distinct (;nome
from movimentacao(rod&to m K (rod&to (
w'ere m;cod(rod&to I (;cod(rod&to
and m;ti(o%ov I ESE
+ 0uais as pessoas #ue pertencem a cate%oria &C1 C"ientes&,
mostrando as pessoas em ordem a"$abCtica@
Select (;nome
from Pessoa (K #elPessoaCategoria rK CategoriaContato c
w'ere (;cod(essoa I r;cod(essoa and c;codcategoria I r;codcategoria
and c;nome I ECL ClientesE order *D (;nome
Dun3.o usando 9nner Doin
+ 0uais as subdivis5es e6istente para cada empresa@
select e;-omeK s;-ome
from Em(resa e inner ]oin S&*divisao s on e;codEm(resa I s;codEm(resa
order *D e;nomeK s;nome
Dun3.o cruBada ou irrestrita
select e;-omeK s;-ome
233
Apostila Microsoft SQL Server 7.0
from Em(resa e cross ]oin S&*divisao s
order *D e;nomeK s;nome
Dun3.o e6terior
Select ! from (rod&to left ]oin movimentacao(rod&to
$n (rod&to;cod(rod&to I movimentacao;cod(rod&to
Dun3.o com mais de duas tabe"as
+ 0uais as empresas #ue pertencem a cate%oria &C1 C"ientes&,
mostrando as empresas em ordem a"$abCtica@
select e;nome
from #elEm(resaCategoria r
inner ]oin Em(resa e on r;codem(resa I e;codem(resa
inner ]oin CategoriaContato c on r;codcategoria I c;codcategoria
w'ere c;nome I ECL ClientesE
order *D e;nome
+ -e"a3.o das empresas e subdivis5es com os nomes dos
$uncion7rios@
select e;nome EEm(resaEK (;nome E"&ncionMriosE
from #elS&*divisaoPessoa r
inner ]oin Pessoa P on r;cod(essoa I (;cod(essoa
inner ]oin s&*divisao s on (r;cods&*divisao I s;cods&*divisao and
r;codem(resa I s;codem(resa)
inner ]oin Em(resa E on S;codEm(resa I E;codEm(resa
order *D E;nome K P;nome
+ 1ista%em das empresas com nome, $a6, bairro, cidade ,estado e
#ue pertencem a cate%oria i%ua" a 2@
select s;-omeK"aBK,airroKCidadeKEstado
from S&*divisao s
inner ]oin Em(resa e
on s;CodEm(resa I e;CodEm(resa
inner ]oin #elEm(resaCategoria r
on r;CodEm(resa I e;CodEm(resa
w'ere r;CodCategoria I 5
order *D EstadoK CidadeK ,airroK s;-ome
234
Apostila Microsoft SQL Server 7.0
Su5-Consultas
N 1orcentagem da !uantidade de um *roduto em relao ao total de !uantidades dos
*rodutos. !ue foram com*rados *elo em*resaR
select CodProduto, 100.0 * sum(Quantidade) / (select sum(Quantidade) from
MovimentacaoProduto where TipoMov = 'E') as Porcentagem from
MovimentacaoProduto where TipoMov = 'E' group by CodProduto
Select Nome, (select sum(Quantidade) from MovimentacaoProduto m where TipoMov =
'S' and m.CodProduto = p.CodProduto) as TotalVendas, (select sum(Quantidade) from
MovimentacaoProduto m where TipoMov = 'E' and m.CodProduto = p.CodProduto) as
TotalCompras from Produto p order by nome
1ara as *rA:imas consultas iremos criar a ta5ela de funcionHrio. *ara isso e:ecutar os
seguintes comandosP
create table funcionario ( codigo int identity, nome char(60), tipo char(1), salario
money )
>:ecutar o scri*t Coloca dados na ta5ela de funcionHrios *ara acrescentar dados na ta5ela
de funcionHrios. ( coluna ti*o se for 1 indica *rofessor e se for C indica tUcnico.
Ceste de e:istGncia
+ 2ostrar os pro$essores somente se tiver tCcnicos com o sa"7rio
i%ua" a 1200.
Select nome K salario
"rom f&ncionario
O'ere f&ncionario;ti(o I EPE and
EBists (select ! from f&ncionario w'ere ti(o I EE and salario I 1533)
+ 0uais as empresas #ue n.o tem pessoas cadastradas ne"a@
Select CodEm(resaKCodS&*divisaoK-ome
from S&*divisao s
w'ere -$ EL/SS
(select !
from #elS&*divisaoPessoa rs(
w'ere rs(;CodEm(resa I s;CodEm(resa
and rs(;CodS&*divisao I s;Cods&*divisao)
235
Apostila Microsoft SQL Server 7.0
+ 0ua" a data da A"tima venda de cada produto com suas
respectivas #uantidades@
select cod(rod&toK maB(datamov)K
(select q&antidade from
movimentacao(rod&to (
w'ere (;cod(rod&to I m(;cod(rod&to
and (;datamov I maB(m(;datamov))
from movimentacao(rod&to m(
w'ere ti(omov I ESE
gro&( *D cod(rod&to
+ -e"a3.o das empresas e subdivis5es com a #uantidade de
$uncion7rios pertencente a cada empresa@
select e;nome EEm(resaEK co&nt(!)
from #elS&*divisaoPessoa r
inner ]oin Pessoa P on r;cod(essoa I (;cod(essoa
inner ]oin s&*divisao s on (r;cods&*divisao I s;cods&*divisao and
r;codem(resa I s;codem(resa)
inner ]oin Em(resa E on S;codEm(resa I E;codEm(resa
gro&( *D e;nome
ndices
(Endices c"ustered %era"mente C uti"iBado #uando n.o C $eito
muita inc"us.o de dados na tabe"a.)
C#E+E U-/@UE CLUSE#ED /-DEL ind-ome $- CategoriaContato(nome)
C#E+E CLUSE#ED /-DEL ind-ome $- Em(resa(nome)
C#E+E /-DEL ind-ome $- Pessoa(nome)
I!entit0
Create ta*le De(artamento
(
Codigo int not n&ll identitDK
-ome varc'ar(<3)
)
%efault
create defa&lt
236
Apostila Microsoft SQL Server 7.0
Data+t&al as getdate()
go
s()*indefa&lt Data+t&alK Eem(resa;datacadastroE
eBec s()*indefa&lt Data+t&alK Es&*divisao;datacadastroE
+lter ta*le S&*divisao
add defa&lt EN$E for Estado
+lter ta*le Pessoa
add defa&lt EN$E for Estado
3egras
create r&le #egraSeBo as @seBo in (E"EK E%E)
go
s()*indr&le #egraSeBoK E(essoa;seBoE
+LE# +,LE %ovimentacaoProd&to
add c'ec= (@i(o%ov in (EEEK ESE))
3estri-es
/!!!!!! $*]ect> a*le CategoriaContato !!!!!!/
+LE# +,LE CategoriaContato
+DD P#/%+#A 8EA -$-CLUSE#ED (CodCategoria)
/!!!!!! $*]ect> a*le Contato !!!!!!/
+LE# +,LE Contato
+DD C$-S#+/- P=Contato P#/%+#A 8EA CLUSE#ED (i(oK CodigoK
CodigoS&*)
/!!!!!! $*]ect> a*le Em(resa !!!!!!/
+LE# +,LE Em(resa
+DD C$-S#+/- P=Em(resa P#/%+#A 8EA -$-CLUSE#ED (CodEm(resa)
/!!!!!! $*]ect> a*le Prod&to !!!!!!/
+LE# +,LE Prod&to
+DD C$-S#+/- P=Prod&to P#/%+#A 8EA -$-CLUSE#ED (CodProd&to)
/!!!!!! $*]ect> a*le %ovimentacaoProd&to !!!!!!/
+LE# +,LE %ovimentacaoProd&to
+DD P#/%+#A 8EA -$-CLUSE#ED (Cod%ovProd&to)K
"$#E/N- 8EA (CodProd&to) #E"E#E-CES Prod&to(CodProd&to)K
"$#E/N- 8EA (i(oContatoK CodContatoK CodS&*Contato)
#E"E#E-CES Contato(i(oKCodigoKCodigoS&*)
/!!!!!! $*]ect> a*le Pessoa !!!!!!/
+LE# +,LE Pessoa
+DD P#/%+#A 8EA -$-CLUSE#ED (CodPessoa)
/!!!!!! $*]ect> a*le S&*divisao !!!!!!/
+LE# +,LE S&*divisao
237
Apostila Microsoft SQL Server 7.0
+DD P#/%+#A 8EA -$-CLUSE#ED (CodEm(resaK CodS&*divisao)
/!!!!!! $*]ect> a*le #elEm(resaCategoria !!!!!!/
+LE# +,LE #elEm(resaCategoria
+DD C$-S#+/- P=#elEm(resaCategoria P#/%+#A 8EA -$-CLUSE#ED
(CodEm(resaKCodCategoria)K
C$-S#+/- "=CodEm(resaCategoria "$#E/N- 8EA (CodCategoria)
#E"E#E-CES
CategoriaContato(CodCategoria)
/!!!!!! $*]ect> a*le #elPessoaCategoria !!!!!!/
+LE# +,LE #elPessoaCategoria
+DD P#/%+#A 8EA (CodPessoaK CodCategoria)K
C$-S#+/- "=CodPessoaCategoria "$#E/N- 8EA (CodCategoria)
#E"E#E-CES
CategoriaContato(CodCategoria)
/!!!!!! $*]ect> a*le #elS&*divisaoPessoa !!!!!!/
+LE# +,LE #elS&*divisaoPessoa
+DD P#/%+#A 8EA (CodEm(resaKCodS&*divisaoKCodPessoa)K
"$#E/N- 8EA (CodEm(resaKCodS&*divisao) #E"E#E-CES S&*divisaoK
"$#E/N- 8EA (CodPessoa) #E"E#E-CES Pessoa
+ Criar estas tabe"as #ue uti"iBa as restri35es de inte%ridade
com o comando create.
C#E+E +,LE co(iaPessoa (
CodPessoa int -$ -ULL constraint P8)Pessoa (rimarD =eDK
-ome varc'ar (93) -ULL constraint U)-omePessoa Uniq&eK
"one elefone -ULL K
"aB elefone -ULL K
SeBo c'ar (1) c'ec= (seBo in(E"EKE%E))K
#&a varc'ar (<3) -ULL K
DataCadastro datetime defa&lt getdate() K
Cidade varc'ar (73) defa&lt ENoi^niaE K
,airro varc'ar (73) -ULL K
CEP CEP -ULL K
Estado Estado -ULL K
CP" varc'ar (12) -ULL K
-otas teBt -ULL )
C#E+E +,LE Co(ia#elPessoaCategoria (
CodPessoa int -$ -ULL constraint
"8)Co(iaPessoa foreign =eD references co(ia(essoaK
CodCategoria int -$ -ULL
(rimarD =eD (cod(essoaK codcategoria)
)
238
Apostila Microsoft SQL Server 7.0
;is(es
C#E+E V/EO Em(resaCategoria
(CodEm(resaK Em(resaK Categoria)
+S
select e;CodEm(resaK e;-omeK c;-ome
from Em(resa e
/--E# \$/- #elEm(resaCategoria rec
$- e;CodEm(resa I rec;CodEm(resa
/--E# \$/- CategoriaContato c
$- rec;CodCategoria I c;CodCategoria
C#E+E V/EO Prod&to#estrito
+S SELEC CodProd&toK -omeK Locali:acao
"#$% Prod&to
C#E+E V/EO PessoasEm(resa as
select (;-ome EPessoaEK e;nome EEm(resaEK s;nome ES&*divisaoEK rs;cargo
from Pessoa (
inner ]oin #elS&*divisaoPessoa rs
on (;CodPessoa I rs;CodPessoa
inner ]oin S&*divisao s
on (rs;CodEm(resa I s;CodEm(resa
and rs;CodS&*divisao I s;CodS&*divisao)
inner ]oin Em(resa e
on (s;codem(resa I e;codem(resa)
C#E+E V/EO PessoaView
+S SELEC -omeK CidadeK Estado
"#$% Pessoa
OPE#E -ome li=e E+CE
C#E+E V/EO Saidas
+S SELEC Data%ovK CodProd&toK @&antidadeK i(o%ov
"#$% %ovimentacaoProd&to
OPE#E i(o%ov I ESE
O/P CPEC8 $P/$-
1rocedimentos
C#E+E P#$CEDU#E ,&scaPessoa
@nome varc'ar(93)
+S
declare @(esq&isa varc'ar(93)
declare @contagem int
select @(esq&isa I ECE X @nome X ECE
select @contagem I co&nt(!)
from Pessoa
239
Apostila Microsoft SQL Server 7.0
w'ere -ome li=e @(esq&isa

declare @mensagem varc'ar(133)
/" @contagem fI 3
*egin
select @mensagem I
convert(varc'arK@contagem) X
E (essoas encontradasE
(rint @mensagem

select CodPessoaK -ome
from Pessoa
w'ere -ome L/8E @(esq&isa
order *D -ome
end
ELSE
*egin
select @mensagem I
E-To foi encontrado WEX@nomeXEWE
(rint @mensagem
end
N$
/!!!!!!!!!!!!!!/
create (roced&re ,&scaPessoaCategoria
@nome varc'ar(93)K
@codCategoria int I 3
+S
if @codCategoria I 3
*egin
select ! from Pessoa
w'ere -ome li=e ECEX@nomeXECE
ret&rn 1
end
else *egin
select ! from Pessoa
w'ere -ome li=e ECEX@nomeXECE
and CodPessoa in
(select CodPessoa from #elPessoaCategoria
w'ere CodCategoria I @codCategoria)
ret&rn 5
end
N$
/!!!!!!!!!!!!!!/
create (roced&re Cons&ltaVendasProd&to
@codProd&to intK
@data/ni datetimeK
@data"im datetime
240
Apostila Microsoft SQL Server 7.0
as
select @&antidadeKData%ovK
i(oContatoKCodContatoKCodS&*Contato
from %ovimentacaoProd&to
w'ere CodProd&to I @codProd&to
and i(o%ov I ESE
and Data%ov *etween @data/ni
and @data"im
order *D Data%ov
/!!!!!!!!!!!!!!/
create (roced&re /niciali:arContato
as
delete from Contato
insert into Contato
select EPEK CodPessoaK 3K -ome
from Pessoa
insert into Contato
select ESEK CodEm(resaK CodS&*divisaoK
-ome
from S&*divisao
N$
/!!!!!!!!!!!!!!/
create (roced&re +t&ali:arVendasCom(ras
as
delete from %ov+c&m&lado
insert into %ov+c&m&lado(CodProd&toKotalVendasKotalCom(ras)
select CodProd&toK
Preco!(select s&m(@&antidade)
from %ovimentacaoProd&to m
w'ere m;i(o%ov I ESE
and m;CodProd&to I (;CodProd&to)K
Preco!(select s&m(@&antidade)
from %ovimentacaoProd&to m
w'ere m;i(o%ov I EEE
and m;CodProd&to I (;CodProd&to)
from Prod&to (
N$
/!!!!!!!!!!!!!!/
C#E+E P#$CEDU#E /ncrementaProd&to
@codProd&to intK @@&ant+dicionada @&antidade
+S

&(date (rod&to
set q&antdis(onivel I q&antdis(onivel X
@q&ant+dicionada
241
Apostila Microsoft SQL Server 7.0
w'ere
cod(rod&to I @cod(rod&to
if @@Error fI 3
ret&rn @@Error
else
ret&rn 3
N$
/!!!!!!!!!!!!!!/
C#E+E P#$CEDU#E DecrementarProd&to
@CodProd&to intK @@&ant#etirada @&antidade
+S
if (select q&antdis(onivel
from (rod&to
w'ere cod(rod&to I @cod(rod&to) Y
@@&ant#etirada
*egin
#aisError(E@&antidade /ns&ficientefEK
1<K 1)
ret&rn 1
end
&(date (rod&to
set q&antdis(onivel I q&antdis(onivel .
@q&antretirada
w'ere cod(rod&to I @cod(rod&to

if @@Error fI 3
ret&rn @@Error
else
ret&rn 3
N$
=sar o *rocedimento %ocumentador . *or!ue ele utili@a cursor e U um
e:em*lo de como utili@ar ta5elas de sistemas.
create (roced&re Doc&mentador
@ta*ela varc'ar(93) I -ULL
as
if @ta*ela /S -ULL
declare S$,\ c&rsor for //declarando c&rsor com nome S$,\
select idKname from sDso*]ects
w'ere tD(e I EUE
order *D name
else
declare S$,\ c&rsor for
select idKname from sDso*]ects
w'ere name I @ta*ela
declare @id intK @nomea*ela varc'ar(93)
declare @msg varc'ar(133)
// De(ois de criado ten'o q&e a*rir o c&rsor K a(Js a a*ert&ra ele fica
(osicionado no inUcio;
242
Apostila Microsoft SQL Server 7.0
o(en S$,\
fetc' neBt from S$,\ into @idK @nomea*ela // *&sca o (rJBimo registro e
g&arda esses valores nas variMveis idK nometa*elaK (ara (ercorrer a ta*ela
tem q&e colocar n&m laSo;
w'ile @@fetc')stat&s fI .1
*egin
select @msg I E!!!!! a*ela> E X @nomea*ela
(rint @msg
select sc;colid -&mK sc;name Col&naK
convert(varc'ar(53)K
case
w'en st;name in (Wc'arWK Wvarc'arWK W*inarDW)
t'en st;name X W(W X convert(varc'arKsc;lengt')XW)W
w'en st;name in (Wn&mericWK WdecimalW)
t'en st;name X W(W X convert(varc'arKsc;(rec) X WKW X
convert(varc'arKsc;scale) X W)W
else st;name
end) i(oK
case w'en sc;stat&s g 3B34 I 3 t'en W-$ -ULL W else W-ULL W end X
case w'en sc;stat&s g 3B43 fI 3 t'en W/DE-/AW else n&ll end
$(SdesK
sc;lengt' Eam;*DtesEK sc;cdefa&ltK sc;domain
from sDscol&mns sc LE" \$/- sDstD(es st
$- sc;&sertD(e I st;&sertD(e
w'ere sc;id I @id
fetc' neBt from S$,\ into @idK @nomea*ela
end
close S$,\
deallocate S$,\ // destroi o c&rsor do *anco de dados
N$
6odelo de e:em*lo
Aqui voc tem a descrio de uma soluo de banco de dados para uma empresa
fictcia. Com base na realidade da empresa, deduzem-se os requisitos de sistema. Faz-
se ento o modelo de dados para o sistema.
3e!uisitos do Sistema
Contatos
Uma empresa precisa manter os dados dos seus "contatos", ou seja, das vrias
pessoas e empresas que se relacionam com ela, sejam eles clientes, fornecedores,
distribuidores etc.
243
Apostila Microsoft SQL Server 7.0
Para cada empresa cadastrada, preciso manter seu nome e razo social. Cada
empresa tem uma ou mais subdivises. Uma subdiviso representa uma filial ou
departamento da empresa, que pode ter uma localizao fsica separada. Uma
empresa no pode ser cadastrada sem nenhuma subdiviso.
Cada subdiviso pode ter um endereo, que dividido em rua/nmero, bairro, cidade,
estado e CEP. Alm disso, uma subdiviso tem um telefone, opcionalmente um fax e
opcionalmente um CGC.
Para cada pessoa, preciso manter seu nome e sexo, alm dos dados de endereo
como na subdiviso. Uma pessoa pode ter, opcionalmente, um telefone, um fax e o seu
nmero de CPF.
Uma subdiviso pode ter pessoas que trabalham nela, sendo necessrio saber o cargo
da pessoa. Uma mesma pessoa pode estar empregada em diferentes subdivises, at
mesmo de diferentes empresas.
As pessoas e empresas so classificadas em categorias, para maior organizao.
Cada pessoa ou empresa pode pertencer a mais de uma categoria ou a nenhuma
categoria.
Ao cadastrar qualquer empresa, subdiviso ou pessoa, preciso guardar a sua data de
cadastramento e um texto opcional contendo informaes adicionais.
Freqentemente, os usurios precisam emitir um relatrio das empresas e pessoas de
uma determinada categoria, em ordem alfabtica.
A empresa envia mensalmente um informativo para todos os seus clientes (sejam
pessoas fsicas ou empresas). O informativo emitido via fax, apenas para aquelas
pessoas ou empresas que esto na categoria "Clientes" e possuem nmero de fax. A
lista de clientes deve ser ordenada por estado, depois por cidade e depois por bairro.
Um srio problema do sistema anterior que durante a consulta para essa mala direta
(em horrio de trabalho), todo o processamento ficava mais lento.
1rodutos
A empresa mantm um controle dos produtos que ela comercializa. Para cada produto
so mantidos um nome informal, uma descrio mais detalhada, a localizao no
estoque, a quantidade disponvel em estoque e a quantidade mnima em estoque.
Cada entrada ou sada de produto deve ser registrada. Para uma entrada, necessrio
saber qual o contato (empresa ou subdiviso) que forneceu o produto. gualmente, para
uma sada, preciso saber qual o contato para o qual o produto foi vendido. Tanto para
entradas como sadas, preciso registrar a quantidade do produto e a data em que foi
feita essa movimentao.
O sistema anterior da empresa, que usava arquivos DBF, tinha um cadastro de
produtos. importante que esse cadastro de produtos seja reaproveitado. Os
programadores conseguiram export-lo para um arquivo texto, separado por
tabulaes. No entanto, alguns campos so diferentes do novo sistema.
A gerncia precisa dos seguintes relatrios:
244
Apostila Microsoft SQL Server 7.0
Quais as endas de cada *roduto em determinado *er?odoR
Quais as endas e com*ras de cada *roduto num determinado *er?odoR 1or
e:em*loP
Produto Total vendas Total compras
Primeiro Produto 120.050,30 30.456,00
Segundo Produto 3.457,10 2.000,87
... ... ...
Qual a ltima venda de cada produto?
245
Apostila Microsoft SQL Server 7.0
6odelos de dados
246
Apostila Microsoft SQL Server 7.0
247
Apostila Microsoft SQL Server 7.0
248
Apostila Microsoft SQL Server 7.0
249
Apostila Microsoft SQL Server 7.0
250
Apostila Microsoft SQL Server 7.0
251
Apostila Microsoft SQL Server 7.0
Aqui voc ver os modelos de dados para soluo do problema de dados da empresa
fictcia, usada como exemplo no decorrer do curso. Partimos do pressuposto que voc
familiarizado com modelos relacionais, entidades, atributos e coisas do tipo.
O modelo foi dividido em duas partes, pois a segunda (relacionamentos entre produto e
contato) no se relaciona com a primeira.
252
Apostila Microsoft SQL Server 7.0
253
Apostila Microsoft SQL Server 7.0
=1/3(%> do SQL Serer ".: *ara a erso &.)
Antes de fazer o Upgrade do SQL Server 6.x para a verso 7.0, deve-se seguir estes
passos:
Executar os seguintes comandos DBCC em todos os bancos de dados
existentes: CHECKDB, NEWALLOC, CHECKCATALOG.
Confirmar que o parmetro de configurao do SQL Server, bancos de dados
abertos, maior ou igual ao nmero de bancos de dados no servidor (inclusive
master, tempdb, model...)
Fazer cpias de segurana de todos os bancos de dados, inclusive o master. Se
possvel, usar a ferramenta de backup do Windows NT, pra fazer backup de
todas as pastas do SQL Server.
Fazer backup do registro do NT.
Desligar bancos de dados que sejam somente leitura (read-only). Qualquer
banco de dados que tenha a proprieade read-only em TRUE, pass-la para
FALSE. Com o comando CHKUPG, voc descobre quais os bancos de dados
em modo de somente leitura.
Fechar qualquer aplicao de SQLServer, e assegurar-se que ningum est
usando o SQLServer
Fazer o upgrade!
%ota& Para atualizar de verses do SQl Server anteriores 6.x, primeiro deve-se fazer
o upgrade para 6.x, para s ento atualizar para a verso 7.0.
Existem diversos cenrios possveis para o upgrade. O primeiro cenrio quando se
est fazendo a atualizao de uma instalao existente de SQL Server 6.x para 7.0 na
mesma mquina. A, o SQL Server 7.0 vai ser instalado na mquina em conjunto com o
6.x. As duas verses no podem rodar simultanamente, mas podemos facilmente
alternar entre os dois. A, usa-se o "SQL Server 7.0 Version Upgrade Wizard" para
exportar os bancos de dados da versao 6.x para o disco, fita ou drives de rede e ento
importa-se tais bancos de dados para o SQL Server 7.0.
O outro cenrio quando voc dispe de dois computadores. Como no se est
instalando o SQL Server 7.0 na mesma mquina que est instalado o SQL Server 6.x,
tudo se torna mais fcil. Pode-se migrar todos os seus bancos de dados de uma vez ou
alguns de cada vez. Voc e seus usurios vo poder acessar o servidor 7.0 e o 6.x
depois do processo de atualizao porque os mesmos esto rm computadores
diferentes (logo, podem rodar simultaneamente, se desejado).
Informa-es gerais so5re o (ssistente de (tuali@ao de ,erso 8,ersion
=*grade Ii@ard9
Se voc tem dois computadores, como dito acima, voc pode acessar os bancos de
dados da verso 6.5 e da 7.0 depois que o processo de instalao tiver terminado.
Quando se fizer a atualizao em uma nica mquina, o estado do seu SQL Server
254
Apostila Microsoft SQL Server 7.0
6.5, depois que o Assistente de Atualizao de Verso tiver terminado, depende do
mtodo escolhido para transferir os bancos de dados. Se voc tiver espao em disco
suficiente no seu servidor para instalar o SQL Server 7.0 sem remover os dispositivos
de dados (devices) do SQL Server 6.x, voc pode usar o mtodo Direct Pipeline para
transferir os dados. A abordagem Direct Pipeline a melhor escolha a ser feita quando
se faz uma atualizao. Com esse mtodo, ocorre a transferncia em memria dos
dados e objetos do SQL Server 6.x para o SQL Server 7.0, deixando o SQL Server 6.x
intacto. Com esse mtodo, tambm se verifica a melhor performance no processo de
ataulizao. Mas, se voc no tiver espao em disco para fazer a atualizao sem
remover seus bancos de dados do SQL Server 6.x primeiro, voc ter que exportar os
dados e objetos do SQL Server 6.x para uma fita ou drive de rede. A opo do drive de
fita a melhor, mas se no se dispuser de tal recurso, use a opo da unidade de rede.
(lternando entre o SQL Serer ".# e o SQL Serer &.)
O SQL Server 6.5 e o SQL Server 7.0 no podem rodar simultanteamente na mesma
mquina. Quando voc instala o SQL Server 7.0 em uma mquina que j tem o SQL
Server 6.5, criado um item no menu niciar, Programas, Microsoft SQL Server -
Switch. Se voc estiver com o SQL Server 7.0 ativo, h um cone Microsoft SQL Server
6.5; caso voc esteja com o SQL Server 6.5 ativo, o cone Microsoft SQL Server 7.0.
Ao clicar nesse cone, aparece uma caixa de dilogo avisando que o SQL Server est
restaurando as informaes do SQL Server 6.5 (ou 7.0). Ento voc alterna entre um e
outro SQL Server com facilidade. Esse switch cuida de parar e iniciar os servios
necessrios para que cada uma das verses do SQL Server possa rodar.
(sssistente de (tuali@ao de ,erso
Mesmo que no se tenha o SQL Server 6.5 instalado, se durante a instalao for
selecionada a opo Upgrade Tools, vai ser instalado o Assistente de atualizao de
verso.
O Upgrade Wizard, quando se usa o mtodo direct Pipeline, oferece alguma proteo
contra falhas (ou seja, se deu problema, d pra desfazer). Mas mesmo assim,
recomendvel seguir os passos descritos no incio do captulo, e para enfatizar, no
deixe de:
Realizar backups dos bancos de dados;
Fazer backups dos arquivos do SQL Server, dispositivos (devices) e diretrios;
Fazer backup do o registro do NT;
Ter espao suficiente no disco pra atualizao.
Ajustar o TempDB para 25MB ou mais.
Depois que voc tiver certeza que fez tudo isso, podemos comear!
255
Apostila Microsoft SQL Server 7.0
Iniciando o (sistente de (tuali@ao de ,erso
Do Menu niciar, selecione Microsoft SQL Server Switch e ento selecione SQL Server
Upgrade Wizard, como na figura abaixo:
:
Aparece a caixa de dilogo SQL Server Upgrade Wizard, como mostrado abaixo:
256
Apostila Microsoft SQL Server 7.0
Essa apenas uma tela de boas vindas. Clique em Next para continuar.
Selecione a o*o de transferGncia dos o5Betos.
Aparece a caixa de dilogo de Transferncia de dados e objetos.
Nesta caixa de dilogo, voc pode determinar o que voc quer exportar do SQL Server
6.5 e o que voc quer importar para o SQL Server 7.0. Os valores padro so para
exportar e importar dados e objetos, usar Pipes Nomeados (Named Pipes) para a
transfernca de dados (esse o Direct Pipeline). Pode-se mudar quaisquer das
selees padro. Se a opo Named Pipe estiver selecionada (a opo Tape s
257
Apostila Microsoft SQL Server 7.0
selecionvel quando se tem uma unidade de fita no computador), no se pode
desmarcar as caixas "Export from 6.x Server" nem a "mport into 7.0 Server", pois o
mtodo de Pipeline direto (Named Pipe) faz a exportao e importao simultnea.
A opo de Verificao, permite que se valide os dados depois da transferncia
(Validate successful object data transfer). Quando esta opo selecionada, pode-se
pedir que seja feita uma verificao de CRC (quase byte a byte) nos dados (marcando
a opo Exhaustive data integrity verification). Quando ela selecionada, aparece uma
caixa de dilogo avisando que esta opo pode dobrar o tempo necessrio para a
atualizao.
Abaixo esto os passos executados pelo Assistente de Atualizao de Verso quando
se escolhe um dos dois mtodos (unidade de fita ou Pipe Nomeado).
"ni!a!e !e fita
1. Exporta os objetos 6.x
2. Fecha o SQL Server 6.x
3. Exprta os dados 6.x
4. Faz backup e copia os dispositivos (devices) 6.x
5. nicia o SQL Server 7.0
6. mporta os objetos do SQL Server 6.x para o SQL Server 7.0
7. mporta os dados do SQL Server 6.x para o SQL Server 7.0
Direct /ipeline
1. Exporta os objetos 6.x
2. Fechao SQL Server 6.x
3. niica o SQL Server 7.0
4. mporta os objetos 6.x
5. Exporta e importa os dados do SQL Server 6.x para o SQL Server 7.0
Nota: Quando se seleciona a o mtodo de transferncia com a unidade de fita, voc
tem a a opo de copiar os dispositivos do SQL Server 6.x para uma uniadde de rede.
Logon dos seridores
Aparece a caixa de dilogo de logon dos servidores (Servers Logon).
258
Apostila Microsoft SQL Server 7.0
Selecione em Server Name, o servidor 6.x de quem voc quer exportar os dados. Entre
com nome e senha do administrador (conta "sa"), e quaisquer opes de linha de
comando adicionais necessrias para iniciar o servidor. O mesmo deve ser feito para o
servidor 7.0 que voc quer importar os dados para ele. Digite nome e senha do
administrador, e parmetros adicionais para iniciar o servidor.
Quando se clica em Next, aparece uma caixa de dilogo dizendo que ser parado o
SQL Server 7.0 e iniciado o SQL Server 6.5 e que ningum pode estar acessando os
servidores (o SQL Server 6.5 e o 7.0), e se voc tem certeza que quer continuar. Caso
voc tenha certeza que no h ningum acessando algum dos servidores, clique em
Yes. Aparece ento uma janela indicando que o SQL Server 7.0 est sendo finalizado e
o SQL Server 7.0 iniciado.
Seleo de *Hgina de cAdigo
259
Apostila Microsoft SQL Server 7.0
A caixa de dilogo de seleo da pgina de cdigo te permite escolher a pgina de
cdigo usada pra gerar os arquivos de script usados na atualizao. Recomenda-se a
opo padro. Clique em Next para continuar.
Selecione os 5ancos de dados a atuali@ar
Aparece a caixa de dilogo de seleo dos bancos de dados.
Selecione quais bancos de dados voc quer atualizar colocando-os do lado "nclude
these databases". Os que voc no quer atualizar, deixe-os do lado "Exclude these
260
Apostila Microsoft SQL Server 7.0
databases". Caso voc decida-se por no atualizar todos os bancos de dados, aparece
uma mensagem dizendo que recomendvel que se atualize todos os bancos de
dados de uma vez, e se voc quer de fato fazer assim. Caso queira, clique em Yes.
Aps selecionados os bancos de dados que se quer atualizar, clique em Next.
Criao dos 5ancos de dados
Aparece a caixa de dilogo de criao dos bancos de dados.
Para ter seus bancos de dados criados com as opes padro, os arquivos de dados
localizados no diretrio de dados do SQL Server 7, e um mapeamento um-para-um dos
dispositivos (devices) do SQL Server 6.5 para arquivos do SQL Server 7.0, use a
configurao padro. Para mudar arquivos ou locais, clique no boto Edit. Para usar
bancos de dados j criados no 7.0, selecione a opo "Use databases already created
in SQL Server 7.0". Para executar um script personalizado para criao dos bancos de
dados, escolha a opo "Use the following SQL Script", e entre com o caminho e o
nome do script a ser executado. Depois que voc tiver feito suas escolhas, clique no
boto Next.
>stimando o es*ao em disco necessHrio
Pra estimar o espao necessrio para uma atualizao por pipeline direto ou um
atualizao sem os bancos de dados do SQL Server, na janela mostrada na figura
anterior, seleciona-se a opo Edit, depois Advanced. Aparece a janela "Proposed
DataBase Layout".
261
Apostila Microsoft SQL Server 7.0
cli!ue em (danced e...
262
Apostila Microsoft SQL Server 7.0
Nessa janela pode-se ver o espao necessrio para os bancos de dados 7.0 e o
espao livre no disco rgido. Para ver o espao livre se for feita a remoo dos bancos
de dados 6.5, selecionar "Options" e "Free Space ncludes 6.x files". Nessa janela voc
pode definir outros arquivos para colocar os bancos de dados e, estando satisfeito com
o definido clique em Accept. A volta-se para a tela de criao dos bancos de dados
(Database creation). Clique em Next para continuar.
SDstem configuration 4*tions
Aparece a janela "System Configuration Options".
Os valores pado so para transferir as configuraes existentes de servidor e tambm
as configuraes do SQL Executivo, bem como desativar ANS Nulls e ativar o modo
misto de Quoted dentifiers. Selecionar as opes desejadas e clique em "Next".
Conferindo as sele-es de atuali@ao
Finalmente, aparece a janela para revisar o que foi selecionado.
263
Apostila Microsoft SQL Server 7.0
Aqui, voc pode conferir todas suas selees de opes de atualizao e deve-se
ajustar o que se quiser mudar at estar satisfeito com as selees. Finalmente, clicar
em "Finish" para comear a atualizao.
(tuali@ao *ara o SQL Serer &.) em curso
A comea a atualizao, aparecendo a janela "Version Upgrade Status".
Essa janela nos d informaes sobre o andamento do processo de atualizao, como
situao da tarefa, a tarefa sendo executada, e hora de incio e trmino de cada uma
264
Apostila Microsoft SQL Server 7.0
das tarefas envolvidas na atualizaao. Nessa janela, podemos pausar qualquer tarefa,
(selecionando Pause Task), pausar entre tarefas (selecionando Pause Between Steps),
abortar o processo de atualizao (Close), abortar uma tarefa especfica (Cancel Task),
ou concluir uma tarefa pausada. Quando a atualizao se completar com sucesso,
aparece um aviso "Upgrade Complete".
265

Você também pode gostar