[英]How to do automatic data archiving in SQL Server?
我有桌子每天我想做自动存档。 因此,为了清楚每天我想要获取当天生成的信息并将其移动到另一个分区(同一个表)而不是另一个归档表中。 那是因为我希望可以使用与新查询相同的查询来访问旧数据。
我正在使用SQL Server 2005,我已阅读http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx文章,但无法找出如何编写分区功能满足我的需求。
所以我希望存在的解决方案应该是一次性配置,不需要任何进一步的干扰。 你有什么建议吗?
您可以使用分区表轻松完成此操作; 下面的示例脚本 - 它创建一个临时的db TestDB; 如果您不想使用它,请将数据库更改为其他内容。 如果您运行脚本,它会在最后清理它自己创建数据库; 添加基于Bit的分区函数。 创建一个表TestTable; 应用分区函数Inerts 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.