Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 中的rowid

Oracle中的每个表都有一个rowid,它是一个18位字符组成字符串,例:AAANgBAABAAAO/KAAA.它包含的字符串由A-Z,a-z,0-9,+,/这些字符组成.是64进制.其中A-Z对应0-25,a-z对应26-51,0-9对应52-61,+对应62,/对应63.这个18位的字符串分成4段分别表示不同的意思(6,3,6,3),1-6位表示对象ID,7-9位代表数据文件编号,10-12位代表数据块编号,13-18代表在数据块中的行.假设建立下面一个表:create table tb(id int,name varchar2(10))insert into tb values(1,"a")
insert into tb values(2,"b")通过select rowid,id from tb得到:AAANgBAABAAAO/KAAA    1
AAANgBAABAAAO/KAAB    2
以AAANgB AAB AAAO/K AAA  为例,AAANgB为表tb的id,通过select * from all_objects where object_name="TB" 看到 object_id为55297,计算AAANgB的10进制的值为:select 13*64*64+32*64+1 from dual 得到的值也为55297.AAB为数据文件的编号:1,代表dba_data_files的file_id,通过select * from dba_data_files可以看到对应的数据文件信息.AAAO/K代表块的编号:61386,通过 select 14*64*64 +63*64 + 10 from dual计算得到行的编号是:0,上面两行是邻接的,仅仅行号不同.通过下面的sql可以查看这个数据块是不是加载到了数据缓冲区:select * from v$bh where block#=61386 and file#=1
知道了块号之后,可以dump这个块在内存(数据缓冲区)中的内容: alter system dump datafile 1 block 61386知道了块号之后,可以dump这个块在数据文件中的内容: alter system dump datafile "D:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF"  block 61386
然后在udump文件夹下的trace文件中可以看到dump的内容.打开和关闭Oracle FlashbackOracle 中的V$ 动态性能视图相关资讯      Oracle基础教程 
  • Oracle块编程返回结果集详解  (11/10/2013 10:45:58)
  • Oracle基础教程之设置系统全局区  (08/22/2013 14:24:00)
  • Oracle基础教程知识点总结  (06/18/2013 07:43:32)
  • Oracle基础教程之tkprof程序详解  (10/22/2013 11:49:50)
  • Oracle基础教程之sqlplus汉字乱码  (07/18/2013 16:30:00)
  • Oracle 管理之 Linux 网络基础  (02/16/2013 18:37:35)
本文评论 查看全部评论 (0)
表情: 姓名: 字数