Monday, 4 July 2016

SQL Database table partitioning


--Add File groups
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP January




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP February




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP March




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP April




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP May




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP June




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP July




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP Avgust




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP September




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP October




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP November




GO
 
 
ALTER DATABASE Db_Partition

ADD FILEGROUP December




GO
 
 




--get file group's List
 
 

SELECT name AS AvailableFilegroups

FROM sys.filegroups

WHERE type = 'FG'


--Add Files Script
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartJan],

FILENAME = 'E:\Test\DATA\PartitioningDB.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [January]



 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartFebruary],

FILENAME = 'E:\Test\DATA\PartitioningDB_February.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [February]




GO
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartMarch],

FILENAME = 'E:\Test\DATA\PartitioningDB_March.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [March]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartApril],

FILENAME = 'E:\Test\DATA\PartitioningDB_April.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [April]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartMay],

FILENAME = 'E:\Test\DATA\PartitioningDB_May.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [May]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartJune],

FILENAME = 'E:\Test\DATA\PartitioningDB_June.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [June]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartJuly],

FILENAME = 'E:\Test\DATA\PartitioningDB_July.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [July]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartAvgust],

FILENAME = 'E:\Test\DATA\PartitioningDB_Avgust.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [Avgust]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartSeptember],

FILENAME = 'E:\Test\DATA\PartitioningDB_September.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [September]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartOctober],

FILENAME = 'E:\Test\DATA\PartitioningDB_October.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [October]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartNovember],

FILENAME = 'E:\Test\DATA\PartitioningDB_November.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [November]




Go
 
 
ALTER DATABASE [Db_Partition]

ADD FILE

(

NAME = [PartDecember],

FILENAME = 'E:\Test\DATA\PartitioningDB_December.ndf',

SIZE = 3072 KB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 1024 KB

) TO FILEGROUP [December]



 
 
--To check files created added to the filegroups run the following query:
 
 
SELECT

name as [FileName],

physical_name as [FilePath]

FROM sys.database_files

where type_desc = 'ROWS'




GO
 
 




--CREATE PARTITION FUNCTION
 
 
CREATE PARTITION FUNCTION [PartitioningByMonth] (datetime)

AS RANGE RIGHT FOR VALUES ('20140201', '20140301', '20140401',

'20140501', '20140601', '20140701', '20140801',

'20140901', '20141001', '20141101', '20141201');




--CREATE PARTITION SCHEME
 
 
CREATE PARTITION SCHEME PartitionBymonth

AS PARTITION PartitioningBymonth

TO (January, February, March,

April, May, June, July,

Avgust, September, October,

November, December);




--Now we’re going to create the table using the PartitionBymonth partition scheme, and fill it with the test data:
 
 
CREATE TABLE Reports

(ReportDate datetime PRIMARY KEY,

MonthlyReport varchar(max))

ON PartitionBymonth (ReportDate);




GO
 
 

 
INSERT INTO Reports (ReportDate,MonthlyReport)

SELECT '20160105', 'ReportJanuary' UNION ALL

SELECT '20140205', 'ReportFebryary' UNION ALL

SELECT '20140308', 'ReportMarch' UNION ALL

SELECT '20140409', 'ReportApril' UNION ALL

SELECT '20140509', 'ReportMay' UNION ALL

SELECT '20140609', 'ReportJune' UNION ALL

SELECT '20140709', 'ReportJuly' UNION ALL

SELECT '20140809', 'ReportAugust' UNION ALL

SELECT '20140909', 'ReportSeptember' UNION ALL

SELECT '20141009', 'ReportOctober' UNION ALL

SELECT '20141109', 'ReportNovember' UNION ALL

SELECT '20141209', 'ReportDecember'

Select * from Reports



 
 
---
 
 

SELECT

p.partition_number AS PartitionNumber,

f.name AS PartitionFilegroup,

p.rows AS NumberOfRows

FROM sys.partitions p

JOIN sys.destination_data_spaces dds ON p.partition_number = dds.destination_id

JOIN sys.filegroups f ON dds.data_space_id = f.data_space_id

WHERE OBJECT_NAME(OBJECT_ID) = 'Reports'