Oracle常用資料字典表(系統表或系統檢視)及查詢SQL
資料字典是Oracle存放有關資料庫資訊的地方,其用途是用來描述資料的。比如一個表的建立者資訊,建立時間資訊,所屬表空間資訊,使用者訪問許可權資訊的檢視等。
資料字典系統表,儲存在system表空間中。查詢所有資料字典可用語句“select * from dictionary;”。
資料字典分類
資料字典主要可分為四部分:
1)內部RDBMS表:x$*,用於跟蹤內部資料庫資訊,維持DB的正常執行。是加密命名的,不允許sysdba以外的使用者直接訪問,顯示授權不被允許。
2)資料字典表:*$,如tab$,obj$,ts$等,用來儲存表、索引、約束以及其他資料庫結構的資訊。
3)動態效能檢視:gv$*,v$*,記錄了DB執行時資訊和統計資料,大部分動態效能檢視被實時更新以反映DB當前狀態。
4)資料字典檢視:user_*、all_*、dba_*,在非Sys使用者下,我們訪問的都是同義詞,而不是V$檢視或GV檢視。
資料庫啟動時,動態建立x$,在X$基礎上建立GV$,在GV$基礎上建立V$X$表-->GV$(檢視)--->V$(檢視)。
資料字典檢視可分為靜態資料字典檢視和動態資料字典檢視。
靜態資料字典是指在使用者訪問資料字典時內容不會發生改變。這類資料字典主要是由表和檢視組成,應該注意的是,資料字典中的表是不能直接被訪問的,但是可以訪問資料字典中的檢視。
靜態資料字典中的檢視分為三類,它們分別由三個字首夠成:user_*(該使用者方案物件的資訊)、all_*(該使用者可以訪問的所有物件的資訊)、dba_*(全部資料庫物件的資訊)。
動態資料字典是Oracle包含的一些潛在的由系統管理員如SYS維護的表和檢視,由於當資料庫執行的時候它們會不斷進行更新,所以稱它們為動態資料字典。這些檢視提供了關於記憶體和磁碟的執行情況,所以我們只能對其進行只讀訪問而不能修改它們。Oracle中這些動態效能檢視都是以v$開頭的檢視,比如v$access。
dba_開頭
dba_users資料庫使用者資訊
dba_segments表段資訊
dba_extents資料區資訊
dba_objects資料庫物件資訊
dba_tablespaces資料庫表空間資訊
dba_data_files資料檔案設定資訊
dba_temp_files臨時資料檔案資訊
dba_rollback_segs回滾段資訊
dba_ts_quotas使用者表空間配額資訊
dba_free_space資料庫空閒空間資訊
dba_profiles資料庫使用者資源限制資訊
dba_sys_privs使用者的系統許可權資訊
dba_tab_privs使用者具有的物件許可權資訊
dba_col_privs使用者具有的列物件許可權資訊
dba_role_privs使用者具有的角色資訊
dba_audit_trail審計跟蹤記錄資訊
dba_stmt_audit_opts審計設定資訊
dba_audit_object物件審計結果資訊
dba_audit_session會話審計結果資訊
dba_indexes使用者模式的索引資訊
user_開頭
user_objects使用者物件資訊
user_source資料庫使用者的所有資源物件資訊
user_segments使用者的表段資訊
user_tables使用者的表物件資訊
user_tab_columns使用者的表列資訊
user_constraints使用者的物件約束資訊
user_sys_privs當前使用者的系統許可權資訊
user_tab_privs當前使用者的物件許可權資訊
user_col_privs當前使用者的表列許可權資訊
user_role_privs當前使用者的角色許可權資訊
user_indexes使用者的索引資訊
user_ind_columns使用者的索引對應的表列資訊
user_cons_columns使用者的約束對應的表列資訊
user_clusters使用者的所有簇資訊
user_clu_columns使用者的簇所包含的內容資訊
user_cluster_hash_expressions雜湊簇的資訊
v$開頭
v$database資料庫資訊
v$datafile資料檔案資訊
v$controlfile控制檔案資訊
v$logfile重做日誌資訊
v$instance資料庫例項資訊
v$log日誌組資訊
v$loghist日誌歷史資訊
v$sga資料庫SGA資訊
v$parameter初始化引數資訊
v$process資料庫伺服器程序資訊
v$bgprocess資料庫後臺程序資訊
v$controlfile_record_section控制檔案記載的各部分資訊
v$thread執行緒資訊
v$datafile_header資料檔案頭所記載的資訊
v$archived_log歸檔日誌資訊
v$archive_dest歸檔日誌的設定資訊
v$logmnr_contents歸檔日誌分析的DMLDDL結果資訊
v$logmnr_dictionary日誌分析的字典檔案資訊
v$logmnr_logs日誌分析的日誌列表資訊
v$tablespace表空間資訊
v$tempfile臨時檔案資訊
v$filestat資料檔案的I/O統計資訊
v$undostatUndo資料資訊
v$rollname線上回滾段資訊
v$session會話資訊
v$transaction事務資訊
v$rollstat回滾段統計資訊
v$pwfile_users特權使用者資訊
v$sqlarea當前查詢過的sql語句訪問過的資源及相關的資訊
v$sql與v$sqlarea基本相同的相關資訊
v$sysstat資料庫系統狀態資訊
all_開頭
all_users資料庫所有使用者的資訊
all_objects資料庫所有的物件的資訊
all_def_audit_opts所有預設的審計設定資訊
all_tables所有的表物件資訊
all_indexes所有的資料庫物件索引的資訊
session_開頭
session_roles會話的角色資訊
session_privs會話的許可權資訊
index_開頭
index_stats索引的設定和儲存資訊
偽表
dual系統偽列表資訊
資料字典常用SQL查詢
1)查看錶空間的名稱及大小
select t.tablespace_name,
round(sum(d.bytes/(1024*1024)),0) tbs_size
from dba_tablespaces t,
dba_data_files d
where t.tablespace_name = d.tablespace_name
group by t.tablespace_name;
若需要檢視指定表空間的大小,則可以直接新增where條件指定,否則結果集是所有表空間。
2)查看錶空間物理檔案的名稱及大小
select tablespace_name,
file_id,
file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
3)查看錶空間剩餘空間大小
select tablespace_name,
round(sum(bytes) / 1024 / 1024, 2) AS free_space,
count(*) AS extends,
sum(blocks) AS blocks
from dba_free_space
group by tablespace_name;
4)查看錶空間使用率
SELECT total.tablespace_name,
Round(total.total, 2) AS Total_MB,
Round(total.total - free.free, 2) AS Used_MB,
Round(( 1 - free.free / total.total ) * 100, 2)
|| '%' AS Used_PCT
FROM (SELECT tablespace_name,
sum(bytes) / 1024 / 1024 AS free
FROM dba_free_space
GROUP BY tablespace_name) free,
(SELECT tablespace_name,
sum(bytes) / 1024 / 1024 AS total
FROM dba_data_files
GROUP BY tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name;
5)檢視控制檔案
select name from v$controlfile;
6)檢視日誌檔案
select member from v$logfile;
7)檢視消耗資源最多的SQL
SELECT hash_value,
executions,
buffer_gets,
disk_reads,
parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000
OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC;
8)捕捉執行很久的SQL
select username,
sid,
opname,
round(sofar*100 / totalwork,0) || '%' as progress,
time_remaining,
sql_text
from v$session_longops,
v$sql
where time_remaining <> 0
and sql_address = address
and sql_hash_value = hash_value;
9)查看回滾段名稱及大小
select segment_name,
tablespace_name,
r.status,
(initial_extent/1024) InitialExtent,
(next_extent/1024) NextExtent,
max_extents,
v.curext CurExtent
from dba_rollback_segs r,
v$rollstat v
where r.segment_id = v.usn(+)
order by segment_name;
10)檢視還沒提交的事務
select * from v$locked_object;
select * from v$transaction;