实验三:SQL server 2005基于已存在的表创建分区

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/11/07/4783702.aspx

 

      随着当今数据库的容量越来越快的朝着在大型数据库或超大型数据库的发展,对于数据库中的大型表以及具有各种访问模式的表的可伸缩性和可管理性运行环境变得尤为重要,SQL server从SQL server 7.0的分区视图到SQL server 2000中的分区视图中到SQL server 2005所使用的分区表,不断改善大型表所面临的性能、阻塞、备份空间、时间、运营成本等。当表和索引非常大的时候,通过分区表的实现,可以将数据分为更小,更易于管理,获得更好的可操作性能。本实验介绍基于已存在的表来如何创建分区,管理分区。

一、实验目的:对于已经存在的表且不断增大的情况下构建分区表,管理分区表,提高其性能。

二、主要步骤:对于已经存在的表,我们可以采取以下步骤来对其创建分区表
    1.创建分区函数
    2.创建分区架构并关联到分区函数
    3.删除已经存在的聚集索引
    4.基于分区架构重建聚集索引

三、实验环境:
    1. windows xp pro (英文版) + sp2

    2. SQL server 2005 Developer + sp3
    3.实验数据库Performance,此数据库参照实验二:SQL server 2005高可用性之----数据库镜像

中的生成脚本生成数据库,本实验对其数据库的存放做了调整,将数据和日志文件存放在D:/SQL_Data/Performance目录下。
    4.对已存在要创建的分区表为:Performance数据库下的Orders表.
    5.对Orders表中的orderdate列按年进行水平分区

四、具体试验步骤:     
    1.创建分区函数
       确定分区的数目及分区的列,列的数据类型。本例将Orders表的orderdate按年份水平分五个区,则需要定义四个边界点值。如下,

use Performance;
go     
Create partition function
Part_func_orders(datetime) as
range left
for values('20021231 23:59:59.997',
                 '20031231 23:59:59.997',
                 '20041231 23:59:59.997',
                 '20051231 23:59:59.997');
go
--或者使用range right来创建分区函数
Create partition function
Part_func_orders(datetime) as
range right
for values('20030101 00:00:00.000',
                 '20040101 00:00:00.000',
                 '20050101 00:00:00.000',
                 '20060101 00:00:00.000');
go
/*分区值的表示范围(使用range left)
–infinity < x1 <= 20021231
 20030101 < x2 <= 20031231
 20040101 < x3 <= 20041231
 20050101 < x4 <= 20051231
 20060101 < x5 <= +infinity
infinity本应当为20020101或20061231,此处仅用于说明表示范围
----------------------------------------------------------
分区值的表示范围(使用range right)
–infinity < x1 < 20030101
 20030101 <= x2 < 20040101
 20040101 <= x3 < 20050101
 20050101 <= x4 < 20060101
 20060101 <= x5 < +infinity
通过以上分析表明当range中使用left时,分区的范围右边为小于等于values所指定的值,
当range中使用right时,分区范围左边为大于等于values所指定的值。 

规律:在使用 LEFT 分区函数时,第一个值将作为第一个分区中的上边界。在使用 RIGHT 分区函数时,第一个值将作为第二个分区的下边界*/

    2. 添加文件组和文件
        针对所创建的分区来创建文件组和文件,我们可以创建五个文件组,五个不同的ndf文件来存放不同年份的orders,可以放置于不同的磁盘来减少I/O的开销,也可以在一个文件组中创建多个文件来存放不同年份的orders,本例创建了四个文件组,其中有一年的orders放置到了Primary组中。

alter database Performance
add filegroup [FG1];
go
alter database Performance
add filegroup [FG2];
go
alter database Performance
add filegroup [FG3];
go
alter database Performance
add filegroup [FG4];
go
alter database Performance
add file
(name = FG1_data,filename = 'D:/SQL_Data/Performance/FG1_data.ndf',size = 3MB)
to filegroup [FG1];
alter database Performance
add file
(name = FG2_data,filename = 'D:/SQL_Data/Performance/FG2_data.ndf',size = 3MB)
to filegroup [FG2];
alter database Performance
add file
(name = FG3_data,filename = 'D:/SQL_Data/Performance/FG3_data.ndf',size = 3MB)
to filegroup [FG3];
alter database Performance
add file
(name = FG4_data,filename = 'D:/SQL_Data/Performance/FG4_data.ndf',size = 3MB)
to filegroup [FG4];
go

    3. 创建分区架构并关联到分区函数

Create partition scheme Part_func_orders_scheme
as partition Part_func_orders
to ([FG1],[FG2],[FG3],[FG4],[Primary]);
go

    4.重建索引(删除聚集索引以及需要分区字段的索引后重建该类索引,表被按分区值将分配到各文件组)

EXEC sp_helpindex N'orders' --查看orders中使用的索引
drop index idx_cl_od
on orders;
go
create clustered index idx_cl_od
on orders(orderdate)

on Part_func_orders_scheme(orderdate);
go

 

    5. 查看分区的相关情况

--查看分区及分区范围的情况
select * from sys.partitions where object_id = object_id('orders');
select * from sys.partition_range_values;

--查看分区架构情况
select * from sys.partition_schemes;

--查看某一特定分区列值属于哪个分区
select Performance.$partition.Part_func_orders('20050325') as partition_num;

--查看某一特定分区的记录
select * from orders where Performance.$partition.Part_func_orders(orderdate) = 2

--查看各分区所包含的记录数
select $partition.Part_func_orders(orderdate) as partition_num,
  count(*) as record_num
from orders
group by $partition.Part_func_orders(orderdate)
order by $partition.Part_func_orders(orderdate);

    6.分区的管理

--增加分区值,增加分区之前应先增加或设置新分区使用的文件组
alter database Performance
add filegroup [FG5];
go

alter database Performance
add file
(name = FG5_data,filename = 'D:/SQL_Data/Performance/FG5_data.ndf',size = 3MB )
to filegroup [FG5];
go

alter partition scheme Part_func_orders_scheme
next used [FG5];
go

 

alter partition function Part_func_orders()
split range('20061231 23:59:59.997')
go

 

insert into orders
select 10000001,'C0000012906',213,'I','20070101','a'
union all select 10000002,'C0000019995',213,'I','20070109','a'
union all select 10000003,'C0000019996',410,'I','20070512','a';
go

 

select * from orders where Performance.$partition.Part_func_orders(orderdate) = 6

--合并分区
--合并分区后,以下将新增的三条记录放到了第5个分区中

alter partition function Part_func_orders()
merge range('20061231 23:59:59.997');
go

时间: 2024-10-30 00:54:34

实验三:SQL server 2005基于已存在的表创建分区的相关文章

SQL Server 2005基于消息的应用程序介绍

基于消息的应用程序并不是一个新概念,但一直以来,从头编写这样的应用程序都相当困难.我将在一系列三篇文章中讨论一个建立异步消息应用程序的新平台,本文为第一篇,我将在其中说明基于消息的应用程序这一概念,以及一个建立包含在SQL Server 2005中的这些应用程序的新型基础程序. 基于消息的应用程序介绍 处理消息的应用程序是大体上会成功的应用程序.实际上,大多数大型应用程序都应用了某种类型的消息处理.这种处理可能相当简单,例如,把一个文件放在网络共享中,以便另一个应用程序能够处理这个文件:之后,你

SQL server 2005 切换分区表

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/11/10/4794371.aspx     SQL server 2005 切换分区表 在日常工作中经常需要用到分区表切换的问题,笔者在此列出几种常见的分区表切换的问题,供参考. 一.分区表的切换无外乎以下三种形式: 1.将一个分区中的数据切换成单个表. 2.将表作为分区切换到已分区的表中. 3.将分区从一个已分区表切换到另一个已分区表. 二.切换分区表的主要手段: ALTER

SQL Server 2005 中的商务智能和数据仓库(1)

本文概述了 SQL Server 2005 Beta 2 中"商务智能"平台的增强功能.本文并非实施指南,而是为读者提供了关于"商务智能"平台增强功能的信息. 一.简介 Microsoft SQL Server 2005 是一个完整的商务智能 (BI) 平台,其中为用户提供了可用于构建典型和创新的分析应用程序所需的各种特性.工具和功能.本文简要介绍了您在构建分析应用程序时将要用到的一些工具,并着重介绍了一些新增功能,这些新增功能使复杂 BI 系统的构建和管理比以往更

SQL Server 2005的数据挖掘功能的最佳实践

作为向用户销售个性化铃声和其它可以被下载到手机的内容提供商,需要时刻和市场保持同步,了解用户需求.ABS-CBN Interactive公司(以下简称为ABSI)是菲律宾最大的综合性媒体和娱乐公司ABS-CBN广播公司的子公司,ABSI公司通过搜索它自己的在线交易(OLTP)数据来向客户提供有价值的交叉销售信息.但是这个搜索需要很多天时间才能够完成,不能够为客户提供个性化建议.ABSI公司希望通过提高系统的响应速度从而在商业活动中占据主动地位,以增加销售额. 通过和微软商务智能金牌合作伙伴 dB

SQL SERVER 2005数据库镜像(1)

本文对SQL SERVER 2005数据库镜像进行了教程式的讲解,具体内容包括:介绍.动态.可用性场景.实现和高可用性技术,供大家参考! 概述 数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术.数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故障时快速转移到备用服务器.可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用服务器和数据库. 自动进行故障转移并且使数据损失最小化通常包括昂贵的硬件和复杂的软件.但是,数据库镜像可

无法在 SQL Server 2005 Manger Studio 中录入中文的

问题表现:在 SQL Server 2005 Manger Studio中打开表,无法输入中文,只能输入英文 问题重现:1. 我们建立如下三个测试表:CREATE TABLE ta(    id int IDENTITY,    col varchar(50)) CREATE TABLE tb(    col varchar(50),    id int IDENTITY) CREATE TABLE tc(    col1 varchar(50),    col2 as col1) 2. 在SQ

SQL Server 2005 中的树形数据处理示例-1

server|示例|数据 SQL Server 2005 中的树形数据处理示例 -- 创建测试数据 if exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)    drop table [tb]GO -- 示例数据create table [tb]([id] int PRIMARY KEY,[pid] int,name nvar

实验二:SQL server 2005高可用性之----数据库镜像

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/11/04/4769060.aspx       SQL server 2005高可用性之数据库镜像,是SQL server 2005的新技术之一,是一种基于软件的高可用性解决方案,可以对不同服务器或同一服务器不同实例之间的数据库实验无数据延迟,自动故障转移的热备份.数据库镜像是基于数据库级别的,只适用于使用完整恢复模式的数据库.       一.实验目的:掌握SQL server

实验一:SQL server 2005高可用性之----日志传送

如转载,请注明出处:http://blog.csdn.net/robinson_0612/archive/2009/10/31/4751070.aspx           SQL server 2005高可用性之日志传送是在SQL server 2000 日志传送基础之上的延续,两者其本质上并没有太大的差异.日志传送能够同步位于不同服务器或同一服务器不同实例之间的数据库,通过将主服务器上备份出来的一系列日志自动传送到辅助服务器上并进行恢复.当主服务器宕机的时候,日志传送功能并不能实现从主服务器