Bancos de Dados
SQL Server 2012
Databases
Criando banco de dados
Create database AlunoDBGOSelect * from sys.databases where name = ‘AlunoDB’GOsp_helpdb AlunoDBGO
Criando banco de dadosÉ necessário definir:• O nome do database• O tamanho do database• Os arquivos em que o banco de dados será armazenado (no mínimo um
de dados e um de log)
CREATE DATABASE EquipamentosON
PRIMARY ( NAME=EquipamentosData,FILENAME='c:\Program Files\..\..\Data\Equipamentos_Data.mdf',SIZE=10MB,MAXSIZE=15MB,FILEGROWTH=20%)
LOG ON( NAME=EquipamentosLog,FILENAME= 'c:\Program Files\..\..\Data\Equipamentos_Log.ldf',SIZE=3MB,MAXSIZE=5MB,FILEGROWTH=1MB)
COLLATE SQL_Latin1_General_Cp1_CI_AS
Criando banco de dados
• Cria uma duplicata do banco model• Armazena definição do novo database no
banco master• Veja databases existentes através da
view de sistema sys.databasesSELECT * FROM sys.databases
Criando banco de dados (sintaxe)CREATE DATABASE database_name[ON{ [PRIMARY] (NAME = logical_file_name,FILENAME = 'os_file_name'[, SIZE = size][, MAXSIZE = {max_sizeUNLIMITED}][, FILEGROWTH = growth_increment] )} [,...n]][LOG ON{ (NAME = logical_file_name,FILENAME = 'os_file_name'[, SIZE = size][, MAXSIZE = {max_sizeUNLIMITED}][, FILEGROWTH = growth_increment] )} [,...n]][COLLATE collation_name]
Criando banco de dados (sintaxe)PRIMARY: • Especifica os arquivos do filegroup primário, que
contém todas as tabelas de sistema e todos os objetos de banco não associados à outros filegroups.
• Todo banco de dados contém um arquivo de dados primário, que é o ponto de partida do database e que aponta para todos os outros arquivos do database.
• A extensão recomendada é .MDF• Se você não especificar a palavra-chave PRIMARY,
o primeiro arquivo listado no comando se tornará o arquivo primário.
Criando banco de dados (sintaxe)
FILENAME: • Esse parâmetro especifica o nome e rota do
arquivo no sistema operacional. • Deve ser um folder local ao servidor onde o SQL
está instalado.
SIZE:• Especifica o tamanho do arquivo de dados ou de
log em (MB) ou KB (default)• Mínimo de 512KB ou o tamanho mínimo do
arquivo de dados primário do banco model• Valor padrão (default) é de 1MB
Criando banco de dados (sintaxe)
MAXSIZE: • Especifica o tamanho máximo que o arquivo pode
alcançar em MB ou KB. • Se não especificado, o arquivo poderá crescer até
o disco ficar completamente cheio.
FILEGROWTH:• Especifica o incremento de crescimento.• O crescimento máximo não irá execeder Maxsize.• Pode ser especificado em MB (default), KB ou %.• Se não especificado, será se 10% ou 64KB no
mínimo.
Criando banco de dados (sintaxe)
COLLATION: • Especifica a colação (collation) padrão do banco • A collation de um banco compreende regras de
classificação, conjunto de caracteres suportados e sensibilidade a acentos.Ex:
- SQL_Latin1_General_Cp1_CI_AS (USA)- SQL_Latin1_General_Cp1_CI_AI (Brasil)
Criando Bancos de Dados
Exercício (linha de comando):• Criar um banco de dados de nome TesteDB, com um
arquivo primário de 10 MB, tamanho máximo de 20 MB e crescimento de 10% e um arquivo de log transacional de 5 MB, tamanho máximo de 10 MB e crescimento de 1MB.
• Arquivo primário: C:\SQLDATA\TesteDB_Data.mdf• Arquivo de log: C:\SQLDATA\TesteDB_Log.ldf
Log transacional funcionamento
Log transacional funcionamento 1. Uma solicitação de alteração de dados é enviada pela aplicação.2. Quando a alteração é executada, as páginas afetadas são carregadas do disco para o cache (buffer) se as mesmas já não estiverem em cache devido a uma consulta ou alteração anterior.3. Cada alteração nos dados é gravada no log de transação ao mesmo tempo em que ocorrem (em tempo real). As alterações são sempre gravadas no log em disco antes que as mesmas alterações sejam feitas no banco de dados. Esse técnica é chamada de “write-ahead log”. 4. De tempos em tempos, um processo denominado checkpoint escreve todas as transações completadas no disco. Se ocorre uma falha no sistema um processo de recuperação automatizado usa o log transacional para refazer (roll forward) as transações que completaram (committed) e desfazer (rollback) as transações incompletas.
Database Options configuração
• Configuráveis por:– SQL Server Management Studio– Linha de comando • Alter Database• Exec sp_dboption
Ex: Alter database TesteDB SET READ_ONLY
Database Options configuração
• Modelos de recuperação do banco de dados:
ALTER DATABASE <DBNAME> SET RECOVERY• FULL • BULK_LOGGED • SIMPLE
• FULL proporciona total recuperabilidade em caso de falhas;
• BULK_LOGGED gera menos log, mas é mais vulnerável.• SIMPLE recupera o banco somente até o último backup
full ou diferencial.
Database Options configuração
• Controle do estado do banco de dados:ALTER DATABASE <DBNAME> SET
• READ_ONLY • READ_WRITE
ALTER DATABASE <DBNAME> SET• SINGLE_USER (somente um usuário)• RESTRICTED_USER (somente sysadmin ou db_owner)• MULTI_USER (normal )
Database Options – Exercício 1
1. No banco master, mudar TesteDB para single_userUse masterAlter database TesteDB set single_user
2. Abrir nova query e selecionar TesteDB Use TesteDB
3. Abrir mais uma query e selecionar TesteDB Use TesteDB
4. No banco master, mudar TesteDB para multi_userUse masterAlter database TesteDB set multi_user with rollback immediate
Database Options – Exercício 21. Criar tabela de nome “Cliente” em TesteDB
Use TesteDB;Create table Cliente (cod_cliente int not null,
nome_cliente varchar (30) not null);2. Inserir linha na tabela Cliente
Insert into Cliente values (1,’João Silva’);Select * from Cliente;
3. No banco master, mudar TesteDB para read_onlyUse master;Alter database TesteDB set read_only with rollback immediate;
2. Tentar inserir nova linha na tabela ClienteUse TesteDB;Insert into Cliente values (2,’Maria Santos’);
3. No banco master, mudar TesteDB para read_writeUse master;Alter database TesteDB set read_write with rollback immediate;
Obtendo informações sobre databases
• sp_helpdb• sp_helpdb database_name• sp_spaceused [objname]• sp_helpfileEx:sp_helpdbsp_helpdb TesteDBUse TesteDB exec sp_spaceused @updateusage=trueUse TesteDB exec sp_helpfile
Obtendo informações pelas views de sistema
• Select * from sys.databases• Select * from sys.database_files• Select * from sys.allocation_units
Gerenciando arquivos de dados e log
Sintaxe:ALTER DATABASE database{ ADD FILE < filespec > [ ,...n ] [ TO FILEGROUP filegroup_name ]| ADD LOG FILE < filespec > [ ,...n ]| REMOVE FILE logical_file_name [ WITH DELETE ]| ADD FILEGROUP filegroup_name| REMOVE FILEGROUP filegroup_name| MODIFY FILE < filespec >| MODIFY NAME = new_dbname| MODIFY FILEGROUP filegroup_name{filegroup_property | NAME = new_filegroup_name }| SET < optionspec > [ ,...n ] [ WITH < termination > ]| COLLATE < collation_name >}
Gerenciando arquivos (cont.)
Usando crescimento automático de arquivos• Boas práticas:– Aloque um tamanho inicial suficiente para evitar
operações de expansão frequentes.– Determine um tamanho máximo para os arquivos.– Configure os incrementos grandes o suficiente
para evitar operações de expansão frequentes.Por exemplo, se o log cresce 40 MB por dia, configure o autogrow para 50 MB e não 1MB!
Gerenciando arquivos (cont.)
• Adicionando arquivos secundários de dados
ALTER DATABASE TesteDBADD FILE(NAME = TesteDB_Data2,FILENAME='c:\Program Files\..\..\Data\TesteDB_Data2.ndf',SIZE=15MB,MAXSIZE=20MB)GO
Gerenciando arquivos (cont.)
• Expandindo arquivos manualmente
ALTER DATABASE TesteDBMODIFY FILE ( NAME = ‘TesteLog',SIZE = 30MB)GO
Gerenciando arquivos (cont.)
Exercícios:1. Adicionar 2 arquivos de dados ao banco
TesteDB2. Expandir o arquivo de log de TesteDB para
30MB3. Mudar o autoincremento do arquivo de log
de TesteDB para 10 % e o tamanho máximo para 100MB.
Deletando um DatabaseDROP DATABASEEx: Drop database TesteDB
Não é possível excluir um database se:• O mesmo está em uso• É um database de sistema• Está no meio de um Restore• Deleta todos os arquivos de dados (operação
irreversível)
Manutenção Básica
• DBCC Shrinkdatabase : compacta o Banco Inteiro EX: DBCC Shrinkdatabase (TesteDB, 15)
• DBCC Shrinkfile : compacta um arquivo do BancoUse TesteDBDBCC Shrinkfile (TesteDB_Data, 5)
• Auto_shrink : compacta o Banco automaticamenteALTER database TesteDB SET auto_shrink ON
Manutenção Básica
Exercícios:• Compactar arquivo de dados do banco
AdventureWorks2012 para 100 MB. Verificar o tamanho final do mesmo.
• Compactar o banco AdventureWorks2012 deixando 15% de espaço livre. Verificar o tamanho final de todos os arquivos (dados e log).
Manutenção BásicaExercícios:• Gerar registros de log com o script abaixo:
Use AdventureWorks2012dbcc dbreindex ('Person.Person')dbcc dbreindex ('Sales.SalesOrderDetail')
• Verificar tamanho do arquivo de log• Compactar arquivo de log do banco
AdventureWorks2012 para 1 MB. • Verificar o tamanho final do mesmo. O que
ocorreu?
Manutenção BásicaExercícios:• Mudar o modelo de recuperação do banco
AdventureWorks2012 para FULL• Fazer backup de dados e log do banco
AdventureWorks2012backup database AdventureWorks2012 to disk = 'C:\SQLBACKUP\AdventureWorks2012_20131203.BAK' with initbackup log AdventureWorks2012 to disk = 'C:\SQLBACKUP\AdventureWorks2012_201312030800.TRN' with init
• Compactar novamente o arquivo de log do banco AdventureWorks2012 para 1 MB.
• Verificar o tamanho final do mesmo. O que ocorreu?
Armazenamento Interno
Armazenamento Interno
• O SQL Server armazena, lê e escreve dados em blocos de 8KB, chamados páginas.
• Linhas de uma tabela, de um modo geral, não podem ser maiores que uma página, ou 8060 (8192 Bytes – overhead).
• Todas as páginas são armazenadas em extents. Um extent são oito páginas contíguas, ou 64KB.
• Páginas podem conter dados de tabelas, índices ou controles de alocação.
Links Úteis• Create Database sintaxe:
http://technet.microsoft.com/pt-br/library/ms176061(v=sql.120).aspx
• Alter Database sintaxe: http://technet.microsoft.com/pt-br/library/ms174269(v=sql.120).aspx
• DBCC shrinkdatabase: http://technet.microsoft.com/pt-br/library/ms190488.aspx