NOLOCK côté serveur dans SQL Server
-
29-09-2019 - |
Question
Je sais que dans la base de données Oracle, je peux configurer un drapeau, que toutes les requêtes de sélection en cours d'exécution sur un DB spécifique peut être exécuté comme si l'indice de NOLOCK
a été ajouté.
Y at-il quelque chose de similaire dans SQL Server?
La solution
Vous pouvez définir la base de données en READ_ONLY en mode , qui a certainement modifie certaines des règles de transaction, mais je ne pense pas qu'il y ait quoi que ce soit plus proche d'une NOLOCK mondiale.
Modifier
Si vous voulez être en mesure d'effectuer des effacements et INSERTs UPDATEs, mais vous ne voulez pas les lecteurs de verrouiller ou doivent spécifier les indications ou les niveaux d'isolement, vous pouvez aussi envisager de se tourner sur READ_COMMITTED_SNAPSHOT , mais la sémantique il y a encore pas tout à fait la même chose que l'indicateur NOLOCK.
Autres conseils
Non à un niveau par base de données. Vous ne pouvez le faire avec des notes ou set transaction isolation level
. Vous pouvez définir une base de données en mode lecture seule, ce qui peut avoir cet effet par défaut, mais qui sera (comme son nom l'indique) rendent impossible écrit dans la base.
Cela peut être utile pour une base de données est actualisée périodiquement. Vous définissez la base de données en lecture seule et mettre à inscriptibles pour les mises à jour puis de nouveau en lecture seule.
Non pour la base de données entière, mais pour chaque requête que vous faites:
SELECT a, b
FROM t1
WITH (NOLOCK)
WHERE t1.c = @value
ou
SELECT a, b
JOIN t1
ON t1.id = t2.id
WITH (NOLOCK)
FROM t2
WHERE t2.c = @value
etc