转载出处:http://blog.csdn.net/doyouknowm/archive/2009/08/20/4466072.aspx

  1 -- 进行演示操作前, 先备份, 以便可以在演示完成后, 恢复到原始状态
  2 USE master
  3 -- 备份
  4 BACKUP DATABASE AdventureWorks
  5     TO DISK = 'AdventureWorks.bak'
  6     WITH FORMAT
  7 
  8 ---- 恢复
  9 --RESTORE DATABASE AdventureWorks
 10 --    FROM DISK = 'AdventureWorks.bak'
 11 --    WITH REPLACE
 12 GO
 13 
 14 --=========================================
 15 -- 转换为分区表
 16 --=========================================
 17 USE AdventureWorks
 18 GO
 19 
 20 -- 1. 创建分区函数
 21 --    a. 适用于存储历史存档记录的分区表的分区函数
 22 DECLARE @dt datetime
 23 SET @dt = '20020101'
 24 CREATE PARTITION FUNCTION PF_HistoryArchive(datetime)
 25 AS RANGE RIGHT
 26 FOR VALUES(
 27     @dt, 
 28     DATEADD(Year, 1, @dt))
 29 
 30 --    b. 适用于存储历史记录的分区表的分区函数
 31 --DECLARE @dt datetime
 32 SET @dt = '20030901'
 33 CREATE PARTITION FUNCTION PF_History(datetime)
 34 AS RANGE RIGHT
 35 FOR VALUES(
 36     @dt, 
 37     DATEADD(Month, 1, @dt), DATEADD(Month, 2, @dt), DATEADD(Month, 3, @dt),
 38     DATEADD(Month, 4, @dt), DATEADD(Month, 5, @dt), DATEADD(Month, 6, @dt),
 39     DATEADD(Month, 7, @dt), DATEADD(Month, 8, @dt), DATEADD(Month, 9, @dt),
 40     DATEADD(Month, 10, @dt), DATEADD(Month, 11, @dt), DATEADD(Month, 12, @dt))
 41 GO
 42 
 43 -- 2. 创建分区架构
 44 --    a. 适用于存储历史存档记录的分区表的分区架构
 45 CREATE PARTITION SCHEME PS_HistoryArchive
 46 AS PARTITION PF_HistoryArchive
 47 TO([PRIMARY], [PRIMARY], [PRIMARY])
 48 
 49 --    b. 适用于存储历史记录的分区表的分区架构
 50 CREATE PARTITION SCHEME PS_History
 51 AS PARTITION PF_History
 52 TO([PRIMARY], [PRIMARY], 
 53     [PRIMARY], [PRIMARY], [PRIMARY],
 54     [PRIMARY], [PRIMARY], [PRIMARY],
 55     [PRIMARY], [PRIMARY], [PRIMARY],
 56     [PRIMARY], [PRIMARY], [PRIMARY])
 57 GO
 58 
 59 -- 3. 删除索引
 60 --    a. 删除存储历史存档记录的表中的索引
 61 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ProductID
 62 DROP INDEX Production.TransactionHistoryArchive.IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
 63 
 64 --    b. 删除存储历史记录的表中的索引
 65 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ProductID
 66 DROP INDEX Production.TransactionHistory.IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
 67 GO
 68 
 69 -- 4. 转换为分区表
 70 --    a. 将存储历史存档记录的表转换为分区表
 71 ALTER TABLE Production.TransactionHistoryArchive
 72     DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
 73     WITH(
 74         MOVE TO PS_HistoryArchive(TransactionDate))
 75 
 76 --    b.将存储历史记录的表转换为分区表
 77 ALTER TABLE Production.TransactionHistory
 78     DROP CONSTRAINT PK_TransactionHistory_TransactionID
 79     WITH(
 80         MOVE TO PS_History(TransactionDate))
 81 GO
 82 
 83 -- 5. 恢复主键
 84 --    a. 恢复存储历史存档记录的分区表的主键
 85 ALTER TABLE Production.TransactionHistoryArchive
 86     ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
 87         PRIMARY KEY CLUSTERED(
 88             TransactionID,
 89             TransactionDate)
 90 
 91 --    b. 恢复存储历史记录的分区表的主键
 92 ALTER TABLE Production.TransactionHistory
 93     ADD CONSTRAINT PK_TransactionHistory_TransactionID
 94         PRIMARY KEY CLUSTERED(
 95             TransactionID,
 96             TransactionDate)
 97 GO
 98 
 99 -- 6. 恢复索引
100 --    a. 恢复存储历史存档记录的分区表的索引
101 CREATE INDEX IX_TransactionHistoryArchive_ProductID 
102     ON Production.TransactionHistoryArchive(
103         ProductID)
104 
105 CREATE INDEX IX_TransactionHistoryArchive_ReferenceOrderID_ReferenceOrderLineID
106     ON Production.TransactionHistoryArchive(
107         ReferenceOrderID,
108         ReferenceOrderLineID)
109 
110 --    b. 恢复存储历史记录的分区表的索引
111 CREATE INDEX IX_TransactionHistory_ProductID 
112     ON Production.TransactionHistory(
113         ProductID)
114 
115 CREATE INDEX IX_TransactionHistory_ReferenceOrderID_ReferenceOrderLineID
116     ON Production.TransactionHistory(
117         ReferenceOrderID,
118         ReferenceOrderLineID)
119 GO
120 
121 -- 7. 查看分区表的相关信息
122 SELECT
123     SchemaName = S.name,
124     TableName = TB.name,
125     PartitionScheme = PS.name,
126     PartitionFunction = PF.name,
127     PartitionFunctionRangeType = CASE
128             WHEN boundary_value_on_right = 0 THEN 'LEFT'
129             ELSE 'RIGHT' END,
130     PartitionFunctionFanout = PF.fanout,
131     SchemaID = S.schema_id,
132     ObjectID = TB.object_id,
133     PartitionSchemeID = PS.data_space_id,
134     PartitionFunctionID = PS.function_id
135 FROM sys.schemas S
136     INNER JOIN sys.tables TB
137         ON S.schema_id = TB.schema_id
138     INNER JOIN sys.indexes IDX
139         on TB.object_id = IDX.object_id
140             AND IDX.index_id < 2
141     INNER JOIN sys.partition_schemes PS
142         ON PS.data_space_id = IDX.data_space_id
143     INNER JOIN sys.partition_functions PF
144         ON PS.function_id = PF.function_id
145 GO
146 
147 --=========================================
148 -- 移动分区表数据
149 --=========================================
150 -- 1. 为存储历史存档记录的分区表增加分区, 并接受从历史记录分区表移动过来的数据
151 --    a. 修改分区架构, 增加用以接受新分区的文件组
152 ALTER PARTITION SCHEME PS_HistoryArchive
153 NEXT USED [PRIMARY]
154 
155 --    b. 修改分区函数, 增加分区用以接受从历史记录分区表移动过来的数据
156 DECLARE @dt datetime
157 SET @dt = '20030901'
158 ALTER PARTITION FUNCTION PF_HistoryArchive()
159 SPLIT RANGE(@dt)
160 
161 --    c. 将历史记录表中的过期数据移动到历史存档记录表中
162 ALTER TABLE Production.TransactionHistory
163     SWITCH PARTITION 2
164         TO Production.TransactionHistoryArchive PARTITION $PARTITION.PF_HistoryArchive(@dt)
165 
166 --    d. 将接受到的数据与原来的分区合并
167 ALTER PARTITION FUNCTION PF_HistoryArchive()
168 MERGE RANGE(@dt)
169 GO
170 
171 -- 2. 将存储历史记录的分区表中不包含数据的分区删除, 并增加新的分区以接受新数据
172 --    a. 合并不包含数据的分区
173 DECLARE @dt datetime
174 SET @dt = '20030901'
175 ALTER PARTITION FUNCTION PF_History()
176 MERGE RANGE(@dt)
177 
178 --    b.  修改分区架构, 增加用以接受新分区的文件组
179 ALTER PARTITION SCHEME PS_History
180 NEXT USED [PRIMARY]
181 
182 --    c. 修改分区函数, 增加分区用以接受新数据
183 SET @dt = '20041001'
184 ALTER PARTITION FUNCTION PF_History()
185 SPLIT RANGE(@dt)
186 GO
187 
188 
189 --=========================================
190 -- 清除历史存档记录中的过期数据
191 --=========================================
192 -- 1. 创建用于保存过期的历史存档数据的表
193 CREATE TABLE Production.TransactionHistoryArchive_2001_temp(
194     TransactionID int NOT NULL,
195     ProductID int NOT NULL,
196     ReferenceOrderID int NOT NULL,
197     ReferenceOrderLineID int NOT NULL
198         DEFAULT ((0)),
199     TransactionDate datetime NOT NULL
200         DEFAULT (GETDATE()),
201     TransactionType nchar(1) NOT NULL,
202     Quantity int NOT NULL,
203     ActualCost money NOT NULL,
204     ModifiedDate datetime NOT NULL
205         DEFAULT (GETDATE()),
206     CONSTRAINT PK_TransactionHistoryArchive_2001_temp_TransactionID
207         PRIMARY KEY CLUSTERED(
208             TransactionID,
209             TransactionDate)
210 )
211 
212 -- 2. 将数据从历史存档记录分区表移动到第1步创建的表中
213 ALTER TABLE Production.TransactionHistoryArchive
214     SWITCH PARTITION 1
215         TO Production.TransactionHistoryArchive_2001_temp
216 
217 -- 3. 删除不再包含数据的分区
218 DECLARE @dt datetime
219 SET @dt = '20020101'
220 ALTER PARTITION FUNCTION PF_HistoryArchive()
221 MERGE RANGE(@dt)
222 
223 -- 4. 修改分区架构, 增加用以接受新分区的文件组
224 ALTER PARTITION SCHEME PS_HistoryArchive
225 NEXT USED [PRIMARY]
226 
227 -- 5. 修改分区函数, 增加分区用以接受新数据
228 SET @dt = '20040101'
229 ALTER PARTITION FUNCTION PF_HistoryArchive()
230 SPLIT RANGE(@dt)
231 
232 

SqlServer2005数据库分区相关推荐

  1. SQLServer2005表分区知识点摘要

    1.            准备条件 SQLSERVER2005数据库服务器. 首先在192.168.1.200上创建数据库LeeTest,然后向数据库增加文件组FG1,FG2,FG3,FG4,FG5 ...

  2. 早在公元前五百年,孙子就参透了数据库分区的真谛

    来自:DBAplus社群 作者介绍 宇文湛泉,现任金融行业核心业务系统DBA,主要涉及Oracle.DB2.Cassandra等数据库开发工作. 数据库分区,我觉得是一个称得上"伟大&quo ...

  3. mysql的分区技术作用_理解MySQL数据库分区管理的技术细节

    在MySQL数据库中,表的不同部分在不同的位置被存储为单独的表.分区主要就是用来解决表在不同的位置存储的问题.在其他数据库中,也会存在这种情况.他们将这种类型的数据表称之为分区表.分区的管理,对于My ...

  4. 高性能网站建设之 MS Sql Server数据库分区

    什么是数据库分区?数据库分区是一种对表的横向分割,Sql server 2005企业版和之后的Sql server版本才提供这种技术,这种对表的横向分割不同于2000中的表分割,它对访问用户是透明的, ...

  5. 数据库分区概念及简单运用

    概念:数据库分区是一种物理数据库设计技术 目的:主要目的是为了在特定SQL操作中减少数据读写的总量以缩短响应时间 分类:分为水平分区(Horizontal Paritioning)和垂直分区(Vert ...

  6. 有关客户端连接SQLServer2005数据库

    前几天帮一位香港的同胞,远程解决了一个有关Zblog连接SQLServer2005数据库的问题. 今天刚好有空把有关SQLServer2005的连接介绍下. 在进行连接SQLServer2005之前, ...

  7. mysql数据库分区-根据时间分区

    一.数据库分区 -- 创建表 CREATE TABLE test_log (time datetime,msg VARCHAR ( 2000 ) -- id INT NOT NULL AUTO_INC ...

  8. 数据库分区的通俗解释

    关于数据库分区,分表,分库,我通俗易懂的来举几个栗子,看过还不懂,你打我... 村里一家四口人(老爹叫A)有两儿子(分别是A1,A2),长大了要自己种地了,就嚷嚷着要分家,把村东的一块地给大儿子A1, ...

  9. 数据库分区、分表与分库管理

    目录 一.数据库分区 1. 定义 2. 优点 3. 分类 4. 使用场景 二.数据库分表 1. 定义 2. 作用 3. 使用场景 4. 分区和分表的区别 三.数据库分库​ ​​​​​​​1. 目的 2 ...

最新文章

  1. python 项目构建工具_python的构建工具setup.py
  2. Review Python Numpy 数组的初始化和基本操作
  3. JAVA线程池管理及分布式HADOOP调度框架搭建
  4. Python常用扩展包
  5. 应用分类练手项目计划
  6. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题
  7. jieba库词频统计_用jieba库统计文本词频及云词图的生成
  8. 面试常见java异常题_Java异常面试题(含答案)
  9. jstl中的日期格式化
  10. linux thrift 头文件,Thrift官方安装手冊(译)
  11. python3怎么安装opencv_如何在Ubuntu 16.04上安装支持Python 3.x的OpenCV
  12. python 开发框架 ant_用 Eclipse 和 Ant 进行 Python 开发
  13. 机器码、序列号、认证码、注册码的生成算法(一)
  14. 格林威治时间转北京时间
  15. 啥是CTF?新手如何入门CTF?
  16. 途牛VS去哪儿VS去啊旅游产品竞品分析报告
  17. verilog语法中+:和-:用法
  18. IDEA提示“程序包xxx不存在“
  19. 图片在线收款发货系统源码
  20. Xshell7如何查看登录密码

热门文章

  1. Hawk使用补充说明
  2. 中文输入法不触发onkeyup事件的解决办法
  3. 使用VMwork Station Pro 14 安装CentOS7.6详细教程
  4. mysql-事物实现原理
  5. Linux只列出目录的几种方式
  6. UVA 10129 Play on Words(欧拉道路)
  7. web前端开发怎么学,web教程资源
  8. ThreadGroup
  9. 如何在多Node版本的情况下公用一个npm
  10. Windows Server入门系列38 访问网络共享