S’applique à
Project Server 2010

Symptômes

Le nombre d’enregistrements de table de clichés instantanés qui sont générés dans une augmentation de champ Entreprise Indicateur rapidement dans Microsoft Project Server 2010. Ce problème entraîne des problèmes de performances.

Résolution

Pour résoudre ce problème, appliquez le correctif logiciel suivant :

Description de 2597138 du package de correctifs logiciels pour Project Server 2010 (Pjsrvwfe-x-none.msp) : 28 février 2012

Plus d'informations

Ce correctif gère le nombre d’enregistrements de table de clichés instantanés afin que le nombre d’enregistrements n’augmente pas trop. Chaque fois que vous ouvrez ou enregistrez un plan de projet dans Project Professional après avoir appliqué le correctif sur le serveur Project server, enregistrements de la table de clichés instantanés qui sont pertinents pour le projet sont nettoyées. Si vous souhaitez nettoyer les enregistrements de la table de clichés instantanés en bloc, vous pouvez utiliser le script suivant. Avant d’exécuter le script, assurez-vous que vous lisez les points suivants :

  • Effectuer une sauvegarde de la base de données de Project server avant d’exécuter le script.

  • Pour éviter les problèmes de contenu inattendue de la base de données, arrêtez le Service de file d’attente sur les serveurs d’application de projet lorsqu’il n’y a eu aucune activité sur les serveurs pendant plusieurs heures.

  • Valider le script dans un environnement de développement à l’aide de la sauvegarde de la base de données de Project server.

  • Heure à laquelle le temps nécessaire pour exécuter le script dans l’environnement de développement. Le temps nécessaire pour exécuter le script de suppression dépend le serveur SQL et le nombre d’enregistrements qui doivent être supprimées. Assurez-vous que le script est achevé dans les temps prévu.

Pour nettoyer les enregistrements de la table de clichés instantanés en vrac, procédez comme suit :

  1. Exécutez le script suivant sur le brouillon et publié des bases de données et récupérer l’espace libre dans les bases de données :

    --Clean up       MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW       IF object_id('tempdb..#TempTaskCFShadow') IS NOT NULL       BEGIN        drop table #TempTaskCFShadow        END      CREATE table #TempTaskCFShadow (pid uniqueidentifier, tid uniqueidentifier, revCount int, mdpid uniqueidentifier)      INSERT #TempTaskCFShadow (pid, tid, revCount, mdpid)      SELECT PROJ_UID, TASK_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID                        FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW                        GROUP BY PROJ_UID , TASK_UID, MD_PROP_UID       DELETE       FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW         FROM MSP_TASK_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempTaskCFShadow AS newtable      where originalTable.MD_PROP_UID = newtable.mdpid AND      originalTable.PROJ_UID = newtable.pid AND       originalTable.TASK_UID = newtable.tid AND      originalTable.DELETED_REV_COUNTER <> newtable.revCount        DROP TABLE #TempTaskCFShadow--Clean up MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW       IF object_id('tempdb..#TempAssnCFShadow') IS NOT NULL       BEGIN        drop table #TempAssnCFShadow        END      CREATE table #TempAssnCFShadow (pid uniqueidentifier, asid uniqueidentifier, revCount int, mdpid uniqueidentifier)      INSERT #TempAssnCFShadow (pid, asid, revCount, mdpid)      SELECT PROJ_UID, assn_uid, MAX(DELETED_REV_COUNTER), MD_PROP_UID                        FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW                        GROUP BY PROJ_UID , ASSN_UID, MD_PROP_UID       DELETE       FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW        FROM MSP_ASSN_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempAssnCFShadow AS newtable      where originalTable.MD_PROP_UID = newtable.mdpid AND      originalTable.PROJ_UID = newtable.pid AND       originalTable.ASSN_UID= newtable.asid AND      originalTable.DELETED_REV_COUNTER <> newtable.revCount        DROP TABLE #TempAssnCFShadow--Clean up       MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW      IF object_id('tempdb..#TempProjResCFShadow') IS NOT NULL       BEGIN        drop table #TempProjResCFShadow        END        CREATE table #TempProjResCFShadow (pid uniqueidentifier, resid uniqueidentifier, revCount int, mdpid uniqueidentifier)      INSERT #TempProjResCFShadow (pid, resid, revCount, mdpid)      SELECT PROJ_UID, RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID                        FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW                        GROUP BY PROJ_UID , RES_UID, MD_PROP_UID       DELETE       FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW         FROM MSP_PROJ_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjResCFShadow AS newtable      where originalTable.MD_PROP_UID = newtable.mdpid AND      originalTable.PROJ_UID = newtable.pid AND       originalTable.RES_UID = newtable.resid AND      originalTable.DELETED_REV_COUNTER <> newtable.revCount      DROP TABLE #TempProjResCFShadow --Clean up MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW       IF object_id('tempdb..#TempProjCFShadow') IS NOT NULL       BEGIN        drop table #TempProjCFShadow        END        CREATE table #TempProjCFShadow (pid uniqueidentifier, revCount int, mdpid uniqueidentifier)      INSERT #TempProjCFShadow (pid, revCount, mdpid)      SELECT PROJ_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID                        FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW                        GROUP BY PROJ_UID , MD_PROP_UID          DELETE       FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW         FROM MSP_PROJ_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempProjCFShadow AS newtable      where originalTable.MD_PROP_UID = newtable.mdpid AND      originalTable.PROJ_UID = newtable.pid AND       originalTable.DELETED_REV_COUNTER <> newtable.revCount        DROP TABLE #TempProjCFShadow
  2. Exécutez le script suivant sur la base de données publiée après avoir exécuté le script de l’étape 1 sur le brouillon et publié des bases de données :

    --Clean up MSP_RES_CUSTOM_FIELD_VALUES_SHADOW      IF object_id('tempdb..#TempResCFShadow') IS NOT NULL       BEGIN        drop table #TempResCFShadow        END        CREATE table #TempResCFShadow (resid uniqueidentifier, revCount int, mdpid uniqueidentifier)      INSERT #TempResCFShadow (resid, revCount, mdpid)      SELECT RES_UID, MAX(DELETED_REV_COUNTER), MD_PROP_UID                        FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW                        GROUP BY RES_UID, MD_PROP_UID       DELETE       FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW        FROM MSP_RES_CUSTOM_FIELD_VALUES_SHADOW as originalTable, #TempResCFShadow AS newtable      where originalTable.MD_PROP_UID = newtable.mdpid AND      originalTable.RES_UID = newtable.resid AND      originalTable.DELETED_REV_COUNTER <> newtable.revCount        DROP TABLE #TempResCFShadow

État

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Besoin d’aide ?

Vous voulez plus d’options ?

Explorez les avantages de l’abonnement, parcourez les cours de formation, découvrez comment sécuriser votre appareil, etc.