
ORACLE 事务
Yushan Bai
目前仍热衷于ORACLE数据库,博客内容基本为原创,欢迎指点交流!
展开
-
select命令产生redo日志问题的分析
近期,某用户在进行SQL优化时,通过sqlplus的set autotrace on命令跟踪SQL执行情况时,发现这条SELECT命令竟然也产生了REDO日志;与我们通常理解的DML/DDL语句才产生REDO日志的认识存在差异~对ORACLE数据库的特性了解比较清楚的话,特别是数据块、事务处理方面有较深入学习理解,会知道ORACLE数据库的事务、数据块中ITL事务槽的一些原理、结构信息;会知道一个概念叫“延迟块清除”--delayed block cleanout,在约9年前我在学习了解这一块知识时,对原创 2022-04-22 16:27:16 · 1281 阅读 · 0 评论 -
关于延迟块清除的概念及实验
这一段引自网络:有时候我们在执行select操作的时候也可能会产生redo,其一个可能原因就是oracle块清除。在进行块清除的时候,如果是一个大事务,就会进行延迟块清除块清除就是删除所修改数据块上与”锁定”有关的信息,即事务信息Oracle在事务相关的提交列表中,记录下已修改的块列表,每个列表记录20个块,根据需要可能分配有多个这种列表.这种块列表有一个上限,就是缓冲区缓存大原创 2013-10-27 20:55:42 · 3393 阅读 · 0 评论 -
TM表锁各种mode的实验及2-6 的TM锁相互间的互斥示例
BYS@ bys001>select distinct sid from v$mystat; SID---------- 19BYS@ bys001>select * from test;no rows selectedBYS@ bys001>insert into test values(1);1 row created.BY原创 2013-10-28 09:38:20 · 2987 阅读 · 0 评论 -
事务的提交与数据的写入
是否写入磁盘上的数据文件,由DBWn进程来决定,而DBWn又由CKPT来触发。比如你更改了数据,但是没有提交,此时其他用户触发CKPT,导致触发了DBWn,Oracle会先写日志(日志头上的标签是未提交),再把你这个未提交的数据,从SGA的databuffer写到磁盘的数据文件里。commit和写数据文件没有关系。commit和LGWR有关,commit之后LGWR马上把日志写到磁盘的原创 2013-09-07 17:13:50 · 2999 阅读 · 0 评论 -
利用自治事务技术写一个用于审计的触发器
注意:所有操作都使用非SYS用户(DBA或普通用户)。在SYS用户下做,会报:第 1 行出现错误:ORA-04089: 无法对 SYS 拥有的对象创建触发器建表:18:42:13 SQL> create table test(id int,name varchar2(20),num int,cost int);Table created18:43:46 SQL>原创 2013-09-10 21:13:33 · 1310 阅读 · 0 评论 -
构想一个使用手工锁定解决一种业务需求的场景
网上交易时比如货物有3件,在购买时需要按购买数量进行锁定。BYS@dg2>lock table t in share mode;手工锁定一个表,设置锁的级别为4Table(s) Locked. 已经在T表上加上了4号锁,除了当前会话外阻塞其他会话进行修改BYS@dg2> select sid,type,id1,id2,lmode,request,block from v$loc原创 2013-10-28 09:39:21 · 1392 阅读 · 0 评论 -
导致死锁的SQL示例
首先感谢:leonarding的文章,还有晨_chen。死锁定义:从广义上讲包括操作系统 应用程序 数据库,如果2个进程(会话)相互持有对方的资源,都一直等待对方释放,这种情况会造成死锁。误解:会话的阻塞不是死锁,因为其中有一个会话还是可以继续操作的。释放:Oracle会自动检测死锁并强制干预释放-只释放了死锁的第一个,另一个还在HANG住。1.需要创建一个表,用主键或原创 2013-10-28 09:37:59 · 3040 阅读 · 1 评论 -
模拟insert,update和delete造成阻塞的示例
会话1SIDBYS@dg2>select distinct sid from v$mystat; SID---------- 17会话2SIDBYS@dg2>select distinct sid from v$mystat; SID---------- 49insert造成阻塞的示例原创 2013-10-28 09:37:35 · 2792 阅读 · 0 评论 -
创建基于事务和基于会话的临时表及临时表建索引的实验
Oracle的临时表只存在于某个回话或者事务的生命周期里,此时临时表中的数据只对当前这个会话可见。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字典中。临时表的定义对所有会话SESSION都是可见的,但是表中的数据只对当前的会话或者事务有效.临时表经常被用于存放一个操作的中间数据(数据处理的中间环节原创 2013-10-27 15:05:43 · 3146 阅读 · 0 评论 -
模拟RI锁定导致阻塞的场景
1.建表并验证对和表DML操作时的锁定状态a是主表,定义了id字段为主键 b是从表,id字段是引用主表的id字段 结论: BYS@dg2>select distinct sid from v$mystat; SID---------- 17BYS@dg2>create table a(id int primary key);原创 2013-10-28 09:39:16 · 1222 阅读 · 0 评论 -
DDL语句是否需要排他权限实验及DDL引起事务自动提交
DDL和DML语句定义:数据定义,DDL(Data Definition Language)DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,大多在建立表时使用需要排他访问权限CREATE、ALTER、DROP和PURGE:创建、修改、删除和清空方案(schema)对象RENAME:修改对象名称 TRUNCATE:截断表原创 2013-09-10 21:27:37 · 2102 阅读 · 0 评论 -
Oracle下演示Nonrepeatable Read 和Phantom Read
Nonrepeatable Read 不可重复读和Phantom Read幻读概念: Non-repeatable Read不可重复读:在一个事务中,同样的数据被2次读取,得到不同的结果集Phantom Read幻读:在一个事务中,同样的sql被2次执行,得到不同的结果集。不可重复读的重点是修改:同样的条件, 你读取过的数据, 再次读取出来发现值不一样了幻读的重点在于:新增或者原创 2013-09-10 21:02:43 · 1795 阅读 · 0 评论 -
DDL/DML操作在Read committed和Serializable 事务隔离等级中的示例
Read committed和Serializable 事务隔离等级概念介绍:Read committed读已提交事务隔离等级:Oracle 默认隔离等级,支持不可重复读和幻读。Serializable 事务隔离等级:只能看到事务开始时所有提交的改变和自身的改变,不支持不可重复读和幻读,其他用户的影响不了这个事务适合用于修改操作比较短的事务。事务中存在多条SQL语句,需要数据从事务原创 2013-09-10 20:53:52 · 2611 阅读 · 0 评论 -
事务中savepoint的使用
保存点概念:保存点就是为回退做的。保存点的个数没有限制 ,保存点和虚拟机中快照类似保存点是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。 回退事务的几个重要操作 1.设置保存点 savepoint a 2.取消保存点a之后事务 rollback to a 3.取消原创 2013-09-10 21:22:44 · 13665 阅读 · 0 评论