32
Bancos de Dados SQL Server 2012 Databases

Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Embed Size (px)

Citation preview

Page 1: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Bancos de Dados

SQL Server 2012

Databases

Page 2: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Criando banco de dados

Create database AlunoDBGOSelect * from sys.databases where name = ‘AlunoDB’GOsp_helpdb AlunoDBGO

Page 3: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 4: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 5: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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]

Page 6: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 7: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 8: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 9: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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)

Page 10: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 11: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Log transacional funcionamento

Page 12: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 13: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 14: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 15: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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 )

Page 16: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 17: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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;

Page 18: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 19: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Obtendo informações pelas views de sistema

• Select * from sys.databases• Select * from sys.database_files• Select * from sys.allocation_units

Page 20: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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 >}

Page 21: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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!

Page 22: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 23: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Gerenciando arquivos (cont.)

• Expandindo arquivos manualmente

ALTER DATABASE TesteDBMODIFY FILE ( NAME = ‘TesteLog',SIZE = 30MB)GO

Page 24: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 25: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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)

Page 26: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 27: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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

Page 28: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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?

Page 29: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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?

Page 30: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

Armazenamento Interno

Page 31: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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.

Page 32: Bancos de Dados SQL Server 2012 Databases. Criando banco de dados Create database AlunoDB GO Select * from sys.databases where name = AlunoDB GO sp_helpdb

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