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?
Répondre
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
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
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
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 .... –
ou dba.stackexchange.com – idstam