天天看點

Oracle DB 性能視圖和資料字典

  • 動态性能視圖

用于通路執行個體記憶體結構不斷變化 的狀态資訊。

Oracle DB 性能視圖和資料字典

在Oracle DB 中還維護着一個關于資料庫執行個體操作和性能的動态資料集。這些動态性能視 圖以基于資料庫伺服器内部的記憶體結構建構的虛拟表為基礎。也就是說,這些視圖不是駐 留在資料庫中的傳統意義上的表。這就是為什麼部分視圖在資料庫裝載或打開之前就能夠 使用的原因。 動态性能視圖包含下列資訊: • 會話 • 檔案狀态 • 作業和任務的進度 • 鎖 • 備份狀态 • 記憶體使用率和記憶體配置設定 • 系統參數和會話參數 •SQL 執行 • 統計資料和度量 注:DICT 和DICT_COLUMNS視圖也包含這些動态性能視圖的名稱。動态性能視圖以 字首“v$”開頭,其數量超過590。

  • 動态性能視圖:用法示例

經常使用這些視圖的是Enterprise Manager ,但其他使用者也可以根據需要查詢這些視圖。

1. 哪些SQL 語句(及其相關的執行編号)所占用的CPU 時間大于200,000 微秒? SQL> SELECT sql_text, executions FROM   v$sql     WHERE cpu_time > 200000; 2. 在前一天内,哪些目前會話從EDRSR9P1 計算機登入? SQL> SELECT * FROM   v$session  WHERE machine =  'EDRSR9P1' and logon_time > SYSDATE - 1; 3. 目前持有阻止其他使用者的鎖的那些會話的會話ID 是什麼?這些鎖已持有多長時間? SQL> SELECT sid, ctime FROM  v$lock  WHERE block > 0;

  • 動态性能視圖:注意事項

• 這些視圖由SYS 使用者所有。 • 不同場合可使用的視圖也不同: – 執行個體已啟動。 – 資料庫已裝載。 – 資料庫已打開。 • 可以通過查詢V$FIXED_TABLE 檢視所有視圖名稱。 • 這些視圖通常稱為“v$ 視圖”。 • 因為其資料是動态的,是以在這些視圖上不能保證讀取 一緻性。 某些動态視圖包含的資料并不适用于執行個體或資料庫的所有狀态。例如,如果執行個體剛啟動, 但未裝載任何資料庫,則可以通過查詢V$BGPROCESS 來檢視正在運作的背景程序的列 表。但無法通過查詢V$DATAFILE檢視資料庫資料檔案的狀态,因為要通過裝載資料庫 來讀取控制檔案,此後才能找出資料庫關聯的資料檔案。 一些V$視圖包含的資訊類似于相應DBA_ 視圖中的資訊。例如,V$DATAFILE類似于 DBA_DATA_FILES。另請注意,V$視圖名稱通常是單數形式,而DBA_ 視圖名稱是複數 形式。

  • 資料字典:概覽
Oracle DB 性能視圖和資料字典

Oracle  資料字典是資料庫的中繼資料,其中包含資料庫中所有對象的名稱和屬性。建立或 修改任何對象都會引起資料字典的更新,以反映這些更改。這些資訊存儲在由Oracle DB  維護的基表中,不過,可使用預定義視圖通路這些表(而不是直接讀取表)。 資料字典: • 由Oracle DB 伺服器使用,可用于查找關于使用者、對象、限制條件和存儲的資訊 • 對象結構或定義修改時,Oracle DB 将做出相應維護 • 可供任意使用者使用以查詢關于資料庫的資訊 • 由SYS 使用者擁有 • 不得使用SQL 直接進行修改 注:DICTIONARY資料字典視圖(或其DICT 同義詞)包含資料字典表和視圖的名稱和 說明。使用DICT_COLUMNS視圖可檢視視圖列及其定義。

  • 資料字典視圖
Oracle DB 性能視圖和資料字典

視圖字首訓示給定使用者可以看到的資料(以及資料量)。 隻有擁有DBA 權限的使用者才可通路包含所有對象的全局視圖(帶DBA_ 字首)。 下一個權限級别是ALL_ 字首級别,它表示查詢使用者有權檢視的所有對象,無論使用者是否 擁有這些對象。例如,如果USER_A 被授權通路屬于USER_B 的表,那麼USER_A 會看 到該表列在與表名有關的所有ALL_ 視圖中。 字首USER_代表最小的可見範圍。該類型的視圖隻顯示屬于查詢使用者的那些對象(即 存在于使用者自己方案中的對象)。 一般情況下,每個視圖集都是擁有更高權限的視圖集的子集,無論按行還是按列。并非 給定視圖集中的所有視圖都在其它視圖集中有對應的視圖。這取決于視圖中資訊的性質。 例如,有一個DBA_LOCK 視圖,但是并不存在ALL_LOCK 視圖。這是因為隻有DBA 才 關注有關鎖的資料。為了滿足需要,應確定選擇适當的視圖集。即便你有權通路DBA 視圖, 也可能隻想查詢USER 版本的視圖,因為結果會顯示你所擁有的對象的相關資訊,而你可 能不希望結果集中包含其他對象。

DBA_ 視圖隻能由擁有SYSDBA 或SELECT ANY DICTIONARY 權限的使用者查詢。 并非所有字典視圖都以字首DBA_、ALL_ 和USER_開頭。以下視圖或視圖的同義詞就是 例外: • AUDIT_ACTIONS  • CAT  • CHANGE_PROPAGATIONS  • CHANGE_PROPAGATION_SETS  • CHANGE_SETS  • CHANGE_SOURCES  • CHANGE_TABLES  • CLIENT_RESULT_CACHE_STATS$  • CLU  • COLS  • COLUMN_PRIVILEGES  • DATABASE_COMPATIBLE_LEVEL  • DBMS_ALERT_INFO  • DBMS_LOCK_ALLOCATED  • DICT  • DICTIONARY  • DICT_COLUMNS  • DUAL  • GLOBAL_NAME  • IND  • INDEX_HISTOGRAM  • INDEX_STATS  • LOGSTDBY_UNSUPPORTED_TABLES  • NLS_DATABASE_PARAMETERS  • NLS_INSTANCE_PARAMETERS  • NLS_SESSION_PARAMETERS  • OBJ  • RECYCLEBIN  • RESOURCE_COST  • ROLE_ROLE_PRIVS  • ROLE_SYS_PRIVS  • ROLE_TAB_PRIVS  • SEQ  • SESSION_PRIVS  • SESSION_ROLES  • SM$VERSION  • SYN  • TABLE_PRIVILEGES  • TABS

  • 資料字典:用法示例

1. 方案中已建立的表的名稱(以及表所在表空間的名稱)是什麼? SELECT table_name, t ablespace_name  FROM user_tables; 2. 在你有權通路的資料庫中,關于序列的重要資訊是什麼? SELECT sequence_name, min_value, max_value,  increment_by  FROM all_sequences  WHERE sequence_owner IN ('MDSYS','XDB'); 3. 此資料庫中目前可以登入的使用者是哪些? SELECT USERNAME, ACCOUNT_STATUS  FROM dba_users  WHERE ACCOUNT_STATUS = 'OPEN'; 4. DBA_INDEXES 視圖的列是什麼?這顯示了你可以檢視資料庫中所有索引的哪些資訊。 DESCRIBE   dba_indexes 下面列出了此指令的部分輸出: SQL> DESCRIBE dba_indexes Name            Null?    Type --------------- -------- ------------- OWNER           NOT NULL VARCHAR2(30) INDEX_NAME      NOT NULL VARCHAR2(30) INDEX_TYPE               VARCHAR2(27) TABLE_OWNER     NOT NULL VARCHAR2(30) TABLE_NAME      NOT NULL VARCHAR2(30)  

  • 啟用資料字典保護:

你可以通過設定初始化參數O7_DICTIONARY_ACCESSIBILITY 為false來保護資料字典。

此參數可以防止使用者(擁有任何系統權限即是在SYS模式對象的權限的使用者)來使用這些資料字典。

 oracle資料庫提供高度細化的權限。

一個這樣的特權,通常所說的任何特權,通常授予唯一的應用程式的owners和個人的資料庫管理者。

例如,可以授予DROP ANY TABLE 的權限給一個應用程式所有者,通過打開或關閉的07_DICTIONARY_ACCESSIBILITY初始化參數,免遭意外或惡意使用的任何特權,可以保護Oracle資料字典。

啟用資料字典保護工作流

  1. 使用em登陸到Oracle Enterprise Manager Database Control (Database Control).
  2. 點選Server"伺服器",點選Initialization Parameters“初始化參數”。
  3. 搜尋O7_DICTIONARY_ACCESSIBILITY這個參數。
  4. 将 

    O7_DICTIONARY_ACCESSIBILTY

     設定為

    FALSE。

Oracle DB 性能視圖和資料字典

5.

點選應用,然後重新開機資料庫。

O7_DICTIONARY_ACCESSIBILITY參數:

O7_DICTIONARY_ACCESSIBILITY控制對系統權限的限制。如果該參數被設定為true時,sys模式中的對象都可以通路資料字典。預設設定為false,確定系統權限被允許通路其他任何模式,而不能通路sys模式。

例如,O7_DICTIONARY_ACCESSIBILITY設定為false,那麼 

SELECT ANY TABLE

 的權限允許通路除了sys模式(資料字典不能被通路)中任何視圖或表。系統權限EXECUTE ANY PROCEDURE ,可以通路任何模式除了sys模式。

如果這個參數設定為falise,你需要通路在sys模式的對象,那麼必須明确授予對象權限。以下角色,可以授予資料庫管理者,也允許通路字典對象:

  • SELECT_CATALOG_ROLE

  • EXECUTE_CATALOG_ROLE

  • DELETE_CATALOG_ROLE