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