Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Client Access, IBMi Access Client Solution (ACS) , WebAccess...
Répondre
mgardes
Messages : 1
Enregistré le : jeu. 13 févr. 2020, 16:11:20

Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par mgardes »

Bonjour

Lors d'un SELECT sur des tables (PF ou tables SQL) effectué depuis l'éditeur de scripts SQL d'ACS (dernière version et anciennes également), la table est lockée (wrkobjlck sur la table retourne un lock de QZDASOINIT) et ce lock persiste même parfois quand on lance d'autres requêtes derrière. Le seul moyen certain d'enlever les locks est de couper la connexion via un "CTRL F12".

En faisant la même chose depuis un écran verts via STR SQL ou via IBM Data Studio il n'y a pas de lock.

Quelqu'un connaît il un moyen d'empêcher que ces locks se mettent en place ?

Merci

nbonnet
Messages : 208
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par nbonnet »

Bonjour,

Quelles sont les valeurs de niveau de contrôle transactionnel entre STRSQL et ACS ?

Cordialement,
Nathanaël

thomas.barberot
Messages : 58
Enregistré le : jeu. 12 avr. 2012, 14:50:53

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par thomas.barberot »

Bonjour.
J'ai le même problème.
Le niveau d'isolement indiqué dans ACS est "Pas de validation (*NC et *NONE)"
Lorsqu'on affiche le contenu d'une table de travail, il est impossible de lancer un traitement qui fait un CLRPFM par exemple, tant qu'on a pas fermé la connexion.
Thomas

nbonnet
Messages : 208
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par nbonnet »

Bonjour,

Pour un select, ACS ouvre un curseur pour parcourir les résultats. Seules les 100 premières lignes sont ramenées. Les autres en fonction de la pagination.
Lorsque l'ensemble des lignes est retrouvé, le curseur est fermé et le verrouillage du fichier disparaît.

Par exemple : SELECT ... sur un fichier avec 3 enregistrements ne génère pas de verrouillage persistant.

Vous avez maintenant un bouton dans ACS en bas à droite de la fenêtre des résultats : "Retrieve all rows" qui parcourt l'ensemble du curseur et le ferme.

Si vous voulez forcer la fermeture du curseur sans lire toutes les données :
Menu "Affichage" -> "Fermeture de tous les résultats"

ou exécutez simplement une autre instruction SQL :
select * from sysibm.sysdummy1

Si rien n'y fait : Connexion -> reconnexion (attention aux transactions non validées, changement de schéma par défaut ...)
Nathanaël

SebastienB
Messages : 55
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par SebastienB »

Bonjour,

Une autre solution consiste à rajouter 'FOR READ ONLY' à la fin de l'instruction.

Je rappel que l'on peut maintenant ajouter 'FOR UPDATE' afin de modifier les données directement.

Séb.

nbonnet
Messages : 208
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par nbonnet »

Bonjour Sébastien,

même avec READ ONLY et NO COMMIT, le fait d'avoir un curseur en lecture ne verrouille pas les enregistrements mais génère un verrouillage partagé en lecture (*SHRRD) qui va bloquer les commandes nécessitant l'exclusivité sur le *FILE, comme CLRPFM.

A noter, dans ACS 1.1.8.6 : une option permettant de fermer automatiquement un curseur après une période d'inactivité (paramétrable)
Nathanaël

SebastienB
Messages : 55
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Comment empêcher le Lock des tables lors de SELECT dans éditeur de scripts SQL d'ACS ?

Message par SebastienB »

bonjour,

Je viens de découvrir l'instruction "stop;" qui permet de stopper le process SQL et de libérer le fichier.
N.B. : Cela ferme ferme tous les résultats

Répondre