Bonjour j'ai un problème avec un lock sur un package et une procédure.
Cette procédure est appelée via des scripts qui sont exécutés en simultané.
Elle appartient à un package qui s'appelle PCK_UTIL_FTS
Voici le code
Pour résumer, elle fait un truncate de partition en prenant en paramètre le nom de la table. Le problème n'étant pas le contenu du code, mais le fait que j'ai une erreur de lock lorsque je l'éxécute en simutané (en prenant comme paramètre des tables différentes), j'ai un message d'erreur
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
24
25
26 PROCEDURE PRC_CLEANUP_TABLES_FTS (p_table in VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION; s_requete VARCHAR2(4000); type r_cursor is REF CURSOR; cur_mot r_cursor; TYPE MotList IS TABLE OF varchar2(12); result MotList; BEGIN open cur_mot for 'SELECT G_T0.MOTEUR_ID FROM (SELECT DISTINCT moteur_id FROM '||p_table||') G_T0 WHERE g_t0.moteur_id IN (SELECT DISTINCT g_t1.moteur_src AS g_f1 FROM TOFTSASSET000_CHAR g_t1)'; LOOP fetch cur_mot BULK COLLECT INTO result; exit when cur_mot%NOTFOUND; END LOOP; close cur_mot; for i in 1..result.COUNT loop s_requete := 'BEGIN PCK_UTIL_EXPL.PRC_TRUNCATE_PART_TABLE('''||p_table||''',''P_'||result(i)||''');END ;'; EXECUTE IMMEDIATE s_requete; COMMIT; end loop; EXCEPTION WHEN OTHERS THEN ROLLBACK; RAISE; END;
"ORA-04021: timeout occurred while waiting to lock object
ORA-06512: at ""DKEY.PCK_UTIL_FTS"", line 71
ORA-06512: at line 1"
Je voulais donc savoir si des locks étaient posés sur une procédure ou des package lorsqu'on les exécute.
Pour info, la base est une base oracle 10.
Une des solutions est de séquentialiser les traitements au lieu de les parralléliser mais c'est une solution qu'on voudrait éviter.
Partager