banco de dados sql server 2008

42
Banco de Dados Material de Apoio 2008 Fernando Martins de Oliveira

Upload: joca2008

Post on 24-Nov-2015

178 views

Category:

Documents


10 download

TRANSCRIPT

  • Banco de Dados

    Material de Apoio

    2008

    Fernando Martins de Oliveira

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 2

    VISO GERAL DO SQL SERVER

    O QUE O RDBMS SQL SERVER

    O SQL Server RDBMS (Sistema de Gerenciamento de Banco de Dados Relacional) da Microsoft utilizado para aplicaes OLTP On-line Transaction Processing e OLAP On-line Analytical Processing. Suas principais caractersticas so:

    Gerencia o armazenamento de dados para transaes e anlises. Responde as solicitaes dos aplicativos cliente. Usa Transact-SQL, XML, expresses multidimensionais e objetos de gerenciamento

    distribudo para enviar solicitaes entre o cliente e o SQL Server. O RDBMS SQL Server responsvel por:

    Manter o relacionamento entre os dados de um banco de dados. Garantir que os dados sejam armazenados corretamente e que as regras que definem os

    relacionamentos entre os dados no sejam violadas. Recuperar todos os dados do sistema at um ponto de consistncia conhecido em caso de

    falha do sistema.

    COMPONENTES CLIENTE/SERVIDOR O SQL Server usa a arquitetura cliente/servidor para separar a carga de trabalho em tarefas que so executadas em computadores servidor e as que so executadas em computadores cliente:

    O cliente responsvel pela lgica comercial e pela apresentao dos dados ao usurio. Ele geralmente executado em um ou mais computadores, mas tambm pode ser executado no computador servidor junto com o SQL Server.

    O SQL Server gerencia os bancos de dados e aloca os recursos disponveis do servidor

    como memria, largura da banda da rede e operaes de disco entre vrias solicitaes.

    Componentes Cliente Aplicativo cliente: Um aplicativo cliente executa as instrues Transact-SQL e recebe conjuntos de resultados. Para desenvolver um aplicativo, voc utiliza uma API de banco de dados. O aplicativo no tem conhecimento dos protocolos de rede subjacentes usados para a comunicao com o SQL Server. API de banco de dados: A API de banco de dados (OLE DB, ODBC) usa um fornecedor, um driver ou uma DDL para passar as instrues Transact-SQL e receber conjuntos de resultados. Net-Library do cliente: Uma Net-Library do cliente gerencia as conexes de rede e o roteamento de um cliente.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 3

    Componentes de Servidor Net-Libraries do servidor: O SQL Server pode monitorar simultaneamente vrias Net-Libraries. A Net-Library do cliente deve corresponder a uma das vrias net-libraries do servidor para que a comunicao seja bem-sucedida. O SQL Server oferece suporte a protocolos de rede, como TCP/IP, Named Pipes, NWLink, IPX/SPX, VIA ServerBet II SAN, VUA GigaNet SAN, Banyan VINES e AppleTalk. ODS: Este o componente do SQL Server que trata das conexes de rede, passando as solicitaes dos clientes ao SQL Server para o processamento e retornando os resultados e respostas aos clientes. O ODS escuta automaticamente todas as net-libraries instaladas no servidor. Mecanismo relacional: Analisa as instrues Transact-SQL, otimiza e executa planos de execuo, processa a linguagem de definio de dados (DDL) e outras instrues e refora a segurana. Mecanismo de armazenamento: Gerencia arquivos de banco de dados e o uso de espao nos arquivos, cria e l dados das pginas fsicas, gerencia buffers de dados e as operaes de entrada e sada (I/O) fsicas, controla simultaneidade, executa operaes de registro e recuperao e implementa funes de utilitrios, como o verificador de consistncia de banco de dados (DBCC Database Consistency Checker), o backup e a restaurao. PROCESSO DE COMUNICAO CLIENTE/SERVIDOR A seqncia a seguir usa uma consulta para ilustrar o processo tpico de comunicao cliente-servidor usando uma API de banco de dados.

    1. Um aplicativo cliente submete uma consulta. O cliente chama a API de banco de dados e passa a consulta. A API de banco de dados usa um fornecedor, um driver ou uma DLL para encapsular a consulta em um ou mais pacotes de fluxos de dados tabulares (TDS Tabular Data Stream) e passa-os Net-Library do cliente.

    2. A Net-Library do cliente empacota os pacotes TDS em pacotes de protocolo de rede e chama uma API de comunicao entre processos do Windows para enviar os pacotes de protocolo de rede do sistema operacional. A Net-Library do servidor apropriada extrai os pacotes TDS dos pacotes de protocolo de rede e passa-os ao ODS.

    3. O ODS extrai a consulta dos pacotes TDS e passa a consulta ao mecanismo relacional. Em seguida, o mecanismo relacional compila a consulta em um plano de execuo otimizado. Ele executa o plano. O mecanismo relacional comunica-se com o mecanismo de armazenamento usando a interface OLE DB.

    4. O mecanismo de armazenamento transfere dados de um banco de dados para os buffers de dados e, em seguida, passa os conjuntos de registros que contm dados para o mecanismo relacional. O mecanismo relacional combina os conjuntos de registros no conjunto de resultados finais e passa o conjunto de resultados ao ODS.

    5. O ODS empacota o conjunto de resultados, retornando-o ao aplicativo cliente atravs do uso de uma Net-Library do servidor, da pilha de protocolo de rede, da Net-Library do cliente e da API de banco de dados. O conjunto de resultados tambm pode ser retornado no formato XML.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 4

    SERVIOS DO SQL SERVER Servio MSSQLServer Gerenciamento de dados

    Processamento de transaes e pesquisas Integridade dos dados

    Servio SQLServerAgent Trabalhos Alertas Operadores

    MS DTC Gerenciamento de transaes distribudas Microsoft Search Catlogo de texto

    ndices de texto TIPOS DE BANCO DE DADOS Cada SQL Server possui 2 tipos de banco de dados:

    Banco de dados de sistema: armazena informaes sobre o SQL Server como um todo. Banco de dados de usurio: so criados pelos usurios.

    Os bancos de dados instalados pelo SQL Server so: Banco de dados Descrio Master Controla os bancos de dados de usurio e a operao do SQL Server

    como um todo, mantendo controle de informaes, como contas de usurio, variveis configurveis de ambiente e mensagens de erro do sistema.

    Model Fornece um modelo ou prottipo para novos bancos de dados de usurio.

    Tempdb Fornece uma rea de armazenamento para tabelas temporrias e outras necessidades de armazenamento de trabalho temporrio.

    Msdb Fornece uma rea de armazenamento para as informaes de agendamento e o histrico de servios.

    Distribution Armazena dados de histrico e de transaes usadas na duplicao. Pubs Fornece um banco de dados de exemplo como uma ferramenta de

    aprendizagem. Northwind Fornece um banco de dados de exemplo como uma ferramenta de

    aprendizagem. FAZENDO REFERNCIA AOS OBJETOS DO SQL SERVER

    Nomes totalmente qualificados: o nome completo de um objeto inclui 4 identificadores o nome do servidor, o nome do banco de dados, o nome do proprietrio e o nome do objeto, conforme abaixo:

    Servidor.banco_de_dados.proprietrio.objeto

    Nomes especificados parcialmente: Ao fazer referncia a um objeto, nem sempre preciso especificar o servidor, o banco de dados e o proprietrio. Os identificadores intermedirios podem ser omitidos desde que as suas posies sejam indicadas por pontos.

    A lista a seguir contm formatos vlidos para os nomes de objetos:

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 5

    o Servidor.banco_de_dados.proprietrio.objeto o Bando_de_dados.proprietrio.objeto o Banco_de_dados..objeto o Proprietrio.objeto o Objeto

    Quando voc cria um objeto e no especifica as diferentes partes do nome, o SQL Server usa os seguintes padres:

    o O servidor padro a ocorrncia atual no servidor local. o O banco de dados padro o banco de dados atual. o O proprietrio padro o nome do usurio contido no banco de dados especificado

    associado identificao de login da conexo atual.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 6

    GERENCIANDO ARQUIVOS DE BANCOS DE DADOS ESTRUTURA DO SQL SERVER Durante a criao de um banco de dados, importante entender como o SQL Server armazena os dados para que voc possa calcular e especificar a quantidade de espao em disco que deve alocar para os arquivos de dados e logs de transaes. Considere os aspectos e orientaes a seguir sobre o armazenamento de dados:

    Todos os bancos de dados tm um arquivo de dados principal (.mdf) e um ou mais arquivos de log de transaes (.ldf). Um banco de dados tambm pode ter arquivos de dados secundrios (.ndf). Esses arquivos fsicos possuem nomes de arquivos lgicos e de sistema operacional que podem ser usados em instrues Transact-SQL. O local padro de todos os arquivos de dados e logs de transaes c:\Program Files\Microsoft SQL Server\MSSQL\Data.

    Quando voc cria um banco de dados, uma cpia do banco de dados model, que contm as

    tabelas do sistema, copiado para o banco de dados.

    Os dados so armazenados em blocos de 8 kylobytes (kb) de espao em disco contguo, chamado de pginas. Isso significa que um banco de dados pode armazenar 128 pginas por megabyte (MB).

    O nmero de registros no pode ultrapassar o tamanho da pgina. Portanto, a quantidade

    mxima de dados em um nico registro, subtraindo-se o espao obrigatrio para sobrecarga re registro, de 8060 bytes.

    Banco de dados

    Arquivo de dados Arquivo de log

    Extenso

    (8 pginas contguas de 8 kb)

    Tabelas e ndices

    Dados Pginas de 8 kb

    Tamanho mximo do registro = 8600 bytes

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 7

    As tabelas e ndices so armazenadas em extenses. Uma extenso equivale a oito pginas

    contguas, ou 64 KB. Portanto, um banco de dados tem 16 extenses por megabyte. Pequenas tabelas podem compartilhar extenses com outros objetos do banco de dados.

    Os arquivos de log de transaes mantm todas as informaes necessrias para a

    recuperao do banco de dados caso haja uma falha no sistema. DEFININDO UMA TRANSAO Transao um conjunto de uma ou mais instrues Transact-SQL que so tratadas como uma nica unidade de trabalho e recuperao. necessrio executar essa unidade inteiramente, caso contrrio as instrues no devem ser validadas. Os aplicativos controlam estas transaes quando voc especifica o incio e o fim delas. O SQL Server executa transaes implcitas e explcitas. Transao implcita O SQL Server executa uma transao implcita quando quaisquer umas das instrues Transact-SQL abaixo forem executadas.

    ALTER TABLE INSERT CREAT OPEN DELETE REVOKE DROP SELECT FETCH TRUNCATE TABLE GRANT UPDATE

    Por padro, o SQL Server opera no modo de confirmao automtica. Isso significa que uma transao implcita confirmada aps a execuo sem uma instruo COMMIT TRANSACTION no fim da transao. O SQL Server tambm pode trabalhar no modo de transao implcita. Isso significa que quando umas das instrues Transact-SQL acima inicia uma transao, esta precisa ter uma instruo COMMIT TRANSACTION em seu final. Transao explcita O SQL Server executa uma transao explcita, quando o incio e o fim da transao so explicitamente definidos em um Transact-SQL atravs das instrues BEGIN TRANSACTION e COMMIT TRANSACTION.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 8

    COMO FUNCIONA O LOG DE TRANSAES O log de transao grava as modificaes dos dados conforme so feitas. O processo de log funciona da seguinte forma:

    1. Uma alterao nos dados envida pelo aplicativo. 2. Quando uma modificao executada as pginas de dados afetadas so carregadas do disco

    para a memria (cache buffer), desde que as pginas j no estejam em cache de buffer devido a uma consulta anterior.

    3. Cada instruo para modificao de dados gravada primeiramente no log em disco antes que seja feita no banco de dados. Esse tipo de log chamado de gravao antecipada.

    4. O processo de ponto de verificao grava toas as transaes concludas no banco de dados do disco.

    Se o sistema falhar, o processo de recuperao usa o log de transao para completar todas as transaes confirmadas e reverter quaisquer transaes incompletas. Marcadores de transao no log so usados durante a recuperao para identificar as transaes associadas marcadas com BEGIN TRANSACTION e COMMIT TRANSACTION.

    1 - Uma alterao nos dados enviada pelo aplicativo

    2 Pginas de dados esto localizadas, ou so lidas, no cache de buffer e so alteradas

    3 A alterao gravada no log de transaes no disco

    4 O processo de checkpoint grava todas as transaes concludas no banco de dados

    Cache do buffer

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 9

    CRIANDO BANCO DE DADOS O DATABASE Voc cria um banco de dados [database] definindo o seu nome, nome do arquivo, tamanho inicial, tamanho mximo e taxa de crescimento. Inicialmente 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.

    Depois de criar ou alterar um 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 sysdatabases, do banco de dados master, armazena as informaes sobre todos os bancos de dados.

    O LOG DE TRANSAES [TRANSACTION LOG]

    Quando voc cria um banco de dados, criado tambm um log de transaes [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. Periodicamente, o SQL Server faz um checkpoint, 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.

    Recomenda-se alocar para o log de 10 a 25% do tamanho do banco de dados.

    CRIANDO BANCOS DE DADOS COM O MODO GRFICO

    Vamos criar um banco de dados com o Modo grfico. No Modo grfico, conecte-se ao servidor desejado. Clique em "Databases" com o boto direito e selecione New Database...

    Em "Database 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

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 10

    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. Deixe a opo Default em owner.

    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 3 Mb por default, substitua esse valor por 10 Mb. O tamanho alocado para o log, por default 1 Mb, como voc pode ver clicando na guia Transaction Logs. Mude o tamanho para 2Mb.

    A opo "Autogrow" 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].

    Clique no boto ... da opo Autogrow. Do arquivo Exemplo. Por padro, como se percebe, o banco de dados tem como propriedades crescer automaticamente, em incrementos de 1 MB, e sem limite de crescimento.

    Clique em Ok e repita verifique a configurao para o arquivo de log. Conforme abaixo, ele est configurado para crescer 10% e sem limite mximo.

    Clique em OK para que o banco de dados Exemplo seja criado.

    Nota: O arquivo de banco de dados gravado com a extenso .mdf ou .ndf, 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 .ldf.

    Nota: Ao ser criado, um banco de dados uma cpia do banco de dados model. Quaisquer opes ou configuraes do banco de dados model so copiadas no novo banco de dados.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 11

    CRIANDO BANCOS 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.

    Sintaxe

    CREATE DATABASE nome_bancodedados [ON { [PRIMARY] (NAME = nome_lgico_arquivo, FILENAME = 'caminho_e_nome_arquivo' [, SIZE = tamanho] [, MAXSIZE = tamanho_mximo] [, FILEGROWTH = taxa_crescimento] }[,...n] ] [LOG ON { (NAME = nome_lgico_arquivo, FILENAME = 'caminho_e_nome_arquivo' [, SIZE = tamanho]) }[,..n] ]

    Onde:

    nome_bancodedados o nome do banco de dados que se deseja criar.

    nome_logico_arquivo um nome usado para referenciar o arquivo em quaisquer comandos SQL executados depois que o banco de dados tiver sido criado.

    PRIMARY: Esta opo especifica o grupo de arquivos primrio. O grupo de arquivos primrio deve conter todas as tabelas de sistema para o banco de dados. Um banco de dados s pode ter um grupo de arquivo PRIMARY. Se no for especificado algum, o primeiro listado ser o primrio. (Veremos grupos de arquivos em breve).

    FILENAME: Aqui se deve 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.

    SIZE: Especifica o tamanho em megabytes que voc quer alocar para o seu banco de dados. O valor mnimo 1MB 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 Modo grfico, o padro 1MB de tamanho tanto para arquivos de banco de dados quanto para arquivos de log).

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 12

    MAXSIZE: 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.

    FILEGROWTH: Especifica a taxa de crescimento do arquivo. Este ajuste no pode exceder a configurao de MAXSIZE. 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 dados que esteja em mais de um arquivo, 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.

    Como exemplo, vamos criar um banco de dados clicando em New Query.

    use MASTER

    CREATE DATABASE Exemplo

    ON

    PRIMARY (NAME=Exemplo_data,

    FILENAME = 'C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Exemplo.mdf',

    SIZE = 10MB,

    MAXSIZE = 15MB,

    FILEGROWTH = 25%)

    LOG ON

    (NAME = Exemplo_log,

    FILENAME = 'C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Exemplo.ldf',

    SIZE = 4MB,

    MAXSIZE = 6MB,

    FILEGROWTH = 2MB) A seguir vemos o resultado da execuo deste comando:

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 13

    ALTERANDO UM BANCO DE DADOS

    Aps criar um banco de dados, voc pode aument-lo ou reduzi-lo. Clique no banco de dados com o boto direito no nome do banco de dados e selecione a opo Properties. Clicando em Files voc ver os tamanhos atuais dos dados e do log e poder alter-lo. Na opo General voc poder ver em Space Avilable o espao disponvel para o banco de dados.

    Alterando um banco 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:

    Sintaxe

    ALTER DATABASE nome_bancodedados MODIFY FILE (NAME = nome_logico_arquivo, SIZE = novo_tamanho )

    Onde:

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 14

    nome_bancodedados o nome do banco de dados que se deseja alterar.

    nome_logico_arquivo o nome lgico dado ao arquivo na sua criao.

    novo_tamanho 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:

    use MASTER

    ALTER DATABASE Exemplo

    MODIFY FILE

    (NAME = Exemplo_data,

    SIZE = 12MB

    )

    Para expandir o log de transaes do banco de dados Exemplo para 5MB, faa:

    use MASTER

    ALTER DATABASE Exemplo

    MODIFY FILE

    (NAME = Exemplo_log,

    SIZE = 5MB

    ) Com o comando SQL ALTER DATABASE, tambm possvel acrescentar arquivos ao banco de dados. Para isso, usa-se a opo ADD FILE. Vamos adicionar um arquivo secundrio ao banco de dados Exemplo, com 4MB iniciais, e tamanho mximo de 7MB.

    use MASTER

    ALTER DATABASE Exemplo

    ADD FILE (NAME='Exemplo_dados2',

    FILENAME='C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Exemplo2.ndf',

    SIZE=4MB,

    MAXSIZE=7MB)

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 15

    Para reduzir o tamanho de um banco de dados, usa-se o comando DBCC SHRINKDATABASE. Este comando reduz o tamanho de todos os arquivos de dados no banco de dados mas no diminui o tamanho dos arquivos de log.

    Sintaxe

    DBCC SHRINKDATABASE (Nome_BancodeDados ,porcentagem_final [, {NOTRUNCATE | TRUNCATEONLY}] )

    Onde:

    nomebancodedados o nome do banco de dados que se deseja alterar o tamanho.

    porcentagem_final a porcentagem de espao livre a ser deixada no banco de dados depois que o mesmo for reduzido.

    NOTRUNCATE 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.

    TRUNCATEONLY 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. porcentagem_final 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 especificado quando o arquivo foi originalmente criado.

    Nota: O banco de dados no pode ficar menor que o tamanho do banco de dados model.

    Pode-se tambm reduzir todo o banco de dados usando o comando DBCC SHRINKFILE. Este comando reduz o tamanho de um arquivo de dados especfico em um banco de dados.

    Sintaxe

    DBCC SHRINKFILE ({nome_arquivo|id_arquivo}, [novo_tamanho][, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}]) Todas as opes j foram explicadas para o comando DBCC SHRINKDATABASE, 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 EMPTYFILE 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 EMPTYFILE. Esta opo permite que o arquivo seja excludo com o comando ALTER DATABASE, com a opo REMOVE FILE.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 16

    Nota: Quando se usa qualquer das opes EMPTYFILE, NOTRUNCATE ou TRUNCATEONLY, no se especifica o novo tamanho.

    Como exemplo, vamos reduzir o arquivo secundrio do banco de dados Exemplo (Exemplo2.ndf), que chamamos de Exemplo_Dados2 para 2MB. Para isso, entre com o seguinte comando no Query Analyzer:

    use Exemplo

    DBCC SHRINKFILE (Exemplo_Dados2,2) 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.

    EXCLUINDO UM BANCO DE DADOS

    Para excluir um banco de dados 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.

    Excluindo um banco de dados com comandos SQL

    Para excluir um banco de dados, usa-se:

    Sintaxe

    DROP DATABASE nome_bancodedados[, nome_bancodedados...]

    Onde:

    nome_bancodedados 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:

    DROP DATABASE Exemplo, Exemplo1 Se executar este comando crie o banco de dados Exemplo novamente, pois iremos us-los nos exemplos posteriores.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 17

    ARQUIVOS E GRUPOS DE ARQUIVOS

    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 familiarizado 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 armazenar tabelas e ndices em grupos de arquivos especficos. Em muitos casos, o uso das capacidades de sistemas RAID (Redundant Array of Inexpensive Disks) fornece quase o mesmo ganho em desempenho que voc poder obter com o uso de grupos de arquivos sem o encargo administrativo extra de definir e gerenciar grupos de arquivos.

    ARQUIVOS

    Como dito anteriormente, o SQL Server cria bancos de dados e logs baseado em uma estrutura de arquivos. Isso 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 Modo grfico, o arquivo associado tambm excludo.

    O SQL Server tem trs tipos de arquivos:

    Primrio. 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 .mdf.

    Secundrio. 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 .ndf.

    Log. Um arquivo de log uma rea de armazenamento para todas as mudanas nos bancos de dados. Todo banco de dados deve ter pelo menos um arquivo de log. A extenso recomendada .ldf.

    Nota: 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.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 18

    GRUPOS DE ARQUIVOS

    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

    Primrio. 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.

    Definido pelo usurio [User-defined]. Grupos de arquivos definidos pelo usurio so criados usando a palavra-chave FILEGROUP quando se utiliza os comandos CREATE DATABASE ou ALTER DATABASE.

    Padro. 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.

    Nota: 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_Exemplo no banco de dados Exemplo, e ento adicionar um arquivo secundrio chamado Teste ao banco de dados Exemplo, com o nome fsico de TesteGrupo1_Exemplo.ndf, com 3MB de tamanho, mas este arquivo ser adicionado ao grupo Grupo1_Exemplo. Entre com o seguinte cdigo SQL:

    ALTER DATABASE Exemplo

    ADD FILEGROUP Grupo1_Exemplo

    GO

    ALTER DATABASE Exemplo

    ADD FILE

    (NAME=Teste,

    FILENAME='C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\TesteGrupo1_Exemplo.ndf',

    SIZE=3MB)

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 19

    TO FILEGROUP Grupo1_Exemplo

    GO

    Note que o parmetro TO FILEGROUP 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 MASTER

    GO

    -- dois traos indicam um comentrio

    -- CRIAR O BANCO DE DADOS

    CREATE DATABASE ExemploNovo

    ON

    PRIMARY (NAME=ExemploNovo_data,

    FILENAME = 'C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ExemploNovo.mdf',

    SIZE=10MB,

    MAXSIZE=15MB,

    FILEGROWTH=10%),

    FILEGROUP ExemploNovo_FG1

    (NAME=ExemploNovo_FG1_DAT1,

    FILENAME='C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ExemploNovo_FG1_DAT1.ndf',

    SIZE=3MB,

    MAXSIZE=10MB,

    FILEGROWTH=10%),

    (NAME=ExemploNovo_FG1_DAT2,

    FILENAME='C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ExemploNovo_FG1_DAT2.ndf',

    SIZE=3MB,

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 20

    MAXSIZE=10MB,

    FILEGROWTH=10%)

    LOG ON

    (NAME=ExemploNovo_log,

    FILENAME='C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\ExemploNovo.ldf',

    SIZE=5MB,

    MAXSIZE=15MB,

    FILEGROWTH=10%)

    GO

    -- Use ALTER para mudar o grupo de arquivos padro

    ALTER DATABASE ExemploNovo

    MODIFY FILEGROUP ExemploNovo_FG1 DEFAULT

    GO

    VISUALIZANDO INFORMAES DE ARQUIVOS E GRUPOS DE ARQUIVOS

    Os seguintes procedimentos armazenados do sistema exibem informaes sobre grupos de arquivos

    sp_helpfile [file_name]: 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 serem anexados ou removidos do servidor.

    use ExemploNovo

    exec sp_helpfile ExemploNovo_FG1_DAT1

    sp_helpfilegroup [filegroup_name]: exibe os nomes e atributos de grupos de arquivos associados com o banco de dados atual.

    use ExemploNovo

    exec sp_helpfilegroup ExemploNovo_FG1

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 21

    EXIBINDO INFORMAES DO BANCO DE DADOS Para obter propriedades e informaes do banco de dados voc pode utilizar o SQL Server Enterprise Manager ou storage procedures no Query Analyzer. A tabela a seguir lista as principais procedures utilizadas: sp_helpdb Informa sobre todos os bancos de dados em um servidor. Fornece

    o nome, tamanho, proprietrio, identificao, data de criao e as opes do banco de dados.

    sp_helpdb nome_do_banco_de _dados

    Informa apenas sobre um banco de dados em um servidor. Fornece o nome, tamanho, proprietrio, identificao, data de criao e as opes do banco de dados. Tambm lista os arquivos de dados e log.

    sp_spaceused [nome_do_objeto]

    Resume o espao de armazenamento que um banco de dados, log de transaes ou objeto de banco de dados est usando.

    DBCC SQLPERF (LOGSPACE)

    Fornece estatsticas sobre o uso de espao do log de transaes em todos os bancos de dados.

    INCLUINDO ARQUIVOS DE BANCO DE DADOS E LOGS Voc pode melhorar o desempenho e implementar tolerncia a falhas gerenciando a incluso de arquivos de dados e logs de transaes em disco. O SQL Server usa as chamadas de I/O do Windows para executar leituras e gravaes em disco. Freqentemente os discos acarretam o maior afunilamento em um sistema. DISTRIBUINDO ARQUIVOS DE DADOS Voc pode distribuir a quantidade mxima possvel de dados correspondente a quantidade de unidades fsicas. Esse procedimento aumenta a taxa de transferncia atravs do acesso a dados paralelos, usando vrios arquivos. Em geral, crie arquivos para cada disco fsico e agrupe-os em um ou mais grupos de arquivos. O SQL Server pode executar:

    Verificaes paralelas nos dados se o computador tiver vrios processadores e discos. Vrias verificaes paralelas de uma nica tabelas se o respectivo grupo de arquivo conter

    vrios arquivos. Para distribuir os dados uniformemente em todos os discos, use o RAID e, em seguida, use grupos de arquivos definidos pelo usurio para distribuir os dados em vrios conjuntos de distribuio de hardware, se necessrio. CRIANDO LOGS DE TRANSAES EM DISCO SEPARADOS Voc deve criar o log de transaes em disco separado ou usar o RAID. Como o arquivo de log de transaes gravado serialmente, o uso de um disco dedicado separado permite que os cabealhos desse disco fiquem no local para a prxima operao de gravao. O uso de RAID fornece tolerncia a falhas.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 22

    Por exemplo, se o ambiente de produo tiver vrios bancos de dados, em um servidor, convm usar discos separados para cada log de transaes. INCLUINDO O BANCO DE DADOS TEMPDB Voc deve incluir o banco de dados tempdb em um sistema de I/O separado dos bancos de dados de usurio, para melhorar o desempenho. OTIMIZANDO UM BANCO DE DADOS USANDO O RAID DE HARDWARE Usando RAID de hardware

    Oferece um melhor desempenho baseado no sistema operacional. Permite a substituio de uma unidade defeituosa sem a necessidade de desligamento do

    sistema. Usando grupos de arquivos possvel melhorar i desempenho de grupos de arquivos atravs da distribuio dos dados em vrios discos. O SQL Server tem um grupo de arquivos primrios e tambm pode ter grupos de arquivos definidos pelo usurio.

    O grupo de arquivos primrio contm o arquivo de dados primrio com as tabelas do sistema. O grupo de arquivos definido pelo usurio constitudo de arquivos de dados agrupados para

    fins administrativos e de alocao. Voc pode exibir informaes sobre grupos de arquivos, usando o SQL Server Enterprise Manager ou as procedures abaixo: sp_helpfile Retorna os nomes fsicos e atributos dos arquivos associados ao

    banco de dados. sp_helpfilegroup Retorna os nomes e atributos dos grupos de arquivos associados ao

    banco de dados atual. ESTIMANDO O TAMANHO DE UM BANCO DE DADOS Considere os fatores a seguir quando for verificar a quantidade de espao que o seu banco de dados ocupar:

    O tamanho do banco de dados model e das tabelas do sistema, inclusive o crescimento projetado.

    A quantidade de dados nas tabelas, inclusive o crescimento projetado. O nmero e tamanho de ndices, especialmente o tamanho do valor chave, o nmero de

    registros e a configurao do fator de preenchimento. O tamanho do log de transaes, que influenciado pela quantidade e freqncia da

    atividade de modificaes, o tamanho de cada transao e pelo nmero de vezes que voc far backups ou descartar o log.

    O tamanho da tabela do sistema, o nmero de usurios, objetos etc, o que, normalmente, no uma grande porcentagem do banco de dados.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 23

    AVALIANDO A QUANTIDADE DE DADOS NAS TABELAS Voc poder avaliar o nmero de pginas necessrio para a tabela (e o espao em disco ocupado por ela) se souber o nmero de caracteres para cada registro e o nmero aproximado de registros que a tabela ter. Uso o seguinte mtodo:

    Calcule o nmero de bytes em um registro calculando o nmero total de bytes que cada coluna contm. Se uma ou mais colunas estiverem definidas como sendo de largura varivel como uma coluna para nomes voc pode adicionar a mdia da coluna ao total.

    Determine o nmero de registros contidos em cada pgina de dados. Para fazer isso, divida 8060 pelo nmero de bytes em um registro. Arredonde o resultado para o nmero inteiro inferior mais prximo.

    Divida o nmero aproximado de registros da tabela pelo nmero de registros contido em cada pgina de dados. O resultado igual ao nmero de pginas necessrias para armazenar a tabela.

    DEFININDO OPES DE BANCOS 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 ser modificadas com o procedimento armazenado de sistema sp_dboption, ou atravs do Modo grfico. O procedimento armazenado sp_dboption s afeta o banco de dados atual, mas para modificar opes a nvel de servidor, use o procedimento armazenado de sistema sp_configure.

    Depois de fazer alguma mudana, emitido automaticamente um checkpoint, de modo que as mudanas so imediatas.

    Opes disponveis

    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 Modo grfico; caso contrrio, uma opo s altervel atravs de procedimentos armazenados.

    *ANSI 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.

    ANSI Nulls

    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 os valores forem nulos. O padro para essa opo FALSE.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 24

    ANSI Warnings

    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.

    *autoclose

    Quando em TRUE, o banco de dados fechado automaticamente quando o ltimo usurio encerra a conexo. Isto 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 pode ter efeitos negativos em um ambiente de produo.

    autoshrink

    Quando em TRUE, o SQL Server periodicamente reduzir os arquivos do banco de dados se necessrio.

    *dbo use only

    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.

    published

    Utilizado para replicao, quando published estiver em TRUE, indica que a publicao est habilitada. Colocar essa opo em FALSE desabilita a publicao.

    *read only

    Se TRUE indica que o banco de dados somente para leitura. FALSE permite acesso para leitura/escrita.

    *recursive 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.

    *selec into / bulk copy

    Permite que o banco de dados aceite aes no registradas em log, tais como SELECT INTO e o utilitrio BCP fazem.

    *single user

    Permite que apenas um usurio acesse o banco de dados.

    subscribed

    Quando em TRUE, o banco de dados pode ser assinado para publicao.

    *torn page 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.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 25

    Truncate log on Checkpoint (*trunc. Log on chkpt.)

    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".

    DEFININDO OPES DO BANCO DE DADOS COM SP_DBOPTION Para mudar as opes de um banco de dados com o procedimento armazenado sp_dboption, faa o seguinte:

    Sintaxe:

    sp_dboption ['banco_de_dados'] [,'opo'] [,'valor'] Por exemplo:

    sp_dboption 'pubs', 'read only', 'true' Para ver o estado atual das opes do banco de dados pubs, entre com o seguinte comando:

    sp_dboption 'pubs'

    Todas as opes que estiverem ativadas so listadas.

    DEFININDO OPES DO BANCO DE DADOS PELO MODO GRFICO Quando se utiliza o Modo grfico 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 Modo grfico, 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 [Properties ]. 5. Selecione as opes a mudar. 6. Clique em OK quando tiver acabado.

    VERIFICANDO PROPRIEDADES DO BANCO 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.

    sp_dboption: como visto acima, mostra todas as opes disponveis para o banco de dados em que se estiver posicionado.

    sp_helpdb: informaes sobre todos bancos de dados em um servidor. Fornece nome do banco de dados, tamanho, proprietrio, ID, data de criao, e opes.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 26

    sp_helpdb nome_banco_de_dados: informaes sobre um banco de dados especfico apenas. Fornece nome do banco de dados, tamanho, proprietrio, ID, data de criao, e opes. Alm disso, lista os arquivos para dados e log de transaes.

    sp_spaceused [nome_objeto]: resumo do espao de armazenamento que um banco de dados, log de transaes, ou objeto de banco de dados utiliza.

    CONSIDERAES PARA MELHOR 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, armazene 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 imediatamente depois de criar 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 capaz 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.

    EXCLUSO DE BANCOS DE DADOS Voc no pode excluir bancos de dados que estejam:

    Atualmente abertos 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

    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

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 27

    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 Modo grfico s lhe permite excluir um banco de dados de cada vez. Depois que voc excluir um banco de dados, qualquer ID 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. CRIANDO TABELAS

    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 modo grfico 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 dados das linhas existentes, excluir linhas e consultar dados.

    TIPOS DE DADOS 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. Voc pode usar tipos de dados do sistema [system datatypes], predefinidos, ou criar novos tipos de dados, chamados tipos de dados do usurio [user datatypes], baseados nos tipos preexistentes.

    Os principais tipos de dados existentes so:

    Para dados Tipo Tamanho

    Caractere char(n), varchar(n), nvarchar(n), nchar(n)

    at n bytes

    Numrico exato decimal(p,e) ou numeric(p,e) -depende-

    Numrico aproximado float, real 8, 4 bytes

    Numrico inteiro int, smallint, tinyint 4, 2, 1 byte

    Monetrio money, smallmoney 8, 4 bytes

    Data e hora datetime, smalldatetime 8, 4 bytes

    Binrio binary(n), varbinary(n) n bytes

    Texto e imagens text, image, ntext -varivel-

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 28

    Outros bit, timestamp 1 bit, 8 bytes

    Para dados contendo caracteres, char(n) armazena um nmero fixo de caracteres. Por exemplo, uma coluna do tipo char(30) 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 UNICODE 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 preciso, 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.

    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 money 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 smallmoney 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 tinyint 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 text usado para colunas com dados "memo", ou seja, com texto de tamanho varivel; o tipo ntext armazena dados Unicode de tamanho varivel. O tipo image armazena imagens, tambm de tamanho varivel.

    Os tipos text e ntext, armazenam dados de tamanho varivel, mas podem armazenar 1.073.741.823 caracteres, para o caso do ntext, e 2.146.483.647 caracteres para o caso do tipo text. Enquanto isso, os tipos varchar e nvarchar armazenam "somente" 8000 caracteres (varchar) ou 4000 caracteres (nvarchar).

    O tipo bit 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.

    DEFININDO NOVOS TIPOS DE DADOS Voc pode criar seus prprios tipos de dados, para facilitar a padronizao, usando o procedimento de sistema sp_addtype ou o Modo grfico.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 29

    Usando o procedimento de sistema sp_addtype:

    Sintaxe

    sp_addtype nome_tipo, tipo_dado [, valor_null] Onde:

    nome_tipo o nome do tipo de dado que deseja criar.

    tipo_dado o tipo de informao que ira conter este tipo criado. Exemplo: char, int,..etc.

    valor_null identifica se este tipo pode ou no conter valores nulos.

    Exemplos:

    No Query Analyzer (New Query) na lista "DB", selecione o banco de dados "Exemplo". Digite e execute os seguintes comandos:

    sp_addtype cpf, 'char(11)' go sp_addtype nomepessoa, 'char(50)' go sp_addtype valorgrande, 'numeric(15,2)' go sp_addtype tipooperacao, 'SmallInt', NONULL go 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 sp_droptype:

    Sintaxe

    sp_droptype nome_tipo Onde:

    nome_tipo o nome do tipo de dados que deseja excluir.

    Exemplo:

    Para executar este exemplo continue posicionado no banco de dados Exemplo:

    sp_droptype nomepessoa Para alterar ou excluir tipos com o modo grfico, voc deve expandir o banco de dados desejado, abrir a opo Programmability, abrir a opo Types e abrir a opo User-defined Data Types.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 30

    Para criar um novo, com o boto direito clique em User-defined Data Types e com selecione New UserDefinedDataType.

    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 Modo grfico). Clique com o boto direito no tipo de dados que voc quer excluir, e ento selecione a opo Delete.

    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.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 31

    CRIANDO UMA TABELA COM O MODO GRFICO

    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 Modo grfico, abra o banco de dados Exemplo. Dentro dele, selecione o item Tables. Clique em "Tables" com o boto direito e em New Table.

    Entre com os campos da tabela, conforme mostrado abaixo:

    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 opo Default value or Binding 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 e informe o nome Cliente.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 32

    CRIANDO TABELAS 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:

    Use Exemplo

    CREATE TABLE Cliente1 ( CodCliente int NOT NULL, Nome varchar(50), CPF varchar(11) NULL, DataCadastro datetime NOT NULL DEFAULT (getdate()), Cidade varchar(20) NULL, UF char(2) NULL, Pais varchar(20) DEFAULT ('Brasil') ) 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 sp_ dboption. Se aparecer na primeira linha ''ANSI null default' indica que o valor default NULL, se no aparecer esta string a opo default NOT NULL.

    Sintaxe

    sp_dboption nome_bancodedados 'ansi null default', opo Onde:

    nome_bancodedados o nome do banco de dados em que se deseja verificar a opo default.

    opo se for true o valor default ser NULL, se for false o valor default ser NOT NULL.

    Observao: O padro ANSI 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.

    Execute os seguintes comandos para criar duas tabelas no banco de dados Exemplo:

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 33

    CREATE TABLE Departamento ( CodDepartamento int, Nome varchar(50), CodDeptSuperior int Null ) go CREATE TABLE Funcionario ( CodFuncionario int, Nome varchar(50), CodDepartamento int, Ramal int Null, Salario money, DataAdmissao datetime, DataCadastro datetime NOT NULL DEFAULT (getdate()), Sexo char(1) ) EXCLUINDO UMA TABELA Para excluir uma tabela (chamado de drop no SQL Server) com o Modo grfico, clique na tabela com o boto direito, clique em Delete e pressione o boto Ok.

    Atravs do SQL, pode-se usar o comando DROP TABLE.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 34

    Sintaxe:

    DROP TABLE [[banco_dados.]Owner.]nome_tabela [, [[banco_dados.]owner.]nome_tabela...]

    Onde:

    banco_dados 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.

    nome_tabela o nome da tabela que se deseja remover.

    Este procedimento pode ser usado para excluir vrias tabelas ao mesmo tempo.

    Exemplos:

    Drop Table Cliente1 ou

    Drop Table Exemplo.dbo.cliente1

    ALTERANDO A ESTRUTURA DAS TABELAS Depois que uma tabela for criada, pode-se mudar vrias das opes que foram definidas quando 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 PRIMARY KEY e FOREIGN KEY podem ser acrescentadas ou excludas. Restries UNIQUE e CHECK e definies DEFAULT podem ser acrescentadas ou excludas. Uma coluna identificadora pode ser acrescentada ou removida usando a propriedade IDENTIY

    ou ROWGUIDCOL. A propriedade ROWGUIDCOL tambm pode ser adicionada ou removida de uma coluna existente, embora apenas uma coluna em uma tabela possa ter a propriedade ROWGUIDCOL de cada vez.

    O nome ou o dono de uma tabela tambm podem ser modificados. Quando voc faz isso, tambm se deve mudar o nome da tabela em quaisquer gatilhos, procedimentos armazenados, scripts SQL, ou outro cdigo de programao que utilize o nome ou proprietrio antigo da tabela.

    Nota: 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).

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 35

    ALTERANDO A TABELA COM O MODO GRFICO Essas modificaes podem ser feitas no Modo grfico. Por exemplo, clique na tabela "Cliente" com o boto direito e clique em Design Table. No final da lista de colunas, acrescente uma nova coluna, com o nome "Idade", 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.

    ALTERANDO A TABELA 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:

    Sintaxe:

    ALTER TABLE [banco_dados.[owner.]]nome_tabela { [ALTER COLUMN nome_coluna {novo_tipo_de_dados [(preciso[, escala])] | ADD {nome_coluna dados_coluna | [WITH CHECK | WITH NOCHECK]} Onde:

    banco_dados 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.

    nome_tabela o nome da tabela que deseja alterar.

    nome_coluna a coluna que se quer alterar.

    novo_tipo_de_dados o tipo de dados que a coluna aceitar a partir de agora.

    WITH CHECK | WITH NOCHECK Especificam se os dados na tabela devem ou no ser validados contra uma nova ou reabilitada restrio FOREIGN KEY ou CHECK. Se no especificada, assume-se WITH CHECK para novas restries e WITH NOCHECK para restries reabilitadas.

    Exemplo:

    ALTER TABLE Cliente ADD ender varchar(50) NULL GO ALTER TABLE Cliente ALTER COLUMN CIDADE VARCHAR (25) Para renomear uma coluna, usa-se o procedimento sp_rename:

    sp_rename 'Cliente.ender', Endereco

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 36

    Nota: Perceba que ao executar o comando acima, voc recebe um aviso que diz: "Cuidado: a alterao de qualquer parte de um nome de objeto pode interromper scripts e procedimentos armazenados."

    CRIANDO UM "SCRIPT" DAS TABELAS 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 Modo grfico, clique no nome da tabela com o boto direito, e em "Script Table as", e depois em "Create to" New Query Editor Window.

    Tambm possvel criar um script com todas as tabelas do banco de dados, ou com todos os objetos clicando com o boto direito no database desejado e selecionando Tasks Generate Scripts.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 37

    NUMERAO AUTOMTICA

    A PROPRIEDADE IDENTITY Uma coluna criada com a propriedade IDENTITY 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 table Produto (CodProduto int NOT NULL IDENTITY, Nome varchar(60), Preo money) Uma coluna IDENTITY no aceita um valor explicitamente inserido. Ao inserir dados na tabela, a coluna deve ser omitida. Execute agora:

    insert into Produto (Nome, Preo) values ('Primeiro Produto', 100.0) insert into Produto (Nome, Preo) values ('Segundo Produto', 150.0) insert into Produto (Nome, Preo) values ('Terceiro Produto', 120.0) Execute agora:

    select * from Produto Note que a coluna CodProduto foi preenchida automaticamente com um valor auto-incrementado pelo sistema:

    CodProduto Nome Preo ----------- ------------------- -------------------------- 1 Primeiro Produto 100,00 2 Segundo Produto 150,00 3 Terceiro Produto 120,00 (3 row(s) affected) Opcionalmente, na criao da tabela, pode ser informado uma semente (valor inicial para a coluna) e um incremento, como em:

    CodProduto int IDENTITY(0,10) Onde o 0 a semente e o 10 o incremento.

    DESABILITANDO IDENTITY Voc pode temporariamente desativar a propriedade IDENTITY, para que voc possa inserir valores explicitamente numa coluna com IDENTITY. Pode ser necessrio que voc insira valores explicitamente em tabelas que tm itens deletados com frequncia.Inserir valores explicitamente na

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 38

    coluna com IDENTITY lhe permite preencher espaos vazios deixados na tabela. Para desativar a gerao automtica de valores, use:

    set identity_insert nome_da_tabela on Para voltar ao funcionamento normal, use:

    set identity_insert nome_da_tabela off A qualquer instante, somente uma tabela em uma sesso pode ter a propriedade de IDENTITY_INSERT 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 IDENTITY_INSERT 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.

    DEFININDO E USANDO RESTRIES [CONSTRAINTS] Uma restrio [constraint] uma propriedade de uma coluna usada para reforar a integridade de dados. Geralmente restries so definidas quando a tabela criada (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 (INSERT 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 :

    CONSTRAINT nome_da_restrio definio

    Onde a definio inicia com as palavras PRIMARY KEY, UNIQUE, CHECK, FOREIGN KEY ou DEFAULT. A palavra CONSTRAINT e o nome_da_restrio podem ser omitidos. Nesse caso, o nome ser gerado automaticamente.

    CHAVE PRIMRIA [PRIMARY KEY] A chave primria [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 (que pode ser constituda por uma ou mais colunas). 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.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 39

    Na criao da tabela, essa restrio pode ser definida da seguinte forma (quando a chave primria composta de uma s coluna):

    create table Fornecedor ( CodFornecedor int not null primary key, Nome varchar(50) null, Endereco varchar(50) null, Telefone varchar(20) null ) 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:

    CodFornecedor int not null constraint ChaveFornecedor primary key, 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 table ProdutoFornecedor (CodProduto int, CodFornecedor int, primary key (CodProduto, CodFornecedor)) 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 table Cliente add constraint nome_constraint primary key nonclustered (CodCliente) alter table Produto add constraint nome_constraint primary key clustered (CodProduto) A opo NONCLUSTERED diz respeito ao tipo de ndice que ser criado para a chave primria. Se no especificada, o ndice ser CLUSTERED. 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 CONSTRAINT nome logo antes das palavras "PRIMARY KEY".

    UNICIDADE [UNIQUE] Uma restrio UNIQUE 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 UNIQUE na tabela e as colunas de uma restrio UNIQUE permitem valores nulos.

    Esse tipo de restrio pode ser criada com exatamente a mesma sintaxe do PRIMARY KEY, por exemplo (no execute):

    alter table Cliente

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 40

    add constraint nome_constraint unique nonclustered (CodCliente)

    Tambm criado um ndice automaticamente, que no permite valores duplicados. Pode-se especificar ou no o nome da restrio, na forma CONSTRAINT nome logo antes do "UNIQUE".

    DEFAULT

    Um default pode ser especificado na forma de restrio. Na definio da tabela, como j vimos, possvel fazer isso:

    create table Cliente ( ... DataCadastro datetime default (getdate()), ... Pas varchar(20) default 'Brasil') 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 CONSTRAINT nome logo antes da palavra "DEFAULT", por exemplo:

    Pas varchar(20) constraint DefPais default 'Brasil' Se o default for acrescentado com o comando ALTER TABLE, preciso especificar para qual coluna ele vai ser ativado, por exemplo:

    alter table Cliente add constraint nome_constraint default 'Brasil' for Pas VERIFICAO [CHECK] 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 Funcionrio, se o sexo informado M ou F.

    alter table Funcionario add constraint nome_constraint check (sexo in ('M', 'F') ) Para testar, tente inserir uma linha sexo diferente de M e F.

    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 CONSTRAINT 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.

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 41

    CHAVE ESTRANGEIRA [FOREIGN KEY] 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 Produto.CodProduto e CodFornecedor faz referncia a Fornecedor.CodFornecedor:

    alter table ProdutoFornecedor add constraint nome_constraint foreign key (CodProduto) references Produto(CodProduto) go alter table ProdutoFornecedor add constraint nome_constraint foreign key (CodFornecedor) references Fornecedor(CodFornecedor) go 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 table ProdutoFornecedor add constraint nome_constraint foreign key (CodProduto) references Produto go alter table ProdutoFornecedor add constraint nome_constraint foreign key (CodFornecedor) references Fornecedor go 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 UNIQUE definida.

    Outra forma de criar essas restries em conjunto com a tabela, da forma:

    create table ProdutoFornecedor (CodProduto int foreign key references Produto, CodFornecedor int foreign key references Fornecedor, primary key (CodProduto, CodFornecedor))

    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 CONSTRAINT nome, logo antes das palavras "FOREIGN KEY".

  • Banco de Dados SQL Server

    Fernando Martins de Oliveira 42

    GERENCIANDO RESTRIES 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:

    sp_help 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 table nome_da_tabela drop 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). Isso no funciona com PRIMARY KEY, UNIQUE ou DEFAULT, apenas com as outras restries. Isso pode ser til para inserir dados que fujam aos valores impostos pelas restries. A sintaxe :

    alter table nome_da_tabela nocheck constraint nome_da_restrio alter table nome_da_tabela check constraint nome_da_restrio

    GERENCIANDO RESTRIES COM O MODO GRFICO Todas as operaes sobre restries que fizemos podem ser feitas atravs do Modo grfico. Clique com o boto direito numa tabela, clique em Design, selecione alguma coluna, clique na mesma com o boto direito e selecione a constraint desejada.

    Os defaults so tratados na lista de colunas, na janela de edio da tabela.