ORACLE ROWID
一.rowid简介
rowid就是唯一标志记录物理位置的一个id,在oracle 8版本以前,rowid由file#+block#+row#组成,占用6个bytes的空间,10 bit 的 file# ,22bit 的 block# ,16 bit 的 row#。
从oracle 8开始rowid变成了extend rowid,由data_object_id#+rfile#+block#+row#组成,占用10个bytes的空间, 32bit的 data_object_id#,10 bit 的 rfile#,22bit 的 block#,16 bit 的 row#.由于rowid的组成从file#变成了rfile#,所以数据文件数的限制也从整个库不能超过1023个变成了每个表空间不能超过1023个 数据文件。
说了rowid的组成,那么我们再来看看rowid在索引里面占用的字节数又是什么样子的。在oracle 8以前索引中存储的rowid占用字节数也是6bytes,在oracle8之后,虽然oracle使用了extend rowid,但是在普通索引里面依然存储了bytes的rowid,只有在global index中存储的是10bytes的extend rowid,而extend rowid也是global index出现的一个必要条件,下面我们会解释原因。
为什么golbal index需要把data_object_id#也包含在index rowid entry中呢?如果不包含会这么样?首先我们需要知道index的rowid entry的存在是为了能根据它找到表的这条记录存在哪个具体的物理位置,我们需要知道它在哪个数据文件,在哪个block,在那一行,普通的索引 oracle根据rfile#,block#,row#就可以知道了,但是partition table可以分布在多个表空间,也就是可以分布在多个数据文件,当我们建立local index时,index rowid entry并不包含data_object_id#,因为oracle可以知道这个index对应的是哪一个table分区,并可以得到table分区的 ts#(tablespace号),那么oracle根据ts#和rfile#就可以找到具体的数据文件。但是如果换成是golbal index,如果不包含data_object_id#,那么我们并不能知道这个索引对应着哪个表分区,也自然不能知道它的rfile#和file#的转 换关系,所以它将找不到所对应的记录。包含data_object_id#后,oracle可以根据data_object_id#实现rfile#和 file#的转换然后找到记录对应的物理位置。需要注意的是要理解以上概念我们还是需要了解file#和rfile#的区别。
二.比较file#和rfile#
oracle数据文件为什么存在file#和rfile#?
归根结底的原因是因为 ROWID 的存储格式造成的,因为 rowid 中文件编号标志只有10bit,最大数据容量1024,由于不存在0编号文件,所以实际上只允许1023个文件编号。在oracle8 之前的版本的数据库中,rowid是受限的,只包括 file# /bl
相关文档:
oracle表空间操作详解
1
2
3作者: 来源: 更新日期:2006-01-04
5
6
7建立表空间
8
9CREATE TABLESPACE data01
10DATAFILE '/ora ......
系统还原段
仅为系统表空间中的对象变化所用。它是在数据库创建时在系统表空间中创建的。系统还原段既可以存在并工作在自动模式下,也可以存在并工作在手动模式下。
非系统还原段
为其他表空间中对象的变化所使用。当一个数据库具有多个表空间时就需要至少一个手动的非系统还原段或一个自动管理的还原表空间。
自动模式 ......
--首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。
--如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。
--你必须修改数据库以安装这项功能。
--用sys用户为了用户gzinfo分配权限
grant
CTXAPP
to
gzinfo;
grant
execute
on
ctx_ddl
to
......
一:oracle版本介绍:
oracle8
oracle8i 表示此时oracle公司进军互联网,i代表Internet
oracle9i和oracle8i类似
oracle10g包括现在的11g使用了网格计算,g代表grid.
二:oracle10g服务介绍:
OracleDBConsoleorcl 这个是采用浏览器使用的oracle企业管理器 (也就是你安装弹出的那个网页)
OracleOraDb10g_home1iSQ ......
在我们详细介绍之前,我们必须说清楚一点:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。
一、使用offline数据文件的方法
非归档模式使用:alter database datafile '...' offline drop;
归档模式使用: alter database datafile '.. ......