2010-04-21 6 views
3

J'ai une table temporaire globale qui est définie comme suppression lors de la validation. Comment se comporte le problème de la concurrence? Je veux dire ce qui se passe si une autre session veut utiliser cette table temporaire globale? La réponse ne sera probablement pas "ils partagent les mêmes données".Concurrence de table temporaire globale

Maintenant, si ma supposition est correcte :), la table est-elle verrouillée jusqu'à ce que la première connexion soit validée, ou est-ce que dbms crée une table temporaire globale pour chaque connexion? (Quelque chose comme une instance de la table?)

Répondre

7

De l'documentation:

Les données dans une table temporaire est visible uniquement à la session qui insère les données dans la table.

Chaque session aura son indépendant logique copie de la table temporaire.

Comme vous ne pouvez pas voir les données des autres sessions et qu'Oracle traite les verrous au niveau de la ligne, vous ne pouvez pas être bloqué par le DML d'autres sessions. DML simultané (Insérer, Supprimer, Mettre à jour) n'affecte pas les autres sessions.

seulement besoin d'un DDL verrou sur la table (par exemple: ALTER TABLE ...)

+0

Je suis intéressé par cette question - vous dites que les tables temporaires globales ne sont pas une bonne façon de verrouiller un ensemble de rangées? Si j'ai deux threads qui doivent fonctionner sur une liste d'entrées donnée à un certain moment, les tables temporaires globales peuvent-elles aider chaque thread à saisir une section de cette liste d'entrées sans se chevaucher? – Dirk

+1

@michael: chaque thread aurait sa propre session (ou ils ne pourraient pas fonctionner en parallèle), donc ils ne verront pas les données temporaires de l'autre. Les tables temporaires seules ne vous permettront pas de verrouiller les lignes sans chevauchement, vous aurez besoin d'autres fonctionnalités. Voir [votre question] (http://stackoverflow.com/q/5907003/119634). –

Questions connexes