Informix的事务、并发控制、锁机制、隔离级别
事务隔离级别及应用场景

事务隔离级别及应用场景事务隔离级别是数据库中解决并发访问问题的重要机制之一。
不同的隔离级别提供了不同程度的隔离和并发控制,并且在不同的场景下应用不同的隔离级别可以保证数据的一致性和并发性能。
常见的四种事务隔离级别包括:读未提交(Read Uncommitted)、读提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
1. 读未提交(Read Uncommitted)在该隔离级别下,事务可以读取其他事务尚未提交的数据。
这种级别最低,提供最低的隔离程度,存在脏读、不可重复读和幻读的问题。
适用于对数据一致性要求不高,但是要求并发性能高的场景。
2. 读提交(Read Committed)在该隔离级别下,事务只能读取已经提交的数据。
读取过程中,其他事务对该数据的修改将被阻塞,直至修改提交。
解决了脏读的问题,但是仍然存在不可重复读和幻读的问题。
适用于对数据一致性要求较高,但是对并发性能要求较低的场景。
3. 可重复读(Repeatable Read)在该隔离级别下,事务在读取的过程中,其他事务对该数据的修改也将被阻塞,直至读取完成。
解决了脏读和不可重复读的问题,但是仍然存在幻读的问题。
适用于对数据一致性要求高,但是对并发性能要求一般的场景。
4. 串行化(Serializable)在该隔离级别下,事务对数据的读取和修改都将进行加锁,其他事务无法读取和修改已被锁定的数据,从而实现了最高的隔离性。
解决了脏读、不可重复读和幻读的问题,但是牺牲了并发性能,一次只能有一个事务能够对数据进行读取和修改。
适用于对数据一致性要求极高,但是对并发性能要求非常低的场景。
不同的隔离级别根据场景的需求决定使用,为了保证数据的一致性和并发性能,应根据业务需求选择不同的隔离级别。
例如,在金融领域的转账系统中,对数据的一致性要求非常高,不能允许出现脏读、不可重复读和幻读的问题。
数据库事务的隔离级别与并发控制

数据库事务的隔离级别与并发控制在数据库管理系统中,事务的隔离级别和并发控制是确保数据完整性和一致性的重要手段。
隔离级别定义了事务之间的可见性,而并发控制则管理并发执行事务的方式。
本文将详细介绍数据库事务的隔离级别和并发控制。
一、事务的隔离级别1. 未提交读(Read Uncommitted)未提交读是最低的隔离级别,事务对其他事务所做的修改可以立即可见。
这会导致脏读(Dirty Read)问题,即读取到了尚未提交的数据,容易造成数据不一致。
2. 提交读(Read Committed)提交读是较低的隔离级别,事务只能读取已经提交的数据。
这避免了脏读,但可能会导致不可重复读(Non-Repeatable Read)问题,即在同一个事务中,两次读取同一个数据的结果不一致。
3. 可重复读(Repeatable Read)可重复读是较高的隔离级别,事务在执行期间多次读取同一个数据得到的结果是一致的。
这避免了脏读和不可重复读,但可能会导致幻读(Phantom Read)问题,即在同一个事务中多次执行相同的查询,结果集却发生了变化。
4. 串行化(Serializable)串行化是最高的隔离级别,事务串行执行,保证了数据的完全一致性。
但这会导致并发性能降低,因为每次只有一个事务能够同时执行。
二、并发控制的方法1. 锁机制锁机制是最基本的并发控制方法之一,通过给数据或资源加锁来实现对并发访问的控制。
常见的锁类型有共享锁和排它锁,共享锁允许多个事务并发读取数据,而排它锁则只允许一个事务独占访问数据。
2. 并发控制算法并发控制算法包括多版本并发控制(MVCC)、时间戳排序和两段锁协议等。
这些算法通过在数据中维护版本信息、时间戳或锁状态来实现事务的并发控制。
不同的算法适用于不同的场景,具体的选择需要根据实际需求和性能考虑。
3. 乐观并发控制乐观并发控制是一种无锁的并发控制方法,通过版本号或时间戳等机制来检测并发冲突并解决。
infomix数据库基础笔记

一. informix数据库基础管理类常用命令一、常用命令oninit 将系统从off-line模式变为on-line模式oninit -iy (初始化数据库,删除所有dbspace和chunk)oninit -s (脱机-->静态)onmode -ky offlineonmode -s graceful shutdown-->quiescent(联机到静态,让用户处理完成)onmode -u immediate shutdown-->quiescent(联机到静态,所有用户立即终止)onmode -m quiescent--->onlineonmode -z sid 删除某sessiononmode -l 将当前正在使用的逻辑日志下移onmode -c 强制执行检查点操作即onmonitor->force ckpt其中的oninit onmode一般情况下只有dbsa权限才可以执行,oninit权限限制级别更高onstat - 查看服务器状态onstat -d 查看dbspace和chunk情况onstat -l 查看逻辑日志onstat -F 查看写入磁盘的页刷新和类型情况,从共享内存缓冲区向磁盘写入页面有三种方式(fg:前台写LRU:队列写chunk:块写)onstat -R 打印LRU队列onstat -p 显示系统的基本I/O与性能配置文件onstat -c 查看onconfig文件onstat -m 查看消息日志onstat -f 查看受DATASKIP影响的dbspaceonstat -x 查看事务onstat -k 显示所有活动的锁onstat -g sub_option 运行多线索选项onstat -g ses/sqlonstat -r <value> 每隔<value>秒后重复选项onstat -g act 显示系统中所有的活动线索onstat -g ath -r 2 每隔两秒显示系统中所有的活动的线索onstat -i 交互方式>sql>sql sid关于onstat命令的更多用法,可以在系统中运行onstat -help查看ipcs 查看共享内存情况ipcrm 删除某个共享内存ipcrm -m idipcrm -s idOntape命令:1)零级(一级或二级)备份$>ontape -s$>ontape -s -L 0$>ontape -s -L 1$>ontape -s -L 2自动备份逻辑日志文件$>ontape -a3)连续逻辑日志备份(日志文件写满一个,online系统自动备份一个,你可以插盘磁带到磁带机上,让IDS自动备份。
数据库事务隔离级别与并发控制详解

数据库事务隔离级别与并发控制详解随着数据库的广泛应用,对于数据库事务隔离级别和并发控制的需求也越来越高。
为了保证数据库的数据一致性和可靠性,数据库系统采用了事务隔离级别和并发控制机制。
本文将详细介绍数据库事务隔离级别和并发控制的概念和原理,以及不同隔离级别的特点和应用场景。
首先,我们来了解什么是事务隔离级别。
事务隔离级别指的是多个事务同时运行时彼此之间的影响程度,它提供了一种机制来控制事务的隔离程度,以确保事务在并发环境下执行的可靠性。
数据库管理系统定义了四个标准的事务隔离级别,分别为读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
读未提交是最低级别的隔离级别,它允许一个事务读取到另一个事务尚未提交的数据。
这个隔离级别最容易导致脏读(Dirty Read)问题,即一个事务读取到了由另一个未提交事务所修改的数据。
读已提交是数据库系统的默认隔离级别,它保证一个事务读取到的数据是已经提交的数据,解决了脏读的问题。
但是读已提交隔离级别可能导致不可重复读(Non-repeatable Read)的问题,即一个事务多次读取同一数据时,得到的结果不一致。
为了解决不可重复读的问题,可重复读隔离级别引入了额外的机制。
在该隔离级别下,一个事务多次读取同一数据时,会得到一致的结果,即使其他事务修改了该数据。
可重复读隔离级别解决了不可重复读的问题,但依然可能导致幻读(Phantom Read)的问题。
幻读指的是在一个事务中的两次查询过程中的数据行的数量发生了不一致的情况。
最高级别的事务隔离级别是串行化,该级别通过对事务进行加锁的方式来实现隔离。
串行化隔离级别确保所有事务按照顺序依次执行,避免了脏读、不可重复读和幻读的问题。
但是串行化的隔离级别会导致系统的并发性能大幅下降,因此在实际应用中很少使用。
除了事务隔离级别,数据库还需要采取并发控制的措施来保证事务的并发执行安全可靠。
软件开发中的并发控制问题

软件开发中的并发控制问题在软件开发中,不可避免地会遇到并发控制问题。
并发控制是指多个程序同时访问共享资源时可能发生的冲突情况,如数据竞争、死锁等。
这些问题会对系统的正确性和性能造成负面影响,因此在软件开发中需要仔细处理并发控制问题。
1. 并发控制的基本概念在软件开发中,同时访问共享资源的程序称为并发程序。
共享资源可以是变量、对象、文件、数据库等。
为了保证并发程序的正确性,必须采取一些措施防止并发访问导致数据不一致或者程序出现死锁等问题。
并发控制涉及以下几个概念:1. 锁:是一种同步机制,用于控制对共享资源的访问。
锁可以分为共享锁和排他锁。
共享锁允许多个进程同时访问资源,但是不能进行写操作。
排他锁是一种互斥锁,只允许一个进程访问资源。
2. 事务:是一组操作的集合,作为一个单一的逻辑工作单元进行处理。
事务具有ACID特性(原子性、一致性、隔离性、持久性)。
事务的目的是确保一组操作被连续地执行,或者在发生错误时回滚到原始状态。
3. 死锁:是指两个或多个进程互相等待而无法继续执行的情况。
死锁是并发控制的一个严重问题,可以导致系统崩溃或者长时间停滞。
2. 并发控制方法在软件开发中,有多种方法可以处理并发控制问题。
以下是其中的一些方法:1. 锁机制:使用锁来保护共享资源免受竞争和冲突。
锁分为乐观锁和悲观锁。
乐观锁通过版本号或时间戳等方式避免资源的竞争和冲突,而不是直接阻塞访问。
悲观锁通过直接阻塞其他访问来保证资源的可用性和正确性。
悲观锁包括共享锁、排他锁等。
2. 事务机制:事务机制可以确保一组操作被连续地执行或者在发生错误时回滚到原始状态。
事务机制通常在数据库管理系统等领域中使用,可以避免数据不一致和死锁等问题。
3. 信号量机制:信号量是一种计数器,用于控制同时访问共享资源的数量。
信号量可以使用P、V操作来进行锁定和解锁。
4. 读写锁机制:读写锁是一种特殊的锁机制,旨在优化读操作和写操作的并发。
读操作可以共享锁,多个线程同时持有读锁进行读操作。
informix入门基础学习教程

informix入门基础学习教程Informix是一个关系型数据库管理系统(RDBMS),是IBM公司开发的一种数据库管理系统。
它具有高效、可靠、安全的特点,被广泛应用于企业级应用程序中。
本文将介绍Informix的基础知识和学习教程。
一、Informix的概述Informix是一种面向企业级应用的数据库管理系统,它提供了高性能、可扩展、可靠的数据存储和处理能力。
Informix支持多种操作系统平台,包括Windows、Linux、Unix等。
它的特点包括事务处理、并发控制、数据安全等。
二、安装和配置Informix2. 配置Informix服务器,设置数据库存储路径、内存大小等参数。
3.创建数据库实例,设置数据库名称、用户名和密码等信息。
三、Informix的基本概念1. 数据库:Informix中的数据库是一组相关表的集合,用于存储和管理数据。
2.表:表是数据库中的基本组成单元,用于存储数据。
每个表包含多个列,每个列定义了一种数据类型。
3.列:列是表中的一个字段,用于存储特定类型的数据。
4.行:行是表中的一条记录,包含了一组相关的数据。
5.索引:索引是对表中一列或多列的值进行排序的数据结构,用于提高查询性能。
6.视图:视图是一个虚拟的表,它是基于一个或多个表的查询结果。
视图可以简化复杂的查询操作。
四、基本操作1.创建数据库:使用CREATEDATABASE语句创建一个新的数据库。
2.创建表:使用CREATETABLE语句创建一个新的表,并定义表中的列和其数据类型。
3.插入数据:使用INSERTINTO语句将数据插入到表中。
4.查询数据:使用SELECT语句从表中检索数据。
5.更新数据:使用UPDATE语句修改表中的数据。
6.删除数据:使用DELETEFROM语句从表中删除数据。
7.创建索引:使用CREATEINDEX语句在表上创建索引,以提高查询性能。
8.创建视图:使用CREATEVIEW语句创建一个新的视图。
Informix监控和管理命令 电脑资料

Informix监控和管理命令电脑资料监控ONLINE系统后动情况的工具主要有以下三类:系统监控接口( I)、tbstat和tbcheck,不能对 I中的表加锁或使用隔离级别。
不允许使用insert,delete,update等语句(只读)不能使用dbsche ,dbexport等命令使用select rowid语句将会产生不可预料的结果主要的 I表有:sysdatabases:online中的数据库信息systabnames:某数据库中所有表的信息syslogs:逻辑日志信息sysdbspaces:数据库信息syschunks,syslocks等例1:显示处于脱机(offline)状态的chunk的序号和所在数据库空间Select chknum,dbsnum from syschunks where isoffline=1 or misline=!例二:显示满chunk的信息Select chknum,dbsnum from syschunks where nfree=0 二、TBSTAT ? 列出当前时刻的信息(实际也是读取 I表)不需要磁盘I/O不需要锁等系统资源,因此不会影响系统性能用法:tbstat [-abcdklmpstuzBDFPRX] [-r seconds] [-o file] [infile] -a print all info (options: bcdklmpstu)-b print buffers(缓冲区)-c print configuration file(配置文件)-d print dbspaces and chunks(dbspace和chunk)-k print locks(锁)-l print logging(日志)-m print message log(日志)-p print profile(profile文件)-s print latches(门闸)-t print tblspaces(表空间)-u print users(用户)-z zero profile counts-B print all buffers-D print dbspaces and detailed chunk stats-F print page flushers(页刷新进程)-P print profile, including BIGreads-R print LRU queues(LRU队列)-X print entire list of sharers and waiters for buffers-r repeat options every n seconds (default: 5)-o put shared memory into specified file (default: tbstat.out) infile use infile to obtain shared memory infor tion三、几个常用的tbstat选项 tbstat -m :显示消息日志的最后20行. 消息日志的内容包括:1)、检查点信息2)、读写错误信息3)、ONLINE模式转换信息4)、长事务5)、日志文件满(LOG FILE FULL )假设想显示完整信息,可直接编译消息日志文件.Tbstat -d:磁盘空间的使用情况,包括DBSPACE和CHUNK的信息例:RSAM Version 5.03.UC1 -- On-Line -- Up 09:45:41 -- 816 Kbytes Dbspaces address number flagsfchunk nchunksflags ownername 8040a244 1111 N informix rootdbs 1 active, 8 total Chunks address chk/dbs offset size free bpages flags pathname 80409d84 1 1 0 300000 231871PO-/dev/rdata 1 active, 8 total其中的FREE项,显示了该CHUNK的空闲空间大小(Kbytes).Tbstat -l :日志文件情况Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-2 016 000.00 phybegin physize phypos phyused %used 101782 15000960 00.00 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 016 1111.01.0 address number flagsuniqid beginsize used%used 8042de94 1U---C-L 110521a 7500 630 8.408042deb0 2F------ 0106f66 75000 0.00 8042de 3F------0108cb2 75000 0.00 8042dee8 4F------ 010a9fe 75000 0.00 8042df04 5F------ 010c74a 75000 0.00 8042df20 6F------010e496 75000 0.00其中:%USED:使用百分比FLAGS字段的含义:F: 空闲B:已备份C: 正在接收事物记录U: 正在使用A: 新增日志L: 包含最后一个检查点Tbstat - u:ONLINE的用户情况Users address flags pid user tty waittout locks nreads nwrites 804019f4 ------D 329 root console 0 00 179 2 80401a64 ------D 0 root console 0 00 00 80401ad4 ------F 330 root 0 00 00 3 active, 20 total Transactions address flags user locks log begin isolation retrys coordinator 804022b4 A---- 804019f4 0 0 NOTRANS 0 804028d8 A----80401a64 0 0 NOTRANS 0 2 active, 20 total其中:flages字段的含义:第一列:(S:等待mutex;Y:等待条件;L:等待锁;B:等待缓冲区;C:等待检查点;X:长事务清理;G:等待长缓冲写;T:等待事务)第二列:(*:事务执行时,发生I/O错误)第三列:(A:正在备份;B:操作已被记录在日志中;P:分布处理已准备好;C:正在提交;R:正在回滚)第四列:(P:会话的主线索)第五列:(R:在read rsam 调用中;X:进程在关键分区)第七列:(M:特殊监控;D:特殊线索;C:清理线索;F:特殊清页进程;B:特殊B+树清页线索) Tbstat -k :用户持有锁的情况锁按照粒度分为6种: 库锁、表锁、页锁、行锁、字节锁、键锁字节锁:更新包含有VARCHAR类型的行时,加在该行上的锁,键锁:用于索引树上的锁。
数据库事务的隔离级别与锁机制

数据库事务的隔离级别与锁机制数据库事务的隔离级别与锁机制是在数据库系统中确保数据并发处理的一种重要机制。
隔离级别定义了多个事务之间的可见性和干扰程度,而锁机制则用于管理数据的并发访问和更新。
1. 数据库事务的隔离级别数据库系统提供了四个事务隔离级别:- 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据,容易引发脏读、不可重复读和幻影读问题。
- 读已提交(Read Committed):事务只能读取其他事务已提交的数据,避免了脏读问题,但仍可能出现不可重复读和幻影读问题。
- 可重复读(Repeatable Read):事务在对某个数据进行读取时,能够确保其他事务不能修改该数据,避免了脏读和不可重复读问题,但仍可能出现幻影读问题。
- 串行化(Serializable):事务的读取和写入完全串行化执行,避免了所有并发问题,但牺牲了并发性能。
不同的隔离级别可以根据实际需求进行选择,低级别的隔离级别提供了更高的并发性能,而高级别的隔离级别则提供了更严格的数据一致性。
2. 锁机制锁机制用于管理事务对数据库的并发访问和更新,可以避免数据不一致和并发冲突问题。
常见的锁包括共享锁(Shared Lock)和排他锁(Exclusive Lock)。
- 共享锁(S锁):多个事务可以同时对同一数据进行读取,但不允许进行数据的修改操作。
这种锁机制适用于读取密集型操作,可以提高并发性能。
- 排他锁(X锁):只允许单个事务对数据进行读取和修改操作。
其他事务必须等待当前事务释放锁之后才能对该数据进行操作。
这种锁机制适用于写入密集型操作,可以确保数据的一致性和完整性。
锁机制的使用需要根据具体的并发处理需求进行选择,过多的锁可能会导致性能下降,而过少的锁可能会导致并发冲突和数据不一致。
3. 隔离级别与锁机制的关系隔离级别和锁机制是联系紧密的,不同的隔离级别会在并发访问和更新时采取不同的锁机制来保证数据的一致性。
informix数据库

INFORMIX数据库第一部分:INFORMIX动态服务器体系结构简介重点内容:∙动态服务器系统的主要组成部分∙动态服务器共享内存中的三个组成部分∙了解动态服务器系统的进程结构∙描述多线索∙列举动态服务器系统在磁盘上的组成部分动态服务器的系统结构INFORMIX动态服务器采用的是一种多线索体系结构,这就意味着一个进程利用自己的多个线索可以同时完成多个任务,因而整个系统只需要较少的进程就足以完成DBMS的任务。
动态服务器系统由三个主要组件构成:共享内存,进程和磁盘。
共享内存包括三个段:驻留段。
虚拟段和消息段。
驻留段主要用作磁盘数据的缓存。
虚拟段主要用作内存池以支持进程及相关的会话(session)和线索。
当客户与服务器利用共享内存进行通信时,消息段将用作两者之间的消息缓冲区。
系统中还包括若干构成数据库服务器的UNIX进程,称为oninit.这些进程被称为虚拟处理器(VP)(virtual processors)。
每一VP隶属于某一虚拟处理类。
而每一虚拟处理器类都负责完成一类特定的任务。
系统的磁盘组件由多个原始磁盘空间组成,称为chunk,chunk以页(page)为基本单位。
多个chunk集合逻辑上构成了数据空间(dbspace)。
数据空间用于存储数据库、表、系统信息以及物理日志和逻辑日志。
一个数据空间至少包括一个chunk.共享内存段动态服务器的共享内存由三个段构成:∙驻留段主要用作缓冲池,缓冲池主要由数据页缓冲区和逻辑日志和物理日志的缓冲区以及其他系统数据结构。
驻留段的大小主要由系统参数BUFFERS决定。
∙虚拟段主要支持会话和线索。
根据用途的不同,内存池可以进一步分为:会话池、多线索池、字典池、存储过程池、排序池、大缓冲池以及全局池。
∙如果客户与服务器利用共享内存进行通讯,消息段将用作通讯缓冲区。
每一用户连接(利用共享内存进行通讯)大致占用12K空间。
用户连接的数量在参数NETTYPE中定义。
事务的四个特性、四种隔离级别和七种传播行为

事务的四个特性、四种隔离级别和七种传播⾏为⼀、事务的四个特性1.1、什么是事务事务是数据库操作的最⼩⼯作单元,是作为单个逻辑⼯作单元执⾏的⼀系列操作;这些操作作为⼀个整体⼀起向系统提交,要么都执⾏、要么都不执⾏;事务是⼀组不可再分割的操作集合(⼯作逻辑单元);1.2、事务的四个特性(ACID)1. 原⼦性(atomicity):操作⼀组指令,要么全部成功,要么不执⾏。
只要其中⼀个指令执⾏失败,所有的指令都执⾏失败,数据进⾏回滚,回到执⾏指令前的数据状态。
2. ⼀致性(consistency):事务的执⾏使数据从⼀个状态转换为另⼀个状态,但是对于整个数据的完整性保持稳定。
3. 隔离性(isolation):隔离性是当多个⽤户并发访问数据库时,⽐如操作同⼀张表时,数据库为每⼀个⽤户开启的事务,不能被其他事务的操作所⼲扰,多个并发事务之间要相互隔离。
即要达到这么⼀种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执⾏。
4. 持久性(durability):当事务正确完成后,它对于数据的改变是永久性的。
例如我们在使⽤JDBC操作数据库时,在提交事务⽅法后,提⽰⽤户事务操作完成,当我们程序执⾏完成直到看到提⽰后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执⾏完成,否则就会造成我们看到提⽰事务处理完毕,但是数据库因为故障⽽没有执⾏事务的重⼤错误。
⼆、事务的四种隔离级别2.1、事务的并发问题在看事务的隔离级别之前,先来来⼀下事务并发执⾏带来的问题:1、脏读脏读是指在⼀个事务处理过程中读取了其他未提交事务中的数据。
例如你银⾏卡⾥有1000块钱,你的妻⼦打算买双500块钱的鞋⼦,她付钱的时候你查看银⾏卡余额为500元。
这个时候,你妻⼦觉得太贵了不买了,撤销还没提交的操作,这个时候就发⽣了脏读。
informix锁信息问题介绍

1、理解锁什么是锁?锁是一种软件机制,用于控制对数据库中的数据的访问。
在出现同时读取和更新数据的多用户环境中,锁能够确保每个事务的原子性、隔离、一致性和持续性(ACID)不受到威胁,并且维护数据的完整性。
锁的粒度Informix 提供各种粒度的锁。
它们是:∙数据库锁:针对整个数据库的锁∙表锁:针对整个表的锁∙页锁:针对整页数据的锁∙行锁:针对一个数据行的锁∙字节锁:在包含VARCHAR 的行上的锁∙键锁:在索引中的一个键值上的锁锁的粒度越粗,它就能锁住越多的数据库对象。
例如,对于能够在一个磁盘页上包含4 行的表,在该页放置一个锁将锁住其中包含的所有4 个行。
相反,如果使用行锁,那么将仅锁住一个行。
因此,锁的粒度越粗,并发性就越低,从而影响到性能,尤其是应用程序试图访问相同的行集时。
不过,粗粒度也意味着在某些情况下锁住相同数量的行需要的锁数量更少。
例如,锁住整个表仅需要一个表锁。
表的锁模式创建一个表时,它的默认锁粒度是页锁。
可以在创建表的过程中使用LOCK MODE子句覆盖默认值。
例如:这个上下文中的锁模式表明访问表时需要使用的锁的粒度。
如果从CREATE SQL语句省略掉这个LOCK MODE子句,那么就使用默认的锁模式。
如果表已经创建,那么可以使用ALTER TABLE语句更改锁模式。
对于以上提到的表t1 例子,您可以使用下面的ALTER语句将锁模式从行锁更改页锁:可以使用配置参数DEF_TABLE_LOCKMODE更改已创建的表的默认锁模式。
该参数的值可以是ROW或PAGE。
例如,如果DEF_TABLE_LOCKMODE设置为ROW,那么数据库服务器重启之后创建的表的默认锁模式将为ROW。
类似地,可以使用环境变量IFX_DEF_TABLE_LOCKMODE实现相同的效果。
注意:如果从运行oninit以启动服务器的窗口设置环境变量,那么通过环境变量指定的默认锁模式将对所有会话有效。
然而,如果仅在特定客户端会话环境中设置锁模式,那么它仅对特定会话有效。
数据库隔离级别详解

数据库隔离级别详解随着信息技术的快速发展,数据库已逐渐成为企业和组织中的重要组成部分。
数据库隔离级别是数据库的一个重要概念,它决定了数据库并发访问时如何处理一个事务对另一个事务的影响。
隔离级别指的是在多个并发事务访问同一数据库时,系统为了防止并发事务之间产生的干扰,所采用的一些机制和策略。
本文将详细介绍数据库隔离级别的概念、特点和各种隔离级别的具体实现方法。
1. 隔离级别概述在并发访问数据库的情况下,隔离级别是指在一个事务执行期间,另一个并发的事务对相同的数据所产生的影响。
严格的隔离级别要求每个事务带有独立的环境和范围,不会和其他事务发生冲突和相互干扰。
数据库隔离级别是指在数据库的事务并发访问中,为了防止并发事务之间相互影响,数据库管理系统采用的一些约定和机制,它能够用来控制事务的并发性、事务执行过程中产生的现象、事务的安全性等方面的问题,能够有效地解决并发事务之间的相互干扰问题。
2. 隔离级别特点隔离级别的特点决定了一个事务的执行过程中对其他事务的影响程度。
不同的隔离级别之间存在着明显的区别,主要表现在以下几个方面:(1) 脏读(Dirty read):一个事务能够读取其他事务尚未提交的数据,这是数据库中最低的隔离级别,容易造成数据的不一致性。
(2) 不可重复读(Nonrepeatable read):在一个事务中读取相同的数据时,由于其他事务中对数据的修改,导致读取到的数据不同,这时数据的一致性受到影响。
(3) 幻读(Phantom read):在一个事务中多次执行同一条查询语句,得到的结果集不同,这是因为在这两次查询之间插入或删除了数据所导致的。
(4) 隔离性(Isolation):指不同事务间彼此之间的独立性,同一时间发生的不同事务相互之间不会产生干扰。
3. 隔离级别的种类目前,常见的数据库隔离级别有4种,分别是:Read Uncommitted(未提交读)、Read Committed(已提交读)、Repeatable Read(可重复读)和Serializable(序列化),下面分别进行介绍:(1) Read Uncommitted(未提交读)该隔离级别最低,允许读取未提交的事务中的数据,可能会导致脏读、不可重复读和幻读等问题。
数据库事务的隔离级别与并发控制(二)

数据库事务的隔离级别与并发控制一、引言数据库事务的隔离级别与并发控制在数据库管理系统中起着关键作用。
在当今的信息时代,数据库的应用越来越广泛,对数据库事务隔离级别和并发控制的研究也变得越来越重要。
本文将讨论数据库事务的隔离级别和并发控制的概念、原则以及常见的隔离级别。
二、事务隔离级别的定义与意义事务隔离级别是指在并发执行的数据库事务中,事务之间的隔离程度。
不同的隔离级别可以决定事务是否可以同时执行、并发操作时是否发生冲突等。
事务隔离级别的设定需要考虑数据的一致性、并发效率以及资源利用等方面的因素。
三、事务的基本特性在深入讨论事务的隔离级别之前,我们需要了解事务的四个基本特性,即原子性、一致性、隔离性和持久性。
原子性指事务是不可分割的最小执行单位,要么全部执行成功,要么全部回滚;一致性指事务执行前后的数据状态保持一致;隔离性指并发执行的事务之间应该互不干扰;持久性指事务一旦提交,其对数据库的更新将永久保存。
四、常见的隔离级别1. 读未提交(Read Uncommitted)在该隔离级别下,事务可以读取其他事务未提交的数据。
这种级别最适合并发操作频率较低,而对数据的一致性要求较低的场景。
但是由于没有隔离性保证,可能导致脏读问题。
2. 读已提交(Read Committed)在该隔离级别下,事务只能读取其他已经提交的数据。
相对于读未提交,该级别避免了脏读的问题,但仍然可能存在不可重复读和幻读的问题。
3. 可重复读(Repeatable Read)在该隔离级别下,事务在执行过程中每次读取数据都是一致的。
事务在开始时创建一个快照,读取的数据都是从该快照中获取的。
这种级别避免了不可重复读的问题,但仍然可能出现幻读。
4. 串行化(Serializable)在该隔离级别下,事务按顺序执行,相当于将并发操作转化为了串行操作。
这种级别可以完全避免并发操作时的问题,但也导致并发效率大大降低。
五、并发控制的方法在数据库管理系统中,为了保证多个事务之间的隔离性和一致性,采用了多种并发控制的方法。
数据库事务、事务隔离级别以及锁机制详解

数据库事务、事务隔离级别以及锁机制详解以下主要以MySQL(InnoDB引擎)数据库为讨论背景,纯属个⼈学习总结,不对的地⽅还请指出!什么是事务?事务是作为⼀个逻辑单元执⾏的⼀系列操作,要么⼀起成功,要么⼀起失败。
⼀个逻辑⼯作单元必须有四个属性,称为 ACID(原⼦性、致性、隔离性和持久性)属性,只有这样才能成为⼀个事务。
数据库事物的四⼤特性(ACID):1)原⼦性:(Atomicity)务必须是原⼦⼯作单元;对于其数据修改,要么全都执⾏,要么全都不执⾏。
2)⼀致性:(Consistency)事务在完成时,必须使所有的数据都保持⼀致状态。
在相关数据库中,所有规则都必须应⽤于事务的修改,保持所有数据的完整性。
事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
3)隔离线:(Isolation)由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
事务查看数据时数据所处的状态,要么另⼀并发事务修改它之前的状态,要么是另⼀事务修改它之后的状态,事务不会查看中间状态的数据。
这为可串⾏性,因为它能够重新装载起始数据,并且重播⼀系列事务,以使数据结束时的状态与原始事务执的状态相同。
4)持久性:(Durability)事务完成之后,它对于系统的影响是永久性的。
该修改即使出现系统故障也将⼀直保持。
事务并发时会发⽣什么问题?(在不考虑事务隔离情况下)1)脏读:脏读是指在⼀个事务处理过程⾥读取了另⼀个未提交的事务中的数据。
例:事务A修改num=123------事务B读取num=123(A操作还未提交时)事务A回滚此时就会出现B事务读到的num并不是数据库中真正的num的值,这种情况就叫“脏读”。
2)不可重读:不可重复读是指在对于数据库中的某个数据,⼀个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另⼀个事务修改并提交了。
例:事务A读取num=123(事务A并未结束)------事务B修改num=321,并提交了事务事务A再次读取num=321此时就会出现同⼀次事务A中两次读取num的值不⼀样,这种情况就叫“不可重读”。
Informix常用操作方法命令

Informix常用操作方法北京先进数通信息技术有限公司编写说明标题:Informix常用操作方法类别:〔文档类别〕(文档/管理/纪要/制度/资料)存放位置:请键入完整文档路径\请键入完整文档名称编辑软件:Microsoft Word XP 中文版版本历史:目录编写说明 (1)目录 (I)1. 相关文件 (1)2. 常用环境变量 (1)3. 数据库状态操作 (2)3.1.查看数据库状态 (2)3.2.启动O N L INE (2)3.3.关闭O N L INE (3)4. DBACCESS使用 (3)4.1.数据库操作 (3)4.2.编辑执行SQL语句 (3)5. 装数/卸数 (4)6. 策略优化 (4)7. 脏读 (4)8. 增加事务 (4)9. ONSTAT用法 (5)1.相关文件●informix配置文件:informix配置文件定义数据库的各种参数设置,通过环境变量$ONCONFIG指定,存放在informix用户的etc目录下,如$ONCONFIG=onconfig.cmq,则配置文件为$INFORMIXDIR/etc/onconfig.cmq;●informix日志文件:记录对数据库的操作,以及操作过程中的错误日志等信息,存放在$INFORMIXDIR目录下,文件名为online.log,如对数据库操作出现异常,可查看该文件定位错误原因;●数据库连接文件:连接文件sqlhosts所含的信息使用户可以连接到数据库服务器上,存放在$INFORMIXDIR/etc目录下,一行为一条配置信息,每条包含四个域:【数据库服务器名】:定义数据库服务器名称,如on_compaq_tcp;【连接类型】:如ontlitcp;【主机名】:在/etc/hosts中定义,或直接写主机的IP;【服务名称】:在/etc/services中定义,或直接写端口号;2.常用环境变量●INFORMIXDIR:informix用户安装路径,如INFORMIXDIR=/usr/informix;●INFORMIXSERVER:informix数据库服务器名,如INFORMIXSERVER=on_compaq,数据库服务器名在数据库连接文件sqlhosts中指定;●ONCONFIG:informix配置文件,如ONCONFIG=onconfig.cmq,该文件存放在$INFORMIXDIR/etc目录下。
Informix培训教材整理之系统维护技巧谈

Informix培训教材整理之系统维护技巧谈Informix是一种大型的数据库管理系统,具有先进的技术、性能与可靠性,在全球范围的各种应用中使用十分广泛,包括政府、金融保险、邮政电信、制造及零售等重要行业或领域。
本文根据笔者在SCOUnix/Xenix上使用Informix-4GL与Informix-SQL的经验,简要介绍Informix系统维护中的几个较为特殊的问题及其处理方法。
表文件的修复:Informix的数据库是指由若干张表所构成的集合,其中每一张表对应着两个文件,即数据文件(后缀为.dat)与索引文件(后缀为.idx)。
当系统出现异常、死机、掉电或非正常关闭时,有时会使一些使用中的表文件未能正常关闭而出现毁损,当系统再次对这些表进行相关操作时,就会报告“不能检索下一条记录”、“不能删除记录”等错误信息。
通常,数据文件是很少发生问题的。
要判别数据文件是否正常,只需执行select * from 〈table—name〉语句或类似的语句即可,但不能使用where、order by等子句,以免利用到索引文件,目的就是纯粹从数据文件中依次读取数据。
如果数据读取顺利且记录个数正确,表明该文件完好无损;反之,则有问题,通常只能用其数据备份来恢复。
如果数据文件正确无误,那么就该检查相应的索引文件。
Informix提供有一个实用程序bcheck,专门用来检查与修复索引文件,即依次比较数据文件与索引文件,倘若不一致,就询问是否删除和重建有问题的索引。
bcheck有许多选项可供选用,其中-n和-y用于对所有的提问都回答“no”或“yes”,让系统自动进行一系列的操作。
其语法如下:bcheck[选项] 〈表文件名〉要检查表的索引文件,应先运行bcheck-n命令。
如果一切正常,说明索引没有问题。
一旦发现有错误报告(如有多少个错误数据记录指针、丢失了多少个数据记录指针或索引结点指针等),则再执行bcheck-y 命令即可将其修复。
数据库并发控制的说明书

数据库并发控制的说明书在当今信息时代,数据库扮演着重要的角色,它能够存储和管理大量的数据,并支持多个用户同时访问。
然而,当多个用户同时对数据库进行读写操作时,就会引发并发控制的问题。
本文将详细介绍数据库并发控制的原理、技术和实现方法,旨在帮助读者更好地理解和应用数据库并发控制。
一、并发控制的概念与意义并发控制是指在多个用户同时访问数据库时,保证数据的一致性和完整性的一种技术手段。
在数据库中,如果多个用户同时对同一数据进行读写操作,就会发生冲突,导致数据的混乱和不一致。
因此,通过并发控制可以避免数据的异常情况,确保系统的稳定性和可靠性。
二、并发控制的原理在数据库中,常用的并发控制原理包括锁定机制和并发控制算法:1. 锁定机制锁定机制是最常见的并发控制手段。
通过对资源进行加锁,可以限制其他用户对该资源的访问权限,从而避免数据冲突。
常见的锁定机制包括共享锁和排他锁。
共享锁用于读操作,多个用户可以同时获得共享锁并进行读取;排他锁用于写操作,当一个用户获得排他锁时,其他用户无法读取或写入该资源。
2. 并发控制算法除了锁定机制,还有一些并发控制算法可以用于解决数据冲突问题。
其中最常用的算法是多版本并发控制(MVCC),它通过为每个事务创建一个数据版本来实现并发操作。
每个事务只能看到自己能看到的版本,从而避免数据冲突。
三、并发控制的技术手段实现并发控制需要借助一些技术手段,常用的技术手段包括:1. 时间戳时间戳是记录事务提交顺序的一种方式。
每个事务在开始执行时会被分配一个时间戳,用于记录其时序关系。
当两个事务并发执行时,通过比较它们的时间戳可以确定执行顺序。
2. 读写锁读写锁是用于控制读写操作的一种机制。
读操作可以同时进行,但写操作需要独占资源。
通过读写锁可以实现读操作之间的并发和读操作与写操作的互斥。
3. 事务隔离级别事务隔离级别可以控制并发操作的程度。
常见的隔离级别有读未提交、读已提交、可重复读和串行化。
Informix高级技巧

1.隔离级别dirty read可以读未提交的数据,对读的数据不加锁committed read只能读提交的数据,对读的数据不加锁cursor stability只能读提交的数据,对读的数据加(S或U锁)当游标移动到下一行时,原记录上的锁被释放repeatable read只能读提交的数据2.加锁( S或U锁),并且锁一直保持到事务提交或回滚才释放锁的类型共享锁(S): SHARE互斥锁(X): EXCLUSIVE更新锁(U): UPDA TE数据库级的锁:打开数据库时指定封锁方式,可以是共享锁或互斥锁,缺省是共享锁关闭数据库时释放锁示例DA TABASE stores5 ; 共享方式DA TABASE stores5 EXCLUSIVE ; 互斥方式CLOSE DATABASE ; 释放锁事务情形下的加锁与解锁必须在事务中用LOCK TABLE 加锁事务提交或回滚释放锁,不能用UNLOCK TABLE 释放锁不能在事务中改变锁的模式无事务情形下的加锁与解锁用LOCK TABLE 加锁,UNLOCK TABLE释放锁改变锁的模式,先UNLOCK TABLE,后LOCK TABLE用户对等待锁的处理方式:等待直到释放SET LOCK MODE TO W AIT等待指定的时间SET LOCK MODE TO W AIT nSeconds不等待,立即返回SET LOCK MODE TO NOT WAIT3.三种权限连接权限CONNECT资源权限RESOURCE数据库管理员权限DBA4.存储过程的SPL语句变量定义和赋值DEFINE,LET4.1 流程控制分支控制IF循环控制FOR,FOREACH,WHILE ,EXIT,CONTINUE函数调用与返回CALL,SYSTEM ,RETURN错误处理和调试TRACE,ON EXCEPTION,RAISE EXCEPTIONCREATE PROCEDURE read_address(lastnae CHAR(15))RETURNING CHAR(15), CHAR(15), CHAR(20), CHAR(5);DEFINE p_lname, p_fname CHAR(15);DEFINE p_addr CHAR(20);DEFINE p_zip CHAR(5);SELECT fname, address1, zipcode INTO p_fname, p_addr, p_zipFROM customer WHERE lname=lastname;RETURN p_fname, lastname, paddr, p_zip;END PPROCEDURE4.2执行存储过程的三种方式使用EXECUTE PROCEDURE 语句使用CALL 语句在一个存储过程中执行另一个存储过程使用LET 语句将一个存储过程的执行结果赋给变量EXECUTE read_address(I,j,k) ;CALL bar(10, 20) RETURNING i, j, k;LET a=read_name(101);4.3 跟踪调试存储过程:TRACE 语句把跟踪结果写到一个文件中,该文件由SQL 语句SET DEBUG FILE 指定。
infoemix的数据一致性

Informix数据一致性如果说高可用性能保证系统级的完整性,那么数据的一致性是在事务级保证完整性。
INFORMIX动态服务器通过事务日志和内部一致性检查、创建和加强封锁过程、隔离级别和业务规则来保证数据的一致性。
事务日志如果一个操作不能完成,则已经完成的那部分事务必须从数据库中清除,以保持数据的一致性。
为了清楚部分完成的事务,INFORMIX动态服务器在逻辑日志中对所有事务的历史记录进行维护,并以这些事务记录作为依据,将数据库恢复到事务之前的状态。
内部一致性检查内部一致性检查为提醒管理员数据或系统的不一致状态而专门设计。
INFORMIX动态服务器包含一个数据级的检查机制,它能够发现由于硬件或操作系统故障而引起的数据不一致。
如果发现了不一致,该内部机制就自动向INFORMIX动态服务器消息日志发消息。
为了更好地确定不一致的原因,INFORMIX动态服务器管理员可以指导用户来设置一致性检查环境变量,这些变量产生诊断结果(例如,在不一致发生的共享内存中的内容),来帮助确定不一致发生的原因。
封锁和处理的独立性为了保持数据的一致性,所需的另一个重要的功能是封锁过程和处理的独立性。
这些安全性措施保护当前正在被访问或修改的数据不会被其它用户更改。
封锁数据库服务器引入封锁机制来防止错误的发生。
锁是一个程序加在数据片断上的声明或限制。
数据库服务器保证只要数据是被封锁的,其它任何数据库服务器进程都不能对其进行修改。
当另一数据库服务器程序要求对该数据库进行修改时,数据库服务器使该程序要么等待,要么返回一个错误。
INFORMIX动态服务器还能防止死锁的发生。
死锁是两个用户都封锁着另一个用户所等待得数据。
例如,用户A封锁了一个元组,并且在用户A访问B所封锁的数据之前不会将其释放。
INFORMIX动态服务器能立即检测到死锁的发生,并向第二个程序发出出错消息,以防止死锁状态的出现。
一个表或事务的吞吐量会受封锁策略的影响。
使用排它锁对数据进行访问的应用会发现其它的数据库服务器进程都在花时间等待对数据进行访问。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Informix的事务、并发控制、锁机制、隔离级别1、事务事务是指作为单个逻辑工作单元执行的一系列操作。
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。
一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。
ACID的具体含义如下:1)A(Atomicity):操作序列要么完整的执行,否则什么都不做;2)C(Consistency):一致性,事务执行后,保证数据库从一个一致性状态到另外一个一致性状态; 3)I(Isolation):隔离,一个事务的中间状态对其他事务不可见,即每个用户都感觉他们在单独使用数据库。
隔离级别用来定义多大程度的隔离多个不同的事务;4)D(Durability):持久性,事务的有效性,不会应用硬件或软件的失败而丢失。
2、并发控制1)相关概念i)隔离(+一致性) => 并发控制;ii)多个事务可以访问或修改相同的资源;iii)只要多个进程共享资源,就需要对访问进程进行排队控制;iv)在进行并发控制时,数据库内部将生成多个并发事务访问资源的操作序列表,并且每一个事务内部的各个操作都需要序列化。
2)串行调度存在的问题在串行调度中,采用操作序列,一个事务完成了再完成另外一个,即使两个事务T1、T2更新的是数据库中不同的对象。
此种方式从并发和性能角度考虑,都不能很好的利用计算机资源。
为了改善性能,需要采用非串行调度,即允许事务并发执行,即一个事务内的操作可以在其他事务提交前开始执行。
3)并发调度的常见问题i)脏读:事务T2读取到了事务T1没有提交的结果例如如下的操作序列会导致脏读:事务T1读取记录,然后更新记录;事务T2读取了更新后的记录;若T1后续操作失败,会导致更新的记录回滚,而同时事务T2已经使用了这个没有提交的值。
ii)不可重复读:事务T1中多个读操作返回不同的结果事务T1读取一个对象;事务T2读取并更新同一个对象;事务T1再次读取同一个对象返回了不同的值。
iii)幻影读:如果事务T1在同样的情况下多次执行select读取的结果不同事务T1从一个表中检索满足特定条件的记录返回m条记录;事务T2往该表中insert/delete其他满足相同条件的记录;事务T1再次以相同的条件检索该表的数据返回的数据记录不为m条。
3、锁机制1)相关概念i)用户可以锁定一个对象,可以防止其它用户修改锁定的对象;ii)在多个用户并发访问数据库的情况下,为保证数据完整性,锁是很有必要的;iii)程序可以显式的对数据枷锁,数据库系统可以隐式的对对象进行加锁。
2)锁的类型i)共享锁(Shared locks):多个用户可以读取相同的记录如果一个对象上没有排他锁,则共享锁可以加在该对象上,它可以防止其他事务更新数据,但同时,其他事务可以读取该数据,多个事务可以在同一个对象上加多个共享锁。
ii)排他锁(Exclusive locks):同一时间仅仅有一个用户可以读取相同的记录如果一个对象上没有任何锁,排他锁才可以加在该对象上。
一旦在记录上加了排他锁,则不能在该记录上增加任何锁了,直至锁释放。
它可以防止其他事务读取和更新数据。
iii)提升/更新锁(Promotable/Update lock):可以对锁进行升级或者降级在更新游标时使用,由游标在含有“for update”选项执行时产生,只能在没有排他锁或其他更新锁的记录上加更新锁。
当锁定的记录真正执行的时候,更新锁将提升为排他锁。
iv)专一锁(Intent lock):是一种表级锁,标识在该表上有一个游标在读取数据由IDS自动分配,如果一条记录上的记录被更新,一个排他锁将分配在该记录上,同时将该记录的表上自动加上专一锁,这能保证没有session可以在该表上增加排他锁,只要该表中有记录被增加了排他锁。
3)锁的有效期i)程序可以控制数据库锁的有效期;ii)当数据库关闭后,数据库锁将被释放;iii)根据数据库使用了事务的情况,表锁的有效期不同。
如果数据没有使用事务(没有使用事务日志,也不使用commit work语句),显式对一个表lock,当执行unload table时,锁将被释放;iv)当数据库使用了事务,事务结束时,将释放事务所有的锁。
4)不同粒度的锁i)数据库级别的锁:数据库管理活动,比如imports和exports。
例如:DATABASE database_name EXCLUSIVE;ii)表级别的锁:当整个表或表的大部分数据需要更新,加表级锁效率高。
参考语句如下:创建排他锁实例:LOCK TABLE tab1 IN EXCLUSIVE MODE;创建共享锁实例:LOCK TABLE tab2 IN SHARE MODE;取消表上的锁实例:UNLOCK TABLE tab1;iii)页级锁:当按数据物理顺序进行访问和更新时,页级锁效率高。
修改锁模似为页级锁的参考语句如下: ALTER TABLE tab1 LOCK MODE PAGE;页级锁模式是数据库默认的表锁模式。
iv)行级锁:OLTP事务采用行级锁效率高。
创建表时指定为行级锁的参考语句如下:CREATE TABLE tab1 (col1) LOCK MODE ROW;将某表修改为行级别的语句参考如下:ALTER TABLE tab1 LOCK MODE (ROW);5)何种情况下用何种锁?i)如果更新表中相对较小一部分数据的时候,采用行级锁将获取最好的性能,如果一个事务只访问表中的一小部分数据,那就采用行级锁。
ii)如果一个事务频繁访问整个表中的数据,设置更粗的力度,比如表级锁;iii)如果更新数据库中大部分表的大部分数据的情况下,采用数据库级别的锁;iv)informix默认的锁模式为页级锁。
v)ONCONFIG参数DEF_TABLE_LOCKMODE用于设置默认锁模式;vi)查看表锁模式的方法如下:方法1:oncheck –pt dbname:tablename;方法2:dbschema –d dbname –t tablename -ss;4、事务和会话的隔离级别1)Dirty Read(脏读)设置为Dirty Read隔离级别的参考语句如下:SET ISOLATION TO DIRTY READ;采用这种隔离级别,数据库服务器不会分配任何锁。
查询过程中,可以查询到任何数据行,甚至那些被修改但尚未提交的记录。
非日志数据库中只有Dirty-Read一种隔离级别。
它一般用在如下应用场景:静态表(没有更新,只读的表),速度比100%准备更重要的情况,以及不能等待锁的释放的情况中。
2)Commited Read(只读已提交的数据)设置为该级别的参考语句如下:SET ISOLATION TO COMMITTED READ;这种隔离级别能确保所有的记录都是提交到数据库的,因而能避免读取到脏数据,能确保所有读取到的记录都是已提交的,当一个进程读完记录后,其它进程就可以修改。
在读取数据前,数据库服务器尝试在记录上加共享锁。
加锁前,需要先检查是否可以对对象加共享锁;如果可以加锁,则要保证要加锁的记录没有其他进程正在更新;当继续正在更新时,记录上有排他锁,此时我们不能对记录加共享锁。
3)Cursor Stability(游标稳定性)参考设置语句如下:SET ISOLATION TO CURSOR STABILITY;给更新Cursor,游标读的所有记录加上共享锁。
通过游标检索数据,共享锁将一直保持到执行下一个FET CH语句。
不仅可以看到提交的记录,也可以保证看到的记录不会被更新,其它进程不能更新或删除你锁看到的记录,当移动到下一行时,锁才会释放,记录就可以进行修改。
4)Repeatable Read(可重复读)参考设置语句如下:SET ISOLATION TO REPEATABLE READ;数据库在读取的记录上加共享锁,验证是否可以读取数据,直到事务提交,锁才能释放,其他用户可以读取数据,但是不能修改。
可以保证在同一事务中前后两次读取记录是一致的。
当必须要信任所有读取的记录,保证记录不被修改,我们可以采用repeatable read,例如统计数据(银行账号的余额情况)、关联查询多个表等。
5)Last Committed Read(读取最后提交的数据)这是一种乐观锁,它解决了Commited Read的不足,因为Commited Read在记录被锁时,其它进程需要等待。
这种隔离级别常被用在WEB应用系统中,例如在电子商务系统中,可以选择商品添加到购物篮中,但是此时后台可能你正在对商品的价格进行更新,当再次检查的时候,可能发现商品的价格已经发生变化。
设置语句参考如下:SET ISOLATION TO COMMITTED READ LAST COMMITTED;相对Committed Read而言,提高了并发量和系统的吞吐量。
可以通过ONCONFIG参数设置为隔离级别:USELASTCOMMITTED。
表需要设置为行级锁,不能是页级锁。
6)几种隔离级别的比较隔离级别脏读?不可重复读?幻影读?Dirty Read Yes Yes YesLast Commited Read No Yes YesCommited Read No Yes YesCursor Stability No No YesRepeatable Read No No No5、设置事务/会话的锁模式1)不等待锁的释放为默认的锁模式,如果数据库对象被锁,则立即返回错误。
错误消息参考如下:-244: Could not do a physical-order read to fetch the next row• 107: ISAM error: record is locked设置为此种锁模式的参考语句如下:SET LOCK MODE TO NOT WAIT;2)一直等待锁的释放一个事务可能发生死锁或挂住,等待资源的释放。
设置为此种模式的语句如下:SET LOCK MODE TO WAIT;3)在锁释放前,等待n秒直到等待n秒后,如果锁一直没有释放将返回锁等待超时错误信息。
参考设置语句如下:SET LOCK MODE TO WAIT 20;6、锁的监控1)监控session的隔离级别使用: onstat –g sql 或者 onstat –g ses,例如在笔者测试服务器上运行onstat -g sql,运行结果如下:IBM Informix Dynamic Server Version 10.00.UC1 -- On-Line (Prim) -- Up 102 days 05:26:42 -- 150746 8 KbytesSess SQL Current Iso Lock SQL ISAM F.E.Id Stmt type Database Lvl Mode ERR ERR Vers Explain880- sdp CR Wait 20009.03Off878SELECT sdp CR Not Wait 009.03Off877- sdp CR Wait 20009.03Off756- sdp CR Wait 20009.03Off755- sdp CR Wait 20009.03Off754- sdp CR Wait 20009.03Off753- sdp CR Wait 20009.03Off752 sdp CR Wait 20009.03Off751- sdp CR Wait 20009.03Off750- sdp CR Wait 20009.03Off480- sdp CR Wait 20009.03Off479- sdp CR Wait 20009.03Off478- sdp CR Wait 20009.03Off477- sdp CR Wait 20009.03Off476- sdp CR Wait 20009.03Off475- sdp CR Wait 20009.03Off474- sdp CR Wait 20009.03Off473- sdp CR Wait 20009.03Off472- sdp CR Wait 20009.03Off471- sdp CR Wait 20009.03Off470- sdp CR Wait 20009.03Off469- sdp CR Wait 20009.03Off468- sdp CR Wait 20009.03Off467- sdp CR Wait 20009.03Off466- sdp CR Wait 20009.03Off465- sdp CR Wait 20-23209.03Off464- sdp CR Wait 20009.03Off463- sdp CR Wait 20009.03Off43- sdp CR Wait 20009.03Off40- sdp CR Wait 20009.03Off查看sid的详细信息: onstat –g sql sid,例如查看878这个sid的消息,可使用:onstat -g sql 878,参考返回结果如下:Sess SQL Current Iso Lock SQL ISAM F.E.Id Stmt type Database Lvl Mode ERR ERR Vers Explain878- sdp CR Wait 20009.03OffLast parsed SQL statement :select count(*) from2)查看用户进程锁等待情况使用: onstat –u3)查看锁使用和等待情况使用: onstat -k4)监控数据库事务及其状态使用: onstat -x。