2009-12-20 4 views
2

J'ai besoin d'utilisateur vraiment bizarre. J'ai essayé de leur expliquer qu'il y a de bien meilleures façons de soutenir leur processus d'affaires et qu'ils ne veulent pas l'entendre. Je suis tenté de m'en aller mais je veux d'abord voir s'il y a peut-être un autre moyen.Verrouiller la base de données entière?

Y at-il un moyen de verrouiller une base de données entière par opposition à verrouillage de ligne ou verrouillage de table. Je sais que je peux peut-être mettre la base de données en mode mono-utilisateur, mais cela signifie qu'une seule personne peut l'utiliser à la fois. J'aimerais que beaucoup de gens puissent lire à la fois, mais seulement une personne pour pouvoir écrire à la fois. Ils essaient de faire une migration de données vraiment étrange.

+7

Parfois, s'éloigner est la bonne réponse –

Répondre

7

Que voulez-vous réaliser?

  • Voulez-vous rendre la base de données entière en lecture seule? Vous pouvez certainement le faire
  • Voulez-vous empêcher les nouveaux clients de se connecter à la base de données? Vous pouvez certainement le faire aussi

Mais il n'y a vraiment pas de concept de "verrouillage de base de données" en permettant seulement à une personne d'utiliser la base de données. Au moins pas dans SQL Server, pas que je sache. A quoi cela vous ferait-il, d'ailleurs?

Si vous souhaitez effectuer une migration de données hors de cette base de données, la configuration de la base de données en mode lecture seule (ou la création d'une copie d'instantané) sera probablement suffisante et facile.

MISE À JOUR: pour le scénario que vous mentionnez (saisir les données pour les personnes avec des ordinateurs portables, puis re-syncronize), vous devez absolument vérifier ADO.NET Sync Services - c'est exactement ce qu'il fait pour!

Même si vous ne pouvez pas utiliser ADO.NET Sync Services, vous devez toujours pouvoir mettre à jour de manière sélective et intelligente votre base de données centrale avec les modifications apportées par les ordinateurs portables sans verrouiller toute la base de données. SQL Server dispose de plusieurs méthodes pour mettre à jour les lignes même lorsque la base de données est en cours d'utilisation. Il n'est vraiment pas nécessaire de verrouiller complètement la base de données entière pour mettre à jour quelques lignes! Par exemple: vous devriez avoir une colonne TIMESTAMP (ou ROWVERSION) sur chacune de vos tables de données, ce qui vous permettrait facilement de voir si des changements sont survenus. Si le champ TIMESTAMP (qui n'est en réalité qu'un compteur - il n'a rien à voir avec la date ou l'heure) n'a pas changé, la ligne n'a pas changé et n'a donc pas besoin d'être considérée pour une mise à jour.

+0

Ils veulent une base de données centrale. Quand quelqu'un quitte avec un ordinateur portable, ils veulent tirer une copie des dernières données dans une base de données locale. Quand ils reviennent, ils veulent être en mesure de pousser les changements à la base de données centrale. Je veux juste empêcher les conditions de course avec deux personnes mettant à jour les mêmes données et le changement est le dernier. Ou une personne mise à jour pendant qu'une autre est en train de lire. Ils ne semblent pas saisir cette situation plutôt dangereuse. – uriDium

+0

Ensuite, consultez ADO.NET Sync Framework - qui est conçu pour EXACTEMENT ce scénario. Vous pouvez avoir un client "occasionnellement connecté" avec une base de données locale, et il gère tous les cas spéciaux désordonnés et vous permet de définir des stratégies pour gérer les conflits. –

+0

Je vous remercie. – uriDium

Questions connexes