Notifications 
Reti­rer tout

SQL UPDATE ne tient pas compte du temps d’at­tente des enre­gis­tre­ments défi­ni par OVRDBF, pourquoi ?

Posts
Uti­li­sa­teurs
Reac­tions
77  Vu
0
Début du sujet

J’ai une requête de mise à jour por­tant sur un fichier de tra­vail (dont aucun enre­gis­tre­ment n’est ver­rouillé) fil­trant les enre­gis­tre­ments avec une sous-requête dont le résul­tat contient des enre­gis­tre­ments ver­rouillés par un autre travail :

 exec sql
           UPDATE SESSION.BWRBCP AS W SET (W.CODANO) = ('NOU')
             WHERE W.ANCUEX = :ANCUEX AND
                   W.CODANO = ' ' AND
                   EXISTS
               (SELECT *
                  FROM BCPTCP AS C
                  WHERE C.CODUEX = W.NOUUEX AND
                        C.NUMCHA = W.NOUCHA AND
                        C.NUMTRA = W.NOUTRA AND
                        C.NBATIM = W.NBANOU AND
                        C.NESCAL = W.NESNOU AND
                        C.NETAGE = W.NETNOU AND
                        C.NPOSIT = W.NPONOU AND
                        C.NPTCPT = W.NPTNOU)
             WITH UR;

J’ai remar­qué que l’exé­cu­tion plan­tait avec le code erreur SQLCODE = ‑913 au bout d’une minute.

Comme le ver­rouillage d’en­re­gis­tre­ment por­tait sur la table BCPTCP, j’ai essayé de réduire le temps d’at­tente en exé­cu­tant aupa­ra­vant la com­mande de sub­sti­tu­tion OVRDBF FILE(BCPTCP) WAITRCD(5) OVRSCOPE(*JOB).

Je suis cer­tain que cette sub­sti­tu­tion s’ap­plique car si j’es­saie de l’u­ti­li­ser pour dési­gner un autre fichier cela fonctionne.

Pour­tant le temps d’at­tente reste d’une minute (temps d’at­tente par défaut pour les enre­gis­tre­ments de la base de don­nées). Pourquoi ?

Éti­quettes du sujet
1 Réponse 
0
Début du sujet

Tout d’a­bord il faut remar­quer que seuls 5 para­mètres de la com­mande OVRDBF s’ap­pliquent à une ins­truc­tion SQL :

  • TOFILE
  • MBR
  • SEQONLY
  • INHWRT
  • WAITRCD

Voir :  https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_71/rzajp/rzajprunningoverride.htm

Si un autre para­mètre est uti­li­sé, par exemple WAITFILE, les autres para­mètres ne sont plus pris en compte.

Par ailleurs, bien que le fichier mis à jour ne com­porte aucun enre­gis­tre­ment ver­rouillé au moment du lan­ce­ment de l’ins­truc­tion, c’est sur lui que doit por­ter la substitution :

OVRDBF FILE(BWRBCP) WAITRCD(5) OVRSCOPE(*JOB)

Dans ce cas la sub­sti­tu­tion pro­duit son effet sur l’ins­truc­tion SQL et le temps d’at­tente n’est plus que de 5 secondes !

Share :