Database Partitioning in SQL Server 2005

I would like to explain the steps involved in implementing Database Partitioning in SQL Server 2005.  If you had already implemented Very Large Databases using federated Databases, you would be relieved that Database Partitioning is very easy to configure and work with and the pain to maintain is gone with this wonderful feature.

Implementing Database Partitioning involves mainly 3 Steps.

  • Creating a Partition Function
  • Creating a Partition Scheme
  • Creating a Partitioned Table or Index

Creating Database to setup Partitioning

USE [master]
GO

CREATE DATABASE [LearnSQLwithBru] ON PRIMARY

(NAME = N'LearnSQLwithBruData1',
FILENAME= N'D:\LearnSQLwithBruData1.mdf',
SIZE= 3072KB ,MAXSIZE=UNLIMITED,FILEGROWTH= 1024KB ),
FILEGROUP [Filegroup_Sep2009]

(NAME = N'LearnSQLwithBruData2',
FILENAME = N'D:\LearnSQLwithBruData2.ndf',
SIZE= 3072KB ,MAXSIZE=UNLIMITED,FILEGROWTH= 1024KB ),

FILEGROUP [Filegroup_Oct2009]

(NAME= N'LearnSQLwithBruData3',
FILENAME= N'D:\LearnSQLwithBruData3.ndf',
SIZE= 3072KB ,MAXSIZE=UNLIMITED,FILEGROWTH= 1024KB )

LOG ON
(NAME = N'LearnSQLwithBru_log',
FILENAME= N'D:\LearnSQLwithBru_log.ldf',
SIZE= 10240KB ,MAXSIZE= 2048GB ,FILEGROWTH= 10%)

GO

Step 1 :  Creating a Partition Function

You must identify the Column which would be used to partition the Database. In this example I am partitioning the Database using the Datetime Value, so that we can use large Tables / Indexes on those Large tables to use this Partition. There would a good deal of benefit if the Partitioning is used by both a Large Table and the Indexes on that table. To make things better, while creating the Database, consider placing the Data Files in the Filegroups on Different Disk Drives. With or without Partitioning, SQL Server has a better performance when a Database is created with multiple Disk Drives and with Multiple Filegroups.

Follow the Code below to create a Partition Function which is based on a Datetime Values, so this gives you an opportunity to partition all the Large Tables in the current Database to be portioned by the month.

USE LearnSQLWithBru
GO

CREATE PARTITION FUNCTION PF_RangePartition (Datetime)
AS RANGE LEFT FOR

VALUES
('20090930 23:59:59.997',
'20091031 23:59:59.997')

GO

The above script ensures that we are going to create a Partitioning function in which the Range values are used in left justification, so that all the date values left of  “20090930 23:59:59.997” i.e, less than or equal to Sep 30 2009 will be stored as a single range, and then values between Oct 1 2009 to Oct 31 2009 will be stored as separate Range and all the values from Nov 1 2009 will be stored as a Separate range, by SQL Server when implemented later on.

 Step 2 :  Creating a Partition Scheme

The following code creates a Partition Scheme which will bind the partition Function to Separate Filegroups. Note it is not necessary that you need to have multiple partitions, it ensures in better Performance of the Database if implemented with multiple Filegroups.

CREATE PARTITION SCHEME OrderDateRangePScheme

AS PARTITION PF_RangePartition TO
([Filegroup_Sep2009], [Filegroup_Oct2009],
 [PRIMARY] )

The script above ensures that all the tables that are going to be created on this partition, will be physically stored based on the Filegroups mentioned. So the Data which has the values below Sep 30 2009 will all be stored separately on the Filegroup_Sep2009, and the values between Oct 1 2009 to Oct 31 2009 will be stored on the Filegroup_Oct2009, and finally any data that is Greater than or Equal to Nov 1 2009 will be stored on the Primary Filegroup.

Step 3 : Creating a Partitioned Table

In order to create a table which will use the created partitions, we need to mention the partition Name in the create table script as described below.

CREATE TABLE [DBO].[OrderDetails](
[CustomerNo] [INT]NULL, [OrderNo] [NVARCHAR](20)NULL,
[OrderQty] [SMALLINT] NULL, [OrderDate] [DATETIME] NOT NULL)
ON OrderDateRangePScheme (OrderDate)

Inserting Data into the Table

Insert some records in the Table using the following script to check the usage of Partitioning.

INSERT INTO [dbo].[OrderDetails]VALUES(1,'Ord1', 1,'09/1/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(2,'Ord2', 3,'09/5/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(3,'Ord3', 7,'09/10/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(4,'Ord4', 2,'09/30/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(5,'Ord5', 10,'10/1/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(6,'Ord6', 9,'10/10/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(7,'Ord7', 6,'10/20/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(8,'Ord8', 8,'11/30/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(9,'Ord9', 7,'12/1/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(10,'Ord10', 3,'12/10/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(10,'Ord10', 3,'12/15/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(10,'Ord10', 3,'12/20/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(10,'Ord10', 3,'12/25/2009')

INSERT INTO [dbo].[OrderDetails]VALUES(11,'Ord11', 4,'1/20/2010') 

Verifying the Partition Information

Using the sys.partitions view we can check whether the partitions have been storing the records as desired by us.

SELECT * FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)= 'OrderDetails';
GO

 Points to be noted

  • Only Enterprise Edition supports this feature
  • A Partitioning Function can be used by the objects in the same Database.
  • A table can have a Maximum of 1000 partitions.
  • A Partition Scheme can be defined on 1 or more Filegroups. It is not necessary to have multiple Filegroups.

Do you like this site? Like our FB page @ Facebook.com\LearnSQLWithBru to know when there is new content.

— Bru Medishetty

Installing SQL Server 2005 Service Pack 3

In this Blog we shall take a look at the steps to be carried out for Installing Service Pack 3 for SQL Server 2005.

Before Installing SP3

Keep in mind to read the Microsoft Technet Articles related to Installing Service Pack 3 for SQL Server 2005. Once installed, the SP3 cannot be uninstalled, you need to completely install SQL Server 2005 Instance from the ground up. Keeping this in mind, always take a Backup of all the System and User Databases on that instance for rollback purpose.

A copy of the Service Pack 3 can be downloaded from the link. SQL SERVER 2003 SP3

Look at the list of bugs that are fixed in SQL Server 2005 SP3 Here

After downloading the executable, go to the directory where it has been downloaded / copied. Double click the executable or right click the Exe File and choose Open in the menu as shown below.

The program finds the Instances installed on the Server.

After the step, the following Dialog box is displayed which is a welcome screen. Click Next to continue…

The Next screen is the License terms for SQL Server 2005 SP3. Choose the option I accept the agreement upon which, the Next Button will be active. (The image below was a screen shot of the default screen of the dialog box)

The next dialog (which is displayed above) provides a list of the Installed components which are available on the current Server. You can make a selection of only those required components to which you need to install the Service Pack. Here, I selected INSTANCE1 which is the Database Engine and other individual components such as Integration Services, Client Utilities etc.

This is one of the advantages in installing a Service Pack in SQL Server. It enables to you apply the Service Pack on a test Instance and test it thoroughly without affecting the other Instance on the same Physical machine.

After making selection of the components to be applied, click Next.

Choose the Authentication Mode to apply the Service Pack, you can choose either Windows Authentication or Mixed Mode, either way the Login needs to have administrative rights on the Server. Click Next

The Error and Usage Reporting Settings are the similar settings you find when Installing a initial Installation of SQL Instance.. Choose what ever applies.

The above dialog displays all the Services that related to SQL Server and running currently, It is suggested that the services are stopped in order not to have a reboot of the SQL Server. I remember, I choose not to stop the Services, and resulted in a reboot., so keep in mind the selection of the choice..

The above dialog box is a summary information box indicating it is ready to start the installation of the service pack. By clicking on the Install Button, you are going to start the Installation, it would not be possible to stop the installation after you click on the Install Button.

The Installation would continue to update the Service Pack for the Individual components as shown in the pictures, above and below.

That concludes the Installation process of Service Pack 3 for SQL Server 2005. Restart the Server to complete the SP3 installation to take effect.

Note: The steps described in this blog are generic, it may be different depending on your environment.

Word of caution: Always perform the installation in test environment and check the SQL Server functionalities and applications that are depending on the SQL Server.

Do you like this site? Like our FB page @ Facebook.com\LearnSQLWithBru to know when there is new content.

–Bru Medishetty

Installing Sample Databases in SQL Server 2005

You can install sample Databases when Installing SQL Server Instance,  if that was not done, you need to install Sample Databases separately.

In this blog, we will look at the steps in doing that.

As the first step, download the Sample Database that would like to install, I chose AdventureWorks for SQL 2005 in this example.

You can follow this link to download the Sample Databases

Remember the path you downloaded the file to.

Browse the directory where you have downloaded the file, select the .msi file , right click and choose Install. (Picture Below)

The Installation process starts and we will look at each of those steps.

If the Security warning Dialog Box appears, choose Run. (Picture Below)

The welcome screen for the Installation Wizard is displayed, click Next. (Picture Below)

In the License Agreement Dialog, Choose I accept the terms to continue.

The Next Screen displays, the Destination Directory where the Sample Database would be installed to.
By default it will be Data Directory of SQL Server.  Click Next to continue and Install in the default Directory.

Click Install to begin the Installation.

When the Installation is completed, the below shown dialog Box is displayed and click Finish to complete the Installation.

Once you finish this step, you can check whether the Sample Database is installed by going to the Data Directory of your SQL Instance.

Both the Data and Log files are placed in the Data Directory of the SQL Server Instance by the installation that we performed.

Once this part is done, the next thing we have to do is open SQL Server Management Studio (SSMS). In the Object Explorer, Right click on the Databases Node and select Attach.

The attach databases dialog box appears and click Add Button.

When you click the Add button, there will be a window that requires us to locate the .MDF File. By default, it opens the Data Directory of the SQL Instance, so if the AdventureWorks Database Data File (.MDF) is available, select that .MDF File.

After the MDF file is chosen click OK, it will show the Attach Databases dialog box with the details of the MDF file and also the details of all the Database files (Both Data and Log)

Click OK to complete the attaching the Database.

Now you should be able to see the Database in the Databases Node in Object Explorer.

Do you like this site? Like our FB page @ Facebook.com\LearnSQLWithBru to know when there is new content.

— Bru Medishetty

http://learnsqlwithbru.com/images/Adventure10.jpg