3

毎日自動アーカイブをしたいテーブルがあります。したがって、毎日明確にするために、その日に生成された情報を取得して、別のアーカイブテーブルではなく(同じテーブルの)別のパーティションに移動したいと思います。これは、新しいデータと同じクエリで古いデータにアクセスできるようにするためです。

SQL Server 2005を使用しています。http://msdn.microsoft.com/en-us/library/ms345146 (SQL.90).aspxの記事を読みましたが、パーティショニング関数を次のように記述できませんでした。私のニーズを満たします。

したがって、私が存在することを望む解決策は、それ以上の干渉を必要としない1回限りの構成でなければなりません。何か提案はありますか?

4

1 に答える 1

3

これは、分割されたテーブルで簡単に実行できます。以下のスクリプト例 -- 一時的なデータベース TestDB を作成します。使用したくない場合は、データベースを別のものに変更してください。スクリプトをそのまま実行すると、最後にクリーンアップされます データベースを作成します。ビットに基づくパーティショニング機能を追加します。テーブル TestTable を作成します。3 つの「ライブ」行をテーブルに挿入します sys.partitions から詳細を選択することにより、3 つの行がすべてパーティション テーブルの 1 つにあることを示します。その後、レコードの 1 つを更新してアーカイブします sys.partitions から情報を再選択して、レコードが 2 番目のスキーマに移動したことを示します。

必要なのは、記録をアーカイブするプロセスをセットアップすることだけです。

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 に答える