Maison base de données Oracle verrouillage de la vue Oracle et exécution de la session SQL (partage du résumé)

verrouillage de la vue Oracle et exécution de la session SQL (partage du résumé)

Jul 01, 2022 pm 12:23 PM
oracle

Cet article vous apporte des connaissances pertinentes sur Oracle, qui présente principalement les problèmes liés à la vérification des verrous et de SQL lors de l'exécution de session. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.

verrouillage de la vue Oracle et exécution de la session SQL (partage du résumé)

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Environnement de base de données pour les données de test de cet article : Oracle 11g

Pourquoi est-il dit que c'est SQL lors de l'exécution de la session Il semble que l'exécution de SQL ? l'enregistrement d'une certaine session ne peut pas être obtenu, j'ai également lu de nombreux articles de blog. De nombreuses personnes sur Internet ont dit que l'enregistrement d'exécution SQL d'une certaine session peut être interrogé en associant sql_id à la vue v$active_session_history et v$sqlarea. Après la pratique, il a été constaté que ce n'était pas possible (essayé via la table dba_hist_active_sess_history Cela ne fonctionne pas non plus), le sql_id de certains sql n'est pas du tout enregistré dans v$active_session_history. control_management_pack_access et j'ai constaté que je n'avais pas l'autorisation. Et je l'ai vérifié et j'ai constaté que la valeur du paramètre est normale et que la base de données des paramètres est ouverte, reportez-vous au billet de blog : La requête Oracle V$ACTIVE_SESSION_HISTORY n'a pas de données - wazz_s - Blog Park.

​ L'enregistrement d'exécution de SQL peut être interrogé via la vue v$sqlarea, mais l'ID de session pour l'exécution de SQL est introuvable. Ce serait formidable s'il y avait un tel ID de session, je peux savoir qui a exécuté le SQL. .

Si je souhaite interroger le SQL qui a provoqué le verrouillage de la table, la plupart des articles de blog sur Internet l'enseignent. Obtenez la valeur du champ prev_sql_addr correspondante en interrogeant la vue v$session, enregistrez-la comme valeur A, puis. utilisez la valeur A comme valeur de condition de requête du champ d'adresse dans la vue v$sqlarea, puis l'enregistrement SQL correspondant peut être interrogé. À titre de test pratique, vous pouvez trouver le SQL qui trouve la table de verrouillage, mais dans la plupart des cas, vous ne pouvez pas l'obtenir dans un environnement de production normal. Pourquoi ? Veuillez consulter l'introduction ci-dessous.

Cet article utilise une approche exploratoire pour étudier. Afin de garantir l'exactitude des données, j'ai ouvert trois sessions de base de données, enregistrées comme session1, session2 et session3. Les étapes spécifiques sont les suivantes :

. 1 en session session1 Créer une nouvelle table de test et tester les données

--新建测试表
create table zxy_table(zxy_id int,zxy_name varchar2(20));
--插入数据
insert into zxy_table(zxy_id,zxy_name) values(1,'zxy1');
insert into zxy_table(zxy_id,zxy_name) values(2,'zxy2');
insert into zxy_table(zxy_id,zxy_name) values(3,'zxy3');
insert into zxy_table(zxy_id,zxy_name) values(4,'zxy4');
commit;
Copier après la connexion

2 Afficher l'ID de session de la session1

 select userenv('sid') from dual;
Copier après la connexion

Vous pouvez voir que l'ID de session est 2546

3 Dans la session1, verrouillez une ligne du table zxy_table via select for update , comme suit :

 select * from zxy_table where zxy_name='zxy1' for update;
Copier après la connexion

4 Dans la session2, demandez que l'identifiant de session est 2189 :

Puis dans la session2, mettez à jour la ligne avec la valeur zxy_table zxy_name='zxy1' dans la session2, comme suit :

update zxy_table set zxy_name='zxy1_modify' where zxy_name='zxy1';
Copier après la connexion

Ensuite, regardez Le sql a été bloqué, comme indiqué ci-dessous :

5 Ensuite, nous arrivons à la session 3 pour vérifier la situation de la table de verrouillage

Vérifiez d'abord la table v$locked_object

select * from v$locked_object;
Copier après la connexion

Vous Vous pouvez voir ce qui a causé le verrouillage de la table. L'ID de session est 2546, qui est la session précédente1, et l'object_id est 110154. Bien sûr, dans l'environnement de génération, vous verrez certainement plus d'un enregistrement. Vous devrez l'exécuter plusieurs fois. Après l'avoir exécuté n fois, vous pouvez toujours voir les enregistrements. , prouvez que cet enregistrement est l'enregistrement de la table de verrouillage

Interrogez les informations détaillées de la table de verrouillage via object_id : 110154 dba4_objects table

select object_name as 被锁的表名称,obj.* from dba_objects obj where object_id='110154';
Copier après la connexion

Interrogez la vue. v$session

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
Copier après la connexion
Copier après la connexion

via sessionid : 2546 pour obtenir prev_sq l_addr La valeur est : 000000012E045E28, puis interrogez la vue v$sqlarea

select * from v$sqlarea where address='000000012E045E28';
Copier après la connexion

à partir de la valeur obtenue. l'instruction qui a provoqué le verrouillage de la table, mais de nombreux articles de blog sont terminés à cette étape, donc la requête est vraiment Est-elle fiable ? La réponse n'est pas fiable. Vous pouvez revenir à la session1 et exécuter un sql à volonté, comme suit :

 select * from zxy_table;
Copier après la connexion

Ensuite, vous pouvez l'exécuter dans la session3

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
Copier après la connexion
Copier après la connexion

.

 再看看prev_sql_addr是不是变了,从000000012E045E28变为了00000001FB03CEC0,再通过00000001FB03CEC0查询视图v$sqlarea

select * from v$sqlarea where address='00000001FB03CEC0';
Copier après la connexion

得到的sql_text是select * from zxy_table,你敢说这条sql导致了锁表吗?所有只能说是session1当前执行的sql,而且你很难保证session1执行完锁表的sql: select * from zxy_table where zxy_name='zxy1' for update且在提交前不再执行别的sql,这就是前文提出的问题的答案。

推荐教程:《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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Combien de temps les journaux de la base de données Oracle seront-ils conservés ? Combien de temps les journaux de la base de données Oracle seront-ils conservés ? May 10, 2024 am 03:27 AM

La durée de conservation des journaux de la base de données Oracle dépend du type de journal et de la configuration, notamment : Redo logs : déterminé par la taille maximale configurée avec le paramètre "LOG_ARCHIVE_DEST". Redo logs archivés : Déterminé par la taille maximale configurée par le paramètre "DB_RECOVERY_FILE_DEST_SIZE". Redo logs en ligne : non archivés, perdus au redémarrage de la base de données et la durée de conservation est cohérente avec la durée d'exécution de l'instance. Journal d'audit : Configuré par le paramètre "AUDIT_TRAIL", conservé 30 jours par défaut.

Fonction pour calculer le nombre de jours entre deux dates dans Oracle Fonction pour calculer le nombre de jours entre deux dates dans Oracle May 08, 2024 pm 07:45 PM

La fonction dans Oracle pour calculer le nombre de jours entre deux dates est DATEDIFF(). L'utilisation spécifique est la suivante : Spécifiez l'unité d'intervalle de temps : intervalle (tel que jour, mois, année) Spécifiez deux valeurs de date : date1 et date2DATEDIFF(interval, date1, date2) Renvoie la différence en jours

L'ordre des étapes de démarrage de la base de données Oracle est L'ordre des étapes de démarrage de la base de données Oracle est May 10, 2024 am 01:48 AM

La séquence de démarrage de la base de données Oracle est la suivante : 1. Vérifiez les conditions préalables ; 2. Démarrez l'écouteur ; 3. Démarrez l'instance de base de données ; 4. Attendez que la base de données s'ouvre ; 6. Vérifiez l'état de la base de données ; . Activez le service (si nécessaire) ; 8. Testez la connexion.

Comment utiliser l'intervalle dans Oracle Comment utiliser l'intervalle dans Oracle May 08, 2024 pm 07:54 PM

Le type de données INTERVAL dans Oracle est utilisé pour représenter les intervalles de temps. La syntaxe est INTERVAL <precision> <unit> Vous pouvez utiliser des opérations d'addition, de soustraction, de multiplication et de division pour utiliser INTERVAL, ce qui convient aux scénarios tels que le stockage de données temporelles et. calculer les différences de dates.

De quelle quantité de mémoire Oracle a-t-il besoin ? De quelle quantité de mémoire Oracle a-t-il besoin ? May 10, 2024 am 04:12 AM

La quantité de mémoire requise par Oracle dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis : pour le stockage des tampons de données, des tampons d'index, l'exécution d'instructions SQL et la gestion du cache du dictionnaire de données. Le montant exact dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis. Les meilleures pratiques incluent la définition de la taille SGA appropriée, le dimensionnement des composants SGA, l'utilisation d'AMM et la surveillance de l'utilisation de la mémoire.

Comment voir le nombre d'occurrences d'un certain caractère dans Oracle Comment voir le nombre d'occurrences d'un certain caractère dans Oracle May 09, 2024 pm 09:33 PM

Pour trouver le nombre d'occurrences d'un caractère dans Oracle, effectuez les étapes suivantes : Obtenez la longueur totale d'une chaîne ; Obtenez la longueur de la sous-chaîne dans laquelle un caractère apparaît. Comptez le nombre d'occurrences d'un caractère en soustrayant la longueur de la sous-chaîne ; de la longueur totale.

Comment remplacer une chaîne dans Oracle Comment remplacer une chaîne dans Oracle May 08, 2024 pm 07:24 PM

La méthode de remplacement de chaînes dans Oracle consiste à utiliser la fonction REPLACE La syntaxe de cette fonction est : REPLACE(string, search_string, replace_string). Étapes d'utilisation : 1. Identifiez la sous-chaîne à remplacer ; 2. Déterminez la nouvelle chaîne pour remplacer la sous-chaîne ; 3. Utilisez la fonction REPLACE pour remplacer. L'utilisation avancée inclut : les remplacements multiples, le respect de la casse, le remplacement des caractères spéciaux, etc.

Exigences de configuration matérielle du serveur de base de données Oracle Exigences de configuration matérielle du serveur de base de données Oracle May 10, 2024 am 04:00 AM

Exigences de configuration matérielle du serveur de base de données Oracle : Processeur : multicœur, avec une fréquence principale d'au moins 2,5 GHz Pour les grandes bases de données, 32 cœurs ou plus sont recommandés. Mémoire : au moins 8 Go pour les petites bases de données, 16 à 64 Go pour les tailles moyennes, jusqu'à 512 Go ou plus pour les grandes bases de données ou les charges de travail lourdes. Stockage : disques SSD ou NVMe, matrices RAID pour la redondance et les performances. Réseau : réseau haut débit (10GbE ou supérieur), carte réseau dédiée, réseau à faible latence. Autres : alimentation stable, composants redondants, système d'exploitation et logiciels compatibles, dissipation thermique et système de refroidissement.

See all articles