Au nom de toute l'équipe de Support Technique Project et Project Server, je vous souhaite à tous et à vos proches de très Bonnes Fêtes de Noël.
Au nom de toute l'équipe de Support Technique Project et Project Server, je vous souhaite à tous et à vos proches de très Bonnes Fêtes de Noël.
Bonjour,
Vous êtes nombreux à utiliser les triggers sous SQL Server pour ajouter des commandes et des actions basés sur des évènements se produisant sur une table de Project Server 2010.
Que ce soit pour alimenter une table externe ou envoyer une notification par mail, le trigger est une solution simple et efficace d’étendre les fonctionnalités de Project Server 2010, même si nous recommandons de l’utiliser avec parcimonie du fait de l’impact non négligeable qu’il peut avoir sur les performance de Project Server, pouvant dans un cas extrême, provoquer des deadlocks.
Mais le trigger peut aussi avoir un intérêt lorsqu’il faut chercher la cause d’une action dont on ne connait pas la cause.
Ainsi, prenons l’exemple d’un cas dans lequel des enregistrements sont supprimés d’une table, sans que l’on sache pourquoi, mais qui provoque des disparitions de lignes dans les Feuilles de temps ou dans l’affichage de Mes Tâches.
En fait, et je vous passe tous les détails de la recherche de cause, ces enregistrements sont supprimés de la tables MSP_TASKS_SAVED de la base Published, créant ainsi des enregistrements orphelins dans la tables MSP_ASSIGNMENTS_SAVED.
Comme nous n’avons de scénario pour reproduire à volonté ce phénomène, il nous reste le choix entre:
La première solution est la plus facile à mettre en place mais le résultat obtenu peut varier considérablement en fonction du l’activité sur la base de données et surtout, il ne faut pas arrêter la trace trop tard sous peine de perdre les informations intéressantes.
De plus, cette solution a un impact non négligeable sur les performances et ne peut donc pas être utilisée sur une longue période.
La deuxième solution est aussi très facile à implémenter mais le résultat va rester assez limité car on ne pourra obtenir que des informations succintes sur l’évènement : Quand et Qui. Mais impossible de connaitre le Quoi car la fonction EVENTDATA de SQL ne peut être utilisée que dans un trigger DML qui, je le rappelle ne peut pas être associé à une action DELETE sur un table.
La dernière solution est donc la meilleure car en plus de pouvoir vous donner des informations sur le Quand et le Qui, elle va aussi vous indiquer le Quoi. C’est donc cette solution que je vais vous détailler:
La première étape consiste à créer le fichier de log où seront stockées les informations d’Audit:
use master
go
-- Create the server audit.
CREATE SERVER AUDIT Audit_mytrig
TO FILE ( FILEPATH = 'C:\' ) ;
GO
-- Enable the server audit.
ALTER SERVER AUDIT Audit_mytrig
WITH (STATE = ON) ;
GO
Pour créer le trigger, vous devez exécuter la procédure suivante:
USE PROJECTSERVER_PUBLISHED ;
GO
CREATE DATABASE AUDIT SPECIFICATION Audit_mytrig_Table
FOR SERVER AUDIT Audit_mytrig
ADD (DELETE
ON MSP_TASKS_SAVED by dbo)
WITH (STATE = ON) ;
GO
A partir ce cette étape, toute action de DELETE sur la table MSP_TASKS_SAVED va écrire une information dans le fichier de log.
Pour lire le contenu du fichier de log, vous pouvez utiliser la procédure suivante:
USE master
GO
-- get the audit file
DECLARE @filepattern VARCHAR(300)
DECLARE @folder VARCHAR(255)
DECLARE @auditguid VARCHAR(36)
SELECT @auditguid = audit_guid,@folder = log_file_path
FROM sys.server_file_audits WHERE name = 'Audit_mytrig'
SELECT @filepattern = @folder + '*_' + @auditguid + '*'
-- view the results
SELECT event_time,session_id,a.name AS Action,c.class_type_desc AS ObjectType,
f.server_principal_name,f.schema_name,f.OBJECT_NAME,f.statement,f.additional_information
FROM fn_get_audit_file(@filepattern,NULL,NULL) AS f
JOIN sys.dm_audit_class_type_map c ON f.class_type = c.class_type
JOIN sys.dm_audit_actions a ON f.action_id = a.action_id
AND c.securable_class_desc = a.class_desc
WHERE f.action_id <> 'AUSC'
ORDER BY event_time DESC,sequence_number
Voici un exemple de ce que la requête renvoie alors qu’un DELETE vient d’être exécuté sur la table MSP_TASKS_SAVED:
Vous remarquez qu’en plus des informations basiques du Quand et du Qui, on a aussi une information très intéressante sur le Quoi. Cela peut être une requête ou une Procédure Stockée. Dans ce dernier cas, le nom de la procédure stockée apparait dans la colonne Statement.
En conclusion, on peut dire que cette fonction peut être très utile pour connaitre la raison d’un phénomène que l’on ne peut expliquer. Est-ce une requête ou une procédure stockée liée à du code personnalisé ? Est-ce du code lié à une action particulière faite dans Project Server ?
L’information Statement peut nous aider considérablement pour comprendre ce qu’il se passe et peut être un très bon point de départ à la recherche d’une cause ou d’un scénario de reproduction.
N’hésitez pas à commenter cet article.
Bonne journée,
Marc Biarnès
Bonjour,
Nous avons reçu au Support, et ce de manière assez régulière, des incidents nous décrivant un phénomène plutôt surprenant qui se produit sur les serveurs Project Server 2010.
En effet, vous avez été plusieurs à constater que sur vos serveurs, les Services “Microsoft Project Server Event Service 2010" et "Microsoft Project Server Queue Service 2010” était arrêtés et désactivés de manière régulière, sans aucune intervention humaine.
Le symptôme marquant qui a permis de détecter ce phénomène est que les jobs de publication, sauvegarde, archivage n’étaient plus exécutés mais restaient dans la Queue en attente.
Pourtant, quand vous vérifiez les instances de ces Services dans la SharePoint Central Admin, vous pouvez voir qu’ils apparaissent comme étant Démarrés:
Pourtant, si vous vérifiez leur état dans la console Services des Outils d’Administration de Windows Server, vous les voyez arrêtés et désactivés:
Le fait de rechanger les propriétés en Automatique et de redémarrer les services permet de refaire fonctionner Project Server… quelques temps. Car en effet, à nouveau, ces services vont s’arrêter et se désactiver automatiquement.
Bien que la réinstallation de la plate-forme permette de corriger ce problème, je me suis penché dessus pour essayer de comprendre ce qui provoquait ce phénomène.
Tout d’abord, après de multiples analyses de log ULS fournis par les différentes machines impactées, j’ai pu découvrir que le phénomène n’est pas si aléatoire que cela. En effet, curieusement, on détecte rapidement que l’arrêt des services et leur désactivation interviennent à heure régulière.
Qui dit “heure régulière” dit règle automatique. Et en fait, toujours en regardant les logs ULS, on peut voir que c’est une des règles du Hourly Health Analysis Job exécuté par les SharePoint Timer, qui est la cause de ce phénomène:
Et plus précisément, il s’agit de cette règle en particulier:
Pour le vérifier, il suffit simplement, si vos Services Project Server 2010 sont démarrés, d’exécuter cette règle en cliquant sur le bouton “Run Now”.
A ce moment-là, vous verrez les Services s’arréter et se désactiver et dans les logs ULS, vous obtiendrez le résultat suivant:
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | Health | ag78 | Verbose | Checking the Microsoft Project Server Queuing Service windows service instance. |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | General | 0000 | Verbose | Entered SPAdvApi32.IsServiceRunning(ProjectQueueService14) |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | Health | ag7d | Verbose | The service is not disabled, but should be. |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | Health | 8fs1 | Verbose | Finished invoking the Check() method. The rule Failed. |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | Health | 8fs4 | Medium | Automatic repair is being attempted. |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | General | 0000 | Verbose | Entered SPAdvApi32.IsServiceRunning(SPAdminV4) |
| OWSTIMER.EXE (0x1A60) | 0x0C48 | SharePoint Foundation | General | 0000 | Verbose | Entered SPAdvApi32.StopService(ProjectQueueService14) |
| Microsoft.Office.Project.Server (0x1A08) | 0x22B0 | Project Server | General | 8zdx | High | [SERVICE] ProjectQueueService14: shutting down |
Ce qu’il est intéressant de constater, c’est que cette règle arrête et désactive les Services Project Server 2010 car elle pense que l’état des Services devrait être ainsi.
Cela n’est possible que si la règle détecte qu’il y a un problème entre l’état des Services et ceux de l’instance.
Et c’est effectivement le cas. Comme nous 'l’avons vu plus haut, dans la Central Admin, l’instance Project Server est démarrée (“Started”).Or, si nous exécutons la commande Powershell suivante:
((Get-SPFarm).Services| where {$_.Name -match "ProjectQueueService14"}).instances
((Get-SPFarm).Services| where {$_.Name -match "ProjectEventService14"}).instances
on obtient une réponse sans équivoque : “Disabled”:
![]()
Et c’est donc là que se pose le problème d’incohérence des états qu’essaye de corriger la règle.
Même si le scénario pour reproduire ce phénomène reste mystérieux, on peut imaginer que cela soit dû à une erreur de configuration lors du premier démarrage des Services Project Server 2010 après leur installation.
Cependant, on peut définitivement corriger cela en exécutant la commande PowerShell suivante sur tous les serveurs sur lesquels les Services sont installés:
Start-SPServiceInstance -Identity <Id>
Pendant quelques minutes durant lesquelles le Service est démarré et initialisé, le service est en état Provisionning:
![]()
Puis, une fois le processus terminé, il est a nouveau Online:
Si cela ne fonctionne pas correctement sur un de vos serveurs, faites un Config Cache Refresh et exécuter cette commande à nouveau:
Stop-SPServiceInstance -Identity <Id>
Start-SPServiceInstance -Identity <Id>
<Id> est l’identifiant de l’instance du Service que l’on obtient en exécutant les commandes PowerShell Get-SPFarm précédentes.
N’hésitez pas à commenter cet article et partager vos expériences.
Bonne journée,
Marc Biarnès
Bonjour,
Pour Project et Project Server 2007 :
Mises à Jour complètes (tout langage):
Mises à Jour Individuelles (tout langage):
Pour Project et Project Server 2010 :
Mises à Jour complètes (tout langage):
Mises à Jour Individuelles (tout langage):
IMPORTANT: L’installation du Service Pack 1 sur les clients et sur les serveurs est dorénavant obligatoire avant l’installation de tout CU pour Office, Sharepoint et Project Server 2010
Je vous rappelle qu’en ce qui concerne la version 2010, le correctif client est disponible en deux versions : x86 ou x64. Vérifiez bien que la version que vous téléchargez est en rapport avec la version du client installé sur vos machines.
Si vous désirez de plus amples informations sur les différentes versions de correctifs disponibles, je vous renvoie à l’article suivant : http://blogs.technet.com/b/frenchpjblog/archive/2010/05/04/le-cumulative-update-du-mois-d-avril-est-disponible.aspx
Bonne journée
Marc Biarnès
Bonjour,
La particularité de Project Professional est son intégration dans la famille Office tout en ayant quelques libertés. En effet, il possède son propre pack de langue. La méthodologie abordée aujourd’hui fonctionne également pour les anciennes versions. Lorsque vous lancez l’installation du pack de langue vous obtenez par défaut l’installation d’Office. En effet, on voit bien dans l’image ci-dessus que Project possède son propre Pack de langue ainsi que Visio.
En cliquant sur le setup, vous accédez à l’installation des packs de langue.
|
| |
Il faut donc sélectionner le Pack de Langue Project. Vous continuez et acceptez les termes du contrat.
Ensuite, vous installez :
Une fois l’installation terminée, vous obtenez le message suivant et vous pouvez fermer.
Maintenant, il nous faut activer la nouvelle langue installée. Vous ouvrez Project Professionnel et allez dans “File” puis dans “options”.
Dans l’onglet “Language” vous vous dirigez dans la rubrique “Choose Display and Help Languages “ vous sélectionnez le français comme paramètre par defaut (cliquez sur “Set as Default”).
Cliquez “Ok” pour fermer la boîte de dialogue et une nouvelle fois “Ok” au message ci-dessous:
Vous fermez l’application et l’ouvrez à nouveau.
Votre Project Professionnel est en Français.
J’espère que cet article vous aura aidé dans votre installation. Si vous êtes intéressés par la version server. Celle-ci arrivera prochainement.