Insert dans Oracle verrouillera la table ; lorsque Oracle exécute des instructions DML telles que insert, il appliquera un verrou sur la table en cours d'opération. Lorsque deux instructions d'insertion tentent d'opérer sur une table en même temps, la session sera fermée. bloqué et attend. D'autres sessions sont validées ou annulées, provoquant un blocage.
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
L'insertion dans Oracle verrouillera la table
Lorsque ORACLE exécute des instructions DML telles que insert, il demandera d'abord automatiquement qu'un verrou TM sur la table soit utilisé. Le verrouillage TM est obtenu, puis demande automatiquement un verrouillage de type TX. Lorsque deux sessions ou plus exécutent le langage DML sur le même enregistrement de la table, la première session verrouille l'enregistrement et les autres sessions sont en attente jusqu'à ce que le verrou TX soit libéré après la validation de la première session, et les autres sessions uniquement. peut être verrouillé.
La considération est due au fait que deux instructions d'insertion ont tenté d'insérer des données avec le même PK ou une valeur unique dans une table en même temps, provoquant le blocage de la session, en attendant la validation ou l'annulation d'autres sessions, provoquant ainsi une impasse.
Dans ce cas, tant que l'une des sessions est soumise, l'autre signalera ORA-00001 : la contrainte unique est violée et le blocage se termine ou l'une des sessions est annulée et l'autre peut s'exécuter normalement ; .
Dans Oracle, la raison du verrouillage de la table est que lorsqu'un programme effectue une insertion sur une table et n'a pas encore validé, un autre programme effectue également une insertion sur la même table, alors une exception de ressource occupée se produira, c'est-à-dire. , verrouillez la table.
Les principales raisons du verrouillage des tables sont :
(1) Le programme A exécute l'insertion de la tableA, et avant la validation, le programme B insère également la tableA. À ce moment, une exception de ressource occupée se produit, qui est le verrouillage. Tableau
(2) Le verrouillage des tables se produit souvent en concurrence plutôt qu'en parallélisme (en parallèle, lorsqu'un thread exploite la base de données, l'autre thread ne peut pas exploiter la base de données, le processeur et le principe d'allocation d'E/S)
Méthodes pour réduire la probabilité de verrouillage de table :
(1) Réduisez le temps entre l'exécution des instructions d'insertion, de mise à jour et de suppression et la validation. Plus précisément, l'exécution par lots est remplacée par une exécution unique et la vitesse de non-exécution de SQL lui-même est optimisée
(2) Si la transaction est annulée anormalement
La raison du verrouillage de la table peut être que les données de la ligne ont été modifiées et oublié de soumettre, ce qui entraînera également le verrouillage de la table.
Développer les connaissances :
Il est recommandé de vérifier la raison avant de prendre une décision.
1 Le code de la requête de verrouillage de table a la forme suivante :
select count(*) from v$locked_object; select * from v$locked_object;
2. Vérifiez quelle table est verrouillée
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
3 Vérifiez quelle session en est la cause
select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
Tutoriel recommandé : "Tutoriel vidéo Oracle"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!