No post anterior, prometi a sintaxe para criar uma tabela particionada…

Então vamos lá! Primeiro, vamos criar um Banco de Dados com um Filegroup Primário (no disco F:), um Filegroup Secundário com nome dbTestePart_FG1 (nos discos G:, H: e I:) e os arquivos de log no disco J:.

Os arquivos do Filegroup dbTestePart_FG1 são criados com 1 MB e crescem em incrementos de 1 MB (com um máximo de 50 MB), conforme podemos verificar na sitaxe utilizada para criar este Banco de Dados:

USE master;
GO

CREATE DATABASE dbTestePart
ON PRIMARY
  ( NAME='dbTestePart_Primario',
    FILENAME=
       'F:\dbTestePart_Primario.mdf',
    SIZE=10MB,
    MAXSIZE=50MB,
    FILEGROWTH=1MB),
FILEGROUP dbTestePart_FG1
  ( NAME='dbTestePart_FG1_Dat1',
    FILENAME =
       'G:\dbTestePart_FG1_Dat1.ndf',
    SIZE=1MB,
    MAXSIZE=50MB,
    FILEGROWTH=1MB),
  ( NAME='dbTestePart_FG1_Dat2',
    FILENAME =
       'H:\dbTestePart_FG1_Dat2.ndf',
    SIZE=1MB,
    MAXSIZE=50MB,
    FILEGROWTH=1MB),
  ( NAME='dbTestePart_FG1_Dat3',
    FILENAME =
       'I:\dbTestePart_FG1_Dat3.ndf',
    SIZE=1MB,
    MAXSIZE=50MB,
    FILEGROWTH=1MB)
LOG ON
  ( NAME='dbTestePart_Log',
    FILENAME =
       'J:\dbTestePart.ldf',
    SIZE=1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB);
GO

Podemos definir o Filegroup dbTestePart_FG1 como default com o comando:

ALTER DATABASE dbTestePart
  MODIFY FILEGROUP dbTestePart_FG1 DEFAULT;
GO

Criando uma tabela no Filegroup

Agora, vamos criar uma tabela no novo Filegroup. A sintaxe é:

USE dbTestePart;
CREATE TABLE TabelaPart
  ( Coluna1 int PRIMARY KEY,
    Coluna2 char(1024),
    Coluna3 char(1024))
ON dbTestePart_FG1;
GO

Conferindo os Discos

Verificando os discos utilizados, podemos conferir o tamanho dos arquivos criados:

SQL - Disco FSQL - Disco GSQL - Disco HSQL - Disco ISQL - Disco J

Populando a Tabela

Cada   linha desta coluna ocupa cerca de 2 KB (temos 2 campos de 1024 bytes).
Quando adicionamos registros na tabela, as informações são escritas nos 3 discos do Filegroup.

Agora vejamos o que acontece se criarmos 2.000 registros nesta tabela, usando os seguintes comandos:

DECLARE @nContador int;
SET @nContador = 1;

USE dbTestePart

WHILE (@nContador < 2000)
BEGIN;
   INSERT INTO TabelaPart VALUES
       (@nContador,'TEXTO', 'TEXTO');
   SET @nContador = @nContador + 1;
END;
GO

Os 2.000 novos registros ocupam cerca de 4 MB. Em cada arquivo do Filegroup temos originalmente 1 MB, então os arquivos precisarão "crescer" para acomodar todos os registros.

De fato, após executar o comando, podemos notar que cada arquivo possui 2 MB! (porque o incremento é de 1 MB por vez).

SQL - Disco FSQL - Disco G SQL - Disco HSQL - Disco I SQL - Disco J

Repare que somente os arquivos nos quais a tabela é armazenada precisaram crescer.

(continua)