Para que você possa entender melhor esta segunda parte do artigo, leia também a primeira parte: Particionando Tabelas e Índices no SQL Server 2005 Parte I
Particionando um Índice
O procedimento para criar um índice particionado é igual ao procedimento de se criar uma tabela particionada. Para exemplificar, vamos criar um índice para a coluna aula_id da tabela aula_partição utilizando a Partition function e Partition Sheme utilizados para tabela (veja a Parte I).
Listagem 1. Criando um Índice particionado
USE particionamento
GO
Create Nonclustered Index ix_aula_id on aula_particao(aula_id)
on particao_esquema(aula_id)
No exemplo criamos um índice chamado ix_aula_id para a coluna aula_id da tabela aula_particao referenciando o esquema de partição particao_esquema. Podemos verificar a criação do índice utilizando a procedure de sistema sp_helpindex como no exemplo abaixo:
sp_helpindex aula_particao
Na coluna index_description podemos observar que o índice foi locado no esquema de partição particao_esquema.
Com a query abaixo também podemos verificar a quantidade de registros por partição do índice.
SELECT * FROM sys.partitions
WHERE object_id = OBJECT_ID(‘dbo.AULA_PARTICAO’)
and sys.partitions.index_id =
(select sys.indexes.index_id from sys.indexes
where object_id = OBJECT_ID(‘dbo.AULA_PARTICAO’)
and sys.indexes.name = ‘ix_aula_id’)
Gerenciando Partições
Para gerenciar partições temos três operadores SLIPT, MERGE e SWITCH.SPLIT Adiciona um intervalo para a função de partição
MERGE Permite mesclar um ou mais intervalos de uma função de partição
SWITCH Adiciona ou remove linhas de uma tabela
Antes de alterar a partição vamos relembrar como está criada nossa Partition Function e Partition Scheme.
Listagem 4. Consultando os intervalos de uma Partition Function e qual Partition Scheme ela esta relacionada
select sys.partition_functions.name , sys.partition_range_values.* , sys.partition_schemes.name as name_scheme
from sys.partition_functions
inner join sys.partition_range_values on sys.partition_range_values.function_id = sys.partition_functions.function_id
inner join sys.partition_schemes on sys.partition_schemes.function_id = sys.partition_functions.function_id
where sys.partition_functions.name = ‘particao_funcao’
Listagem 5. Consultando em qual filegroup esta apontando o Partition Scheme
select sys.partition_schemes.name as name_scheme, sys.data_spaces.name as name_filegroup
from sys.partition_schemes
inner join sys.destination_data_spaces on sys.destination_data_spaces.partition_scheme_id = sys.partition_schemes.data_space_id
inner join sys.data_spaces on sys.data_spaces.data_space_id = sys.destination_data_spaces.data_space_id
where sys.partition_schemes.name = ‘particao_esquema’
Utilizando MERGE
O MERGE permite mesclar um ou mais intervalos de uma Partition Function. Note que no exemplo abaixo solicitamos a mesclagem do intervalo entre 200 e 399 e como resultado o filegroup FG3 não faz mais parte da Partition Scheme particao_esquema.
Listagem 6. Mesclando o Intervalo 200 a 399
ALTER PARTITION FUNCTION PARTICAO_FUNCAO()
MERGE RANGE (300);
Utilizando SPLIT
Use o SPLIT sempre que precisar adiciona um intervalo para uma Partition Function.
Listagem 7. Adicionando um Intervalo 300 a 399
— Adidionando um Filegroup para a Partition Scheme
ALTER PARTITION SCHEME particao_esquema
NEXT USED FG3;
— Criando o Intervalo de 300 a 399
ALTER PARTITION FUNCTION PARTICAO_FUNCAO ()
SPLIT RANGE (300);
Utilizando SWITCH
O operador SWITCH permite mover dados de uma partição para uma outra tabela do mesmo filegroup. Imagine que você queira mover os dados de produção para uma tabela de histórico quanto tempo não iria demorar com o SWITCH o SQL Server move o ponteiro dos dados para a outra tabela, mas é valido somente para tabelas criadas no mesmo FILEGROUP e com a mesma estrutura.
Como exemplo, vamos mover os dados da partição 1 para a tabela AULA_PARTICAO_HIST.
Listagem 8. Criando tabela de histórico
CREATE TABLE dbo.AULA_PARTICAO_HIST (aula_id int,descricao Char(10) default (‘AAAAA’)) ON FG1
Listagem 9. Movendo os dados da partição 1 para a tabela de histórico
ALTER TABLE AULA_PARTICAO
SWITCH PARTITION 1 TO AULA_PARTICAO_HIST
SELECT * FROM AULA_PARTICAO_HIST
Bom pessoal termina aqui Particionando Tabelas e Índices no SQL Server 2005 até a próxima.
ROGÉRIO SANCHES DE OLIVEIRA
(rsanches@hpgsoft.com.br)
formado em Sistemas de Informação para o Setor Financeiro pela UNIBAN. Trabalha como Analista Programador e DBA no CPDI (Centro de Processamento de Documentos Inteligentes) da XEROX, participa ativamente do fórum www.mcdbabrasil.com.br. Possui Certificação MCTS em SQL Server 2005 e está se preparando para a certificação MCITP:Database Administrator.