Gestion des sessions de sauvegarde DB2 récalcitrantes

Lors de l'exécution de sauvegardes en ligne dans DB2, des interférences peuvent survenir avec d'autres opérations essentielles telles que les commandes LOAD ou ALTER TABLE <nom_table> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE. Ces opérations peuvent alors se retrouver suspendues, attendant la libération des ressources par la sauvegarde. Étant donné que les bases de données d'entreprise sont souvent de grande taille (plusieurs téraoctets étant courant), une sauvegarde peut prendre de nombreuses heures, voire plus d'une journée. Dans les situations urgentes où l'exécution rapide de ces autres opérations est impérative, il devient nécessaire d'interrompre le processus de sauvegarde en cours.

Méthode 1 : Arrêt d'application standard avec FORCE APPLICATION

La première approche pour tenter de terminer une connexion de sauvegarde est d'utiliser la commande DB2 FORCE APPLICATION. Cette méthode implique d'abord d'identifier l'identifiant de l'application (Application Handle) de la session de sauvegarde.

# 1. Lister les applications actives pour identifier la session de sauvegarde.
#    Recherchez des applications de type 'db2bp' ou dont le nom indique une opération de sauvegarde.
db2 list applications show detail | grep -i db2bp

# Exemple de sortie (identifiez l'Application Handle de la session de sauvegarde):
# Appl Id                     Appl Name          Auth Id   Tpmon Cli     Rows Read   Rows Written
# ------------------------- -------------------- --------- ----- ----- ----------- ------------
# *LOCAL.db2inst1.240101100001 DB2BP              DB2INST1  No    No              0            0
#    Application Handle             = 4567
#    Application status             = UOW Executing
#    Application name               = db2bp
#    Application ID                 = *LOCAL.db2inst1.240101100001
#    Connection request start time  = 2024-01-01 10:00:00.123456
#    Application type               = User Client

# 2. Tenter de forcer la déconnexion de l'application en utilisant l'Application Handle identifié.
db2 "force application(4567)"
DB20000I  La commande FORCE APPLICATION a été exécutée avec succès.
DB21024I  Cette commande est asynchrone et peut ne pas être immédiatement effective.

Cependant, il arrive parfois que la commande FORCE APPLICATION ne parvienne pas à terminer le processus, même après plusieurs tentatives successives. Cela peut indiquer que la session est profondément bloquée ou que le gestionnaire de base de données n'est plus en mesure d'en prendre le contrôle.

Méthode 2 : Terminaison du processus au niveau du système d'exploitation

Lorsque la méthode FORCE APPLICATION échoue, une intervention directe au niveau du système d'exploitation est nécessaire pour mettre fin au processus client associé à la sauvegarde. Cette approche permet de cibler le processus sous-jacent qui exécute la connexion DB2.

# 1. Récupérer l'ID du processus (PID) du client pour l'application bloquée.
#    Utilisez l'Application Handle (ici, 4567) obtenu lors de la première étape.
db2 get snapshot for application agentid 4567 | less

# Extrait de la sortie du snapshot, cherchez "Process ID of client application":
#            Application Snapshot
#
# Application handle                         = 4567
# Application status                         = UOW Executing
# Application name                           = db2bp
# Application ID                             = *LOCAL.db2inst1.240101100001
# CONNECT Authorization ID                   = DB2INST1
# Client login ID                            = db2inst1
# Process ID of client application           = 9876    # C'est le PID du processus client
# Platform of client application             = LINUXAMD64
# Communication protocol of client           = Local Client

# 2. (Facultatif mais recommandé) Vérifier le processus identifié.
#    Confirmez qu'il s'agit bien d'un processus db2bp ou d'un processus pertinent lié à DB2.
ps -ef | grep 9876

# Exemple de sortie:
# db2inst1   9876      1  0 10:05 pts/1    00:00:00 /home/db2inst1/sqllib/bin/db2bp 1234ABCD 5 A
# db2inst1   9877   9876  0 10:06 pts/1    00:00:00 grep 9876

# 3. Terminer le processus client à l'aide de la commande kill du système d'exploitation.
kill -9 9876

Après l'exécution de la commande kill -9, le processus sera immédiatement arrêté par le système d'exploitation, forçant ainsi la déconnexion de l'application DB2 correspondante. Il est conseillé de vérifier ensuite que la connexion de sauvegarde a bien disparu de la liste des applications actives.

Cette méthode est également efficace pour interrompre des programmes SQL embarqués écrits en C, ou d'autres applications clientes qui se sont bloquées de manière similaire et ne répondent plus aux commandes DB2.

Étiquettes: DB2 administration de base de données sauvegarde en ligne processus bloqués gestion des connexions

Publié le 13 juillet à 03h50