Trouver et changer le propriétaire d’un plan de maintenance

Bien qu’incomplets en termes de fonctionnalités par rapport à une procédure stockée qui ferait la même chose, les plans de maintenance s’avèrent très simple à développer et à déployer dans un temps court. Je pense notamment à l’impossibilité de compresser des sauvegardes sous SQL Server 2008.

Comme beaucoup de choses effectuées à l’aide des interfaces graphiques proposées par SQL Server Management Studio, les effets produits par l’exécution d’une tâche ne sont pas toujours détaillés. Le propriétaire d’un plan de maintenance n’y échappe pas et est écrasé à chaque modification du plan.
Voici donc comment le trouver, et le changer.

Voici la requête qui permet de trouver le propriétaire de tous les plans de maintenance, avec quelques détails :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-------------------------------
-- Nicolas Souquet - 27/11/2011
-------------------------------
SELECT    P.name AS SSIS_package_name
    , P.createdate
    , P.ownersid
    , SP.name AS owner_name
    , CASE P.packagetype  
      WHEN 0 THEN 'Default'
      WHEN 1 THEN 'SQL Server Import and Export Wizard'
      WHEN 2 THEN 'DTS Designer in SQL Server 2000'
      WHEN 3 THEN 'SQL Server Replication'
      WHEN 5 THEN 'SSIS Designer'
      WHEN 6 THEN 'Maintenance Plan Designer or Wizard'
    END AS packagetype
FROM    msdb.dbo.sysssispackages AS P
INNER JOIN  sys.server_principals AS SP
      ON P.ownersid = SP.sid
--WHERE    P.name = 'monPlanDeMaintenance'

En dé-commentant la clause WHERE de cette requête, on peut trouver le propriétaire d’un plan de maintenance particulier.

Dès lors on peut changer le propriétaire d’un plan de maintenance particulier à l’aide de la requête suivante :

1
2
3
4
5
6
7
8
9
-------------------------------
-- Nicolas Souquet - 27/11/2011
-------------------------------
UPDATE    msdb.dbo.sysssispackages
SET    ownersid = SP.sid
FROM    msdb.dbo.sysssispackages AS P
CROSS JOIN  sys.server_principals AS SP
WHERE    P.name = 'monPlanDeMaintenance'
AND    SP.name = 'nomDeLoginDuNouveauPropriétaire'

Ceci fonctionne sous réserve que nomDeLoginDuNouveauPropriétaire et monPlanDeMaintenance existent ;)

Et c’est malheureusement à effectuer après chaque modification du plan de maintenance si le login qui le modifie n’est pas celui qui l’exécute !

Bons plans de maintenance ;)

ElSüket

Laisser un commentaire