您的位置:首頁技術文章
文章詳情頁

Oracle數據字典詳解

瀏覽:237日期:2023-05-30 16:13:55
目錄
  • 1. 什么是Oracle數據字典
  • 2. 數據字典的內容
  • 3. 數據字典應用示例

1. 什么是Oracle數據字典

數據字典(Data Dictionary)是Oracle元數據(Metadata)的存儲地點,匯集了數據庫對象及數據庫運行時需要的基礎信息。Oracle RDBMS使用數據字典記錄和管理對象信息和安全信息,用戶可以通過數據字典獲取數據庫相關信息,從而進行數據庫管理、優化和維護工作。

2. 數據字典的內容

數據字典包括以下內容:

  • 所有數據庫Schema對象的定義(表、視圖、索引、聚簇、同義詞、序列、過程、函數、包、觸發器等);
  • Oracle用戶名稱、角色、權限等信息;
  • 完整性約束信息;
  • 數據庫的空間分配和使用情況;
  • 字段缺省值;
  • 審計信息;
  • 其他數據庫信息。

Oracle字典包括四個層次,分別為內部RDBMS表(X)、基礎數據字典表、數據字典視圖和動態性能視圖( V )、基礎數據字典表、數據字典視圖和動態性能視圖(V)、基礎數據字典表、數據字典視圖和動態性能視圖(V)。

(1)X$表

X$表是Oracle數據庫的核心部分,用于跟蹤內部數據庫信息,維持數據庫正常運行,在數據庫啟動時由Oracle應用程序動態創建,不允許SYSDBA之外的用戶直接訪問。X$表是加密命名的且不作文檔說明。Oracle通過X$建立起其他大量視圖,供用戶查詢管理數據庫之用。

(2)數據字典表、數據字典視圖

數據字典表(Data Dictionary Table)用以存儲表、索引、約束以及其他數據庫結構的信息,

表名都用$結尾(如tab$、obj$、ts$等),在創建數據庫的時候通過運行sql.bsq($ORACLE_HOME/RDBMS/admin目錄下)腳本來創建。

數據字典表的用戶都是sys,存在在system這個表空間里,Oracle對這些數據字典都分別建立了數據字典視圖,Oracle針對這些對象的范圍,分別把視圖命名為DBA_XXXX, ALL_XXXX和USER_XXXX,dictionary視圖記錄了所有的數據字典視圖的名稱。

  • user_類視圖:描述了當前用戶schema下的對象;
  • all_類視圖:描述了當前用戶有權限訪問到的所有對象的信息;
  • dba_類視圖:包括了所有數據庫對象的信息;

通常USER_類視圖不包含Owner字段,查詢返回當前用戶的對象信息。

e.g.

SQL> select username from all_users; //查詢所有用戶
SQL> select username from dba_users; //查詢dba用戶
SQL> select table_name from user_tables;  //查詢當前用戶的表
SQL> select table_name from all_tables;  //查詢所有用戶的表
SQL> select table_name from dba_tables;  //查詢包括系統表
SQL> select owner,constraint_name,constraint_type,table_name from user_constraints; 
SQL> select owner,constraint_name,constraint_type,table_name from all_ constraints; 
SQL> select owner,constraint_name,constraint_type,table_name from dba_ constraints ;

(3)動態性能視圖

動態性能(V$)視圖(Dynamic Performance View)記錄了數據庫運行時的信息和統計數據。

創建X$表之后,Oracle創建了GV$和V$視圖,在GV$和V$之后,Oracle建立了GV_$和V_$視圖,隨后為這些視圖建立了公共同義詞。這些工作都是通過catalog.sql腳本實現的。通過V_$視圖,Oracle把V$視圖和普通用戶隔離,V_$視圖的權限可以授予其他用戶,而Oracle不允許任何對于V$視圖的直接授權。Oracle提供了一些特殊視圖用以記錄其他視圖創建方式,如v$fixed_view_defition,可以查看視圖的定義。

SQL> select view_definition from v\$fixed_view_definition where view_name ="V$NLS_PARAMETERS";

3. 數據字典應用示例

(1)查詢表的信息

查詢DBA_TABLES視圖可以獲取所有表的信息,包括表名、表空間、擁有者等等。例如,以下查詢語句可以獲取所有表的表名和表空間:

SQL> SELECT table_name, tablespace_name FROM dba_tables;

(2)查詢索引的信息

查詢DBA_INDEXES視圖可以獲取所有索引的信息,包括索引名、所屬表、索引類型等等。例如,以下查詢語句可以獲取所有索引的信息:

SQL> SELECT index_name, table_name, index_type FROM dba_indexes;

(3)查詢用戶的信息

查詢DBA_USERS視圖可以獲取所有用戶的信息,包括用戶名、默認表空間、臨時表空間等等。例如,以下查詢語句可以獲取所有用戶的用戶名和默認表空間:

SQL> SELECT username, default_tablespace FROM dba_users;

(4)查詢表空間的信息

查詢DBA_TABLESPACES視圖可以獲取所有表空間的信息,包括表空間名、塊大小、狀態等等。例如,以下查詢語句可以獲取所有表空間的表空間名和狀態:

SQL> SELECT tablespace_name, status FROM dba_tablespaces;

(5)查詢數據文件的信息

查詢DBA_DATA_FILES視圖可以獲取所有數據文件的信息,包括數據文件名、表空間名、文件大小等等。例如,以下查詢語句可以獲取所有數據文件的數據文件名和文件大小:

SQL> SELECT file_name, bytes FROM dba_data_files;

(6) 查詢數據庫的性能數據

查詢DBA_HIST_SNAPSHOT視圖可以獲取數據庫的歷史性能數據,包括CPU利用率、內存利用率、I/O等等。例如,以下查詢語句可以獲取數據庫的CPU利用率和內存利用率:

SQL> SELECT begin_interval_time, end_interval_time, cpu_usage, memory_usage
FROM dba_hist_sysmetric_summary
WHERE metric_name IN ("CPU Usage Per Sec", "Memory Usage Per Sec")
ORDER BY begin_interval_time;

到此這篇關于Oracle數據字典詳解的文章就介紹到這了,更多相關Oracle數據字典內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Oracle
相關文章:
国产综合久久一区二区三区