Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2011, 12h15   #1
Invité de passage
 
Inscription : mai 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 9
Points : 3
Points : 3
Par défaut enregistrement simultanné dans la méme table

Bonjour
je travaille sur oracle 10g
mon application est installé sur un serveur, et j'ai plusieurs utilistaurs qui sont connectés.
lorsque j'ajoute un enregistrement avec la technique
code=maxvalue ,il se peut que deux utilisateurs aient la même valeur ,ce qui pose un problème de clé primaire, j'ai essayé avec la séquence je trouve que je perds quelques numéro lorsque j'annule la tâche.
merci de me proposer une solution
yesfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 12h48   #2
Membre confirmé
 
Avatar de jkofr
 
Homme Jacques
Administrateur de base de données
Inscription : octobre 2006
Messages : 251
Détails du profil
Informations personnelles :
Nom : Homme Jacques
Âge : 43
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : octobre 2006
Messages : 251
Points : 219
Points : 219
Envoyer un message via MSN à jkofr
Hello,

Si c'est un problème pour toi de perdre quelques numéros, alors tu peux t'en sortir en créant une table (avec storage keep) qui contiendra une ou plusieurs lignes du style

Code :
1
2
3
4
5
6
 
CREATE TABLE My_Keys
(
  Key_ID    Number;
  Key_Value Number;
)  STORAGE( BUFFER_POOL KEEP);
Avec une seule ligne par clé.
Tu pourra faire un select for update pour incrémenter ta clé.

C'est une idée...
jko
__________________
OCA-OCP 11g, SQL and Performance & Tuning Expert 11g
Data Guard 11g, ASM & Grid Control 11g, Apex
jkofr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h49   #3
Invité de passage
 
Inscription : mai 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 9
Points : 3
Points : 3
merci c'est pas mal
mais est ce que je peux récupérer les valeurs perdues par la séquence
yesfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 13h59   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Le problème ne serait-il pas pris à l'envers ? Certes, tu peux avoir un besoin particulier qui impose de ne pas avoir de trou, mais généralement, ce qui compte c'est de justifier ces trous rien de plus. Tu pourrais donc très bien ajouté une colonne à la table proposée par jkofr pour justifier le non usage d'une clé.

Parce qu'avoir une séquence sans trou c'est surement possible mais en contrepartie tu vas devoir développer une usine à gaz pour réutiliser les numéros (genre max(Key_ID) WHERE status = 'FREE' ou UPDATE tab_seq SET ID = ID + 1) libres et ça va coûter en perf

Pour info : http://asktom.oracle.com/pls/asktom/...:4343369880986
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h18   #5
Invité de passage
 
Inscription : mai 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 9
Points : 3
Points : 3
merci infiniment
yesfa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 14h44   #6
Membre expérimenté
 
Homme Mohamed Houri
Inscription : mars 2010
Messages : 286
Détails du profil
Informations personnelles :
Nom : Homme Mohamed Houri
Localisation : France

Informations forums :
Inscription : mars 2010
Messages : 286
Points : 563
Points : 563
Citation:
Envoyé par yesfa Voir le message
Bonjour
je travaille sur oracle 10g
mon application est installé sur un serveur, et j'ai plusieurs utilistaurs qui sont connectés.
lorsque j'ajoute un enregistrement avec la technique
code=maxvalue ,il se peut que deux utilisateurs aient la même valeur ,ce qui pose un problème de clé primaire, j'ai essayé avec la séquence je trouve que je perds quelques numéro lorsque j'annule la tâche.
merci de me proposer une solution
Vous dites que vous êtes dans une application multi-utilisateurs et que vous vous êtes rendu compte qu'en utilisant code=maxvalue, il y a des chances où deux utilisateurs se retrouvent avec la même valeur pour la même clé primaire. C'est pourquoi vous avez optez pour une séquence d'Oracle; mais vous êtes gêné par les trous dans cette clé primaire.

Mon conseil, est
(a) d'utiliser cette séquence Oracle dans votre trigger
(b) d'accepter les trous dans votre clé primaire.

En effet, c'est beaucoup plus sûr et moins contraignant dans un environnement concurrent comme le votre d'opter pour les point (a) et (b) plutôt que de se laisser embarqué dans des complications qui au mieux ne feront que sérialiser vos inserts.


Bien à vous

Mohamed Houri
Mohamed.Houri est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h00.


 
 
 
 
Partenaires

Hébergement Web