如何在SQL Server中进行自动数据存档?

时间:2010-08-11 08:09:46

标签: sql-server sql-server-2005 partitioning continuous archiving

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

我正在使用SQL Server 2005,我已阅读http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx文章,但无法找到如何编写分区功能以满足我的需求。

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

1 个答案:

答案 0 :(得分:3)

您可以使用分区表轻松完成此操作;下面的示例脚本 - 它创建一个临时的db TestDB;如果您不想使用它,请将数据库更改为其他内容。它最终会自我清理 如果您按原样运行脚本 创建数据库; 添加基于Bit的分区函数。 创建一个表TestTable;应用分区功能 Inerts 3“Live”行进入表格 通过从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