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

Administration SQL Server Discussion :

Erreur job rebuild_index : La base de données ' ' n'existe pas


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Par défaut Erreur job rebuild_index : La base de données ' ' n'existe pas
    Bonjour,

    J'ai eu une erreur durant un job de rebuild d'index (OFFLINE) chez un client.

    Exécuté en tant qu''utilisateur*: XXXXX\SQLAgentExec.
    XXXX [SQLSTATE 01000] (message 0)
    XXXX [SQLSTATE 01000] (message 0)
    XXXX [SQLSTATE 01000] (message 0)
    XXXX [SQLSTATE 01000] (message 0)
    XXXX [SQLSTATE 01000] (message 0) La base de données ' ' n'existe pas. Assurez-vous que le nom a été saisi correctement. [SQLSTATE 08004] (erreur 911). L'étape a échoué.

    On peut constater qu'il a correctement fait le REBUILD pour les bases précédentes et d'un coup, il spécifie que la base ' ' n'existe pas, seulement, je n'ai aucune base de données disposant d'un nom composé d'espace.

    Avez-vous déjà rencontré ce problème ? J'ai vérifié les autres jobs et aucun ne se lance en même temps.

    Par avance, je vous remercie.

    DEBOTTE Donovan

  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
    Par défaut
    bonjour,

    Comment fonctionne le job ? pouvez vous poster le code ?

    on peut raisonnablement penser qu'il génère dynamiquement les commandes de reconstruction d'index, et qu'une erreur l’emmène à un moment à générer un code comme USE [ ] par exemple.

    modifiez le code du script pour afficher/récupérer les commandes générées...

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Par défaut
    Bonjour et merci pour ton commentaire
    Alors, le job appelle une procédure stockée qui va bien générer dynamiquement les commandes.
    Il récupère les bases :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    DECLARE dbcursor CURSOR
     FOR SELECT name FROM master.sys.databases
     WHERE state_desc = 'ONLINE'  
     and name NOT IN ('master','tempdb','model','msdb')
    OPEN dbcursor  
    FETCH NEXT FROM dbcursor INTO @db;
    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
     print @db;
     
     SELECT @edition = CONVERT(varchar(50),SERVERPROPERTY('Edition'))
     
      IF (@edition like '%Enterprise%')
      BEGIN  
     set @subquery = 'REBUILD WITH (ONLINE = ON)'
      END
      ELSE  
      BEGIN 
     set @subquery = 'REBUILD'
      END
     
     -- Recup DBID
     SET @recupDbID = N'USE ['+ @db +']; SELECT TOP 1 @dbid = DB_ID()';
     exec sp_executesql @recupDbID, N'@dbid int out', @dbid out
     
     
     SET @cmd = '
     USE ['+ @db +'];
     INSERT INTO #tempcursor
        SELECT ''USE ['+@db+']; ALTER index [''+i.name+''] ON [''+TABLE_SCHEMA+''].[''+OBJECT_NAME(ips.object_id)+''] '+@subquery+';'' as valueReturn
        FROM sys.dm_db_index_physical_stats('+@dbid+', default, default, default, default) ips
           INNER JOIN sys.indexes i
           ON ips.index_id = i.index_id AND ips.object_id = i.object_id
           INNER JOIN INFORMATION_SCHEMA.TABLES 
           ON OBJECT_NAME(ips.object_id) = TABLE_NAME
           WHERE ips.object_id > 99 AND ips.avg_fragmentation_in_percent >= 30 AND
           ips.index_id > 0 AND ips.page_count > 0;';
     EXECUTE (@cmd);
    On constate bien qu'il y a deux endroits dans le job ou la commande USE XXX va être générée, mais je n'arrive pas à trouver ce qui peux causer l'erreur.
    En utilisant la commande SELECT utilisé dans le CURSOR, je retrouve bien les BDD, mais aucune avec un nom rempli d'espace.

    Pour ce que tu as évoqué (modifier le script), le soucis c'est que se problème survient de temps en temps seulement.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Peut-être qu'un PRINT (@cmd) à la place du execute permettrait de voir le code généré...

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2018
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2018
    Messages : 32
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Peut-être qu'un PRINT (@cmd) à la place du execute permettrait de voir le code généré...
    En utilisant un PRINT (@cmd); je récupère bien les bonnes infos :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    TOTO
     
     USE [TOTO];
     INSERT INTO #tempcursor
        SELECT 'USE [TOTO]; ALTER index ['+i.name+'] ON ['+TABLE_SCHEMA+'].['+OBJECT_NAME(ips.object_id)+'] REBUILD;' as valueReturn
        FROM sys.dm_db_index_physical_stats(5, default, default, default, default) ips
           INNER JOIN sys.indexes i
           ON ips.index_id = i.index_id AND ips.object_id = i.object_id
           INNER JOIN INFORMATION_SCHEMA.TABLES 
           ON OBJECT_NAME(ips.object_id) = TABLE_NAME
           WHERE ips.object_id > 99 AND ips.avg_fragmentation_in_percent >= 30 AND
           ips.index_id > 0 AND ips.page_count > 0;
    TATA
     
     USE [TATA];
     INSERT INTO #tempcursor
        SELECT 'USE [TATA]; ALTER index ['+i.name+'] ON ['+TABLE_SCHEMA+'].['+OBJECT_NAME(ips.object_id)+'] REBUILD;' as valueReturn
        FROM sys.dm_db_index_physical_stats(6, default, default, default, default) ips
           INNER JOIN sys.indexes i
           ON ips.index_id = i.index_id AND ips.object_id = i.object_id
           INNER JOIN INFORMATION_SCHEMA.TABLES 
           ON OBJECT_NAME(ips.object_id) = TABLE_NAME
           WHERE ips.object_id > 99 AND ips.avg_fragmentation_in_percent >= 30 AND
           ips.index_id > 0 AND ips.page_count > 0;
    TITI
     
     USE [TITI];
     INSERT INTO #tempcursor
        SELECT 'USE [TITI]; ALTER index ['+i.name+'] ON ['+TABLE_SCHEMA+'].['+OBJECT_NAME(ips.object_id)+'] REBUILD;' as valueReturn
        FROM sys.dm_db_index_physical_stats(8, default, default, default, default) ips
           INNER JOIN sys.indexes i
           ON ips.index_id = i.index_id AND ips.object_id = i.object_id
           INNER JOIN INFORMATION_SCHEMA.TABLES 
           ON OBJECT_NAME(ips.object_id) = TABLE_NAME
           WHERE ips.object_id > 99 AND ips.avg_fragmentation_in_percent >= 30 AND
           ips.index_id > 0 AND ips.page_count > 0;

  6. #6
    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
    Par défaut
    quel est le contenu de #tempcursor après l’exécution du script et... quelle est la suite du script ?

Discussions similaires

  1. Base de données n'existe pas sur un autre PC
    Par kortobi dans le forum JDBC
    Réponses: 2
    Dernier message: 08/10/2014, 19h31
  2. [2K8] la base de données n'existe pas
    Par dingo200 dans le forum SSAS
    Réponses: 3
    Dernier message: 01/04/2009, 15h53
  3. erreur de pilote pour base de donnée
    Par sandytarit dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 19/12/2006, 14h59
  4. Réponses: 6
    Dernier message: 09/06/2006, 12h17
  5. ERREUR DE CONNEXION à une base de donnée ACCESS protégée
    Par unionriton dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/05/2005, 09h35

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