Oracle的數據字典是Oracle數據庫安裝之後,自動創建的一系列數據庫對象數據字典。是Oracle存放有關數據庫信息的地方,其用途是用來描述數據的。
比如一個表的創建者信息,創建時間信息,所屬表空間信息,用戶訪問權限信息等。
數據庫數據字典是一組表和視圖結構。它們存放在SYSTEM表空間中,當用戶在對數據庫中的數據進行操作時遇到困難就可以訪問數據字典來查看詳細的信息。
用戶可以用SQL語句訪問數據庫數據字典。
數據字典內容包括:
1,數據庫中所有模式對象的信息,如表、視圖、簇、及索引等。
2,分配多少空間,當前使用了多少空間等。
3,列的缺省值。
4,約束信息的完整性。
5,Oracle用戶的名字。
6,用戶及角色被授予的權限。
7,用戶訪問或使用的審計信息。
8,其它產生的數據庫信息。
Oracle中的數據字典有靜態和動態之分。
1,靜態數據字典-->主要是在用戶訪問數據字典時不會發生改變的,
--例如某用戶創建的表
2,動態數據字典-->是依賴數據庫運行的性能的,反映數據庫運行的一些內在信息,所以在訪問這類數據字典時往往不是一成不變的。
--當前鎖住的對象
靜態數據字典:這類數據字典主要是由表和視圖組成
數據字典中的表是不能直接被訪問的,但是可以訪問數據字典中的視圖。
靜態數據字典中的視圖分爲三類,它們分別由三個前綴夠成:user_*、 all_*、 dba_*。
user_對象視圖:描述了當前用戶schema下的對象;
all_對象視圖:描述了當前用戶有權限訪問到的所有對象的信息;
dba_對象視圖: 描述了數據庫中所有對象的信息。(前提是當前用戶具有訪問這些數據庫的權限,一般來說必須具有管理員權限)
動態數據字典
Oracle包含了一些潛在的由系統管理員如SYS維護的表和視圖,由於當數據庫運行的時候它們會不斷進行更新,所以稱它們爲動態數據字典(或者是動態性能視圖)。這些視圖提供了關於內存和磁盤的運行情況,所以我們只能對其進行只讀訪問而不能修改它們。
Oracle中這些動態性能視圖都是以v$開頭的視圖.
v$access 該視圖顯示數據庫中鎖定的數據庫對象以及訪問這些對象的會話對象(session對象)。
select * from v$access
v$session 該視圖列出當前會話的詳細信息。
v$active_instance 該視圖主要描述當前數據庫下的活動的實例的信息。依然可以使用select語句來觀察該信息。
v$context 該視圖列出當前會話的屬性信息。比如命名空間、屬性值等
追蹤數據字典
數據字典視圖非常多,我們無法一一記住,但是有個視圖,我們必須知道,那就是dictionary視圖,該視圖裏記錄了所有的數據字典視圖的名稱。所以當我們需要查找某個數據字典而又不知道這個信息在哪個視圖裏的時候,就可以在dictionary視圖裏找。該視圖還有個同名詞dict。
常用
殺job運行的進程:
SELECT * FROM DBA_JOBS_RUNNING;
SELECT * FROM V$SESSION WHERE SID=326;
ALTER SYSTEM KILL SESSION '326,176';//
通過sid查詢SERIAL#
查看錶空間詳細
SELECT UPPER(F.TABLESPACE_NAME) "表空間名",
D.TOT_GROOTTE_MB "表空間大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空間(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",
F.TOTAL_BYTES "空閒空間(M)",
F.MAX_BYTES "最大塊(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;
查看哪張表被鎖
Select * from v$locked_object;
分析某個用戶下的所有表
begin
DBMS_STATS.gather_schema_stats(ownname => 'dmuser', cascade => true);
end; //分析某個用戶下的所有表