IBM PureData System for Analytics, Version 7.1

LOCK TABLE

La commande LOCK TABLE permet de verrouiller une table dans la base de données actuelle. Le mode de verrouillage spécifie le type de verrou à acquérir.

La commande LOCK TABLE aboutit lorsqu'un verrou du mode spécifié peut être acquis sur la table. La commande attend aussi longtemps que nécessaire pour obtenir le verrou, à moins que vous ne spécifiez l'option NOWAIT, qui annule la transaction si la commande ne parvient pas à acquérir le verrou immédiatement.

Un verrou est conservé jusqu'à ce que la transaction soit validée ou abandonnée. Si la commande LOCK TABLE est exécutée de manière implicite (à savoir, en dehors d'une paire BEGIN/COMMIT), elle acquiert le verrou lorsqu'elle y est autorisée, puis le libère immédiatement, car il s'agit d'une transaction à une instruction qui est validée implicitement une fois terminée.

Si possible, les commandes LOCK TABLE doivent être exécutées avant les éventuelles requêtes dans la transaction. L'acquisition d'un verrou après avoir exécuté une requête sur des tables utilisateur ne protège pas nécessairement une transaction des erreurs de sérialisation.

Si vous prévoyez d'exécuter des commandes LOCK TABLE sur plusieurs tables à l'intérieur d'une transaction, exécutez-les suivant un ordre défini par l'application. Cela minimise le risque d'interblocage. En cas d'interblocage, Postgres annule l'une des transactions impliquées dans l'interblocage.

Conflits de mode de verrouillage

Le tableau ci-après illustre la matrice des conflits de verrouillage, à savoir, quels verrous peuvent bloquer d'autres types de verrou. Un mode de verrouillage est en conflit avec un autre mode si un verrou ne peut pas être octroyé à une transaction lorsqu'une autre transaction détient le verrou opposé sur la même table. Les verrous détenus par la même transaction n'entrent pas en conflit entre eux ; une transaction peut détenir des verrous de plusieurs modes sur la même table. Si plusieurs verrous doivent être acquis sur la même table, demandez les verrous les plus forts en premier pour minimiser le risque d'interblocage. Si une transaction a besoin de deux verrous sur la même table, aucun d'eux n'étant plus fort que l'autre (en particulier, SHARE et ROW EXCLUSIVE), envisagez un mode de verrouillage qui subsume les deux, tel que SHARE ROW EXCLUSIVE.

Tableau 1. Matrice de compatibilité entre verrous
  Partage d'accès Partage de ligne Exclusive à la ligne Partage Exclusif au partage de ligne Exclusif Accès exclusif
Partage d'accès OK OK OK OK OK OK Conflit
Partage de ligne OK OK OK OK OK Conflit Conflit
Exclusive à la ligne OK OK OK Conflit Conflit Conflit Conflit
Partage OK OK Conflit OK Conflit Conflit Conflit
Exclusif au partage de ligne OK OK Conflit Conflit Conflit Conflit Conflit
Exclusif OK Conflit Conflit Conflit Conflit Conflit Conflit
Accès exclusif Conflit Conflit Conflit Conflit Conflit Conflit Conflit

Syntaxe

Syntaxe de verrouillage d'une table :
LOCK TABLE <table> in <mode_verrouillage> MODE [NOWAIT]

Entrées

La commande LOCK TABLE accepte les entrées suivantes :

Tableau 2. Entrées de la commande LOCK TABLE
Entrée Description
<table> Nom de la table à verrouiller.
<mode_verrouillage> Type de verrou à acquérir sur la table (voir Tableau 3). Le mot ROW dans un mode de verrouillage n'implique pas de verrou au niveau ligne.
NOWAIT La commande doit renvoyer une erreur et abandonner la transaction si elle ne parvient pas à acquérir immédiatement le verrou demandé.
Tableau 3. Modes de verrouillage
Mode de verrouillage Acquis par Droits requis Important
ACCESS SHARE SELECT Select Mode de vrrouillage le plus faible. Plusieurs transactions peuvent maintenir ce type de verrou sur une table.
ROW SHARE   Insert, Delete ou Update Plusieurs transactions peuvent maintenir ce type de verrou sur une table.
ROW EXCLUSIVE INSERT, DELETE et UPDATE Insert, Delete ou Update Plusieurs transactions peuvent maintenir ce type de verrou sur une table.
SHARE CREATE MATERIALIZED VIEW et GENERATE STATISTICS Select ou Genstats Plusieurs transactions peuvent maintenir ce type de verrou sur une table.
SHARE ROW EXCLUSIVE   Insert, Delete ou Update  
EXCLUSIVE   Insert, Delete ou Update  
ACCESS EXCLUSIVE DROP TABLE, ALTER TABLE et TRUNCATE TABLE Drop, Alter ou Truncate  

Sortie

La commande LOCK TABLE génère la sortie suivante :

Tableau 4. Sorties de la commande LOCK TABLE
Sortie Description
LOCK TABLE La commande a abouti.
NOTICE: LOCK TABLE issued after query against user tables Si une commande LOCK TABLE est exécutée une fois que la transaction a exécuté une requête sur des tables utilisateur, le système affiche un message NOTICE et la commande aboutit lorsqu'elle peut acquérir le verrou demandé.

Droits

Vous devez être administrateur, propriétaire de la table, propriétaire de la base de données ou du schéma dans lequel la table est définie ou votre compte doit disposer des droits d'objet approprié, comme décrit dans Tableau 3.

Syntaxe

Voici un exemple de syntaxe :
LOCK TABLE customers IN ROW EXCLUSIVE MODE;


Feedback | Copyright IBM Corporation 2014 | Last updated: 2014-02-28