选择显示字体大小

oracle8的rowid结构

1、为什么使用rowid  

oracle把rowid作为b-树和其内部算法标示row的唯一标示。  

oracle8以前的版本中,rowid标示file、block、row number,只用一个数字代  

表file号。  

oracle8中,一个datafile有两个数字代表:  

一个绝对值,是整个数据库唯一的。可以看dba_data_files中的file_id。  

一个相对值,在tablespace中是唯一的,可以看dba_data_files中的relative_  

fno。  

新的rowid使用相对值,所以必须存放segment的标示,否则就会混淆。所以orac  

le8在rowid中加入对象的segment号,用来标示table或者partition。  

2、rowid的结构 

使用base-64代码,包括a-z,a-z,0-9,+,-。一共18位。  

1-6位:代表object  

7-9位:文件相对值  

10-15:文件中的block  

16-18:block中的slot值  

3、tablespace-relative寻址方式  

使用的是tablespace-relative寻址方式,多个文件可以有相同的相对值,因为它  

们属于不同的tablespace,所以不能从新的rowid得到绝对地址,但是这没有问题  

,因为当要处理某个object时,已经能确定它属于哪个tablesapce了。在tables  

pace中,文件相对值是唯一的,所以rowid还是可以唯一标示一个object。table  

space-relative寻址方式是oracle8中支持超大数据库的关键技术。  

4、data object number  

data object number用于指示segment,所有segment都有data object number,  

存放在每个data block中,而且不重复。  

最开始的时候,dba_objects.object_id=dba_objects.data-object_id,但是在  

上述情况下data-object_id会在如下情况下增加  

truncate table  

move partition  

oracle会检查rowid中的data object number和block中的data object number,  

保证他们之间的版本是一致的。  

oracle也使用data object number以确保rollback的纪录和最新的segment纪录一  

致。  

要注意的是data object number不是object 的标志  



5、restricted rowid  

oracle7的rowid格式是  

1-8位:block number  

9-12位:row number  

13-16位:file number  

oracle8支持短的、旧格式的rowid,作用是  

对nopartition table的index entry  

对partition table的local index entry  

row piece chain pointer  

受限rowid的内部存放是6byte,  

4byte=data block number  

2byte=row number  

这就是说,index entry使用6byte存放该rowid,这对大多数index足够了。但是  

这种短rowid不能使用在patition table的global index上,因为partition可能  

跨tablespace。显示这种rowid依然是18位的  

6、扩展的rowid  

oracle在内部存放时候是10 byte,包括(data object number,data block nu  

mber,row number)  

oracle8使用扩展的rowid:  

partition table 的global index  

server 算法  

扩展的rowid在select时,依然是18位的显示,存放在rowid字段中。  

7、在oracle8中使用oracle7的rowid  

oracle8的db中查询oracle7的rowid时候,rowid返回的是oracle7的格式,也可  

以用在where语句中。  

oracle7的db中查询oracle8的rowid时候,rowid返回的是oracle8的格式,也可  

以用在where语句中,但是不能存放在rowid字段中。但是你要用dbms_rowid 包来  

解释之。  

如果包含扩展的oracle8 rowid,这不能把oracle8的数据import到oracle7中。从  

oracle7中可以import到oracle8中。  

8、application的移植问题  

一般程序的移植应该没有问题。只有在下面情况下才考虑移植问题:  

application使用了rowid  

table包括rowid类型的字段  

如果程序有如下情况,必须使用dbms_rowid包:  

自己组合rowid  

自己分解rowid  

如果仅仅是传递rowid到变量、或者仅仅做为一个整体使用,则可以不受影响。  



9、数据的移植问题  

无论使用export/import还使用移植工具,oracle7中的rowid字段到了oracle8中  

就自动扩展。  

如果在某个字段内容中包含rowid,则必须手工用dbms_rowid包来转换。  

10、dbms_rowid包  

由$oracle_home/rdbms/admin/dbmsutil.sql创建,其实在catproc.sql中包含着  

。提供处理rowid的一些函数。  

rowid_create  

rowid_info  

rowid_type  

rowid_object  

rowid_relative_fno  

rowid_block_number  

rowid_to_absolute_fno  

rowid_to_extended  

rowid_to_restricted  

rowid_verify  

dbms_rowid.rowid_to_extended  

(old_rowid in rowid,  

schema_name in varchar2,  

object_name in varchar2,  

conversion_type in number  

)  

return rowid;  

转换受限rowid到扩展rowid,用于转换旧的rowid到oracle8的格式。  



dbms_rowid.rowid_to_restricted  

转换扩展的rowid到受限的rowid。  

dbms_rowid.rowid_verify  

判断一个受限的rowid是否可以转换到扩展的格式  



dbms_rowid.row_info  

用于解释rowid,可以得到data object number,relative file number,block  

number和row number。  

dbms_rowid.create  

生成rowid。  



  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons