71 votes

Comment puis-je déplacer la table vers un autre groupe de fichiers?

J'ai SQL Server 2008 Ent et de la base de données OLTP avec deux grandes tables. Comment je peux déplacer ce tableau à un autre groupe sans interruption de service? Maintenant, à propos de 100 à 130 enregistrements insérés et de 30 à 50 enregistrements mis à jour chaque seconde dans ce tableau. Chaque table ont environ 100 m, les enregistrements et les six domaines (y compris un champ de la géographie).

Je cherche une solution via google, mais toutes les solutions contiennent "créer un deuxième tableau, insérer des lignes de la première table, drop première table, bla bla bla".

Puis-je utiliser le partitionnement des fonctions pour résoudre ce problème? Je vous remercie.

92voto

marc_s Points 321990

Si vous voulez il suffit de déplacer la table à un nouveau groupe de fichiers, vous devez recréer l'index cluster sur la table (après tout: l'index cluster est la table de données) sur le nouveau groupe de fichiers que vous voulez.

Vous pouvez faire cela avec par exemple:

CREATE CLUSTERED INDEX CIX_YourTable
   ON dbo.YourTable(YourClusteringKeyFields)
   WITH DROP_EXISTING
   ON [filegroup_name]

ou si votre index cluster est unique:

CREATE UNIQUE CLUSTERED INDEX CIX_YourTable
   ON dbo.YourTable(YourClusteringKeyFields)
   WITH DROP_EXISTING
   ON [filegroup_name]

Cela crée un nouvel index cluster et de la chute de l'existant, et il crée le nouvel index cluster dans le groupe de fichiers que vous avez spécifié - et voila, votre table de données a été déplacé vers le nouveau groupe de fichiers.

Consultez le MSDN docs sur CREATE INDEX pour plus de détails sur toutes les options disponibles que vous pouvez spécifier.

Bien sûr, cela ne permet pas encore de traiter avec partioning, mais c'est une toute autre histoire à lui tout seul...

8voto

gbn Points 197263

Le partitionnement est une solution, mais vous pouvez "passer" l'index cluster pour le nouveau groupe de fichiers avec aucune interruption de service (sous réserve de certaines conditions, voir le lien ci-dessous) à l'aide de

CREATE CLUSTERED /*oops*/ INDEX ... WITH (DROP_EXISTING = ON, ONLINE = ON, ...) ON newfilegroup

L'index cluster est les données et c'est le même que le déplacement d'un groupe de fichiers.

Consultez CREATE INDEX

Cela dépend si votre clé primaire est organisé en clusters ou pas, ce qui change la façon dont on le ferait

2voto

imanabidi Points 3203

Cet extrait de la documentation en Ligne SQL Server dit tout: "Parce que le niveau de la feuille d'un index cluster et les pages de données sont les mêmes, par définition, la création d'un index cluster et à l'aide de la SUR utilise ou SUR filegroup_name clause déplace effectivement une table du groupe de fichiers sur laquelle le tableau a été créé pour le nouveau schéma de partition ou d'un groupe de fichiers." (Source http://msdn.microsoft.com/en-us/library/ms188783.aspx) à partir de (http://www.mssqltips.com/sqlservertip/2442/move-data-between-sql-server-database-filegroups/)

comme déjà dit par d'autres amis comme a accepté de répondre par marc_s voici la capture d'écran vous donne une autre façon de le faire à l'aide de SSMS GUI.

veuillez noter que vous pouvez déplacer vers un autre groupe de fichiers facilement de l'indice de la propriété dans l'onglet stockage

enter image description here

0voto

Mahmoud Moravej Points 1490

Je pense que ces étapes sont très simples et très simple à déplacer une table pour un autre groupe de fichiers (par le biais de la Gestion de Studio):

  • Déplacer tous les index non cluster à un groupe de fichiers en changeant simplement le groupe de fichiers de propriété pour chaque index

  • Changement de votre cluster d'index non-cluster et de modifier son groupe, il suffit (comme à l'étape précédente)

  • Ajouter un nouvel index cluster avec "nouveau groupe de fichiers" grâce à cette commande(ou via IDE) :

       CREATE CLUSTERED INDEX [PK_temp]
    ON YOURTABLE([Id])
      ON NEWFILEGROUP
    

    (la commande ci-dessus les causes de déplacer toutes les données vers le nouveau groupe de fichiers)

  • Supprimer la ci-dessus temporaire PK (quand il fait son boulot parfaitement!)

  • Changement de votre groupe principal index cluster index (par le biais de l'IDE de nouveau)

L'avantage des étapes ci-dessus n'est pas nécessaire de déplacer existant FK relations. Aussi à l'aide de l'IDE empêche de perdre des données en cas d'erreur.

REMARQUE : assurez-vous de Quota de Disque n'est pas activée pour votre groupe de fichiers ou le mettre ocrrectly. Sinon, vous vous recevez le "groupe de fichiers est plein" d'exception!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X