Meilleur auteur de réponses
Faire un MOVE d'une table d'un filegroup vers un autre

Question
-
Bonjour, je dois bouger une table du filegroup PRIMARY vers un filegroup secondaire. J'ai un script qui effectue cette tâche, mais il bloque sur celles qui ont un champ de type filestream. L'erreur rencontrée est la numéro 5505 Message : A table with FILESTREAM column(s) must have a non-NULL unique ROWGUID column
Le script utilisé est une version modifiée de celui-ci (http://www.sqlmag.com/article/sql-server-2000/moving-tables-between-filegroups-a-better-way) et utilise le principe suivant : supprimer la clé primaire de la table avec un move vers l'autre filegroup puis recréer la clé primaire, tel que expliqué là : http://decipherinfosys.wordpress.com/2007/08/14/moving-tables-to-a-different-filegroup-in-sql-2005/
Je ne vois pas vraiment de solution pour que cette technique fonctionne, mais je ne vois la raison...
Réponses
-
Bonjour, je n'ai pas continué dans cette voie.. Comme c'est une base de données qui m'est donnée avant qu'elle soit utilisée.. Je me suis dit que j'allais générer le DDL de la DB (ce qui n'est pas sans me causer des soucis non plus...)
- Marqué comme réponse Aurel Bera vendredi 11 janvier 2013 11:56
Toutes les réponses
-
Bonjour
Regardez la réponse ici :
http://social.msdn.microsoft.com/Forums/en/transactsql/thread/0817090a-002c-4ba4-a19c-0e3591c5f255
Pour le tableau avec des champs filestream essayez de créer un tableau clone dans un autre filegroup, copiez l’info, effacer le tableau d’origine et renommer la deuxième tableau.
Cordialement,
-
Bonjour, tout d'abord merci pour cette réponse.
Malheureusement, cette technique fonctionne pour autant que la table en question ne soit pas référencée par d'autres tables (contrainte foreign key). Dans mon cas, les ID de ces tables sont foreign key dans d'autres tables. Il faudrait alors un procédé "récursif" qui
Crée une table clone
copie les données
Supprime les contraintes foreign key et les rejoue pour pointer sur la table clone
Supprime la table
Renomme
C'est quelque chose de faisable par script, mais je m'étonne de voir qu'il n'y ait pas de commande TSQL pour faire cela.
-
Bonjour
C’est vrai, ça vas devenir un grand script.
Une autre solution, (un peu) plus simple c’est de casser chaque table avec FILESTREAM en deux tables –une contient tous les colonnes moins le FILESTREAM et l’autre contient une clé et le champ FILESTREAM (créer nouvelle table de type ID, FILESTREAM et effacer la colonne FILESTREAM dans la première table.).
Le second pas c’est de déplacer la table originale et après ca recréer la colonne FILESTREAM et faire un update sur l’info trouve dans la seconde table. Apres ça, on peut effacer la seconde table.
Cordialement.
-
Bonjour
Un petit retour, SVP?
Merci
-
Bonjour, je n'ai pas continué dans cette voie.. Comme c'est une base de données qui m'est donnée avant qu'elle soit utilisée.. Je me suis dit que j'allais générer le DDL de la DB (ce qui n'est pas sans me causer des soucis non plus...)
- Marqué comme réponse Aurel Bera vendredi 11 janvier 2013 11:56
-
Bonjour
On a marque votre reponse.
Cordialement,