SQL Passo-a-Passo – Passo 5 (Continuação)

No post anterior criamos uma tabela num Filegroup “distribuído” em 3 discos.
Agora vamos fazer diferente! Vamos criar diversos Filegroups, e armazenar os dados em Filegroups diferentes, de acordo com os valores contidos em uma coluna.

Criando os Filegroups

Primeiro, vamos criar os 3 Filegroups, em 3 discos distintos:

USE master
ALTER DATABASE dbTestePart
ADD FILEGROUP dbTestePart_FG2
GO
ALTER DATABASE dbTestePart
ADD FILE
( NAME = dbTstePart_FG2_Dat,
FILENAME =
'G:\dbTestePart_FG2_Dat.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB )
TO FILEGROUP dbTestePart_FG2;
GO

ALTER DATABASE dbTestePart
ADD FILEGROUP dbTestePart_FG3
GO
ALTER DATABASE dbTestePart
ADD FILE
( NAME = dbTstePart_FG3_Dat,
FILENAME =
'H:\dbTestePart_FG3_Dat.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB )
TO FILEGROUP dbTestePart_FG3;
GO

ALTER DATABASE dbTestePart
ADD FILEGROUP dbTestePart_FG4
GO
ALTER DATABASE dbTestePart
ADD FILE
( NAME = dbTstePart_FG4_Dat,
FILENAME =
'I:\dbTestePart_FG4_Dat.ndf',
SIZE=1MB,
MAXSIZE=50MB,
FILEGROWTH=1MB )
TO FILEGROUP dbTestePart_FG4;
GO

A Partition Function

Agora, vamos criar uma PARTITION FUNCTION, que serve para definir "limites" para a próxima estrutura que discutiremos, a PARTITION SCHEME.

USE dbTestePart;
CREATE PARTITION FUNCTION
partFuncPorIdade (int)
AS RANGE LEFT
FOR VALUES (18, 60)
GO

De acordo com esta função, pessoas até 18 anos pertencerão a uma primeira faixa, pessoas de 19 a 60 anos pertencerão à segunda faixa, e pessoas com mais de 60 anos pertencerão à terceira faixa.

A Partition Scheme

Agora vamos criar a PARTITION SCHEME. É através desta estrutura que definimos em que Filegroup os registros serão armazenados, de acordo com a idade e com base na PARTITION FUNCTION.

A sintaxe é:

USE dbTestePart;
CREATE PARTITION SCHEME partSchemePorIdade
AS PARTITION partFuncPorIdade
TO (dbTestePart_FG2, dbTestePart_FG3, dbTestePart_FG4)
GO

Criando a Tabela

Finalmente, podemos criar a tabela que será armazenada nos 3 Filegroups de acordo com a idade das pessoas!

USE dbTestePart;
CREATE TABLE Pessoas
( IdPessoa int,
Nome char(50),
Sobrenome char(50),
Buffer char(2000),
Idade int )
ON partSchemePorIdade(Idade);
GO

Olhando novamente para os 3 discos, verificamos que cada um deles tem um novo arquivo  de 1 MB:

SQL - Disco GSQL - Disco HSQL - Disco I 

Populando a Tabela

Agora, vamos inserir 2.000 registros com pessoas de 25 anos:

DECLARE @nContador int;
SET @nContador = 1;

USE dbTestePart

WHILE (@nContador < 2000)
BEGIN;
INSERT INTO Pessoas VALUES
(@nContador,'Nome','Sobrenome','Nonono',25);
SET @nContador = @nContador + 1;
END;
GO

E vamos analisar novamente os discos:

SQL - Disco G SQL - Disco HSQL - Disco I

Note que somente o arquivo do disco H: cresceu, pois ele que contém o Filegroup dbTestePart_FG3, onde são armazenadas as pessoas com idade entre 19 e 60 anos!

De novo o post ficou comprido... mas foi divertido, não? :)