
2. UNDO数据的作用:当用户执行DML *** 作修改数据时,UNDO数据被存放在UNDO段,而新数据则被存放到数据段中,如果事务 *** 作存在问题,就需要回退事务,以取消事物变化。
例如:执行完UPDATE emp SET sal=1000 WHERE empno=7788后,发现应该修改雇员7963的工资,而不是7788.此时应该执行ROLLBACK语句。
3.读一致性
用户检索数据时,ORACLE总是使用户只能看到被提交过的数据,这是由Oracle自动提供的。当用户修改数据,但是没有提交时,另外一个用户使用select语句查找该值时,该值就是从undo表空间中取得的。
4.事务恢复
事务恢复是例程恢复的一部分,它是由Oracle Server自动完成的。如果在数据库运行过程中出线历程失败,那么当启动Oracle Server时,后台进程SMON会自动执行例程恢复。执行例程恢复时,Oracle会重做所有未应用的记录。然后打开数据库,回退未提交事务。
5.倒叙查询
倒叙查询用于取得某一特定时间点的数据库数据。
6.UNDO_MANAGEMENT
使用初始化参数用于指定UNDO数据的管理方式。如果使用自动管理模式,必须设置该参数为AUTO,此时采用UNDO表空间管理UNDO数据如果使用手工管理模式,必须设置该值为MANUAl,此时采用回滚段管理UNDO数据。
7.UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空间。使用自动UNDO管理模式时,通过配置该参数可以指定例程所要使用的UNDO表空间。
使用RAC结构时,必须为每个例程配置一个独立的UNDO表空间。
8.UNDO_RETENTION
该参数用于控制UNDO数据的最大保留时间,其默认值为900秒,该值时倒叙查询可以查看到的最早时间点。
9.UNDO表空间上不能建立任何数据对象。
oracle中undo是用来存放回滚数据的。撤销(Undo)数据是反转DML语句结果所需的信息。撤销数据通常被称为“回滚数据”,在过去的Oracle版本中,“回滚数据”和“撤销数据”可以交替使用,但从 9i版本开始,这两个术语有所不同:功能相同,但管理方式不同。只要某个事务修改了数据,那么更新前的原有数据就会被写入一个回滚段或撤销段。回滚段在 11g版本中依然存在,但从9i版本开始,Oracle数据库引入了可供选择的撤销段。Oracle强烈建议所有数据库都应当使用撤销段,回滚段只被保留用于向后兼容 。
undo表空间:
一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。
事务与undo段:
在某个事务启动时,Oracle会为其指派一个撤销段。任何一个事务都只能受一个撤销段保护,一个事务生成的撤销数据无法被分配到多个撤销段中。
在某个事务更新表和索引数据块时,回滚该变化所需的信息会被写入指定撤销表空间的数据块。撤销数据在提交后过期的事实意味着可以采用循环方式使用撤销段。如果使用原有的、人工管理的回滚段,那么调整的重要环节是控制具体事务分别受哪些回滚段保护。
( )段 区段 块
Oracle中的段segment是占用磁盘存储空间的一个对象 从逻辑上讲一个数据库由若干表空间(TABLESAPCE)组成 每个表空间有若干个表(TABLE) 每个表又可以分为若干数据段(DATA SEGMENT) 索引段等 每个段又可分为若干数据库区间(EXTENT) 每个区间由若干数据块(BLOCK)组成 区段(EXTENT)是最小的分配单 块(BLOCK) 是最小的存储单位
( )常见的段类型
聚簇cluster 分为散列聚簇和B*树聚簇 通常用于存储多个表上的相关数据
可以在聚簇段中建表 此时这个表可能与其它表同在一个聚簇段中
表table 表段用于保存一个数据库表的数据 是最常用的段类型 通常与索引段结合使用
表分区partition或子分区subpartition 主要用于分区 与表段类型
索引index 这种段类型用于保存索引结构
Lob分区 子分区 索引 Lob段 用于保存大对象的结构 每个LOB列需要分别创建两个段 一个用于存储CLOB或BLOB的
实际数据块logsegment 另一个是用于跟踪这些LOB块在哪里的lobindex
嵌套表nested table 这是为嵌套表指定的段类型
回滚段 用于存放undo的数据
( )段的管理
手动段空间管理Manual Segment Space Management
手动设置FreeLists FreeList Groups PctUsed 其它参数来控制如何分配 使用 重用段空间 MSSM是oracle的遗留实现 许多版本都支持MSSM
自动段空间管理Automatic Segmnet Space Management
只需要控制与空间使用相关的PctFree 其它参数被忽略 ASSM只有在 i版本后才被引入 用于减少MSSM中的太多参数的管理
应用于ASSM段的存储设置只有Buffer_Pool PctFree IniTrans MaxTrans( g后的版本都会忽略这个参数) 其它存储和物理属性参数都不适用于ASSM段
段空间管理是从段的表空间继承来的一个属性 而且段都没有跨表空间 段要使用ASSM就必须位于支持ASSM空间管理的表空间中
HWM高水平线
HWM是随着表数据的增长而增长的 只有重建 截除 收缩对象时 HWM才会降低 HWM很重要 因为在oracle进行全表扫描时会扫描HWM下的所有块 即使这张数据库表不包含任何数据
TrunCate会把表的HWM重新置为 还会截除表上的相关索引 而DELETE整张表时并没有修改HWM 所以如果打算删除表的所有行 应尽量使用TrunCate
在MSSM表空间中 段只有一个HWM 但在ASSM表空间中 除了HWM外 还有一个低HWM 这是因为在ASSM中 HWM推进时 ORACLE并没有立即格式化所有的物理块 而是只在第一次使用时才会完成格式化 以便安全读取
freelists
freelists是使用MSSM表空间时 oracle使用块时 需要把块放在freelist或从freelist中删除 freelists可能对性能有很大的提升或有很大的影响
而在ASSM中 没有也不用去设置freelist参数
create tablespace as *** datafile size m autoextend on next m segment space management auto
create table xxx( ) tablespace as ***
( )pctfree与pctused
PctFree告诉oracle应该在块上保留多少空间来完成将来的更新 默认值是 % 如果自由空间的百分比高于PctFree指定值 这个块就称为自由的 PctUsed告诉oracle应在当前不自由的块上自由空间的百分比需要达到多大时 才能使它再次变为自由的 默认值为 %
使用MSSM 时 这两个参数设置控制着块何时放入freelist 中 以及何时从freelist 中取出 如果使用默认值 PCTFREE为 PCTUSED为 那么在块到达 %满之前(有 %以上的自由空间) 这个块会一直在freelist 上 一旦到底 % 就会从freelist 中取出 而且直到块上的自由空间超过了块的 %时 才会重新回到freelist上 在此之前 这个块一直不在freelist上
使用ASSM 时 PCTFREE 仍然会限制能否将一个新行插入到一个块中 但是它不会控制一个块是否在freelist上 因为ASSM根本不使用freelist 在ASSM 中 PCTUSED参数将被忽略
如果把块的PCTFREE 设置得过高 就会浪费空间 如果把PCTFREE 设置为 % 而你从未更新数据 那么每个块都会浪费 %的空间 不过 对行初始很小 现在想将行的大小加倍 这种情况下 %的设置就非常合理 但是倘若PCTFREE 设置得太小 更新行时就会导致行迁移
高PCTFREE 低PCTUSED
如果你插入了将要更新的大量数据 而且这些更新会频繁地增加行的大小 此时就适合采用这种设置 这种设置在插入后会在块上预留大量的空间(高PCTFREE) 并使得将块放回到freelist 之前必须几乎为空(低PCTUSED)
低PCTFREE 高PCTUSED
如果你只想对表完成INSERT 或DELETE 或者如果你确实要完成UPDATE 但UPDATE 只是缩小行的大小 此时这种设置就很适合
( )行迁移row migration
lishixinzhi/Article/program/Oracle/201311/17472
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)