DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2
本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用 实验环境: DB2 v9.7.0.6 AIX 6.1.0.0 采用默认的隔离级别CS STUDENT表的DDL与初始内容 CREATE TABLE E97Q6C .STUDENT ( AGE INTEGER , NAME CHAR(8) ) IN
本文主要解释下DB2中三个有关锁变量DB2_EVALUNCOMMITTED,DB2_SKIPDELETED和DB2_SKIPINSERTED的使用
实验环境:
DB2 v9.7.0.6AIX 6.1.0.0
采用默认的隔离级别CS
STUDENT表的DDL与初始内容
CREATE TABLE "E97Q6C "."STUDENT" (
"AGE" INTEGER ,
"NAME" CHAR(8) )
IN "USERSPACE1" ;
$ db2 "select * from student"
AGE NAME
----------- --------
3 xu
5 gao
6 mu
6 mu
6 mu
4 three
1 an
7 record(s) selected.
--分割线--
当启用DB2_EVALUNCOMMITTED时,DB2可以对未提交的插入(INSERT)或更新(UPDATE)数据进行谓词判断。
如果未提交的数据不符合该条语句的谓词判断条件,DB2将不对未提交数据加锁,这样避免了因为要对
未提交数据加锁引起的锁等待状态,提高了应用程序访问的并发性。
实验 1
测试如下(该参数与数据库配置参数CUR_COMMIT有冲突,因此,测试之前需要先将CUR_COMMIT参数设为disabled.)
首先在session 1里做一条“未提交的插入(INSERT)操作”
session 1
---------
$ db2 +c "insert into student values(7,'he')"
DB20000I The SQL command completed successfully.
session 2
---------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
$ db2 "select * from student where age = 3"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
可以看到,在session 2里的两条语句都因锁超时而失败了。原因是如果用户在更改(UPDATE)、插入(INSERT)或
删除(DELETE)一行时,会在这一行加上排它锁,别的用户不能读、写,除非使用UR隔离级别。
现在启用DB2_EVALUNCOMMITTED变量,需要重启实例,之后在session 1里做同样的插入操作,session 2里做同样的查询
操作:
session 1
------------
$ db2set DB2_EVALUNCOMMITTED=ON
$ db2stop force
$ db2start
$ db2 connect to qsmiao
$ db2 +c "insert into student values(7,'he')"
DB20000I The SQL command completed successfully.
session 2
------------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
$ db2 "select * from student where age = 3"
AGE NAME
----------- --------
3 xu
1 record(s) selected.
这次可以看到第2条查询语句是成功的,原因是session 1中有未提交的插入操作,session 2在扫描时,对该行进行了谓词判断,发现不符合谓词盼断条件
也就是 age = 3 , session 2就不会对该行进行加锁,因而不会导致锁超时。
DB2_SKIPDELETED变量被启用的效果是:在表访问期间,会无条件地跳过被删除的行。
实验 2:
在默认情况下,即没有设置DB2_EVALUNCOMMITTED和DB2_SKIPDELETED变量的时候,如果session 1用提交的方式删除操作的时候,Session 2若要查询整个表,是要超时的,
如下:
session 1
---------
$ db2set DB2_SKIPDELETED=OFF
$ db2set DB2_EVALUNCOMMITTED=OFF
$ db2stop force
$ db2start
$ db2 connect to qsmiao
$ db2 +c "delete from student where age=6"
DB20000I The SQL command completed successfully.
session 2
---------
$ db2 "select * from student"
SQL0911N The current transaction has been rolled back because of a deadlock
or timeout. Reason code "68". SQLSTATE=40001
如下,现在修改DB2_SKIPDELETED为ON,那么session 2查询的时候,会无条件地跳过被删除的行,因此会成功。
session 1
---------
$ db2 rollback
$ db2set DB2_SKIPDELETED=ON
$ db2stop force
$ db2start
$ db2 connect to qsmiao
$ db2 +c "delete from student where age=6"
DB20000I The SQL command completed successfully.
session 2
---------
$ db2 "select * from student"
AGE NAME
----------- --------
3 xu
5 gao
4 three
1 an
4 record(s) selected.
类似的,DB2_SKIPINSERTED变量的作用是无条件地跳过被插入的行,就像它们还没有被插入。
参考资料:
牛新庄 《高级进阶DB2(第2版)》

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Les variables d'environnement sont le chemin d'accès à l'emplacement (ou à l'environnement) où les applications et les programmes s'exécutent. Ils peuvent être créés, édités, gérés ou supprimés par l'utilisateur et s'avèrent utiles lors de la gestion du comportement de certains processus. Voici comment créer un fichier de configuration pour gérer plusieurs variables simultanément sans avoir à les modifier individuellement sous Windows. Comment utiliser les profils dans les variables d'environnement Windows 11 et 10 Sous Windows, il existe deux ensembles de variables d'environnement : les variables utilisateur (s'appliquent à l'utilisateur actuel) et les variables système (s'appliquent globalement). Cependant, en utilisant un outil comme PowerToys, vous pouvez créer un fichier de configuration distinct pour ajouter des variables nouvelles et existantes et les gérer toutes en même temps. Voici comment procéder : Étape 1 : Installer PowerToysPowerTo

Le mode strict a été introduit dans PHP7, ce qui peut aider les développeurs à réduire les erreurs potentielles. Cet article expliquera ce qu'est le mode strict et comment utiliser le mode strict en PHP7 pour réduire les erreurs. Parallèlement, l'application du mode strict sera démontrée à travers des exemples de code. 1. Qu’est-ce que le mode strict ? Le mode strict est une fonctionnalité de PHP7 qui peut aider les développeurs à écrire du code plus standardisé et à réduire certaines erreurs courantes. En mode strict, il y aura des restrictions et une détection strictes sur la déclaration des variables, la vérification du type, l'appel de fonction, etc. Passer

Les variables d'instance en Java font référence aux variables définies dans la classe, et non dans la méthode ou le constructeur. Les variables d'instance sont également appelées variables membres. Chaque instance d'une classe possède sa propre copie de la variable d'instance. Les variables d'instance sont initialisées lors de la création de l'objet et leur état est enregistré et conservé tout au long de la durée de vie de l'objet. Les définitions de variables d'instance sont généralement placées en haut de la classe et peuvent être déclarées avec n'importe quel modificateur d'accès, qui peut être public, privé, protégé ou le modificateur d'accès par défaut. Cela dépend de ce que nous voulons que ce soit

Introduction à la fonction PHP — strpos() : Vérifier si une variable est une chaîne En PHP, is_string() est une fonction très utile, qui est utilisée pour vérifier si une variable est une chaîne. Lorsque nous devons déterminer si une variable est une chaîne, la fonction is_string() peut nous aider à atteindre facilement cet objectif. Ci-dessous, nous apprendrons comment utiliser la fonction is_string() et fournirons quelques exemples de code associés. La syntaxe de la fonction is_string() est très simple. il suffit qu'il

L'utilisation d'Ajax pour obtenir des variables à partir de méthodes PHP est un scénario courant dans le développement Web. Grâce à Ajax, la page peut être obtenue dynamiquement sans actualiser les données. Dans cet article, nous présenterons comment utiliser Ajax pour obtenir des variables à partir de méthodes PHP et fournirons des exemples de code spécifiques. Tout d’abord, nous devons écrire un fichier PHP pour gérer la requête Ajax et renvoyer les variables requises. Voici un exemple de code pour un simple fichier PHP getData.php :

Python est largement utilisé dans un large éventail de domaines grâce à sa syntaxe simple et facile à lire. Il est crucial de maîtriser la structure de base de la syntaxe Python, à la fois pour améliorer l’efficacité de la programmation et pour acquérir une compréhension approfondie du fonctionnement du code. À cette fin, cet article fournit une carte mentale complète détaillant divers aspects de la syntaxe Python. Variables et types de données Les variables sont des conteneurs utilisés pour stocker des données en Python. La carte mentale affiche les types de données Python courants, notamment les entiers, les nombres à virgule flottante, les chaînes, les valeurs booléennes et les listes. Chaque type de données a ses propres caractéristiques et méthodes de fonctionnement. Opérateurs Les opérateurs sont utilisés pour effectuer diverses opérations sur les types de données. La carte mentale couvre les différents types d'opérateurs en Python, tels que les opérateurs arithmétiques, ratio
![Erreur interne : impossible de créer un répertoire temporaire [Résolu]](https://img.php.cn/upload/article/000/000/164/168171504798267.png?x-oss-process=image/resize,m_fill,h_207,w_330)
Le système Windows permet aux utilisateurs d'installer différents types d'applications sur votre système à l'aide de fichiers exécutables/de configuration. Récemment, de nombreux utilisateurs de Windows ont commencé à se plaindre de recevoir une erreur nommée INTERNALERROR:cannotCreateTemporaryDirectory sur leurs systèmes lorsqu'ils essayaient d'installer une application à l'aide d'un fichier exécutable. Le problème ne se limite pas à cela mais empêche également les utilisateurs de lancer des applications existantes, également installées sur le système Windows. Certaines raisons possibles sont énumérées ci-dessous. Exécutez l'exécutable pour l'installer sans accorder les privilèges d'administrateur. Un chemin non valide ou différent a été fourni pour la variable TMP. système endommagé

Différences de syntaxe entre db2 et oracle : 1. Différences de syntaxe SQL. Bien que db2 et oracle utilisent tous deux un langage de requête structuré, ils présentent certaines différences de syntaxe ; 2. db2 et oracle ont des types de données différents. être défini lors de la création de la table ou ajouté après l'utilisation de l'instruction "ALTER TABLE". Oracle doit être défini ensemble lors de la création de la table 4. Il existe également quelques différences dans la syntaxe des procédures et fonctions stockées db2 et Oracle.
