Va Oracle de verrouillage de l'ensemble de la table lors de l'exécution d'une instruction DML ou tout simplement la ligne
Lorsque j'essaie d'insérer/mettre à jour quelque chose dans une table db, va Oracle de verrouillage de la table entière ou seulement la ligne à insérer/mis à jour?
Est-ce quelque chose qui peut être contrôlée par le biais de configuration externe?
Nous pouvons émettre des serrures explicitement avec le VERROUILLAGE du TABLEAU de commande. En savoir plus
Sinon, une insertion ne permet pas de verrouiller toutes les autres lignes. En raison de l'Oracle d'isolation read modèle de cette ligne n'existe que dans notre session jusqu'à ce que nous nous engageons, si personne d'autre ne peut rien faire avec elle. En savoir plus.
Une instruction de mise à jour verrouille uniquement le nombre de lignes affectées. À moins que nous avons mis en place un verrouillage pessimiste de la stratégie avec SELECT ... FOR UPDATE. En savoir plus.
Enfin, dans Oracle écrivains ne pas bloquer les lecteurs. De sorte que même les lignes verrouillées peuvent être lus par d'autres sessions, ils juste ne peut pas être changé. En savoir plus.
Ce comportement est cuit dans l'Oracle du noyau, et n'est pas configurable.
Justin fait un bon point sur la table DDL au niveau de la serrure. Le verrou sera la cause d'une session de l'exécution de DDL sur la table pour attendre jusqu'à ce que le DML session s'engage, à moins que le DDL est quelque chose comme de l'INDEX, dans lequel cas, il ne fonctionnera pas immédiatement avec ORA-00054.
À 99,9% de ce que les gens sont susceptibles de se soucient, Oracle va acquérir un verrou de niveau ligne lorsqu'une ligne est modifiée. Le verrou de niveau ligne encore permet aux lecteurs de lire la ligne (à cause de la version multi-cohérence de la lecture, les écrivains ne jamais bloquer les lecteurs et les lecteurs ne jamais faire sale lit).
Si vous faites le tour d' v$lock, vous verrez que la mise à jour d'une rangée prend également un verrou sur la table. Mais le verrou n'empêche qu'une autre session de faire DDL sur la table. Depuis que vous aviez pratiquement jamais l'envie de faire DDL sur une table active, en premier lieu, que, généralement, n'est pas quelque chose qui serait en fait la cause d'une autre session à attendre le verrou.
Quand régulier DML est exécutée (UPDATE/DELETE/INSERT,de FUSION, et SELECT ... FOR UPDATE) oracle obtient 2 serrures.
Ligne de niveau de Verrouillage (TX) - Cette obtient un verrou sur la ligne particulière d'être touché et de toute autre opération de tenter de modifier la même ligne est bloquée, jusqu'à ce que l'on a déjà, il possède des finitions.
Niveau de la Table Lock (TM) - Lors de la Ligne de verrouillage (TX) est obtenu à une Table supplémentaire de verrouillage est également obtenue pour empêcher toute les opérations DDL de se produire alors que DML est en cours.
Ce qui compte c'est bien dans ce mode, le Tableau de verrouillage est obtenu.
Une ligne de partage de verrouillage (RS), également appelé subshare verrou de table (SS), indique que la transaction maintient le verrou sur la table a verrouillé les lignes de la table et a l'intention de les mettre à jour. Un SS-lock est le moins restrictif pour le mode de verrouillage de table, offrant le plus haut degré de simultanéité pour une table.
Une ligne exclusive de verrouillage (RX), également appelé subexclusive verrou de table (SX), indique que la transaction maintient le verrou a mis à jour les lignes de la table ou émis SELECT ... FOR UPDATE. Un SX de verrouillage permet à d'autres transactions à la requête insert, update, delete, ou verrouiller des lignes simultanément dans la même table. Par conséquent, SX verrous permettent de multiples opérations pour obtenir simultanée SX et SS serrures pour la même table.
Une part verrou de table (S) détenu par une transaction permet à d'autres opérations pour interroger la table (sans l'aide de SELECT ... FOR UPDATE), mais permet des mises à jour uniquement si une transaction unique détient la part verrou de table. Plusieurs opérations peuvent détenir une part de verrou de table, simultanément, de sorte que la tenue de cette serrure n'est pas suffisant pour garantir qu'une transaction peut modifier la table.
Une part rangée de table exclusif de verrouillage (SRX), également appelé un partage des subexclusive verrou de table (SSX), est plus restrictive que d'une part verrou de table. Une seule transaction à la fois peut acquérir une SSX verrou sur une table donnée. Un SSX verrou détenu par une transaction permet à d'autres opérations pour interroger la table (à l'exception de certains ... POUR la mise à JOUR), mais pas de mise à jour de la table.
Un verrou de table exclusif (X) est le plus restrictif en mode de verrouillage de table, permettant à la transaction, qui détient le verrou exclusif de l'accès en écriture à la table. Une seule transaction peut obtenir un verrou X pour une table.
C'est une copie exacte de l'Oracle documentation. On devrait au moins le crédit de la source d'origine et de le mettre comme une citation.
Vous devriez lire l'oracle de concepts manuel concernant le verrouillage.
Pour la norme des opérations DML (insert, update, delete, fusion), oracle prend partagé DML (type TM) de verrouillage.
Cela permet à d'autres DMLs sur la table pour se produire en même temps (c'est une action de verrouillage.)
Les lignes qui sont modifiés par une mise à jour ou supprimer opération DML et ne sont pas encore engagés aura un verrou exclusif de ligne (de type TX). Une autre opération DML dans une autre session/transaction peut fonctionner sur la table, mais s'il modifie la même ligne, il bloquera jusqu'à ce que le titulaire de la ligne lock communiqués par validation ou annulation.
Parallèle opérations DML et de série de l'insertion directe de la charge d'exploitation exclusive des verrous de table.
Nous pouvons émettre des serrures explicitement avec le VERROUILLAGE du TABLEAU de commande. En savoir plus
Sinon, une insertion ne permet pas de verrouiller toutes les autres lignes. En raison de l'Oracle d'isolation read modèle de cette ligne n'existe que dans notre session jusqu'à ce que nous nous engageons, si personne d'autre ne peut rien faire avec elle. En savoir plus.
Une instruction de mise à jour verrouille uniquement le nombre de lignes affectées. À moins que nous avons mis en place un verrouillage pessimiste de la stratégie avec SELECT ... FOR UPDATE. En savoir plus.
Enfin, dans Oracle écrivains ne pas bloquer les lecteurs. De sorte que même les lignes verrouillées peuvent être lus par d'autres sessions, ils juste ne peut pas être changé. En savoir plus.
Ce comportement est cuit dans l'Oracle du noyau, et n'est pas configurable.
Justin fait un bon point sur la table DDL au niveau de la serrure. Le verrou sera la cause d'une session de l'exécution de DDL sur la table pour attendre jusqu'à ce que le DML session s'engage, à moins que le DDL est quelque chose comme de l'INDEX, dans lequel cas, il ne fonctionnera pas immédiatement avec ORA-00054.
OriginalL'auteur APC
Cela dépend de ce que tu veux dire par "lock".
À 99,9% de ce que les gens sont susceptibles de se soucient, Oracle va acquérir un verrou de niveau ligne lorsqu'une ligne est modifiée. Le verrou de niveau ligne encore permet aux lecteurs de lire la ligne (à cause de la version multi-cohérence de la lecture, les écrivains ne jamais bloquer les lecteurs et les lecteurs ne jamais faire sale lit).
Si vous faites le tour d'
v$lock
, vous verrez que la mise à jour d'une rangée prend également un verrou sur la table. Mais le verrou n'empêche qu'une autre session de faire DDL sur la table. Depuis que vous aviez pratiquement jamais l'envie de faire DDL sur une table active, en premier lieu, que, généralement, n'est pas quelque chose qui serait en fait la cause d'une autre session à attendre le verrou.OriginalL'auteur Justin Cave
Quand régulier DML est exécutée (UPDATE/DELETE/INSERT,de FUSION, et SELECT ... FOR UPDATE) oracle obtient 2 serrures.
Ligne de niveau de Verrouillage (TX) - Cette obtient un verrou sur la ligne particulière d'être touché et de toute autre opération de tenter de modifier la même ligne est bloquée, jusqu'à ce que l'on a déjà, il possède des finitions.
Niveau de la Table Lock (TM) - Lors de la Ligne de verrouillage (TX) est obtenu à une Table supplémentaire de verrouillage est également obtenue pour empêcher toute les opérations DDL de se produire alors que DML est en cours.
Ce qui compte c'est bien dans ce mode, le Tableau de verrouillage est obtenu.
Une ligne de partage de verrouillage (RS), également appelé subshare verrou de table (SS), indique que la transaction maintient le verrou sur la table a verrouillé les lignes de la table et a l'intention de les mettre à jour. Un SS-lock est le moins restrictif pour le mode de verrouillage de table, offrant le plus haut degré de simultanéité pour une table.
Une ligne exclusive de verrouillage (RX), également appelé subexclusive verrou de table (SX), indique que la transaction maintient le verrou a mis à jour les lignes de la table ou émis SELECT ... FOR UPDATE. Un SX de verrouillage permet à d'autres transactions à la requête insert, update, delete, ou verrouiller des lignes simultanément dans la même table. Par conséquent, SX verrous permettent de multiples opérations pour obtenir simultanée SX et SS serrures pour la même table.
Une part verrou de table (S) détenu par une transaction permet à d'autres opérations pour interroger la table (sans l'aide de SELECT ... FOR UPDATE), mais permet des mises à jour uniquement si une transaction unique détient la part verrou de table. Plusieurs opérations peuvent détenir une part de verrou de table, simultanément, de sorte que la tenue de cette serrure n'est pas suffisant pour garantir qu'une transaction peut modifier la table.
Une part rangée de table exclusif de verrouillage (SRX), également appelé un partage des subexclusive verrou de table (SSX), est plus restrictive que d'une part verrou de table. Une seule transaction à la fois peut acquérir une SSX verrou sur une table donnée. Un SSX verrou détenu par une transaction permet à d'autres opérations pour interroger la table (à l'exception de certains ... POUR la mise à JOUR), mais pas de mise à jour de la table.
Un verrou de table exclusif (X) est le plus restrictif en mode de verrouillage de table, permettant à la transaction, qui détient le verrou exclusif de l'accès en écriture à la table. Une seule transaction peut obtenir un verrou X pour une table.
OriginalL'auteur Sumit Sengar
Vous devriez lire l'oracle de concepts manuel concernant le verrouillage.
Pour la norme des opérations DML (insert, update, delete, fusion), oracle prend partagé DML (type TM) de verrouillage.
Cela permet à d'autres DMLs sur la table pour se produire en même temps (c'est une action de verrouillage.)
Les lignes qui sont modifiés par une mise à jour ou supprimer opération DML et ne sont pas encore engagés aura un verrou exclusif de ligne (de type TX). Une autre opération DML dans une autre session/transaction peut fonctionner sur la table, mais s'il modifie la même ligne, il bloquera jusqu'à ce que le titulaire de la ligne lock communiqués par validation ou annulation.
Parallèle opérations DML et de série de l'insertion directe de la charge d'exploitation exclusive des verrous de table.
OriginalL'auteur orcl_slave