3

J'ai une table pour laquelle je veux faire de l'archivage automatique tous les jours. Donc, pour être clair tous les jours je veux prendre les informations générées pendant cette journée et les déplacer dans une autre partition (de la même table) pas dans une autre table d'archives. C'est parce que je veux que les anciennes données soient accessibles avec la même requête que les nouvelles. J'utilise SQL Server 2005, j'ai lu http://msdn.microsoft.com/en-us/library/ms345146(SQL.90).aspx article mais je ne pouvais pas savoir comment puis-je écrire la fonction de partitionnement pour satisfaire mes besoins. Donc, la solution que j'espère exister devrait être une configuration unique qui n'aura pas besoin d'autres interférences. Avez-vous des suggestions?Comment faire l'archivage automatique des données dans SQL Server?

+0

Vous obtiendrez probablement de meilleure qualité et plus de réponses à serverfault.com - où les administrateurs système et les administrateurs de base de données traîner .... –

+0

ou dba.stackexchange.com – idstam

Répondre

3

Vous pouvez facilement le faire avec des tables partitionnées; exemple de script ci-dessous - il crée un db TestDB temporaire; Si vous ne voulez pas l'utiliser, changez la base de données en quelque chose d'autre. Il se nettoie à la fin SI vous exécutez le script tel quel Crée la base de données; ajoute une fonction de partitionnement basée sur un bit. Crée une table TestTable; appliqué avec la fonction de partitionnement Inerte 3 lignes "Live" dans la table Indique que 3 lignes sont toutes dans l'une des tables de partition en sélectionnant les détails dans sys.partitions Puis met à jour l'un des enregistrements pour le rendre archivé Retire les informations de sys.partitions pour montrer que l'enregistrement a été déplacé vers le second schéma.

Tout ce que vous devez faire est de configurer un processus pour archiver les enregistrements.

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 
+0

Eh oui, je l'ai solution comme ça, mais mis en œuvre I Je ne veux pas faire du travail tous les jours ce qui fait des changements dans les anciennes lignes pour repartitionner la table. Je veux avoir une configuration, en utilisant quel serveur sql créera automatiquement une nouvelle partition tous les jours ou quelque chose comme ça. C'est possible? – giolekva

+0

IM ne sais pas comment vous archivez vos travailleurs; L'exemple ci-dessus déplace la partition chaque fois que vous définissez le drapeau sur Archivé. Si vous voulez des partitions espacées d'un jour pour vos données archivées (je pense que vous pouvez en avoir 40k); vous devez préconfigurer votre fonction de partition un an à l'avance (et dans un an, la mettre à jour) afin qu'elle se divise par dates. Vous aurez besoin de regarder vos politiques d'indexation après l'avoir fait cependant que des milliers de paritions peuvent souvent conduire à des problèmes de fragmentation. – u07ch