Oracle 10g中dba_objects无法查询出lob字段索引

说明:
在一次expdp跨版本迁移时(10g->11g),迁移完成后,在进行目标端与源端对象数量校验时.发现目标端索引数量比源端索引数量多。

校验语句如下:
select OWNER,OBJECT_TYPE,count(*) from dba_objects where owner in ('ANONYMOUS','BAJK','BATJ','EMR','EMR3','EMRJK','ZHLIS','JYK','XUEYE','HISBAK','YLSBGL','PDJH','DSG','SCOTT','MGMT_VIEW','MDDATA','TSMSYS','ZJHIS','HIYB','SIIMHIS','SIIM')
group by OWNER,OBJECT_TYPE order by owner;

截取部分:
源端:
OWNER                          OBJECT_TYPE           COUNT(*)
------------------------------ ------------------- ----------
EMR                            INDEX                      295
EMR                            LOB                          5
ZJHIS                          INDEX                     1385
ZJHIS                          LOB                          5
JYK                            INDEX                      321
JYK                            LOB                         10
EMR3                           INDEX                      396
EMR3                           LOB                         60

目标端:
OWNER                          OBJECT_TYPE           COUNT(*)
------------------------------ ------------------- ----------
EMR                            INDEX                      300
EMR                            LOB                          5
ZJHIS                          INDEX                     1390
ZJHIS                          LOB                          5
JYK                            INDEX                      331
JYK                            LOB                         10
EMR3                           INDEX                      456
EMR3                           LOB                         60

发现目标端索引数量比源端索引数量多.

排查问题流程:

确定多出的索引:
校验1:
源端目标端通过dba_index校验:
SPOOL E:\test\yuanduan.LOG
select  table_name,count(*) from dba_indexes where owner='ZJHIS' group by table_name order by 1;
SPOOL OFF

SPOOL /home/oracle/mubiaoduan.LOG
select  table_name,count(*) from dba_indexes where owner='ZJHIS' group by table_name order by 1;
SPOOL OFF

经校验,发现通过dba_indexes索引数量一致


校验2:
SPOOL E:\test\yuanduan.LOG
col object_name for a40;
select  object_name,count(*) from dba_objects where owner='ZJHIS' and object_type='INDEX' group by object_name order by 1;
SPOOL OFF

SPOOL /home/oracle/mubiaoduan.LOG
col object_name for a40;
select  object_name,count(*) from dba_objects where owner='ZJHIS' and object_type='INDEX' group by object_name order by 1;
SPOOL OFF

经校验,确定多出索引为lob字段索引.
SYS_IL0000020483C00058$$
SYS_IL0000020649C00002$$
SYS_IL0000020687C00004$$
SYS_IL0000020709C00002$$
SYS_IL0000020709C00003$$

lob index必然是系统自动创建的,其遵循下面的规则:
SYS_IL(10 digit object_id)C(5 digit col#)$$

根据LOB索引进行查询表以及表列信息:
目标端:
select owner,table_name,column_name,segment_name,index_name from  dba_lobs where index_name='SYS_IL0000020709C00003$$';
OWNER                          TABLE_NAME         COLUMN_NAME     SEGMENT_NAME               INDEX_NAME
-------------------- -------------------------  ----------------  --------------------       ---------------------------
ZJHIS                          YB_JYRZXX_EXP       JYJGXX         SYS_LOB0000020709C00003$$  SYS_IL0000020709C00003$$


源端查询该表信息:
desc ZJHIS.YB_JYRZXX_EXP
名称                                      是否为空? 类型
----------------------------------------- -------- ------------------------
RZJLXH                                    NOT NULL NUMBER(10)
JYRCXX                                             BLOB
JYJGXX                                             BLOB

源端通过dba_ind_columns视图查询为空
SQL>select index_name,table_name,column_name from dba_ind_columns where column_name = 'JYJGXX' and table_name='YB_JYRZXX_EXP';
no now select 

源端通过dba_indexes查是可以查询出来的
SQL> select index_name,index_type,table_name from dba_indexes where table_name='YB_JYRZXX_EXP';
SYS_IL0000240400C00002$$       LOB                         YB_JYRZXX_EXP
SYS_IL0000240400C00003$$       LOB                         YB_JYRZXX_EXP
PK_YB_JYRZXX_EXP               NORMAL                      YB_JYRZXX_EXP

发现在源端也是存在该索引.那么为什么查询会多出lob字段数量的索引.

结论:
多出索引的问题关键点出现在10g通过dba_objects查询不到LOB类型索引,而11g可以通过dba_objects可以查询出LOB类型索引 最终原因为10g与11g dba_objects系统表的引用基表的定义方式不同.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值