`

数据库并发

阅读更多

Oracle模拟数据库并发的一个例子

在session1执行下面的语句中:
--创建一个表
create table t(x int primary key);
--在表中插入一条数据,并提交。
insert into t values(1);
commit;
--修改这条数据,但不提交。
update t set x = 2 where x= 1;


在Sessions2中,执行以下操作:
update t set x = 20 where x= 1;
那么此时会出现这样的情况(我是在PL/SQL Developer中执行的):
状态栏一直显示“正在执行”,这是因为Session1在修改这条数据,没有提交,数据库在等待你做出决定(提交还是回滚),
那么此时另一个用户修改这条数据时,数据库为了保证数据一致性,就只能让这个用户等待,直到你作出决定。
Session2去修改这条数据时就会被Session1阻塞,直到Session1释放锁。

Session1的SID:
select sid from v$mystat where rownum = 1;
SID
----------
88

Session2的SID:
select sid from v$mystat where rownum = 1;
SID
----------
246

可以从视图中看到这些信息:
select sid,type,id1,id2,lmode,request,block from v$lock where sid in (88,246) order by sid;
SIDTYPEID1ID2LMODEREQUESTBLOCK
188TM1572670300
288TX589844197707601
3246TX589844197707060
4246TM1572670300
Block=1表示正在阻塞其他的会话
TYPE=TM:表级共享锁
TYPE=TX:行级排他锁,如果一个表有多个段,每个段上都会加TM。
某个SID的REQUEST不等于0,那么说明它正在等待一个锁;如果BLOCK为1,则说明此SID持有了一个锁,并阻塞别人获得这个锁。

那么在实际情况中,我们可以通过查询v$lock查看是否有阻塞——获取SID。
然后根据SID查询用户使用的机器名称:
select machine from v$session where sid in (88,246);

 

--对表加分区试验:
--创建2个分区,x值小于20的在分区p1,大于等于20的在P2分区。
create table t(x int primary key) partition by range(x) (partition p1 values less than(20),partition p2 values less than(maxvalue));
--向T中插入1条数据,X=1,此时X<20因此在分区p1。此时数据并未提交。
insert into t values(1);

--查询v$lock视图,可以看到在表和p1分区上加了TM锁。
select sid,type,id1,id2,lmode,request,block from v$lock where sid in (88,246) order by sid;
SIDTYPEID1ID2LMODEREQUESTBLOCK
1246TM1572690300
2246TM1572700300
3246TX196616188629600

select object_id,object_name,subobject_name from dba_objects where object_id in (157269,157270);
OBJECT_IDOBJECT_NAMESUBOBJECT_NAME
1157269T
2157270TP1

可以看到,Object_id=157270的就是分区P1。


那么,此时删除T:
drop table t;
得到的结果是:ORA-00054: resource busy and acquire with NOWAIT specified

那么,删除分区p1呢?
alter table t drop partition p1
得到的结果是:ORA-00054: resource busy and acquire with NOWAIT specified

那么,删除分区p2呢?
alter table t drop partition p2;
结果:Table altered

为什么会这样呢?
因为p2上没有TM锁,因此可以执行DDL,因为事物并未影响到p2,因此在p2分区上做DDL是可以的。
在v$lock视图看到在p1分区insert1条数据,并未提交,此时持有一个TM锁。
Oracle允许同级别(或更低级别)的锁同时设置,但拒绝更高级别的锁。DDL操作是更高级别的锁。
因此是不被允许的。

刚刚将p2分区删除了,现在重新加上:
alter table t add partition p2 values less than (maxvalue);

insert1条数据(x>20因此落在p2分区):
insert into t values(30);

从v$lock视图查询信息(向分区p1插入的数据已commit):
select sid,type,id1,id2,lmode,request,block from v$lock where sid in (88,246) order by sid;
SIDTYPEID1ID2LMODEREQUESTBLOCK
188TM1572690300
288TM1572730300
388TX655399281590600

可以看到,此时在p2上加了TM锁,因为数据未提交,还有一个TX锁。

 

 

 



分享到:
评论

相关推荐

    分布式数据库并发控制

    分布式数据库并发控制是数据库系统中的一个重要领域,尤其在多处理器或多节点环境中,多个事务可能同时对数据库进行操作,这就会引入一系列并发问题。并发执行在单处理器和多处理器环境下都有可能发生,不同的是,在...

    三份数据库并发处理方案

    数据库并发处理是数据库系统中的重要概念,特别是在多用户环境下,多个事务同时访问和修改数据库时,如何保证数据的一致性、完整性和隔离性是至关重要的。本方案将深入探讨并发控制技术,确保在高并发场景下数据库的...

    数据库并发控制PPT学习教案.pptx

    数据库并发控制PPT学习教案 数据库并发控制是数据库管理系统(DBMS)中一个非常重要的概念。它是指在多个事务同时访问数据库时,如何确保事务之间的一致性和隔离性,防止数据不一致和丢失。 在数据库并发控制中,...

    数据库并发控制PPT

    数据库并发控制是数据库管理系统中的关键组成部分,特别是在多用户系统中,确保数据的一致性和完整性至关重要。并发控制的主要目的是防止多个事务在访问共享资源时产生不正确的数据状态,从而避免诸如丢失更新、脏读...

    数据库并发控制的基本方法

    ### 数据库并发控制的基本方法 #### 一、并发控制概览 在数据库系统中,**并发控制**是一项关键的技术,用于确保多个事务能够同时访问数据而不引起数据不一致的问题。并发控制的目标是使得多个事务的并发执行看...

    数据库并发控制及SQL

    数据库并发控制及SQL 包含内容包括:数据库并发控制及SQL Server的并发控制机制 事务及并发控制的基本概念 封锁机制 SQL Server的并发控制机制 等等

    数据库并发控制课件SQLServer

    该课件具体系统的讲述了数据库并发控制,很实用。

    数据库并发操作

    数据库并发操作是数据库管理系统在处理多个用户同时访问和操作数据时的一种机制。在多用户环境中,比如Web应用程序或企业级系统,多个用户可能同时请求读取或修改同一份数据库资源,这时就需要有效的并发控制策略来...

    数据库并发控制:确保数据一致性与性能优化

    数据库并发控制是确保多个用户或应用程序能够同时访问数据库时,数据的完整性和一致性得到保障的重要机制。此外,它还旨在优化数据库的性能,避免因并发操作导致的数据竞争、死锁等问题。本文将详细介绍数据库并发...

    数据库并发控制:策略、技术与最佳实践

    本文将深入探讨数据库并发问题的常见表现、并发控制的策略和技术,以及实施并发控制的最佳实践。 数据库并发控制是确保数据一致性、防止数据竞争和死锁的重要手段。通过合理设置事务隔离级别、使用锁定机制、实施...

    数据库并发控制,封锁,并发调度学习攻略

    根据提供的文件信息,我们可以深入探讨数据库并发控制的关键概念和技术,特别是封锁和并发调度的重要性及其应用场景。 ### 数据库并发控制 数据库并发控制的核心在于确保多用户环境下的数据完整性及一致性。在多...

    数据库并发控制:策略、技术和实践

    本文将深入探讨数据库并发问题的处理方法,包括并发控制的基本概念、常见的并发控制技术,以及实际应用中的策略和实践。 数据库的并发控制是确保数据一致性和系统性能的重要环节。通过理解并发控制的基本概念、技术...

    数据库并发控制:确保数据一致性与系统性能的策略

    本文将详细介绍数据库并发控制的概念、重要性、常见策略以及实现方法。 数据库并发控制是确保多用户环境下数据一致性和完整性的重要机制。通过本文的探讨,我们了解到了并发控制的重要性、常见策略以及实现方法。...

    数据库并发事务处理机制详解与代码实践

    数据库并发事务处理是确保数据一致性和完整性的关键。通过理解事务的ACID特性、隔离级别和并发控制技术,开发者可以更有效地设计和优化数据库系统。提供的代码示例展示了如何在实际数据库操作中应用这些概念,帮助...

    数据库并发测试.pdf

    【数据库并发测试】是IT领域中确保系统稳定性和性能的关键环节,特别是在高负载和大规模用户访问的情况下。数据库并发测试的必要性主要体现在两个方面:一是服务程序可能采用多线程同时开启多个数据库连接,二是即使...

    数据库并发操作 。

    数据库并发操作是数据库管理系统中的重要概念,特别是在多用户环境下,多个事务同时访问并修改数据库时,如何保证数据的一致性和完整性。并发控制的主要目标是防止数据的不一致性和丢失更新,确保事务的隔离性和可...

    数据库并发控制技术论文

    ### 数据库并发控制技术解析 #### 一、引言 在多用户环境下,数据库系统面临着如何有效管理和控制多个用户或应用程序同时访问同一份数据的问题。并发控制是数据库管理系统(DBMS)的重要组成部分,它确保了即使在高...

    数据库并发控制sqlserver2000

    ### 数据库并发控制及其在SQL Server 2000中的应用 #### 一、并发控制概述 在现代数据库管理系统(DBMS)中,**并发控制**是一项关键的技术,尤其是在多用户环境中,它确保了多个事务能够同时访问数据库而不会导致...

Global site tag (gtag.js) - Google Analytics