- 浏览: 1020147 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (529)
- 服务器 (8)
- jsp (1)
- java (6)
- AIX (1)
- solaris (3)
- linux学习 (53)
- javaScript (2)
- hibernate (1)
- 数据库 (74)
- sql语句 (8)
- oracle 学习 (75)
- oracle 案例 (42)
- oracle 管理 (42)
- Oracle RAC (27)
- oracle data guard (12)
- oracle 参数讲解 (14)
- Oracle 字符集 (8)
- oracle性能调优 (24)
- oracle备份与恢复 (12)
- oracle Tablespace (9)
- oracle性能诊断艺术 (1)
- oracle 11g学习 (5)
- oracle streams (1)
- oracle upgrade and downgrade (4)
- db2学习 (13)
- db2命令学习 (2)
- mysql (28)
- sql server (30)
- sql server 2008 (0)
- 工具 (10)
- 操作系统 (3)
- c++ (1)
- stock (1)
- 生活 (5)
- HADOOP (2)
最新评论
-
massjcy:
...
如何将ubuntu文件夹中文名改为英文 -
skypiea:
谢谢。。。
终于解决了。。。
Oracle 10.2.0.4(5)EM不能启动的解决方案(Patch 8350262) -
qwe_rt:
引用vi /etc/sysconfig/network 请问 ...
Linux操作系统下配置静态IP上网 -
liuqiang:
sudo killall -9 apache2
ps 和 kill 命令详解 -
dazuiba:
引用*绝杀 kill -9 PID 当使用此命令时,一定要通过 ...
ps 和 kill 命令详解
用户所执行 DML (即执行事务)操作在 Oracle 内部按如下顺序进行。
1.相应事务分配回滚段( undo segment ), 这时优先使用当前联机状态的回滚段中一个。回滚段的选择是随机的,若另外的事务正在使用则重试 3 次, 在此过程中失败, 则将未联机的回滚段联机后使用。 如果此过程也失败, 就会创建新的回滚段, 通过这个过程也没有分配到回滚段, 则使用 Oracle 8i 中使用的回滚段( rollback segment ) 算法。即,使用另外事务使用中的回滚段中用量最少的回滚段。 如果服务器进程在获得回滚段时没有适当的联机状态的回滚段, 则等待 enq:US-contention 事件, 直到有适当的联机状态的回滚段为止。
2.分配回滚段后,在回滚段头上创建事务表 Slot ( transaction table slot )。
3.创建事务表后会生成 TXID ( Transaction ID ),再将此 TXID 分配给当前事务。 TXID 通过 V$TRANSACTION 视图的 XIDUSN 、 XIDSLOT 、 XIDSQN 表现, 这个值指向分给事务的回滚段头上存在的事务表的准确位置。事务必须在分配撤销区域后得到 TXID 。
4.事务对象的 数据块载入到高速缓冲区,在块头的 ITL ( Interested Transaction List )上登记事务条目( transaction entry )。如果 ITL 上没有登记条目所需的空间,直到有空间为止,一直等待 enq : TX-allocate ITL entry 事件。
5.将需要修改的块的修改信息存储到 PGA , 存储名为 Change Vector 。修改一行时,一般分别创建撤销头块( change vector#1 )、撤销块( change vector#2 )、 数据块( change vector#3 )相应的 change vector 。 进程将 PGA 的 change vector 以名为 redo record (或 redo entry )复制到重做缓冲区。在复制到重做缓冲区的过程中, 需获得 redo copy 锁存器、 redo allocation 锁存器、 redo writing 锁存器, 在此过程中若发生锁存器争用, 分别等待 latch: redo copy 、 latch: redo allocation 、 latch: redo writing 事件。
6.将之前映像信息( before image ) 记录到撤销块, 继而修改数据块, 被修改的数据块变为脏状态。 而且, 高速缓冲区上创建关于已修改的数据块的 CR ( consistent read ) 块。 如果需修改的行正在被另外事务所改变(即,修改后事务尚未结束的 状态), 就要等待事务结束, 此时会等待 enq:TX-row lock contention 事件。
7.执行提交( commit )后给事务分配 SCN ,提交信息存储在重做缓冲区。 9.重做缓冲区的内容记录在重做日志文件上,修改的块之后被 DBWR 记录到数据文件中。
8.回滚段头的事务表中存储已成功提交的信息,解除包括 TX 锁在内的所有资源占有。
事物执行用伪码表示如下:
//1.分配回滚段,优先从online undo space中分配
if(online undo segments no space){
for(i=0;i++,i<3){
//新事物从新循环申请三次回滚段
}
}
if(新事物还没有申请到空间){
//联机offline undo segments,从中分配空间
}
if(还没有申请到回滚段空间){
//使用rollback segment算法,使用另外事物使用中的回滚段中用量最少的回滚段
}
if(还没有申请到undo segments){
//则发生enq:US-contention等待事件,直到能够分配到适当的回滚段为止
}
//2.在分配到的回滚段头创建事物表Slot(transaction table slot)
//3.生成TXID(Transaction ID),并把TXID分配给当前事物
//4.往高速缓冲区载入事物对象关联的数据块,在块头的TIL(Interested Transaction List)上
登记事物条目(transaction entry)
if(如果块头上没有登记ITL所需空间){
//则发生enq:TX-allocate-ITL entry等待事件,直到有空间为止
}
//5.往PGA存储修改块的修改信息,以Change Vector的格式,Change Vector里面包含(创建撤销块头,撤销块,数据块信息)
进程将PGA的change vector 以名为redo record(或redo entry)复制到重做缓冲区
//6.将之前映像信息(before image)记录到撤销块,继而修改数据块,被修改的数据块变为脏状态
并且会在高速缓冲区中创建已修改数据块的一致读块
if(需修改的块正在被另外事物所改变){
//发生enq:TX-row lock contention等待事件
}
//7.执行提交(commit)后给事物分配SCN,提交信息存储在重做缓冲区。
//8.回滚段头的事物表中存储已成功提交的信息,解除包括TX锁在内的所有资源占用。
//9.重做缓冲区内容记录在redo log上,修改该的块之后被DBWR记录到数据文件中。
发表评论
-
sqlldr总结参数介绍
2012-06-28 14:29 22819有效的关键字: userid -- ORACLE use ... -
11gR2新特性:STANDBY_MAX_DATA_DELAY
2011-12-27 11:18 1210Active Data Guard 是 Oracle 11g ... -
Linux下用OCCI或OCI连接Oracle
2011-07-26 12:00 2899首先,去oracle官网下载C ... -
Oracle Mutex实现机制
2011-05-18 23:43 1064我们都知道Latch是Oracle ... -
local_listener参数作用
2011-05-10 17:19 1924pmon只会动态注册port等于1521的监听,否则 ... -
oracle伪列 rowid和rownum
2011-03-23 10:00 3532整理ROWID一 一,什么是伪列RowID?1,首先是一种数 ... -
Oracle10gR2 主备自动切换之客户端Failover配置
2011-01-20 10:32 9501. 主库检查和设置假设新增的服务名为ORCL_TAF.LK. ... -
Oracle10g配置Dataguard的相关参数解释
2011-01-20 10:24 1265参考自 http://space.itpub.ne ... -
wrap加密oracle包
2011-01-19 11:52 1297大家都知道oracle的很多系统包是没法看它的源码的,orac ... -
利用hcheck检查数据字典一致性状态
2011-01-17 17:42 1813利用hcheck可以检查oracle数据字典的一致性状态,主要 ... -
插入相同的数据量普通表和临时表产生的redo对比
2011-01-17 16:08 985往临时表里插入相同量 ... -
Database Link与GLOBAL_NAMES参数
2011-01-12 13:36 1027当GLOBAL_NAMES参数设置为TRUE时,使用DATAB ... -
Oracle Streams学习二(清除流配置)
2011-01-09 23:34 1179在完成streams部署之后,如果需要重新配置或舍弃配置,可以 ... -
red hat enterprise 下完全删除oracle 数据库
2011-01-05 01:28 1756步骤 1 以oracle用户登录主、备节点。步骤 2 ... -
Oracle常用dump命令
2010-12-20 00:31 831Oracle常用dump命令,记录一下备查。 一.M ... -
oracle执行DML(事物过程)的深入研究(二)
2010-12-14 15:02 1536接上一节的 oracle执行DML(事物过程)的深入研究(一) ... -
Oracle基本数据类型存储格式研究(二)—数字类型
2010-12-14 00:35 1471数字类型包含number,intege ... -
Oracle基本数据类型存储格式研究(一)—字符类型
2010-12-13 23:32 11701.char char是定长字符型,内部代码是:96,最多可 ... -
关于oracle rowid的一些内容 -- 转载
2010-12-13 15:47 779本文讨论的是关于oracle ... -
oracle 进制转换
2010-12-13 14:24 12571.16进制转换为10进制 ...
相关推荐
Oracle DML 触发器的执行顺序 Oracle 中的 DML 触发器是一种存储在数据库中的 PL/SQL 块,能够自动响应特定事件,以实现一些复杂的业务规则。DML 触发器可以分为三种基本类型:数据操纵语句 (DML) 触发器、数据定义...
### Oracle DDL、DML、DCL、TCL 基础概念 #### DDL (Data Definition Language) 数据定义语言 数据定义语言(DDL)主要用于创建、修改或删除数据库对象,如表、索引、视图等。这些操作通常涉及数据库结构的变更。 ...
oracle操作数据-DML语句.pptx
在 Oracle 数据库中,动态 SQL 提供了一种灵活的方式来执行不预先定义好的 SQL 语句。这种方式允许开发者在运行时构建 SQL 语句并执行它们,这对于处理未知数据结构或需要动态生成查询的情况非常有用。本文将详细...
Oracle DML 触发器是一种特殊类型的存储过程,它可以自动执行 SQL 和 PL/SQL 语句,以响应数据库中的变化。触发器可以在数据库表中的数据变化之前或之后执行,也可以在每个变化行或语句执行一次。 Oracle 允许对一个...
OLAP DML(Data Manipulation Language)是Oracle OLAP提供的一种专用的语言,用于创建、管理和操作多维数据集。11g Release 2 (11.2) 是Oracle OLAP的一个特定版本,提供了增强的功能和性能优化。 在11g Release 2...
然而,直接在函数中执行DML操作会触发Oracle的错误ORA-14551,这是因为函数内部的DML操作默认是在当前事务中执行的,而SELECT语句不能在同一个事务中同时包含DML操作。 为了解决这个问题,需要在函数中声明`pragma ...
Oracle DML触发器是数据库管理系统Oracle中的一种特性,它允许开发者在特定的数据操作语言(DML)事件(如INSERT、UPDATE、DELETE)发生时自动执行一段PL/SQL代码。DML触发器主要用于实现数据完整性、业务规则的强制...
Oracle DML触发器是数据库管理系统Oracle中的一种重要特性,它允许在特定的数据操作语言(DML)事件(如INSERT、UPDATE、DELETE)发生时自动执行PL/SQL代码块。本篇将详细介绍Oracle DML触发器的相关知识。 1. **...
Oracle DML 触发器是 Oracle 中的一种机制,它可以在特定的事件发生时自动执行某些操作。触发器可以分为 DML 触发器、系统事件触发器、用户事件触发器、管理触发器等几种。 触发器的组成部分包括触发器名称、触发器...
事务是 Oracle 数据库中的一组操作单元,事务可以包含多个 DML 语句,例如插入、更新、删除等。事务的特点是要么全部成功,要么全部失败。事务可以确保数据的一致性和完整性。 事务的类型有两种:读事务和写事务。...
### Oracle执行计划深入解析 #### 引言 在数据库领域,尤其对于大型企业级应用,Oracle数据库因其强大的功能和稳定性而被广泛采用。在Oracle中,执行计划是数据库优化器根据SQL语句特性生成的一系列步骤,用于指导...
Oracle 操作数据 DML 语句是 Database Management System(数据库管理系统)中的一种基本语言,用于操作和管理数据库中的数据。DML 语句是 Data Manipulation Language(数据操作语言)的缩写,主要用于对数据库中...
《Oracle触发器与存储过程高级编程》第3版是一本深入探讨Oracle数据库中触发器和存储过程技术的专业书籍。在Oracle数据库系统中,触发器和存储过程是数据库管理员和开发人员进行复杂业务逻辑处理和数据管理的重要...
ORACLE 执行计划和 SQL 调优 ORACLE 执行计划和 SQL 调优是关系数据库管理系统中非常重要的概念。执行计划是 Oracle 优化器生成的,用于描述如何访问数据库中的数据的计划。execute plan 中包括了访问路径、表扫描...
在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析、总结一下。 1:使用ORA_ROWSCN伪列获取表最后的DML时间 ORA_ROWSCN伪列是Oracle 10g开始...
本节将深入探讨“Oracle触发器与存储过程高级编程”的相关知识。 **触发器(Triggers)** 触发器是一种数据库对象,它在特定的数据库事件(如INSERT、UPDATE或DELETE)发生时自动执行。通过定义触发器,我们可以...