时间: 2021-07-31 作者:daque
1、干什么运用rowid oracle把rowid动作b-树和其里面算法标示row的独一标示。 在oracle8往日的本子中,rowid标示file、block、row number,只用一个数字代 表file号。 在oracle第88中学,一个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寻址办法是oracle第88中学扶助超大数据库的要害本领。 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、在oracle第88中学运用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到oracle第88中学。 8、application的移植题目 普遍步调的移植该当没有题目。惟有在底下情景下才商量移植题目: application运用了rowid table囊括rowid典型的字段 即使步调犹如下情景,必需运用dbms_rowid包: 本人拉拢rowid 本人领会rowid 即使只是是传播rowid到变量、大概只是做为一个完全运用,则不妨不受感化。 9、数据的移植题目 不管运用export/import还运用移植东西,oracle7中的rowid字段到了oracle第88中学 就机动扩充。 即使在某个字段实质中包括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。