【DB筆試面試640】在Oracle中,基表COL_USAGE$的作用是什麼?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,基表COL_USAGE$的作用是什麼?

答案部分

從Oracle 9i開始引入了SYS.COL_USAGE$表用來跟蹤列的使用情況,該功能通過隱含參數「_COLUMN_TRACKING_LEVEL」來控制。若隱含參數「_COLUMN_TRACKING_LEVEL」的值為0則取消該功能,若隱含參數「_COLUMN_TRACKING_LEVEL」的值為1則表示該功能生效。缺省情況下,該功能是生效的,並且CBO負責將SQL語句中WHERE條件的查詢謂詞信息保存在該表中,數據庫在執行SHUTDOWN NORMAL或者SHUTDOWN IMMEDIATE會自動將該表中的數據清空。

下邊的SQL可以查詢出表上列的使用情況:

CREATE OR REPLACE VIEW VW_COLUMN_USAGE_LHR AS  SELECT OO.NAME             OWNER,         O.NAME              TABLE_NAME,         C.NAME              COLUMN_NAME,         U.EQUALITY_PREDS,         U.EQUIJOIN_PREDS,         U.NONEQUIJOIN_PREDS,         U.RANGE_PREDS,         U.LIKE_PREDS,         U.NULL_PREDS,         U.TIMESTAMP    FROM SYS.COL_USAGE$ U, SYS.OBJ$ O, SYS.USER$ OO, SYS.COL$ C   WHERE O.OBJ# = U.OBJ#     AND OO.USER# = O.OWNER#     AND C.OBJ# = U.OBJ#     AND C.COL# = U.INTCOL#  ;  

可以通過執行存儲過程「EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;」或收集直方圖的方式「EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'LHR',TABNAME => 'T1');」來將內存中的統計數據刷新到SYS.COL_USAGE$表中。

本文選自《Oracle程序員面試筆試寶典》,作者:小麥苗