2010-11-06 6 views
1

Comment puis-je résoudre le problème de lecture ci-dessous sale dans le serveur SQL.Sale problème de lecture, comment résoudre dans SQL Server 2005

Il existe un rapport de facturation client , qui s'exécute 1h00 l'après-midi et après que toutes les factures sont envoyées au client respectif pour les paiements. Disons que l'un des clients a 1000 $ à payer. Le client paie 1000 $ à 1h00 et en même temps le rapport est exécuté. En fait, le client n'a pas d'argent en attente mais reçoit toujours une facture.

aussi comment résoudre ce prblem aussi, pour les non répétables lu

Par exemple, un client veut réserver un vol, de sorte que les chèques d'agent Voyage pour la disponibilité des vols. L'agent de voyage trouve un siège et va de l'avant pour réserver le siège. Pendant que l'agent de voyages réserve le siège, un autre agent de voyages réserve le siège. Lorsque cet agent de voyage va mettre à jour le dossier, il reçoit une erreur disant que "Le siège est déjà réservé". En bref, l'agent de Voyage obtient un statut différent à différents moments de la mer

aussi ce problème aussi du mal à me ..... Mises à jour perdues

Supposons qu'un client a raison de 2000 $ à payer . Il paie 1000 $ et achète à nouveau un produit de 500 $. Disons que ces deux transactions sont maintenant saisies à partir de deux compteurs différents de la société. Maintenant, le compteur commence à entrer en même temps 10:00 AM. En fait, à 10h01 le client devrait avoir 2000 $ -1000 $ + 500 = 1500 $ en attente d'être payé. Mais comme indiqué dans les mises à jour perdues la première transaction n'est pas prise en compte et la deuxième transaction l'annule. Donc le final en suspens est 2000 $ + 500 $ = 2500 $ ..... J'espère que la compagnie ne perd pas le client.

Répondre

3

Vous décrivez des disjonctions logiques. Dans ce dernier cas, vous devez détailler la facture et dire si le client a payé quelque chose qui n'a pas été envoyé dans le système pour être conscient qu'il le fera.

Dans la première, l'erreur indique simplement l'évidence. C'est la même situation avec l'accès au disque et les handles de fichiers. Tout simplement parce que vous pouvez écrire dans un fichier lorsque vous vérifiez ne signifie pas que vous pouvez réellement écrire dans un fichier lorsque vous essayez de le faire.

Vous devez gérer les erreurs.

Dans le premier cas, je ne vois pas pourquoi vous ne pouvez pas dire quand le montant était en attente. Si envoyer des factures vides est vraiment un problème, alors vous devez vérifier juste avant qu'il ne soit émis. Si la facture n'a vraiment aucun élément, alors il y aura une logique qui dit que le blocage de cette facture n'a pas d'éléments de détail ou que le total est nul. Mais si c'est entre l'émission et la réception qu'il est payé alors vous avez encore une facture valide.

Si vous parlez de deux choses mettant à jour un enregistrement à la fois, vous devez utiliser un système de verrouillage pour vous assurer qu'aucun autre processus n'écrit pendant qu'une autre écriture est en cours.

Il existe toutes sortes d'approches de simultanéité pour cela - comme un système semephore. sql lui-même a des transactions. Concurrence Google SQL, c'est un problème commun avec de nombreuses solutions.

Le motif commun est lecture, verrouillage, lecture, écriture et déverrouillage.

Understanding Concurrency Control

La chose à considérer est voulez-vous de haute performance sur lit ou écrit. La stratégie que vous utiliserez reflétera cela. Par exemple, vous envisagez un seul champ ... mais qu'en est-il de la mise à jour de plusieurs champs sur une seule ligne?