Banco de Dados. Material de Apoio. Fernando Martins de Oliveira

SQL Server: Guia Essencial

Informações do documento

Idioma Portuguese
Formato | PDF
Tamanho 899.71 KB

Resumo

I.Arquitetura e Processo de Comunicação Cliente Servidor do SQL Server

Este documento detalha a arquitetura do SQL Server, focando no processo de comunicação cliente/servidor. O cliente é responsável pela lógica comercial e apresentação de dados, enquanto o SQL Server gerencia os bancos de dados e aloca recursos (memória, banda, disco). A comunicação se dá através de protocolos como TCP/IP e Named Pipes, utilizando o ODS (Operational Data Store) para o processamento de solicitações e retorno de resultados. O Mecanismo Relacional analisa e executa instruções Transact-SQL, otimizando planos de execução e garantindo segurança. O processo envolve a encapsulação da consulta em pacotes TDS (Tabular Data Stream) pela API do banco de dados.

1. Responsabilidades do Cliente e do SQL Server

O documento inicia definindo a divisão de responsabilidades entre o cliente e o servidor SQL Server. O cliente detém a responsabilidade pela lógica de negócio e a apresentação dos dados ao usuário, podendo ser executado em um ou mais computadores, ou até mesmo no servidor junto com o SQL Server. Já o SQL Server gerencia os bancos de dados e a alocação de recursos do servidor, como memória, largura de banda de rede e operações de disco, distribuindo-os entre as várias solicitações recebidas. Essa arquitetura cliente-servidor é fundamental para a eficiência e escalabilidade do sistema de gerenciamento de banco de dados. A separação de responsabilidades otimiza o desempenho e a manutenção do sistema, permitindo que as aplicações clientes se concentrem na interface e na lógica específica do negócio, enquanto o servidor SQL Server gerencia a integridade e a performance dos dados.

2. Componentes do Servidor SQL Server

A seção detalha os componentes essenciais do servidor SQL Server que viabilizam a comunicação cliente-servidor eficiente e segura. As Net-Libraries do servidor permitem que o SQL Server monitore simultaneamente diversas conexões. Para uma comunicação bem-sucedida, a Net-Library do cliente deve corresponder a uma das Net-Libraries do servidor. O SQL Server suporta uma variedade de protocolos de rede, incluindo TCP/IP, Named Pipes, NWLink, IPX/SPX, VIA ServerBet II SAN, VUA GigaNet SAN, Banyan VINES e AppleTalk, oferecendo flexibilidade e compatibilidade com diferentes ambientes de rede. O ODS (Operational Data Store) é um componente crucial, responsável por tratar as conexões de rede, direcionando as solicitações dos clientes ao SQL Server para processamento e retornando os resultados. Sua função é vital para a comunicação fluida e eficiente entre os clientes e o servidor. Finalmente, o Mecanismo Relacional é responsável pela análise e otimização das instruções Transact-SQL, pela execução de planos de execução, processamento de DDL (Data Definition Language) e outras instruções, além de garantir a segurança do banco de dados, assegurando a integridade e a confiabilidade das operações.

3. Processo de Comunicação Cliente Servidor e a API do Banco de Dados

O processo de comunicação cliente-servidor é ilustrado por meio de uma consulta de exemplo, utilizando uma API de banco de dados. O aplicativo cliente submete uma consulta utilizando a API, que por sua vez emprega um fornecedor, driver ou DLL para encapsular essa consulta em um ou mais pacotes TDS (Tabular Data Stream). Esses pacotes são então encaminhados para a Net-Library do cliente, iniciando o processo de comunicação com o servidor. A API do banco de dados atua como uma interface entre o aplicativo cliente e o servidor SQL Server, abstraindo a complexidade dos protocolos de rede e do processamento de dados. O uso de pacotes TDS padroniza a comunicação e facilita a interoperabilidade entre diferentes sistemas e plataformas. A eficiência desse processo é fundamental para a performance das aplicações que interagem com o banco de dados.

4. Mecanismo de Armazenamento e Arquivos do Banco de Dados

A seção descreve o mecanismo de armazenamento do SQL Server, responsável pela gestão de arquivos de banco de dados e do uso de espaço. Ele cria e lê dados de páginas físicas, gerencia buffers, controla a simultaneidade de acesso, executa operações de registro e recuperação, e implementa funções de utilitários, como o DBCC (Database Consistency Checker), backup e restauração. O sistema gerencia arquivos de dados principais (.mdf), arquivos de dados secundários (.ndf) e arquivos de log de transações (.ldf). Esses arquivos possuem nomes lógicos e de sistema operacional que podem ser usados em instruções Transact-SQL. A localização padrão desses arquivos é 'c:\Program Files\Microsoft SQL Server\MSSQL\Data'. A compreensão do mecanismo de armazenamento e a organização desses arquivos são essenciais para garantir a performance e a integridade do banco de dados, assegurando a disponibilidade de dados e a recuperação em caso de falhas.

II.Gerenciamento de Arquivos de Bancos de Dados

O documento descreve como o SQL Server armazena dados em arquivos: o arquivo principal de dados (.mdf), arquivos secundários (.ndf) e o arquivo de log de transações (.ldf). A gestão do tamanho e localização desses arquivos é crucial para o desempenho. Parâmetros como MAXSIZE e FILEGROWTH controlam o crescimento dos arquivos, enquanto opções como NOTRUNCATE e TRUNCATEONLY afetam a liberação de espaço. É fundamental entender a estrutura de arquivos para calcular o espaço em disco necessário, especialmente considerando a importância do log de transações para a recuperação de dados em caso de falhas. O local padrão dos arquivos é 'c:\Program Files\Microsoft SQL Server\MSSQL\Data'.

1. Tipos de Arquivos de Banco de Dados

O gerenciamento de arquivos de bancos de dados no SQL Server envolve a compreensão de seus diferentes tipos e estruturas. O documento destaca três tipos principais: o arquivo de dados principal (.mdf), arquivos de dados secundários (.ndf) e o arquivo de log de transações (.ldf). Cada banco de dados possui obrigatoriamente um arquivo .mdf, que armazena a maior parte dos dados. Arquivos .ndf adicionais podem ser utilizados para aumentar a capacidade de armazenamento, distribuindo os dados em diferentes arquivos e, possivelmente, em diferentes locais de armazenamento físico. O arquivo .ldf é essencial para a recuperação do banco de dados em caso de falha e registra todas as transações realizadas. A localização padrão para todos esses arquivos, no SQL Server, é 'c:\Program Files\Microsoft SQL Server\MSSQL\Data', podendo ser alterada durante a configuração do banco de dados. A compreensão da função e da interação desses arquivos é fundamental para a administração eficaz do banco de dados, assegurando sua integridade e performance. A escolha adequada da localização e o tamanho desses arquivos impactam diretamente o desempenho e a disponibilidade do sistema.

2. Controlando o Crescimento de Arquivos MAXSIZE e FILEGROWTH

Para garantir o bom funcionamento do banco de dados, é necessário um controle eficiente do crescimento dos seus arquivos. O parâmetro MAXSIZE permite especificar o tamanho máximo que um arquivo pode atingir. Se não definido, o arquivo cresce até ocupar todo o espaço disponível no disco, o que pode impactar outros processos. Já o parâmetro FILEGROWTH define a taxa de crescimento do arquivo, em porcentagem ou em um tamanho fixo. Um valor de 0 impede o crescimento automático. O valor padrão é 10%, ou seja, o arquivo aumenta em 10% de seu tamanho atual a cada vez que atinge sua capacidade máxima. Em bancos de dados com múltiplos arquivos, a expansão só ocorre após o último arquivo estar totalmente cheio. A correta configuração desses parâmetros garante que o espaço em disco seja utilizado de forma eficiente, evitando problemas de falta de espaço e garantindo a performance do sistema. É importante balancear a necessidade de espaço com o gerenciamento de recursos do servidor.

3. Gerenciando Espaço em Disco NOTRUNCATE e TRUNCATEONLY

A gestão do espaço em disco ocupado pelos arquivos do banco de dados é crucial para otimização de recursos e performance. Duas opções, NOTRUNCATE e TRUNCATEONLY, influenciam como o espaço liberado é tratado. A opção NOTRUNCATE, quando especificada, preserva o espaço liberado dentro dos arquivos do banco de dados, evitando que ele seja imediatamente disponibilizado para o sistema operacional. Por outro lado, a opção TRUNCATEONLY libera o espaço não utilizado nos arquivos de dados para o sistema operacional, reduzindo fisicamente o tamanho do arquivo. Nenhuma tentativa é feita para relocar colunas em páginas não-alocadas, garantindo a rapidez da operação, mas sem a possibilidade de recuperar o espaço excedente imediatamente. A escolha entre essas opções depende das necessidades específicas e do balanço entre a performance da operação e a gestão eficiente do espaço em disco. A decisão deve considerar fatores como a frequência de deleções de dados e a necessidade de disponibilidade imediata de espaço no disco.

4. Exclusão de Bancos de Dados e Recuperação de Dados

A exclusão de um banco de dados, realizada através do menu gráfico ou do comando DROP DATABASE, resulta na exclusão irreversível dos arquivos associados. A recuperação de dados após a exclusão só é possível se um backup tiver sido realizado previamente. A realização de backups regulares é fortemente recomendada para garantir a segurança e a disponibilidade dos dados. A exclusão de um banco de dados é uma operação que requer atenção, pois a perda de dados pode ser significativa. Após a exclusão, o espaço ocupado pelos arquivos é liberado de acordo com a opção especificada (NOTRUNCATE ou TRUNCATEONLY), como explicado anteriormente. Portanto, a prática de backups regulares é uma medida de segurança fundamental para evitar a perda irreparável de informações críticas.

III.Grupos de Arquivos e Distribuição de Dados no SQL Server

Para otimizar o desempenho, o SQL Server permite a utilização de grupos de arquivos, permitindo distribuir os arquivos de dados em diferentes unidades de disco. Isso melhora a taxa de transferência através do acesso paralelo a dados. Os grupos podem ser definidos pelo usuário (FILEGROUP) ou padrão. Arquivos de log de transações não pertencem a grupos de arquivos. O uso de grupos de arquivos, apesar de aumentar a complexidade administrativa, pode resultar em ganhos de desempenho significativos, embora tecnologias como RAID possam oferecer benefícios semelhantes com menor complexidade. A distribuição eficiente de arquivos de dados em múltiplas unidades físicas maximiza o uso de recursos.

1. Conceito de Grupos de Arquivos

O documento introduz o conceito de grupos de arquivos como uma técnica avançada para o gerenciamento de bancos de dados no SQL Server. Arquivos de bancos de dados são agrupados para fins de alocação e administração, permitindo um controle mais refinado sobre o armazenamento de dados e índices em unidades e discos específicos. Isso pode levar a melhorias de performance, otimizando o acesso a informações. Existem dois tipos de grupos de arquivos: definidos pelo usuário (user-defined), criados utilizando a palavra-chave FILEGROUP nos comandos CREATE DATABASE ou ALTER DATABASE; e o grupo padrão, que armazena todas as tabelas e índices sem um grupo de arquivo explicitamente especificado. É importante ressaltar que arquivos de log de transações nunca fazem parte de um grupo de arquivos, sendo gerenciados separadamente. O uso estratégico de grupos de arquivos permite uma organização mais eficiente do armazenamento, otimizando o desempenho do banco de dados. No entanto, a complexidade de sua configuração requer profundo conhecimento da estrutura do banco de dados.

2. Vantagens e Alternativas aos Grupos de Arquivos

Embora os grupos de arquivos ofereçam vantagens em termos de desempenho e administração, o documento destaca que o uso de sistemas RAID (Redundant Array of Inexpensive Disks) pode fornecer ganhos de desempenho similares com menor complexidade administrativa. A escolha entre utilizar grupos de arquivos ou sistemas RAID depende de uma avaliação cuidadosa das necessidades específicas do banco de dados, levando em consideração a complexidade administrativa e os recursos disponíveis. A compreensão profunda da estrutura do banco de dados, incluindo transações, consultas e dados, é essencial para determinar a melhor estratégia de armazenamento. Para bancos de dados complexos, a utilização de grupos de arquivos pode ser benéfica, mas para aplicações menores e menos exigentes, a utilização de RAID pode ser uma alternativa mais simples e eficaz.

3. Gerenciamento de Arquivos Escalabilidade e Compartilhamento

O documento enfatiza a estrutura de arquivos do SQL Server como base para a construção e gerenciamento dos bancos de dados, permitindo maior facilidade de escalabilidade. Cada arquivo é exclusivo para um único banco de dados, sem possibilidade de compartilhamento entre diferentes bancos de dados. Esta característica garante a integridade e a segurança dos dados, evitando conflitos e problemas de consistência. Quando um banco de dados é excluído, seja por meio do comando DROP DATABASE ou via interface gráfica, os arquivos associados são automaticamente excluídos. Essa abordagem simplifica o processo de gerenciamento e evita a existência de arquivos órfãos ou inconsistentes no sistema. A gestão eficiente da estrutura de arquivos é fundamental para garantir a performance, segurança e escalabilidade do ambiente de banco de dados.

4. Distribuição de Arquivos de Dados para Melhora de Performance

A distribuição dos arquivos de dados em diferentes unidades físicas é apresentada como uma estratégia para maximizar o uso de recursos de hardware e melhorar a performance. Ao distribuir os dados em múltiplos arquivos e, consequentemente, em múltiplos discos, é possível alcançar acesso paralelo a dados, aumentando significativamente a taxa de transferência. A recomendação é criar arquivos para cada disco físico e agrupá-los em um ou mais grupos de arquivos, explorando a capacidade de processamento paralelo do hardware. Essa técnica é particularmente vantajosa em sistemas com múltiplos discos, onde o acesso simultâneo aos dados pode ser um grande gargalo de desempenho. O documento destaca a importância de considerar os recursos de hardware disponíveis ao projetar a distribuição dos arquivos de dados. Frequentemente, os discos são o maior gargalo de performance e otimizar seu uso é fundamental para a eficiência do banco de dados.

IV.Criação e Alteração de Tabelas no SQL Server

A criação de tabelas é explicada, detalhando os tipos de dados disponíveis (ex: int, varchar, datetime, money, char, nvarchar). A definição de restrições, como PRIMARY KEY, UNIQUE, e FOREIGN KEY, é crucial para a integridade dos dados. A utilização de comandos DDL (Data Definition Language) e DML (Data Manipulation Language) é fundamental para a manipulação de tabelas e dados. A utilização do modo gráfico do SQL Server para criar e alterar tabelas também é apresentada. O conceito de NULL e NOT NULL para colunas é explicitamente abordado. Comandos ALTER TABLE permitem modificações posteriores, incluindo adição de colunas e alteração de tipos de dados.

1. Criando Tabelas Modo Gráfico e Comandos SQL

A criação de tabelas no SQL Server pode ser feita de duas maneiras: utilizando a interface gráfica ou comandos SQL DDL (Data Definition Language). O modo gráfico oferece uma interface visual para definir os campos, tipos de dados e restrições, sendo mais intuitivo para usuários com menor experiência em SQL. Por outro lado, comandos SQL DDL fornecem maior controle e flexibilidade, permitindo a criação de tabelas complexas com precisão. Antes de criar as tabelas, é crucial planejar cuidadosamente o design do banco de dados, definindo as informações a serem armazenadas e as relações entre elas. Após a criação, comandos DML (Data Manipulation Language) são usados para inserir, atualizar, excluir e consultar os dados nas tabelas. A escolha entre o modo gráfico e comandos SQL depende das habilidades e necessidades do usuário, buscando sempre o equilíbrio entre usabilidade e controle.

2. Tipos de Dados Sistema e Usuário

Cada coluna de uma tabela possui um tipo de dados que determina o tipo de informação (caracteres, números, datas/horas) que pode ser armazenada e suas características. O SQL Server oferece tipos de dados do sistema (system datatypes) predefinidos, como int, varchar, datetime, money, char, nvarchar, entre outros, cada um com suas especificações de tamanho e faixa de valores. Além dos tipos de sistema, é possível criar tipos de dados do usuário (user datatypes) baseados nos tipos predefinidos, permitindo maior customização. A escolha do tipo de dados é fundamental para otimizar o uso de espaço em disco e garantir a integridade dos dados armazenados. O documento exemplifica o uso de char para campos com tamanho fixo (como CPF e UF) e varchar para campos com tamanho variável (como Nome e Cidade), buscando otimizar o armazenamento. A opção de definir um valor padrão (Default value or Binding) para uma coluna também é abordada, ilustrando o uso da função getdate() para registrar a data e hora.

3. Alterando Tabelas com o Modo Gráfico

O documento demonstra como modificar tabelas existentes utilizando o modo gráfico do SQL Server. Através da interface, é possível adicionar novas colunas, modificar tipos de dados existentes e ajustar outras propriedades das colunas. Ao adicionar uma nova coluna, a opção 'Allow Nulls' geralmente é marcada por padrão, permitindo que o campo não seja preenchido. A alteração de tipos de dados pode exigir validação dos dados existentes na tabela, usando as opções WITH CHECK ou WITH NOCHECK. WITH CHECK valida imediatamente os dados contra as novas restrições, enquanto WITH NOCHECK adia a verificação para um momento posterior. O uso do modo gráfico simplifica o processo de alteração de tabelas, tornando-o acessível mesmo para usuários com menor experiência em comandos SQL. No entanto, para alterações mais complexas, comandos SQL podem ser necessários para maior precisão e controle.

V.Gerenciamento de Restrições em Tabelas do SQL Server

O documento descreve como gerenciar restrições em tabelas do SQL Server. As restrições garantem a integridade dos dados, sendo definidas durante a criação ou alteração da tabela (CREATE TABLE, ALTER TABLE). São abordadas as restrições UNIQUE, PRIMARY KEY e FOREIGN KEY, bem como a possibilidade de adicionar, remover (DROP CONSTRAINT) ou desabilitar/reabilitar temporariamente restrições com NOCHECK e CHECK. A importância de nomear as restrições para facilitar sua manipulação posterior é destacada.

1. Conceito de Restrições e Integridade de Dados

O documento define restrições como propriedades de colunas que reforçam a integridade dos dados em tabelas do SQL Server. Essas restrições são geralmente definidas durante a criação da tabela com o comando CREATE TABLE, mas podem ser adicionadas ou removidas posteriormente usando o comando ALTER TABLE. Se uma operação de inserção ou atualização (INSERT ou UPDATE) violar uma restrição, o comando é cancelado, garantindo a consistência dos dados. As restrições são essenciais para manter a qualidade e a confiabilidade dos dados no banco de dados, prevenindo a entrada de informações inconsistentes ou inválidas. A definição correta das restrições é fundamental durante o processo de design do banco de dados, assegurando sua integridade e confiabilidade a longo prazo. O documento destaca a importância de um bom projeto de banco de dados para garantir a eficácia dessas restrições.

2. Restrições UNIQUE e Chaves Alternadas

Uma restrição UNIQUE garante que os valores em uma coluna ou grupo de colunas sejam únicos na tabela. Esse tipo de restrição é usado para criar chaves alternadas, ou seja, valores que podem se repetir na tabela, mas devem ser únicos além da chave primária. Uma tabela pode ter várias restrições UNIQUE, e as colunas em uma restrição UNIQUE podem permitir valores nulos. A restrição UNIQUE é importante para garantir a singularidade de determinados atributos, evitando duplicação de informações e garantindo a consistência dos dados. A correta definição de restrições UNIQUE contribui para um design de banco de dados mais eficiente e robusto. Um exemplo é dado com a coluna 'CodFornecedor', que precisa ser NOT NULL para poder ser parte de uma chave primária, ilustrando a interação entre tipos de restrições.

3. Chave Estrangeira e Integridade Referencial

A integridade referencial é um conceito crucial para garantir a consistência entre diferentes tabelas de um banco de dados. Uma chave estrangeira (FOREIGN KEY) estabelece uma relação entre duas tabelas, assegurando que os valores em uma coluna (ou grupo de colunas) de uma tabela correspondam a valores existentes em outra tabela. Isso garante que não existam referências inválidas ou inconsistências entre as tabelas. No exemplo dado, a tabela 'ProdutoFornecedor' utiliza chaves estrangeiras CodProduto e CodFornecedor para referenciar as tabelas 'Produto' e 'Fornecedor', respectivamente. A integridade referencial é fundamental para a organização e a consistência de dados em bancos de dados relacionais complexos, evitando erros e inconsistências em operações que envolvam múltiplas tabelas.

4. Gerenciando Restrições com Comandos SQL Adicionar Remover e Desabilitar

O documento descreve como gerenciar restrições usando comandos SQL. O comando CREATE TABLE permite definir restrições durante a criação da tabela, enquanto ALTER TABLE permite adicionar restrições posteriormente. Para remover uma restrição, o comando ALTER TABLE ... DROP CONSTRAINT nome_da_restrição é utilizado, necessitando do nome da restrição. Se o nome não foi especificado na criação, ele precisa ser identificado previamente. Restrições podem ser temporariamente desabilitadas com ALTER TABLE ... NOCHECK CONSTRAINT nome_da_restrição e reabilitadas com ALTER TABLE ... CHECK CONSTRAINT nome_da_restrição. Essa capacidade de desabilitar temporariamente restrições pode ser útil em situações específicas, como durante a carga inicial de dados ou em processos de manutenção do banco de dados. Entretanto, essa ação deve ser feita com cuidado, pois pode comprometer a integridade dos dados se não for gerenciada corretamente.