IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Supprimer des jobs dont le nom de la DB se termine par xx


Sujet :

Développement SQL Server

  1. #1
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut Supprimer des jobs dont le nom de la DB se termine par xx
    Bonjour à tous,

    Je suis sous SQL Server 2005

    Je dois supprimer une centaine de DB suite à une migration d'SQL2005 vers SQL2008.

    Mes DB commencent par un code applicatif, genre PPPA et se termine par _MIG2008. Et pour chaque DB, il y a 2 jobs qui eux sont désactivé mais pas renommé (malheureusement, sinon j'aurais facile).
    Les 2 jobs sont nommés comme ceci : PPPA:Backup 30 minutes et PPPA:backup full
    Via ma variable @DBname, comment puis-je laisser le _MIG2008 mais qu'il prenne les caractères avant le _MIG2008 et supprimer tous les jobs en prenant le nom de la db sans prendre en compte le _MIG2008 ?

    ATTENTION, malheureusement, parfois la DB s'appelle aussi PPPAblablabla

    Je ne sais pas comment adapté la ligne "WHERE name LIKE @DBname ':%'" ? Cette ligne là était utilisée à l'époque pour désactiver les jobs. Enfin si c'est celle-là que je dois adapter.

    Merci

    Voici ma query :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    DECLARE @DBName VARCHAR(255)
    DECLARE @JobName VARCHAR(255)
     
    SET		@DBName = 'MYDB_MIG2008'
     
    DECLARE DeleteJobs CURSOR FOR
    SELECT name
    FROM msdb..sysjobs
    WHERE name LIKE @DBname  ':%'
    OPEN DeleteJobs
    FETCH DeleteJobs INTO @JobName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    PRINT 'Deleting: ' + @JobName
    EXEC msdb.dbo.sp_delete_job @job_name=@JobName
    FETCH DeleteJobs INTO @JobName 
    END
    CLOSE DeleteJobs
    DEALLOCATE DeleteJobs
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Pas sûr d'avoir bien compris votre demande !

    Si vous voulez juste enlever la chaine "_MIG2008" dans @DBName lorsqu'elle existe, vous pouvez faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    REPLACE(@DBName, '_MIG2008', '')

  3. #3
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Bonjour aieeeuuuuu,

    Quand j'ai vu que c'était vous, je me suis dit "super, j'aurai une solution".

    Lol, c'est beau, même sans tout avoir compris, la solution est bonne.

    Voilà ce que j'ai écrit et qui fonctionne parfaitement. Oui c'est vrai, je gagne peut-être 5 secondes par action, mais quand il y a en a une centaine...

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    DECLARE @DBName VARCHAR(255)
    DECLARE @JobName VARCHAR(255)
    DECLARE @DBNamewithoutMIG2008 VARCHAR(255)
     
    SET		@DBName = 'MYDB_MIG2008'
    SET		@DBNamewithoutMIG2008 = REPLACE(@DBName, '_MIG2008', '')
     
    DECLARE DeleteJobs CURSOR FOR
    SELECT name
    FROM msdb..sysjobs
    WHERE name LIKE @DBNamewithoutMIG2008 + ':%'
    OPEN DeleteJobs
    FETCH DeleteJobs INTO @JobName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    PRINT 'Deleting: ' + @JobName
    EXEC msdb.dbo.sp_delete_job @job_name=@JobName
    FETCH DeleteJobs INTO @JobName 
    END
    CLOSE DeleteJobs
    DEALLOCATE DeleteJobs

    MERCI
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Méthode JS qui crée des objets dont le nom est recu en paramètre
    Par power of mind dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/07/2009, 13h44
  2. Select sur des colonnes dont le nom remplit un critère
    Par radzar dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/05/2009, 12h55
  3. Réponses: 2
    Dernier message: 10/04/2007, 15h32
  4. Supprimer des tables dont le nom commence par XXX
    Par Escandil dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/04/2006, 21h46
  5. Supprimer des tables dont le nom commence par XXX
    Par Escandil dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 06/09/2005, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo