Question : Multifile et rangée le verrouillage dessus choisit

Salut là, le

this est une question assez générale et quelques indicateurs, exemples ou liens aux cours d'instruction seraient great.

I avaient conçu une base de données qui est déployée dans un environnement multifil de Java. Fondamentalement, il y a les services de Java qui fonctionnent constamment au-dessus de la base de données, vérifiant les nouveaux records, les mettant à jour etc.

I ont mis en application le magasin Procs pour toutes les mises à jour, obtiennent etc. et ont tout des transactions intérieures enveloppées à l'intérieur du proc de magasin. Jusqu'ici si bon.  Cependant ma principale préoccupation est comment fais j'arrête un disque ou peut-être les disques dans quelques tables obtenant mises à jour entre le moment I « choisissent » des données à partir de elles à la mise à jour du temps I réellement le disque et commettent la transaction. Dans la mesure où je me rends compte la transaction ne donne pas un coup de pied dedans, jusqu'à une mise à jour, la suppression ou l'insertion s'appelle l'intérieur le transport clause.

So qu'un exemple compte du be

Table a 2 disques comme le so
AccID, nom de compte, Balance
1020, John Smith, €-128.00
1057, roseau de COMMENCER de Mike, €5839,00

I ont quelques services fonctionner au-dessus de ces tables regardant pour faire différentes tâches sur le records.
John Smith sont en déficit, mais un fil est apparu pour quelques fonds ainsi les fonds de mise à jour de service vont ajouter €1000 dans son account.
In mon proc de stor je veux ajoute un disque pour les fonds supplémentaires à une table et mettre à jour la table de compte. Je commence une transaction. Tellement alors je fais un équilibre choisi de compte et obtiens €-128.  J'alors crée le disque de fil dans la table de WireDetails et vais mettre à jour l'équilibre dans l'accounts.

How fais j'arrête un autre serivice entrant et la fabrication change en la table de compte, car je seulement ai choisi parmi it.

Sorry pour l'exemple idiot mais j'espère que vous voyez ce que c'est qu'I, m essayant d'arrêter… le
thanks M
class= de

Réponse : Multifile et rangée le verrouillage dessus choisit

Disons-vous ont la table t (I international non nul, un char (1))
insérer dans t choisissent 1, « a »

fileter les issues A1 ceci :

commencer la transaction
PLACER QU'ON PEUT RÉPÉTER DE NIVEAU D'ISOLEMENT DE TRANSACTION LU
choisir * à partir de t où i=2


et se repose alors juste là. Vient le long le fil B et les issues

choisir * à partir de t où i=2
mettre à jour l'a='c réglé de t où i=2


Le ęr de ces rapports du b réussira, mais 2èmes attendront jusqu'au fil A ont publié commettent. Il y a un problème cependant : il est facile de voir que B peut facilement dépasser la modification apportée par A, s'il agit basant sur ce qu'il voit quand il a recherché la rangée. Que cette raison, il vaut mieux publie

a='c réglé de la mise à jour t où i=2 et a='a

Ceci vérifie effectivement que B met à jour ce qu'il pense qu'il met à jour. Et c'est exactement comme le curseur client-basé fonctionne, qui est le type le plus habituel du curseur utilisé dans des instruments de développement d'aujourd'hui, particulièrement basé sur le WEB : aucune transaction, aucune serrure, mais pendant la vérification de mise à jour de tous les champs qui ont été lus, et le cas échéant n'a changé, puis message d'erreur de sorte qu'un autre utilisateur ait modifié le resultset.

Si vous voulez éliminer ceci, alors vous devez publier le niveau bien plus restrictif SERIALIZABLE d'isolement de transaction dans le fil B, et dès que vous lirez les rangées dans A, les mettez à jour là en employant une certaine colonne factice juste à cette fin. Alors B ne pourra pas voir les rangées qui peuvent être modifiées par A - qui est correct, parce qu'autrement B ne saurait pas que ces rangées sont maintenant fonctionnées dessus à côté de l'A. Mais ceci naturellement apporte l'issue d'A se brisant, partant pour le déjeuner, etc., etc.

Pour cette raison, le curseur client-situé est probablement la manière la plus pratique de faire tout ceci, qui est pourquoi c'est le type le plus répandu d'opérations de base de données aujourd'hui.
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us