如何得到视图具体存储的block号

[复制链接]
查看11 | 回复9 | 2006-9-6 21:18:48 | 显示全部楼层 |阅读模式
视图不是一个段,建立的时候也不能定义存储参数,而且定义信息都是存储在字典中的,那么怎样才能得知,某个视图具体存在字典中的哪一块中呢,常规的dba_xx里都找不到,DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)也用不了,请问应该用哪种方法呢
想dump一个视图的存储结构,只要能满足这个要求就可以啦,谢谢
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
找出视图存在的表,读取视图语句的同时,显示ROWID,看看是否。
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
那肯定是表的rowid了啊
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
最初由 mustapha 发布
[B]那肯定是表的rowid了啊 [/B]

你问的不是这个吗:
把视图当作数据看,找出这个数据所在的ROWID?
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
system@ORA10R2> select rowid,owner,view_name from dba_views where view_name='VEW
_T';
select rowid,owner,view_name from dba_views where view_name='VEW_T'

*
第 1 行出现错误:
ORA-01445: 无法从不带保留关键字的表的联接视图中选择 ROWID 或采样

system@ORA10R2> select owner,view_name from dba_views where view_name='VEW_T';
OWNER
VIEW_NAME
------------------------------ ------------------------------
SYSTEM
VEW_T
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
不是啊,我是想看某个视图本身具体存储在哪一个block里
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
system@ORA10R2> alter session set events '10046 trace name context forever,level 12';
会话已更改。
system@ORA10R2> create view vew_t as select * from ade.t;
视图已创建。
得到Trace file
insert into view$(obj#,cols,audit$,intcols,property,flags,textlength,text)values(:1,:2,:3,:4,:5,:6,:7,:8)
END OF STMT
PARSE #13:c=0,e=1763,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=21356352922
BINDS #13:
kkscoacd
Bind#0
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c47e8bln=22avl=04flg=05
value=53663[/COLOR]
Bind#1
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c47c4bln=24avl=02flg=05
value=3
Bind#2
oacdty=01 mxl=128(38) mxlc=00 mal=00 scl=00 pre=00
oacflg=18 fl2=0001 frm=01 csi=852 siz=128 off=0
kxsbbbfp=65682260bln=128avl=38flg=09
value="--------------------------------------"
Bind#3
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c47a0bln=24avl=02flg=05
value=3
Bind#4
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c477cbln=24avl=01flg=05
value=0
Bind#5
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c4758bln=24avl=01flg=05
value=0
Bind#6
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=087c4734bln=24avl=02flg=05
value=40
Bind#7
oacdty=01 mxl=128(40) mxlc=00 mal=00 scl=00 pre=00
oacflg=18 fl2=0001 frm=01 csi=852 siz=128 off=0
kxsbbbfp=074830dcbln=128avl=40flg=09
value="select "ENAME","DEPTNO","SAL" from ade.t"
system@ORA10R2> conn system/yqtfln as sysdba
已连接。
sys@ORA10R2> select rowid from view$ where obj#=53663;
ROWID
------------------
AAAAA/AABAAABr5AAE
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
view本身就是一个定义 存储在数据字典里
你要看它存储在哪 直接看数据字典表存在哪喽~
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
视图不存储数据,何来视图的存储结构
数据字典在内存中以放在row cache中的,也就是以行为单位load的,你定位其对应的block做什么?
回复

使用道具 举报

千问 | 2006-9-6 21:18:48 | 显示全部楼层
不知道这个是不是你要的
[php]
SYS@ning>create view v_test as select * from ning.test;
View created.

SYS@ning>select object_id from all_objects where object_name='V_TEST';
OBJECT_ID
----------
10540

SYS@ning>select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_numb
er(rowid) from view$ where obj#=10540;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
------------------------------------ ------------------------------------

1
14184
--
[/php]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行