一、数据字典
Data Dictionary 存储的是控制信息:如有多少张表,表的结构等等
Performance tables: 也称为DynamicPerformance tables,即动态性能表,反应了系统的性能特征,是动态的,以表的形式展示,但实际上展示的是内存信息。
PL/SQL packages:帮助完成数据库日常管理的程序。
Database event triggers:事件触发器,如插入数据时会触发相应的事件。
任何数据库都会有一个SYSTEM tablespace,10g以后的数据库还必须有一个表空间叫SYSAUS(系统辅助空间),为SYS用户所拥有,由OracleServer直接管理,是只读的,即不能插入修改删除数据。
Base Table(基表)是核心,用户通常只和Views(视图)打交道。
[oracle@localhost ~]$ cd$ORACLE_HOME/rdbms/admin
[oracle@localhost admin]$ ls
1
2
3
4
| a0902000.sql dbmsxpln.sql prvthesh.plb
dbmsfspi.sql prvtbfut.plb sql.bsq
…
dbmsxmlu.sql prvthdm.plb
|
基表由sql.bsq 这个脚本创建
[oracle@localhost admin]$ vimsql.bsq
1
2
3
4
5
6
7
8
| rem
rem $Header: rdbms/admin/sql.bsq /main/606 2008/07/1417:25:59 vliang Exp $ sql.bsq
rem MODIFIED
rem huagli 06/09/08 - add ddst.bsq
rem dvoss 01/03/07 - add dlmnr.bsq
…
dlmnr.bsq
ddst.bsq
|
视图由catalog.sql创建
Catproc.sql是用来创建一些OracleServer所需要的包。
DD存储了数据库能够运行的核心信息,其重要性不言而喻。
数据字典由Oracle Server 自动维护,它在执行DDL语句时会发生改变,如CREATETABLE创建了表,那么DD就会发生改变;而INSERT 语句不会改变表的结构,因此DD不会发生改变。
DD的View主要有三类:
_USER:存储了本用户数据库结构中的表、索引信息; _ALL:除了用户自己建立的schema,还包括该用户被授权允许访问的所有表,索引,视图等; _DBA:整个数据库范围内存储的信息。 这三类视图大体结构都相似,只有一些细微差别,关于这三类的详细信息,可以查阅联机文档Reference的相关章节:
SQL> desc user_tables;
1
2
3
4
5
6
7
8
9
| Name Null? Type
------------------------------------------------- -------------------
TABLE_NAME NOT NULLVARCHAR2(30)
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2
...
READ_ONLY VARCHAR2(3)
SEGMENT_CREATED VARCHAR2(3)
RESULT_CACHE VARCHAR2
|
SQL> desc all_tables;
1
2
3
4
5
6
7
8
9
10
11
12
| Name Null? Type
------------------------------------------------- --------------
OWNER NOT NULLVARCHAR2(30)
-- ALL_TABLES比USER_TABLES多了一列OWNER,以指明该表属于哪个用户
-- 但除此以外表机构几乎一致
TABLE_NAME NOT NULLVARCHAR2(30)
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2
...
READ_ONLY VARCHAR2(3)
SEGMENT_CREATED VARCHAR2(3)
RESULT_CACHE VARCHAR2
|
SQL> select table_namefrom dictionary;
1
2
3
4
5
6
7
8
| ...
TABLE_NAME
------------------------------
GV$_LOCK
DBA_HISTOGRAMS
DBA_APPLY_VALUE_DEPENDENCIES
DBA_APPLY_OBJECT_DEPENDENCIES
DICT
|
DICTIONAL, DICT_COLUMS, DBA_TABLES, DBA_INDEXES,DBA_TAB_COLUMNS, DBA_CONSTRAINTS, DBA_SEGMENTS, DBA_EXTENTS, DBA_TABLESPACES,DBA_DATA_FILES这些表相对而言比较重要,建议查阅联机文档Reference相关章节以获取详细信息。
二、动态性能表
DD数据字典也是动态变化的,如用户的增加或减少,表的创建和删除等,但它的变化并不频繁。与之相对应的是动态性能表(DynamicPerformance Tables),它存储的是实时变化的数据,如有多少用户登陆了,有多少个活动的事物(Transaction),有多少commit的事物,多少rollback的事物等等。
动态性能表有以下特性:
1. 记录数据库当前的状态; 2. 数据库运行时会实时更新; 3. 它的信息来自于内存和控制文件; 4. 它主要用来监控和调优数据库; 5. 它的所有者是SYS; 6. 动态信息表的别名通常以V$开头
SQL> desc V$FIXED_TABLE;
1
2
3
4
5
6
| Name Null? Type
------------------------------------------------- -------------------
NAME VARCHAR2(30)
OBJECT_ID NUMBER
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
|
SQL> select * fromv$fixed_table;
1
2
3
4
5
6
| NAME OBJECT_ID TYPE TABLE_NUM
------------------------------ ---------- ----- ----------
GV$SQLCOMMAND 4294953192 VIEW 65537
V$SQLCOMMAND 4294953193 VIEW 65537
...
X$JOXMEX 4294952376 TABLE 65537
|
这些信息只能被具有SYSDBA权限的用户查询,普通用户是无法查询的:
SQL> conn hr
1
2
| Enter password:
Connected.
|
SQL> desc v$fixed_table;
1
2
3
| ERROR:
ORA-04043: object "SYS"."V_$FIXED_TABLE"does not exist
-- 普通用户无法查看v$fixed_table
|
V$SPPARAMETER中存储了初始化参数信息,如果没有定义启动数据库的参数,则启动数据库时会使用V$SPPARAMETER中的默认值。
V$PARAMETER存储的是内存中的参数信息。
SQL> desc v$controlfile
1
2
3
4
5
6
7
| Name Null? Type
------------------------------------------------- ------------------
STATUS VARCHAR2(7)
NAME VARCHAR2(513)
IS_RECOVERY_DEST_FILE VARCHAR2(3)
BLOCK_SIZE NUMBER
FILE_SIZE_BLKS NUMBER
|
SQL> select * fromv$controlfile
1
2
3
4
5
| STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
----------- ---------------------------------------------------- ---
/oracle/oradata/orcl/control01.ctl NO 16384 594
/oracle/flash_recovery_area/orcl/control02.ctl NO 16384 594
|
作为一个熟练的DBA,建议记住一些常用的动态性能表的作用和结构。
手动创建数据库时曾执行过一些脚本,这些脚本是数据库管理脚本,存放在$ORACLE_HOME/rdbms/admin中,联机文档Reference中对这些脚本有比较相信的介绍:
这些脚本的信息是可以分类的,其中以CAT开头的主要用来创建数据字典;以DBMS和PRVT开头的包都是用来增强数据库功能的包;UTL开头的脚本是一些工具包。
|