--Creamos base de datos.
Create database ParticionadoTabla_ejem;
GO
--Nos conectamos a la base de datos:
use ParticionadoTabla_ejem;
GO
--Esta característica se encuentra en SQL Server 2005, SQL Server 2008 y SQL Server 2008 R2
--Crear una función de partición (PARTITION FUNCTION), en esta se definirá el rango que cada partición va a almacenar.
--Para este caso existen dos métodos de Rangos, Izquierda (left) o Derecha (right), la diferencia del uso de este método,
--es la manera de realizar el análisis de rangos.
--Un ejemplo de la sentencia para cada método serían los siguiente
CREATE PARTITION FUNCTION pfAnualR(int) AS RANGE RIGHT FOR VALUES(2008,2009,2010,2011)
--Primera Partición < 2008
--Segunda Partición >= 2008
--Tercera Partición >= 2009
--Cuarta Partición >= 2010
--Quinta Partición >= 2011
CREATE PARTITION FUNCTION pfAnualL(int) AS RANGE LEFT FOR VALUES(2008,2009,2010,2011)
--Primera Partición <= 2008
--Segunda Partición > 2008
--Tercera Particion > 2009
--Cuarta Particion > 2010
--Quinta Particion > 2011
--Crear un esquema para la partición (PARTITION SCHEME) , en esta se definirán los FileGroupsdonde donde se almacenara
--cada partición,
--Un ejemplo es el siguiente:
--(para la ejecución correcta de este script, es necesario que se creen o existan 5 FileGroups:
-- llamados FG01, FG02, FG03, FG04, FG05):
--Creamos filegrups:
ALTER DATABASE ParticionadoTabla_ejem ADD FILEGROUP FG01;
GO
ALTER DATABASE ParticionadoTabla_ejem ADD FILEGROUP FG02;
GO
ALTER DATABASE ParticionadoTabla_ejem ADD FILEGROUP FG03;
GO
ALTER DATABASE ParticionadoTabla_ejem ADD FILEGROUP FG04;
GO
ALTER DATABASE ParticionadoTabla_ejem ADD FILEGROUP FG05;
GO
--Creamos ficheros de datos (mdf) para cada filegrups que hemos creado antes:
ALTER DATABASE ParticionadoTabla_ejem
ADD FILE
( NAME = File_Data_FG01,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50\MSSQLSERVER\MSSQL\DATA\FG01.mdf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
TO FILEGROUP FG01
GO
ALTER DATABASE ParticionadoTabla_ejem
ADD FILE
( NAME = File_Data_FG02,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50\MSSQLSERVER\MSSQL\DATA\FG02.mdf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
TO FILEGROUP FG02
GO
ALTER DATABASE ParticionadoTabla_ejem
ADD FILE
( NAME = File_Data_FG03,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50\MSSQLSERVER\MSSQL\DATA\FG03.mdf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
TO FILEGROUP FG03
GO
ALTER DATABASE ParticionadoTabla_ejem
ADD FILE
( NAME = File_Data_FG04,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50\MSSQLSERVER\MSSQL\DATA\FG04.mdf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
TO FILEGROUP FG04
GO
ALTER DATABASE ParticionadoTabla_ejem
ADD FILE
( NAME = File_Data_FG05,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50\MSSQLSERVER\MSSQL\DATA\FG05.mdf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)
TO FILEGROUP FG05
GO
--Creamos esquema para la paraticion
CREATE PARTITION SCHEME psAnualR AS PARTITION pfAnualR TO ([FG01], [FG02], [FG03], [FG04], [FG05])
CREATE PARTITION SCHEME psAnualL AS PARTITION pfAnualL TO ([FG01], [FG02], [FG03], [FG04], [FG05])
--En la creación de la Tabla, la diferencia es que en lugar de definir un FileGroup donde se guardara el objeto,
-- define la Función de partición y la columna eje. Ejemplo
CREATE TABLE tblEstadosR (Ano int, Mes int, Dia int, Tipo varchar(30), Importe float) ON psAnualR(Ano)
CREATE TABLE tblEstadosL (Ano int, Mes int, Dia int, Tipo varchar(30), Importe float) ON psanualL(Ano)
--Una vez realizados estos pasos, se procede a realizar el llenado de las tablas particionadas
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2007,08,22,'Cargo',13.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2008,08,22,'Cargo',34.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2009,08,22,'Cargo',23.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2010,08,22,'Cargo',78.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2011,08,22,'Cargo',98.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2012,08,22,'Cargo',14.00)
GO
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2007,08,22,'Cargo',13.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2008,08,22,'Cargo',34.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2009,08,22,'Cargo',23.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2010,08,22,'Cargo',78.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2011,08,22,'Cargo',98.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2012,08,22,'Cargo',14.00)
GO
-- Para saber en qué partición se encuentra la data se utilizara el siguiente comando Transac-SQL $PARTITION, este regresa el número de partición en el cual se encuentra la data. Para el ejemplo que estamos realizando, el nombre de la Base de Datos utilizada es BDPrueba
SELECT Ano, BDPrueba.$Partition.pfAnualR(Ano) FROM tblEstadosR
SELECT Ano, BDPrueba.$Partition.pfAnualL(Ano) FROM tblEstadosL
--conceptos básicos de particionamiento de tablas, las ventajas principales al manejar esta característica son:
-- 1.Sliding Windows escenarios
-- 2.Mejora de actividades administrativas, como:
--Mantenimiento de Índices
--Compresión de particiones
--Manejo de Storage