输入banner图图片脚本导航/分类

SQL Server数据归档的解决方案

= N‘TestDB‘) DROP DATABASE TestDB; GO CREATE DATABASE TestDB ON PRIMARY (NAME=‘TestDB_Part1‘, FILENAME= ‘D:\TestData\Primary\TestDB_Part1.mdf‘, SIZE=10, MAXSIZE=100, FILEGROWTH=1 ), FILEGROUP TestDB_Part2 (NAME = ‘TestDB_Part2‘, FILENAME = ‘D:\TestData\Secondary\TestDB_Part2.ndf‘, SIZE = 10, MAXSIZE=100, FILEGROWTH=1 ); GO

 

 查看数据属性,有点不一样

技术分享

打开数据:

use TestDB

 

新建分区函数,参数类型是bit,即已归档的数据

Create Partition Function TestDB_ArchivePartitionRange(bit) AS RANGE right FOR VALUES(1)

 

新建一个分区方案,即已经归档的数据保存到TestDB_Part2分区文件上

CREATE Partition Scheme TestDB_ArchivePatitionScheme AS PARTITION TestDB_ArchivePartitionRange TO ([PRIMARY], TestDB_Part2);

 

创建一个测试数据表,绑定一个分区方案

CREATE TABLE TestArchiveTable  (Archived Bit NOT NULL, Date DATETIME)  ON TestDB_ArchivePatitionScheme (Archived)

 

插入一些新的数据,已供测试

INSERT INTO TestArchiveTable (Archived, Date)  VALUES (0,‘2011-01-01‘);  INSERT INTO TestArchiveTable (Archived, Date)  VALUES (0,‘2011-02-01‘);  INSERT INTO TestArchiveTable (Archived, Date)  VALUES (0,‘2011-03-01‘); 

 

先来一个普通查询

技术分享

 

看看每个分区表存放数据的情况,分区一有3条记录,分区2没有记录,即没有归档数据

SELECT * FROM sys.partitions  WHERE OBJECT_NAME(OBJECT_ID)=‘TestArchiveTable‘; 

技术分享

 

好了,我们归档一条记录看看

update TestArchiveTable  set Archived = 1 where Date = ‘2011-03-01‘  SELECT * FROM sys.partitions  WHERE OBJECT_NAME(OBJECT_ID)=‘TestArchiveTable‘; 

技术分享

 

结果就是我们想要的。

 

总结:利用分区表不仅能大幅提升数据访问性能,而且可以根据需要分别存储数据到不同的文件,方便我们有效地利用数据,简化系统开发的复杂性。

SQL Server数据归档的解决方案

标签: