首页 > 其他分享 >ORACEL空间管理实验9:空间管理汇总--索引和表的扫描/闪回时的块管理方式

ORACEL空间管理实验9:空间管理汇总--索引和表的扫描/闪回时的块管理方式

时间:2023-02-27 11:33:14浏览次数:36  
标签:test6 闪回 管理 -- OBJECT BYS 索引 bys3


1.补充--关于dba_objects中的 DATA_OBJECT_ID 和OBJECT_ID字段:

truncate table test1;

alter table test1 move tablespace tp2;

select object_id,data_object_id from dba_objects where object_name='TEST1';

OBJECT_ID DATA_OBJECT_ID

---------- --------------

     22959          23144

truncate和移动到不同表空间时DATA_OBJECT_ID会变化。

但是当表内无数据时,truncate不会导致DATA_OBJECT_ID会加一。

 2.各种数据读取方式涉及的I/O

详细描述全表扫描是如何完成的(只描述I/O相关)


I. 从数据字典dba_segments找到 段头,

段头:在段头读取两样信息:高高水点、Extent Map(区地图)(Auxillary Map)

II. 根据段头中的Auxillary Map,依次读每个区的数据。




描述索引Index RANGE SCAN的流程


Root块的块号=索引段段头块号+1


I. 查找seg$等数据字典,确定索引段段头位置


II. 段头块号加1,得到Root块



描述索引Index Full SCAN的流程


等于索引范围扫描


有序,为了“顺序”,不能多块读



索引Index Fast Full SCAN的流程


等同于表的全扫描


I. 段头:在段头读取两样信息:高高水点、Extent Map(区地图)(Auxillary Map)


II. 根据段头中的Auxillary Map,依次读每个区的数据。


无序,可以多块读

3.打开闪回时DROP和TRUNCATE的不同块管理

未打开闪回时没有不同。
TRUNCATE和DROP-打开闪回时,具体做了哪些操作???
DROP-打开闪回时:改数据字典表中相应字段tab$,seg$,ext$,col$,将表系统命名bin$开头的,空间并未释放。打开闪回时此时查询可用区的方法是全部扫描位图区。附带会有删除索引约束触发器等,也可能会慢。
此时,可以查询到闪回DROP之前的数据。
TRUNCATE :修改表所有区对应的二进制位--位图区变为1变为0

实验一:

使用游标,exec open :x时先进行解析,print :x时提取数据
BYS@ bys3>var x refcursor
BYS@ bys3>exec open :x for select count(*) from test6;
PL/SQL procedure successfully completed.
BYS@ bys3>print :x
  COUNT(*)
----------
         2
BYS@ bys3>exec open :x for select count(*) from test6;
PL/SQL procedure successfully completed.

此时在会话2执行BYS@ bys3>drop table test6;
在会话1查看游标
BYS@ bys3>print :x
  COUNT(*)
----------
         2
因为开启回收站时,DROP 表只是将表改名-修改数据字典表tab$,seg$,ext$,在数据文件中并未改变数据块头OBJ的、标记,所以可以查到
#######

实验二:

会话2把表闪回DROP
BYS@ bys3>flashback table test6 to before drop;
Flashback complete.

会话一:执行游标:
BYS@ bys3>exec open :x for select count(*) from test6;
PL/SQL procedure successfully completed.

会话二:
BYS@ bys3>truncate table test6;
Table truncated.
会话一:查询游标
BYS@ bys3>print :x
ERROR:
ORA-08103: object no longer exists
no rows selected
报错是因为:TRUNCATE删除数据,修改数据字典表,同时将数据块头的OBJ清除,所以查询时报对象不存在。

标签:test6,闪回,管理,--,OBJECT,BYS,索引,bys3
From: https://blog.51cto.com/u_1652968/6088126

相关文章

  • 关于MQ消息队列的一些浅理解
    从别的博客看到的,说的明白一点就是生产者是商家,消息队列是驿站,消费者是用户商家(生产者)生产是,发货存到驿站(消息推到消息队列),用户(消费者)消费是,从驿站拿货(从消息队列拿消息)......
  • buffer cache实验4-ckptq的工作机制与增量检查点及fast_start_mttr_target参数
    1.检查点概念--chkpoint检查点是一个数据库事件,存在的意义在于减少崩溃恢复crashrecovery时间.检查点事件由后台进程CKPT触发,当检查点发生时,CKPT通知DBWR进程将脏数据库d......
  • buffer cache实验6-latch:cache buffers lru chains
    1.workingset与Latch:cachebufferslruchain:每个workingset都具有它自己的一组LRU和LRUW链表(LRU和LRUW链表总是成对出现的)。ORACLE为了提高buffercache性能(大内存),使......
  • buffer cache实验5-latch:cache buffers chain
    1.CBClatch产生的原理:一次逻辑读时CBClatch锁及Bufferpin锁的获取和释放过程如下:1.加LatchX2.进入hashchain,在相应的BH上加BufferpinS(0-->1)3.释放LatchX4.......
  • Python变量与运算符一
    一、Python保留字符(33个)被编程语言内部定义并保留使用的标识符:and,as,assert,break,class,continue,def,del,elif,else,expect,finally,for,from,False,global,if,is,im......
  • dblink概述及创建示例
    dblink概述dblink是定义一个数据库到另一个数据库的路径的对象,dblink允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是dblink是单......
  • LINUX下VNC服务的安装配置
    必要前提是已经安装图形界面相关软件!!1.首先检查VNC软件是否已经安装[root@ocm1~]#rpm-qa|grepvncvnc-server-4.1.2-14.el5_3.12.启动VNC服务......
  • Python基础语法与执行脚本的3种方式
    一、Pytnon特点什么是编程语言是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作。简单来说......
  • LDAP Admin连接AD域与OpenLdap
    LDAPAdmin版本:1.8.3域为kittlen.com账号为:administrator21.128为AD域所在地址21.127为OpenLdap所在地址Username填写方式不同如果连接进去无法进行用户的添加操作,可以选......
  • 对sys.getsizeof()提取变量大小的理解
    python-sys.getsizeof的使用科班出身的码畜一直被灌输一条上帝圣经:“一个int占4个字节,一个char占1个字节,一个float占4个字节。。。”,今天看下了python的getsizeof函数,发......