浅析oracle b-tree index搜索原理
索引与表一样,也属于段(segment)的一种。里面存放了用户的数据,跟表一样需要占用磁盘空间。只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样。在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引。同时,通常情况下,索引所占用的磁盘空间要比表要小的多,其主要作用是为了
理解redo(3)详解一个update的过程
理论解析: 1)server process 搜索buffer cache中是否有update要更新的block(内存中又名buffer),没有则从disk读入buffer cache 2)server process 构造一组change vector来记录对数据块的改动(此时放于PGA中),这组change vector组成 redo record 这里可能有4个数据块会被改动: &nb
alter system flush "oracle的缓存"
下面3条语句,旨在刷新oracle的缓存。这里总结一下。 1)alter system flush global context 下图说明: 对于多层架构的,如上图:应用服务器和数据块服务器通过连接池进行通信,对于连接池的这些信息被保留在SGA中,这条语句便是把这些连接信息清空。 2)alter system flush shared_pool &nbs
理解redo(2)redo内容:change vector和redo entries
redo log file由redo records(又名redo entries)组成。一条redo record由一组change vectors构成。 redo record:是change vector的集合。每个redo record是由多个change vector组成的。oracle在恢复过程中,会保证一个transaction要么被全部恢复,要么全部不恢复。实际上就是通过恢复redo record中的全部change vector来做到的,只要有一个change vector恢复失败,这个redo record的所有change v
理解REDO LOG(1) 介质恢复和实例恢复的基本概念
oracle世界,有3种数据:undo、redo和data。而redo 应"提交事务不丢失"而生的一种机制,服务于两类场景:一是instance recovery、一是media recovery。 instance recovery目的:当数据库发生故障时,确保buffer cache中的数据不好丢失,保证数据库的一致性 media recovery 目的:当数据文件发生故障时,能够恢复数据
从平衡树到oracle b-tree索引的原理探索
先话唠一下,oracle索引,有两类运用较广: 1)b-tree:OLTP(面向交易) 2)bitmap:OLAP(面向分析) 步入正题,先搭建测试环境: SQL> create table tt as select * from dba_objects; 表已创建。 SQL> select count(*) from tt; COUNT(*) ---------- 50441 SQL> insert into tt select * from tt; 已创建50441行。 SQL> / 已创建100882行
undo系列学习之undo段和区的探究
1)回滚段是磁盘上的一段空间 2)当一个事务开始的时候: 首先,把变化前的数据和变化后的数据写入redo log file 其次,把变化前的数据和相关的事务信息写入回滚段 最后,才在data_buffer_cache中修改数据 3)commit做两件事: a)写日志 b)在回滚段中标记事务为inactive(小事务还
undo系列学习之oracle DBA常用的脚本
DBA在维护oracle的过程,和undo有关的常用脚本。在前面的一些文章也涉及了挺多的,在此简单总结一点。 1)怎样查询数据库当前某个session的事务所使用的回滚段大小? sys@ORCL> select b.sid,b.username,a.xidusn,a.used_ublk 2 from v$transaction a,v$session b 3 where a.addr=b.taddr; SID USERNAME XIDUSN USED_UBLK ---------- ------------------
oracle证明题:未提交的事务也可能被DBWn写进数据文件
学oracle时,很多人会认为,DBWn的写与commit有关。这是错误的。其实,DBWn的写与事务是否commit,一丁点的关系都没有。现在,证明:一个未提交的事务,也是有可能被写入数据文件的。 会话1: sys@ORCL> select xidusn,xidslot,xidsqn,ubafil,ubablk from v$transaction; no rows selected 此时没有事务。 会话2: hr@ORCL> select * from t;
undo系列学习之读一致性(ORA-01555错误机制分析)
oracle在读的过程中,数据是静止的,没有脏读,也就是,未提交的永远都不会被读到。我们可以理解为,oracle在读的开始时,提前为他今后所要读的内容拍了一张”照片“,把所有内容全部定格在一个时间点上,作为接下来读的依据。oracle利用scn来实现这个理论,开始查询时,会确定一个select scn,这样就保证了事务槽里所有的scn都小于select scn。好比如,
undo系列学习之Oracle IMU及Redo Private Strands技术
在传统的undo管理模式中,oracle对undo和data block是一视同仁。这样大致会有三种弊端: 1)事务开始时,存放事务表的段头不在内存,server process需要将此i/o上来 2)存放旧值的回滚块不在内存 3)rollback或者CR读的时候,所需的回滚块被DBWn写到磁盘,oracle也需将此i/o,可能会产生大量的consistent gets和physical reads  
undo系列学习之深入浅出事务槽
undo表空间有个脾气,就是新事务优先,长查询滞后! 情况有两:查询在前、查询在后 查询在后: if [查scn>提交scn] if [查sid = 提交 sid] 返回新值; else 返回旧值; &n
undo系列学习之深入剖析一个事务的操作流程
开篇我们先用一个实验引出事务: sys@ORCL> select xid,xidusn,xidslot,xidsqn,ubablk,ubafil from v$transaction; no rows selected 没找到相应的事务信息,用hr发起一条事务: hr@ORCL> select * from p; ID TEST ---------- ----- 2 f 3 g 1 a hr@ORCL> update p set test=\'w\' where id=1; 1 row updated. 再次查看事务信息: sys@ORCL> /
undo系列学习之undo入门基础知识介绍
图2: 图3: 图4: 图5: 图6: 图7: 图8: 图9: 图10: 图11: 图12: 图12: 图13: undo的相关统计信息:
undo系列学习之如何计算undo表空间的大小
undo空间的大小不足会引起ORA-30036或者ORA-01555。 我们创建一个小的undo表空间,然后执行一个比较大的事务,这时就可以模拟出ORA-30036. sys@ORCL> create undo tablespace thinktbs datafile \'/u01/app/oracle/oradata/ORCL/datafile/think_undo.dbf\' 2 size 2m autoextend off; Tablespace created. sys@ORCL> alter system set undo_tablespace=thinktbs; System altered. sys@ORCL> show parameter undo
undo系列学习之如何计算最优的undo_retention及undo_retention的初体验
undo_retention简单定义,就是最多数据的最少保留时间。AUM模式下,undo_retention参数用于事务commit后undo数据保留的时间。单位为秒。这是个no guarantee的限制。也就是,若空间足够,他只是个‘花瓶’;当可用空间不足而又有事务需要回滚空间,则这些数据依然会被覆盖。这个行为可能会导致ORA-01555错误,这些数据被记忆的时间可用v$undostat里面的字段TUNED_UNDORETENTIO
undo学习系列之澄清一个被误解的概念
在oracle中有三种数据,data、redo和undo。undo是oracle在undo段中记录的信息,用于取消或回滚事务。学习上要把重点放在undo的作用以及基本概念。 你对数据执行修改时,oracle会生成undo信息,以便回到更改前的状态。我们可以通过闪回事务历史读取undo。 undo在数据库内部存储在一组特殊的段中,称之为undo段。 rollback segme
Difference between TRUNCATE, DELETE and DROP commands
The DELETE command is used to remove the Tables data either selective or all and put the data in an rollback segment as well where from a read consistent view or a flashback view can be seen even after commit and one can rollback the tables data after delete as well. After performing a DELETE operation you need to COMMIT or ROLLBACK the transaction to make the change permanent or to undo it.one more thing delete doesn\' resets the HWM and space occupied with insert can\'
oracle数据字典之x$kvit和x$kcvfh学习
x$表是数据库的核心部分,这些表用于追踪内部数据库信息,维持数据库正常运行。x$表是加密命名的,而且oracle不做文档说明。oracle通过这些x$表建立起其他大量视图提供用户查询管理数据库之用。 ************************************~(@^_^@)~****************************************************** x$kcvfh是v$datafile_header的源,v$datafile_header相信大家在oracle恢复工作时会
oracle的那些名字,那些事
对于初学者,oracle的很多名字令人迷茫。我也是哈。数据库名-全局名-服务名-实例名-别名之间的关系,剪不断,理还乱,理解了,别有一番滋味在心头。 SQL> show parameter name NAME TYPE VALUE ------------------------------