Maison > Article > base de données > Quelle est la raison pour laquelle Oracle verrouille la table ?
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.
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
Les principales raisons du verrouillage de la table sont :
(1) Le programme A exécute l'insertion de la tableA, et avant la validation, le programme B insère également la tableA. cette fois, l'exception lorsque les ressources sont occupées est la table de verrouillage
(2) La table de verrouillage 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 l'allocation d'E/S principe)
Méthodes pour réduire la probabilité de verrouillage de la table :
(1) Réduire 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.
1. Il est recommandé de vérifier la raison du verrouillage de la montre 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;
4 Vérifiez quel SQL est à l'origine du verrouillage
select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time;
5. Kill Drop le processus correspondant
Exécutez la commande : alter system kill session'1025,41';
où 1025 est sid et 41 est le numéro de série.
2 La raison pour laquelle les utilisateurs Oracle sont souvent verrouillés
Lors de la connexion. , le message suivant s'affiche : l'utilisateur de test est verrouillé Lock
1. Connectez-vous en tant qu'utilisateur avec le rôle dba pour déverrouiller. Définissez d'abord le format d'heure spécifique pour afficher l'heure spécifique
SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;
Session modifiée.
2. time
SQL> select username,lock_date from dba_users where username='TEST'; USERNAME LOCK_DATE ------------------------------ ------------------- TEST 2021-03-10 08:51:03
3. Déverrouillage
SQL> alter user test account unlock;
Utilisateur modifié.
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!