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

Sybase Discussion :

[ASE]Vider la base tempdb .


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Par défaut [ASE]Vider la base tempdb .
    Je rebondis sur le sujet Résolu "[ASE]création de table temporaire", je me demandais comment vider la tempdb de toutes ses tables tempo d'un seul coup ??? Bien sur un redémarrage du serveur fait cela car je crois qu'il prend dans Model pour refaire une base tempdb... Mais dans mon contexte c'est pas possible ...
    Donc faut'il passer automatiquement par un script?? si c'est le cas (ce que je pense ...) il faut faire une requète dans sysprocesses pour récupérer les spid et les killer; Mais comment réinjecter les spid ainsi trouvé dans une instruction droptable ???
    Je sais le dev c'est pas ma passion mais si vous pouvez m'aider ce serait sympa.
    lut'

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Pour vider tempdb il faut évidemment dropper les tables utilisateurs qui s'y trouvent. Ces tables sont soit des table temporaires du type #xyz, et dans ce cas elles sont droppées lorsque la connexion ou la proc dans laquelle elles ont été créés termine, ou alors ce sont des tables "normales", qui seront détruites uniquement lors du redémarrage de l'instance.

    On peut trouver la liste des tables temporaires via la table sysobjects de tempdb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select name, loginname from tempdb..sysobjects where name like '#%'
    go
    name                           loginame
    ------------------------------ ------------------------------
    #foo_________00000170008607235 mpeppler
     
    (1 row affected)
    Le numero du spid du process est dans les 5 chiffres commençant à la position 16 du nom nom interne de la table (dans ce cas '17'). Donc on peut trouver tous les SPID qui ont une ou plusieurs tables temporaires avec la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select distinct substring(name, 16, 5) 
      from tempdb..sysobjects 
     where name like '#%'
    Et on peut ensuite utiliser cette information pour killer les sessions...

    Mais dans un serveur actif cette information risque bien d'être très fluide (cad que les SPIDs trouvés n'aurons peut-être déjà plus de tables temporaires lorsque le kill est exécuté, alors que d'autres SPIDs en auront probablement créées...)

    Michael

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Par défaut
    Ok pour la récupération du spid mais comment faire pour réinjecter la sortie de notre requète vers une instruction kill ... En fait c'est un bout de code qu'il me faut...
    Merci en tout cas de ta réponse.
    cdlt

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select distinct "kill " + substring(name, 16, 5) + char(10) + "go" 
      from tempdb..sysobjects 
     where name like '#%'
    On redirige tout cela dans un fichier, et on exécute le script.

    Autrement on peut faire un curseur, et puis faire un kill dans un execute immediate:
    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
     
    declare kill_csr cursor for
       select distinct substring(name, 16, 5) 
      from tempdb..sysobjects 
     where name like '#%'
    go
    declare @spid varchar(20)
            , @cmd varchar(50)
     
    open kill_csr
     
    fetch kill_csr into @spid
    while @@sqlstatus = 0
    begin
        select @cmd = "kill "+@spid
        exec (@cmd)
        fetch kill_csr into @spid
    end
     
    close kill_csr
    deallocate cursor kill_csr
     
    go
    Note - code non testé!!

    Michael

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 293
    Par défaut
    Ben écoute merci bien c'est éxactement ce que je voulais..
    Merci encore mickael.

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

Discussions similaires

  1. Vider une base
    Par arcane dans le forum Requêtes
    Réponses: 13
    Dernier message: 04/12/2012, 22h59
  2. [ASE]Gestion base tempdb
    Par jeeps64 dans le forum Sybase
    Réponses: 4
    Dernier message: 09/03/2007, 17h34
  3. [ASE][12.5.1]probleme sur la base tempdb
    Par dngaya dans le forum Sybase
    Réponses: 2
    Dernier message: 04/01/2006, 16h31
  4. [BD vierge] Vider une base de données
    Par Pedro dans le forum Bases de données
    Réponses: 4
    Dernier message: 16/06/2004, 14h40
  5. comment vider une base de donnée
    Par caps_corp dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 21/04/2004, 16h54

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