3

我有一张桌子,每天我都想做自动归档。因此,为了每天清楚,我想获取当天生成的信息并将其移动到另一个分区(同一个表)而不是另一个存档表中。那是因为我希望通过与新数据相同的查询可以访问旧数据。

我正在使用 SQL Server 2005,我已阅读http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx文章,但不知道如何编写分区函数满足我的需要。

所以我希望存在的解决方案应该是一次性配置,不需要任何进一步的干扰。你有什么建议吗?

4

1 回答 1

3

您可以使用分区表轻松完成此操作;下面的示例脚本——它创建了一个临时数据库 TestDB;如果您不想使用它将数据库更改为其他内容。如果您按原样运行脚本,它会在最后自行清理创建数据库;添加基于Bit的分区功能。创建一个表TestTable;使用分区函数将 3 个“实时”行插入表中 通过从 sys.partitions 中选择详细信息来显示 3 行都在其中一个分区表中 然后更新其中一条记录以使其存档 从 sys.partitions 中重新选择信息到表明记录已移至第二个模式。

您需要做的就是设置一个流程来归档记录。

USE master;
GO
--- Step 1 : Create New Test Database with two different filegroups.
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = N'TestDB')
DROP DATABASE TestDB;
GO
CREATE DATABASE TestDB
ON PRIMARY
(NAME='TestDB_Part1',
FILENAME=
'c:\sqldata\TestDB_Part1.mdf',
SIZE=3,
MAXSIZE=100,
FILEGROWTH=1 ),
FILEGROUP TestDB_Part2
(NAME = 'TestDB_Part2',
FILENAME =
'c:\sqldata\TestDB_Part2.ndf',
SIZE =3,
MAXSIZE=100,
FILEGROWTH=1 );
GO



USE TestDB;
GO
--- Step 2 : Create Partition Range Function
CREATE PARTITION FUNCTION TestDB_PartitionRange (Bit)
AS RANGE right FOR
VALUES (1);
GO

CREATE PARTITION SCHEME TestDB_PartitionScheme
AS PARTITION TestDB_PartitionRange
TO ([PRIMARY], TestDB_Part2);
GO


CREATE TABLE TestTable
(Archived Bit NOT NULL,
Date DATETIME)
ON TestDB_PartitionScheme (Archived);
GO


INSERT INTO TestTable (Archived, Date) 
VALUES (0,'2010-01-01');
INSERT INTO TestTable (Archived, Date) 
VALUES (0,'2010-02-01');
INSERT INTO TestTable (Archived, Date) 
VALUES (0,'2010-03-01');
GO

SELECT * FROM TestTable;


SELECT * FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='TestTable';

update TestTable 
set Archived = 1 where Date = '2010-03-01'

SELECT * FROM sys.partitions
WHERE OBJECT_NAME(OBJECT_ID)='TestTable';


use master
go
drop database testdb
于 2010-08-11T11:22:22.610 回答