Question

Est-ce que quelqu'un connaît un moyen d'imposer un indice Nolock à toutes les transactions émises par un utilisateur donné? J'aimerais fournir un login à une équipe de support pour interroger le système de production, mais je souhaite le protéger en forçant un nolock à tout ce qu'il fait. J'utilise SQL Server 2005.

Était-ce utile?

La solution

C’est une façon douloureuse et difficile de le faire, mais c’est ce que nous faisons là où je travaille. Nous utilisons également un asp classique, nous utilisons donc des appels SQL en ligne. nous encapsulons en fait l'appel SQL dans une fonction (ici, vous pouvez rechercher un utilisateur spécifique) et ajouter "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED". au début de l'appel.

Je pense que, sur le plan fonctionnel, il en va de même pour le soupçon de non verrouillage. Désolé de ne pas avoir de réponse SQL pure, je serais intéressé de savoir si vous trouvez un bon moyen de le faire.

Autres conseils

Vous pouvez configurer SQL Management Studio de votre équipe de support pour définir le niveau d'isolation de transaction par défaut sur READ UNCOMMITTED (Outils -> Options -> Exécution de la requête -> SQL Server -> Avancé). C'est fonctionnellement la même chose que d'avoir des allusions NOLOCK sur tout.

L’inconvénient est que vous devrez le faire pour chaque membre de votre équipe de support et qu’ils auront la possibilité de modifier la configuration de leur SQL Management Studio.

OK, vous devez préciser ce que vous essayez de faire ici.

Si vous essayez de réduire le verrouillage sur la base de données et que vous fournissez éventuellement à vos utilisateurs du support des données qui pourraient ne jamais être réellement validées dans la base de données. Tout en leur permettant d'écrire tout ce qu'ils veulent dans la base de données, nolock est la solution. Vous obtiendrez un bonus supplémentaire: votre utilisateur pourra toujours augmenter son niveau d'isolement à l'aide de la commande SET TRANSACTION ISOLATION LEVEL.

Si vous essayez de limiter les dommages qu’ils peuvent causer lors de l’exécution de tâches sur la base de données, envisagez de mettre en œuvre la sécurité, assurez-vous qu’ils disposent uniquement d’un accès en lecture à vos tables et supprimez tout accès aux procs et fonctions stockés.

I Find NOLOCK est très mal compris en cas de débordement de pile.

Vous pouvez créer un utilisateur limité pour l'équipe de support, puis écrire des procédures stockées ou des vues avec nolock-hint. Ensuite, donnez uniquement l'accès à ceux-ci et non à l'accès direct à la sélection de table.

Comme Espo l'a laissé entendre, je suis à peu près sûr qu'il n'y a pas de moyen direct de faire ce que vous demandez. Comme il l'a dit, vous pouvez en quelque sorte accomplir cela en limitant l'accès de l'utilisateur aux seuls procs dans lesquels NOLOCK est codé.

Malheureusement, le fait de limiter les utilisateurs aux SP réduit à néant le but recherché. J'espérais pouvoir leur permettre de tout interroger et ainsi améliorer leurs compétences en matière de dépannage. Merci pour votre aide les gars.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top