- 動态性能視圖
用于通路執行個體記憶體結構不斷變化 的狀态資訊。

在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 資料字典是資料庫的中繼資料,其中包含資料庫中所有對象的名稱和屬性。建立或 修改任何對象都會引起資料字典的更新,以反映這些更改。這些資訊存儲在由Oracle DB 維護的基表中,不過,可使用預定義視圖通路這些表(而不是直接讀取表)。 資料字典: • 由Oracle DB 伺服器使用,可用于查找關于使用者、對象、限制條件和存儲的資訊 • 對象結構或定義修改時,Oracle DB 将做出相應維護 • 可供任意使用者使用以查詢關于資料庫的資訊 • 由SYS 使用者擁有 • 不得使用SQL 直接進行修改 注:DICTIONARY資料字典視圖(或其DICT 同義詞)包含資料字典表和視圖的名稱和 說明。使用DICT_COLUMNS視圖可檢視視圖列及其定義。
- 資料字典視圖
視圖字首訓示給定使用者可以看到的資料(以及資料量)。 隻有擁有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資料字典。
啟用資料字典保護工作流
- 使用em登陸到Oracle Enterprise Manager Database Control (Database Control).
- 點選Server"伺服器",點選Initialization Parameters“初始化參數”。
- 搜尋O7_DICTIONARY_ACCESSIBILITY這個參數。
- 将
設定為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