Utilisation d'un "resumable timeout" dans nos scripts.
N'est-ce pas enrageant d'avoir un rebuild d'index qui échoue après 30 minutes car il a manqué d'espace disque dans un tablespace? Si vous êtes comme moi, ça vous enrage! Il y a 2 solutions possibles à ce genre de problème: être très rigoureux et toujours calculer/vérifier ses espaces disques (tablespaces, undo, temp) avant les opérations ou encore utiliser un "resumable timeout" pour nous soutenir.
Avec le "resumable timeout", vous pouvez, au niveau de la session ou de la base de données, déterminer le nombre de secondes à attendre avant que le script/programme ne sorte en erreur si aucune action n'est faite pour corriger le problème. Vous serez averti dans l'alert log d'Oracle du manque d'espace pour un tablespace particulier. Ainsi, à la lecture du message, vous agrandissez le tablespace et quelques secondes plus tard, votre script/programme continuera son exécution.
L'utilisateur doit pouvoir exécuter le package dbms_resumable:
Enuite, dans sa session, on modifie le paramètre pour avoir un délais de une heure (3600 secondes) et on donne un nom à ce timeout:
On peut voir les détails dans la vue DBA_RESUMABLE:
Avec le "resumable timeout", vous pouvez, au niveau de la session ou de la base de données, déterminer le nombre de secondes à attendre avant que le script/programme ne sorte en erreur si aucune action n'est faite pour corriger le problème. Vous serez averti dans l'alert log d'Oracle du manque d'espace pour un tablespace particulier. Ainsi, à la lecture du message, vous agrandissez le tablespace et quelques secondes plus tard, votre script/programme continuera son exécution.
L'utilisateur doit pouvoir exécuter le package dbms_resumable:
grant execute on dbms_resumable to ORACLE;Enuite, dans sa session, on modifie le paramètre pour avoir un délais de une heure (3600 secondes) et on donne un nom à ce timeout:
ALTER SESSION ENABLE RESUMABLE TIMEOUT 3600 NAME 'TEST_ORACLE';On peut voir les détails dans la vue DBA_RESUMABLE:
20:12:47 ORACLE@orcl > desc dba_resumable
Nom                                                   NULL ?   Type
----------------------------------------------------- -------- ----------------
USER_ID                                                        NUMBER
SESSION_ID                                                     NUMBER
INSTANCE_ID                                                    NUMBER
COORD_INSTANCE_ID                                              NUMBER
COORD_SESSION_ID                                               NUMBER
STATUS                                                         VARCHAR2(9)
TIMEOUT                                                        NUMBER
START_TIME                                                     VARCHAR2(20)
SUSPEND_TIME                                                   VARCHAR2(20)
RESUME_TIME                                                    VARCHAR2(20)
NAME                                                           VARCHAR2(4000)
SQL_TEXT                                                       VARCHAR2(1000)
ERROR_NUMBER                                                   NUMBER
ERROR_PARAMETER1                                               VARCHAR2(80)
ERROR_PARAMETER2                                               VARCHAR2(80)
ERROR_PARAMETER3                                               VARCHAR2(80)
ERROR_PARAMETER4                                               VARCHAR2(80)
ERROR_PARAMETER5                                               VARCHAR2(80)
ERROR_MSG                                                      VARCHAR2(4000)
20:12:55 ORACLE@orcl > select user_id, status, timeout from dba_resumable;
 USER_ID STATUS       TIMEOUT
---------- --------- ----------
      90 NORMAL          3600
20:13:13 ORACLE@orcl >
 Pour plus d'informations sur les autres utilisations du "resumable timeout", consultez la documentation officielle.
Commentaires