Bonjour ,
A partir de SQL Server 2005, une nouvelle clause MOVE TO a été ajoutée à la commande ALTER TABLE pour permettre le déplacement d'une table sur un autre groupe de fichiers. L’instruction MOVE TO est utilisée avec la clause DROP CONSTRAINT dans le ALTER TABLE syntaxe. Quand une contrainte de clé primaire ou une contrainte qui a créé un index cluster est supprimé, la feuille de données au niveau des lignes de l'index cluster sont placés dans la table en « non cluster ».
Lorsqu’un index cluster est supprimé (En laissant tomber la contrainte qui a créé index cluster), on peut déplacer la table au nouveau groupe de fichiers ou schéma de partition dans une même opération en utilisant l'option de cette nouvelle «aller». Voyons cela avec l'aide d'un exemple.
Nous allons créer dans la base de données de test, deux groupes de fichiers et une table et le remplir avec quelques données.
L’exécution de la procédure stockée système sp_help pour la table TAB1 indique que le groupe de fichiers pour la table est TEST_DATA_1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 USE master GO CREATE DATABASE TEST GO ALTER DATABASE TEST ADD FILEGROUP TEST_DATA_1 GO ALTER DATABASE TEST ADD FILEGROUP TEST_DATA_2 GO ALTER DATABASE TEST ADD FILE ( NAME = TEST1, FILENAME = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\TEST_1.ndf, SIZE = 1MB, MAXSIZE = 10MB, FILEGROWTH = 1MB) TO FILEGROUP TEST_DATA_1 GO ALTER DATABASE TEST ADD FILE ( NAME = TEST2, FILENAME = C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\TEST_2.ndf, SIZE = 1MB, MAXSIZE = 10MB, FILEGROWTH = 1MB) TO FILEGROUP Test_DATA_2 GO USE TEST GO
Le résultat ci-dessus indique que la contrainte PK_TAB1 est utilisée pour créer l'index cluster sur la table TAB1. Veuillez noter qu'à chaque fois qu'une contrainte de clé primaire est définie, et l’index cluster n'existe pas sur la table, SQL Server crée un index clustérisé pour la contrainte de clé primaire. Ce n'est pas la même pour une contrainte UNIQUE Contrainte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 sp_help TAB1 Data_located_on_filegroup --------- TEST_DATA_1 ---- ------------------- PK_TAB1 clustered, unique, primary key located on TEST_DATA_1 constraint_name CONSTRAINT_TYPE --------- ------ PRIMARY KEY (cluster) PK_TAB1
Unique constraint/ index sera toujours non-cluster sauf qu’il est indiqué lors de la création de contrainte ou index.
Pour déplacer la table à un groupe de fichiers différents, nous avons besoin d'utiliser la commande drop constraint indiqué ci-dessous. Une fois la table est déplacée vers un nouveau filegroup nous pouvons recréer la contrainte de clé primaire.
Après avoir exécuté la commande ci-dessus, table TAB1 va maintenant résider sur un groupe de fichiers TEST_DATA_2. Si vous ré-exécuter la procédure stockée sp_help, il affiche le groupe de fichiers changement pour la table TAB1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 ALTER TABLE DROP CONSTRAINT TAB1 PK_TAB1 AVEC (MOVE TO TEST_DATA_2) GO ALTER TABLE TAB1 ADD CONSTRAINT PK_TAB1 PRIMARY KEY (TAB1_ID) GO
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5sp_help TAB1 Data_located_on_filegroup --------- TEST_DATA_2
Nous devons garder à l'esprit les restrictions suivantes lorsque l'option MOVE TO est utilisé:
• MOVE TO n'est pas valide pour les vues indexées ou les index non-cluster.
• Le schéma de partition ou groupe de fichiers doit déjà exister.
• Si MOVE TO n'est pas spécifié, la table sera situé dans le même schéma de partition ou groupe de fichiers qui a été défini pour l'index cluster.
Cela devient très pratique quand on veut déplacer des grandes tables à leur propre groupe de fichiers pour des raisons de performance ou pour la sauvegarde des tables par l'intermédiaire de groupes de fichiers de sauvegarde.
Merci
Partager