1. 程式人生 > >Oracle常用資料字典表(系統表或系統檢視)及查詢SQL

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;