Maison  >  Article  >  base de données  >  Quelle est la cause du blocage d’Oracle ?

Quelle est la cause du blocage d’Oracle ?

WBOY
WBOYoriginal
2022-03-03 16:41:428531parcourir

Raisons : 1. L'ordre d'accès aux ressources entre les transactions alterne et deux utilisateurs accèdent aux tables qui sont verrouillées l'un par l'autre, ce qui entraîne un blocage. 2. Deux utilisateurs modifient simultanément le même enregistrement, ce qui entraîne un blocage ; L'exécution d'instructions qui ne remplissent pas les conditions et une indexation incorrecte entraînent des blocages dans les analyses globales.

Quelle est la cause du blocage d’Oracle ?

L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.

Quelle est la cause du blocage d'Oracle ?

La base de données est une ressource partagée utilisée par plusieurs utilisateurs. Lorsque plusieurs utilisateurs accèdent aux données simultanément, plusieurs transactions accéderont aux mêmes données en même temps dans la base de données. Si les opérations simultanées ne sont pas contrôlées, des données incorrectes peuvent être lues et stockées, détruisant la cohérence de la base de données. Le verrouillage est une technologie très importante pour contrôler la concurrence des bases de données. Les exceptions liées aux verrous sont souvent rencontrées dans les applications pratiques. Lorsque deux transactions nécessitent un ensemble de verrous en conflit et que la transaction ne peut pas continuer, un blocage se produit, affectant sérieusement l'exécution normale de l'application.

Type de verrou :

1. Verrous partagés (Share Locks, S lock) : les objets de données avec des verrous partagés peuvent être lus par d'autres transactions, mais ne peuvent pas être modifiés. La base de données utilise ces deux types de verrous de base pour contrôler la simultanéité des transactions de la base de données.

2. Verrous exclusifs (verrouillage X) : lorsqu'un objet de données est verrouillé avec un verrou exclusif, les autres transactions ne peuvent pas le lire ou le modifier.

3. Verrouillage exclusif : basé sur le verrou partagé, il est mis à niveau vers un verrou exclusif.

4. Verrouillage de mise à jour : tous les utilisateurs peuvent lire, mais je pourrai effectuer des opérations de mise à jour à l'avenir. J'ai obtenu la qualification de verrouillage partagé (utilisé pour la lecture) à verrouillage exclusif (utilisé pour la mise à jour). Un seul verrou de mise à jour peut être éligible pour cette transaction.

Causes :

1. Alternance de séquence d'accès aux ressources entre les transactions : un utilisateur 1 accède à la table A (table verrouillée A), puis accède à la table B, un autre utilisateur 2 accède à la table B (table B verrouillée) ; ), puis tente d'accéder à la table A à ce moment-là, l'utilisateur 1 doit attendre que l'utilisateur 2 libère la table B avant de pouvoir continuer car l'utilisateur 2 a verrouillé la table B. De même, l'utilisateur 2 doit attendre que l'utilisateur 1 libère la table B. table A avant de pouvoir continuer. Cette impasse A se produit. Solution : problème de logique du programme, faites attention à la séquence d'appel de la table

2. Modifiez simultanément le même enregistrement : l'utilisateur 1 interroge un enregistrement, puis modifie l'enregistrement lorsque l'utilisateur 2 modifie l'enregistrement, la transaction de l'utilisateur 1 est verrouillée ; La nature de la requête est que le verrou partagé tente d'atteindre le verrou exclusif, et le verrou exclusif de l'utilisateur 2 doit attendre que 1 libère le verrou partagé car 1 a un verrou partagé, et le verrou exclusif de 1 ne peut pas monter en raison de 2. Il est impossible de libérer le verrou partagé, donc un blocage se produit :

3. Une mauvaise indexation entraîne un scan complet de la table : la transaction exécute une instruction qui ne remplit pas les conditions, un scan complet de la table est exécuté, ou la quantité de données de table est très importante. Trop peu ou aucun index n'est créé. Le cas échéant

Solution : n'utilisez pas de requêtes trop complexes qui relient plusieurs tables dans des instructions SQL et créez des index pour l'optimisation

Remarque :

1. oracle Afficher les blocages et libérer les blocages

select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao.object_name,     lo.locked_mode     from v$locked_object lo,     dba_objects ao,     v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid; 
alter system kill session '738,1429';  --释放资源

2. mysql Afficher les blocages Verrouiller et libérer les blocages

show processlist         --查看数据库中各个进程的运行状态
select * from information_schema.innodb_trx        ---查询正在运行的事务
kill id

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn