34,590
社区成员
发帖
与我相关
我的任务
分享
alter database wc
set single_user
with rollback immediate
drop database wc
--1.创建数据库
create database wc
on primary
(
name = wc_data,
filename = 'D:\wc_data.mdf'
)
log on
(
name = wc_log1,
filename = 'd:\wc_log1.ldf'
),
(
name = wc_log2,
filename = 'd:\wc_log2.ldf'
)
go
use wc
go
--4.创建分区函数,3个值,但是会有4个分区
create partition function wcLeftRange(char(6))
as range left for values('201309','201310','201311')
--5.创建分区方案,4个文件组
create partition scheme wcLeftRangeScheme
as partition wcLeftRange
to ([primary],[primary],[primary],[primary])
--6.建表,聚集索引,插入数据
create table temp_UserBill
(
BusinessDate char(6), F1 varchar(100), F2 Varchar(100)
)
create clustered index idx_temp_UserBill on temp_UserBill(BusinessDate)
insert into temp_UserBill
select '201309','aa1','bb1' union all
select '201309','aa2','bb2' union all
select '201310','aa1','bb1' union all
select '201310','aa2','bb2' union all
select '201311','aa1','bb1' union all
select '201311','aa2','bb2' union all
select '201312','aa','bb'
go
--7.要转化为分区表,必须要删除聚集索引
drop index idx_temp_UserBill on temp_UserBill
--8.然后再重新建立一个聚集索引,并且指定:分区方案和分区字段
create clustered index idx_temp_UserBill on temp_UserBill(BusinessDate)
on wcLeftRangeScheme(BusinessDate)
--9.查询表中的数据,是在那个分区里
select *,
--$partition函数,后面是分区函数名称,列名称,显示了这条数据是在第几个分区
$partition.wcLeftRange(BusinessDate) as partition
from temp_UserBill
/*
BusinessDate F1 F2 partition
201309 aa1 bb1 1
201309 aa2 bb2 1
201310 aa1 bb1 2
201310 aa2 bb2 2
201311 aa1 bb1 3
201311 aa2 bb2 3
201312 aa bb 4
*/
--10.1指定下一个要使用的分区文件组
alter partition scheme wcLeftRangeScheme
next used [primary]
--10.2定义一个新的边界值来创建一个新的分区
alter partition function wcLeftRange()
split range ('201312')
--11.新建一个表,你把800w数据,导入到这个表
create table Import_UserBill
(
BusinessDate char(6), F1 varchar(100), F2 Varchar(100)
)on wcLeftRangeScheme(BusinessDate)
insert into Import_UserBill
select '201401','aa1','bb1' union all
select '201401','aa2','bb2'
--上面先导入数据,再建立索引,速度会更快
create clustered index idx_Import_UserBill on Import_UserBill(BusinessDate)
on wcLeftRangeScheme(BusinessDate)
--12.把源表的第2个分区转到目标表
--要求:源表和目标表必须在同一个文件组上,且目标表必须为空
--当然,目标表也可以是分区表,也必须为空,且在同一个文件组上
alter table Import_UserBill
SWITCH partition 5 to dbo.temp_UserBill partition 5
--13.
select *,
--$partition函数,后面是分区函数名称,列名称,显示了这条数据是在第几个分区
$partition.wcLeftRange(BusinessDate) as partition
from temp_UserBill
/*
BusinessDate F1 F2 partition
201309 aa1 bb1 1
201309 aa2 bb2 1
201310 aa1 bb1 2
201310 aa2 bb2 2
201311 aa1 bb1 3
201311 aa2 bb2 3
201312 aa bb 4
201401 aa1 bb1 5
201401 aa2 bb2 5
*/
--对分区3的索引,重新组织一下,这个可以
alter index idx_temp_UserBill on temp_UserBill
reorganize partition= 3
--但对分区3的索引,禁用,就不可以,会报错,那儿要drop索引,再重建,就更会报错了
alter index idx_temp_UserBill on temp_UserBill
disable partition= 3
/*
消息 102,级别 15,状态 1,第 2 行
'disable' 附近有语法错误。
*/