data dictionary(資料字典)

pwz1688發表於2014-04-09
一、資料字典簡介
有關資料字典介紹詳見官網Concepts-part II Oracle Database Architecture-7 The Data Dictionary(10g)。
歸納總結有以下特點:
data dictionary(資料字典)
資料字典是由基表(x$)、檢視、同義詞構成,由$ORACLE_HOME/rdbms/admincatalog.sql指令碼生成。其中基表是儲存有關資料庫的底層表,我們無法直接訪問。
下面主要介紹檢視。
所有檢視可通過查詢dictionary表獲取,如查詢控制檔案相應檢視:
SQL> select table_name from dictionary where table_name like '%CONTROLFILE%';
TABLE_NAME
------------------------------
V$CONTROLFILE
V$CONTROLFILE_RECORD_SECTION
GV$CONTROLFILE
GV$CONTROLFILE_RECORD_SECTION
V$BACKUP_CONTROLFILE_DETAILS
V$BACKUP_CONTROLFILE_SUMMARY
6 rows selected.
注:以上查詢結果中V$與GV$一一對應,其中v$代表單例項環境下檢視,GV$代表叢集環境下檢視。
二、檢視分類
檢視可分為靜態檢視與動態檢視,其主要區別如下:
靜態檢視:
1、在資料庫open狀態下訪問,用於瞭解資料庫的物理結構資訊。
2、大部分以dba,all,user打頭,並多用於複數形式,其中
user_:儲存當前使用者所擁有的物件的相關資訊;
all_:儲存當前使用者能夠訪問的物件(包括使用者所擁有的物件和別的使用者授權訪問的物件)的資訊;
dba_:儲存所有使用者物件的資訊(預設只能有sys/system使用者訪問);
動態檢視:
1、大部分在mount下就可以訪問,反映資料庫實時的狀態。
2、大部分以v$開頭,多用單數形式,從控制檔案或記憶體中讀出。
3、從v$fixed_table這個檢視查到所有的動態檢視的名稱。
4、用於調優和資料監控。
例1:mount狀態訪問靜態、動態檢視
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 419430400 bytes
Fixed Size 1219760 bytes
Variable Size 121635664 bytes
Database Buffers 293601280 bytes
Redo Buffers 2973696 bytes
Database mounted.
--未開庫狀態訪問靜態檢視失敗
SQL> select tablespace_name,contents,status from dba_tablespaces;
select tablespace_name,contents,status from dba_tablespaces
                                            *
ERROR at line 1:
ORA-01219: database not open: queries allowed on fixed tables/views only
----未開庫狀態訪問動態檢視成功(動態檢視資訊來自控制檔案或記憶體,mount狀態控制檔案是開啟的)
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
UNDOTBS
SYSAUX
TEMPTS
USERS
SQL> alter database open;
Database altered.
--開庫狀態,可訪問靜態檢視
SQL> select tablespace_name,contents,status from dba_tablespaces;
TABLESPACE_NAME CONTENTS STATUS
------------------------------ --------- ---------
SYSTEM PERMANENT ONLINE
UNDOTBS UNDO ONLINE
SYSAUX PERMANENT ONLINE
TEMPTS TEMPORARY ONLINE
USERS PERMANENT ONLINE
例2:scott使用者訪問不同靜態檢視
SQL> conn scott/tiger
Connected.
--非sysdba許可權無法訪問dba_tables
SQL> select table_name,tablespace_name,blocks from dba_tables;
select table_name,tablespace_name,blocks from dba_tables
                                              *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select table_name,tablespace_name,blocks from user_tables;
TABLE_NAME TABLESPACE_NAME BLOCKS
------------------------------ ------------------------------ ----------
SALGRADE USERS 5
BONUS USERS 0
EMP USERS 5
DEPT USERS 5
SQL> select table_name,tablespace_name,blocks from all_tables;
TABLE_NAME TABLESPACE_NAME BLOCKS
------------------------------ ------------------------------ ----------
PLAN_TABLE SYSTEM 1
PLAN_TABLE$
IMPDP_STATS
KU$NOEXP_TAB
OL$NODES
OL$HINTS
OL$
DEF$_TEMP$LOB SYSTEM 0
ODCI_WARNINGS$
ODCI_SECOBJ$
WRI$_ADV_ASA_RECO_DATA
TABLE_NAME TABLESPACE_NAME BLOCKS
------------------------------ ------------------------------ ----------
PSTUBTBL
AUDIT_ACTIONS SYSTEM 1
STMT_AUDIT_OPTION_MAP SYSTEM 1
TABLE_PRIVILEGE_MAP SYSTEM 1
SYSTEM_PRIVILEGE_MAP SYSTEM 1
DUAL SYSTEM 1
SALGRADE USERS 5
BONUS USERS 0
EMP USERS 5
DEPT USERS 5
21 rows selected.
三、常用靜態檢視
SQL> conn /as sysdba
Connected.
--查詢控制檔案資訊
SQL> col name for a50;
SQL> select file#,name from v$datafile;
     FILE# NAME
---------- --------------------------------------------------
         1 /u01/app/oracle/oradata/PROD/disk3/system01.dbf
         2 /u01/app/oracle/oradata/PROD/disk4/undotbs01.dbf
         3 /u01/app/oracle/oradata/PROD/disk4/sysaux01.dbf
         4 /u01/app/oracle/oradata/PROD/disk3/users01.dbf
--查詢表空間資訊
SQL> select name from v$tablespace;
NAME
--------------------------------------------------
SYSTEM
UNDOTBS
SYSAUX
TEMPTS
USERS
--查詢日誌資訊
SQL> select * from v$log;
    GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1 1 10 104857600 2 NO INACTIVE 355469 03-MAY-13
         2 1 11 104857600 2 NO INACTIVE 377693 02-APR-14
         3 1 12 104857600 2 NO CURRENT 399207 02-APR-14
--查詢日誌檔案資訊
SQL> col member for a50 
SQL> select * from v$logfile;
    GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
         1 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo01.log NO
         1 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo01.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk1/redo02.log NO
         2 STALE ONLINE /u01/app/oracle/oradata/PROD/disk2/redo02.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk1/redo03.log NO
         3 ONLINE /u01/app/oracle/oradata/PROD/disk2/redo03.log NO
6 rows selected.
--查詢歸檔資訊
SQL> select name from v$archived_log;
no rows selected

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21251711/viewspace-1139019/,如需轉載,請註明出處,否則將追究法律責任。

相關文章