itpub論壇提出的問題_為何dba_objects和dba_indexes中同一個user的index數量不一致

wisdomone1發表於2014-08-15
個人簡介:
   8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
   
   服務過的客戶:
          中國電信
          中國移動
          中國聯通
          中國電通
          國家電網
          四川達州商業銀行
          湖南老百姓大藥房
          山西省公安廳
          中國郵政
          北京302醫院     
          河北廊坊新奧集團公司
  
 專案經驗:
           中國電信3G專案AAA系統資料庫部署及最佳化
           中國聯通CRM資料庫效能最佳化
           中國移動10086電商平臺資料庫部署及最佳化
           湖南老百姓大藥房ERR資料庫sql最佳化專案
           四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
           四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
           北京高鐵訊號監控系統RAC資料庫部署及最佳化
           河南宇通客車資料庫效能最佳化
           中國電信電商平臺核心採購模組表模型設計及最佳化
           中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
           北京302醫院資料庫遷移實施
           河北廊坊新奧data guard部署及最佳化
           山西公安廳身份證審計資料庫系統故障評估
           
  
 聯絡方式:
          手機:18201115468
           qq   :   305076427
           qq微博: wisdomone1
           
           新浪微博:wisdomone9
          
           qq群:275813900    
          
           itpub部落格名稱:wisdomone1    http://blog.itpub.net/9240380/




網友問題

itpub論壇提出的問題,連結見下:
http://www.itpub.net/thread-1883724-1-2.html


建立測試表
SQL> conn u_zxy/system
Connected.

SQL> select * from user_objects;

no rows selected

SQL> create table t_ind(a int);

Table created.

建立索引
SQL> create index idx_t_ind  on t_ind(a);

Index created.

檢視使用者u_zxy的表及索引的個數
SQL> select object_type,count(*) from dba_objects where owner='U_ZXY' group by object_type;

OBJECT_TYPE           COUNT(*)
------------------- ----------
INDEX                        1
TABLE                        1

SQL> select owner,index_name,table_name from dba_indexes where owner='U_ZXY';

OWNER                          INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------ ------------------------------
U_ZXY                          IDX_T_IND                      T_IND

SQL> 

小結:
      dba_objects與dba_indexes查詢出關於索引的記錄是一致的


為測試表新增blob列
SQL> conn u_zxy/system
Connected.
SQL> alter table t_ind add b clob;

Table altered.


表如有blob或者clob,在dba_indexes會有一條記錄
SQL> select owner,index_name,index_type,table_name from dba_indexes where owner='U_ZXY';

OWNER                          INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
U_ZXY                          IDX_T_IND                      NORMAL                      T_IND
U_ZXY                          SYS_IL0000075556C00002$$       LOB                         T_IND


SQL> truncate table  u_zxy.t_ind;

Table truncated.


SQL> select owner,index_name,index_type,table_name from dba_indexes where owner='U_ZXY';

OWNER                          INDEX_NAME                     INDEX_TYPE                  TABLE_NAME
------------------------------ ------------------------------ --------------------------- ------------------------------
U_ZXY                          IDX_T_IND                      NORMAL                      T_IND
U_ZXY                          SYS_IL0000075546C00002$$       LOB                         T_IND



截斷表,則表上面的索引及clob或blob會消失
SQL> drop table u_zxy.t_ind purge;

Table dropped.

SQL> select owner,index_name,index_type,table_name from dba_indexes where owner='U_ZXY';

no rows selected 



SQL> conn /as sysdba
Connected.
SQL> select object_type,count(*) from dba_objects where owner='U_ZXY' group by object_type;

OBJECT_TYPE           COUNT(*)
------------------- ----------
LOB                          1
INDEX                        1
TABLE                        1

SQL>
SQL>
SQL>  select owner,index_name,table_name from dba_indexes where owner='U_ZXY';

OWNER                          INDEX_NAME                     TABLE_NAME
------------------------------ ------------------------------ ------------------------------
U_ZXY                          IDX_T_IND                      T_IND
U_ZXY                          SYS_IL0000075556C00002$$       T_IND


SQL> col owner for a10
SQL> col column_name for a10
SQL> select owner,table_name,column_name,segment_name,tablespace_name,index_name from dba_lobs where owner='U_ZXY';

OWNER      TABLE_NAME                     COLUMN_NAM SEGMENT_NAME                   TABLESPACE_NAME                INDEX_NAME
---------- ------------------------------ ---------- ------------------------------ ------------------------------ ------------------------------
U_ZXY      T_IND                          B          SYS_LOB0000075556C00002$$      TBS_ZXY                        SYS_IL0000075556C00002$$


小結:1,index_type為LOB是表lob列的的儲存資訊
      
          2,如果表中有lob型別的列,會在dba_indexes儲存1條記錄

          3,lob型別的表列,會與表的其它列分屬不同的segment

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1252103/,如需轉載,請註明出處,否則將追究法律責任。

相關文章