通过视图修改数据。
分布式,通过视图来更新数据。
复杂的分区管理,查询时间随分区增加二增加。
实现方法:
step 1 : 按照水平分区来建立基础表。
step 2 : 连接服务器。
step 3: 建立分区视图。
step 4: 通过分区视图来访问数据和更新数据。
例子:
//SQL2005分区表用例
use master
alter database adventureWorks add filegroup [fg1]
go
alter database adventureWorks add filegroup [fg2]
go
alter database adventureWorks add filegroup [fg3]
go
alter database adventureWorks
add file
(name='fg1',
filename='c:\fg1.ndf',
size=5mb)
to filegroup [fg1]
go
alter database adventureWorks
add file
(name='fg2',
filename='d:\fg2.ndf',
size=5mb)
to filegroup [fg2]
go
alter database adventureWorks
add file
(name='fg3',
filename='e:\fg3.ndf',
size=5mb)
to filegroup [fg3]
go
use adventureWorks
go
create partition function emailPF(nvarchar(50)) as range right for values ('G','N')
go
create partition scheme emailPS as partition emailPF to (fg1,fg2,fg3)
go
create table customermail (custid int, email nvarchar(50)) on emailPS(email)
go
insert customermail values (1, '[email protected]')
insert customermail values (2, '[email protected]')
insert customermail values (3, '[email protected]')
insert customermail values (4, '[email protected]')
insert customermail values (5, '[email protected]')
insert customermail values (6, '[email protected]')
select * from customermail
// 撤销修改,回复原状
drop table customermail
go
drop partition scheme emailPS
go
drop partition function emailPF
go
use master
go
alter database adventureWorks
REMOVE FILE fg1
go
alter database adventureWorks
REMOVE FILEGROUP fg1
go
alter database adventureWorks
REMOVE FILE fg2
go
alter database adventureWorks
REMOVE FILEGROUP fg2
go
alter database adventureWorks
REMOVE FILE fg3
go
alter database adventureWorks
REMOVE FILEGROUP fg3
go
我做了如下设想,希望利用分区表来实现:
1 我把日常交易流水数据分成2个表存储:Transaction 最近2年内数据,分区存储在[PRIMARY];TransactionArchive 是归档后的数据,保存2年以上历史数据,分区存储[分区1:hist1 分区2:PRIMARY(空的)]。 2个表中数据无交集。
2 2005年以前数据已经归档到了TransactionArchive 表中,希望存放到hist1文件组中。
3 分区迁移目的:Transaction2005年的数据迁移到TransactionArchive的分区1中。
实现方法://迁移2005
1 分区函数定义部分参见上面的事例。
2 表分区的迁移,必须迁移表的分区和被迁移标的分区在同一文件组中,所以先给TransactionArchivePS2 准备下一个分区的文件组合Transaction的分区2保持一致[PRIMARY]。
ALTER PARTITION SCHEME TransactionArchivePS2 NEXT USED [PRIMARY]
3 TransactionArchivePF2() 拆分一个新的分区2:2005年度的数据
ALTER PARTITION FUNCTION TransactionArchivePF2() SPLIT RANGE('01/01/2005')
4 迁移分区Transaction 2到TransactionArchive的分区2。 特别说明: 这一部分迁移限制较多,除了上面的文件组的原因外,主要是索引方面的问题,最好先停止索引文件,然后重新建立索引。
ALTER TABLE Production.TransactionHistory SWITCH PARTITION 2 TO Production.TransactionHistoryArchive PARTITION 2
5 合并TransactionHistoryArchive分区2到分区1,减少一个分区。所有的数据到集中到文件组hist1上了,实现了我们的设计要求。 (如何察看表到底存储在那各文件组?我没有找到方法,只是通过试验发现的,合并后hist1发生了较大规模的扩展,可见数据实际存放在hist1上)
ALTER PARTITION FUNCTION TransactionArchivePF2() merge RANGE('01/01/2005')
6 合并TransactionHistory分区1和分区2:2006-01-01以前的数据
ALTER PARTITION FUNCTION TransactionPF1() merge RANGE('01/01/2005')
ALTER PARTITION SCHEME TransactionPS1 NEXT USED [PRIMARY]
ALTER PARTITION FUNCTION TransactionPF1() merge RANGE('01/01/2006')
7 重新建立索引。