oracle内部有一部分表,记录了数据库对象的更改和修正。这些内部表有两种:静态数据字典、动态性能表。这些表是只读表,sys用户也不能修改,oracle自动修改
一、数据字典
1.1功能
- 数据库核心信息
- 只读表和只读视图
- sys用户拥有,可以通过sys看,普通用户也可以看user
- oracle server内部维护,ddl操作会更新数据字典
- 通过select访问,只读
- 记录数据库的物理结构、逻辑结构和模式信息和对象信息(用户、约束、权限、审计等)
- 存放在system tablespace
查询所有数据字典表的名称,以及数据字典表的个数。所有的数据字典信息都存在与dict表中
SQL> select * from dict where table_name='DBA_OBJECTS';
TABLE_NAME COMMENTS
---------------------------------------------------------------------
DBA_OBJECTS All objects in the database
SQL> select count(table_name) from dict;
COUNT(TABLE_NAME)
-----------------
4690
dict中有4690个系统表
1.2数据字典组成
字典基表:create tablebase时,执行$ORACLE_HOME/rdbms/admin/sql.bsq
静态试图:$ORACLE_HOME/rdbms/admin/catalog.sql
1.3 数据字典:静态试图
static ;open状态下访问,通过静态试图了解database架构(记录database架构,object的数据定义和存储等信息)
dba_:存储所有用户对象的信息(默认sys/system用户可以访问)
all_:存储当前用户可以访问的对象(包括当前用户所拥有的对象,以及别的用户授权可以访问的对象)的信息
user_:存储当前用户所拥有的对象的相关信息
二、动态性能表
2.1定义
用于维护当前实例信息,由于不断的更新,叫动态视图。
底层是一组虚拟的动态表,称X$表,oracle不允许直接访问X$表,而是访问这些表创建的视图的同义词。不可以直接访问,甚至不推荐访问视图,而是访问视图的同义词
基表(X$)---------视图(v_$)-----------同义词(v$)----------用户访问
每个v$视图都有一个GV$视图(RAC OPS用的),除特例情况
2.2基表查看
基表x$不可以直接访问
SQL> select file# from v$datafile;
FILE#
----------
1
2
3
4
5
7
8
7 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 3398306107
----------------------------------------------------------------------
------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
----------------------------------------------------------------------
------
| 0 | SELECT STATEMENT | | 4 | 24 | 0 (0)| 00:0
0:01 |
|* 1 | FIXED TABLE FULL| X$KCVDF | 4 | 24 | 0 (0)| 00:0
0:01 |
----------------------------------------------------------------------
------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("INST_ID"=USERENV('INSTANCE'))
Statistics
----------------------------------------------------------
21 recursive calls
0 db block gets
29 consistent gets
0 physical reads
0 redo size
641 bytes sent via SQL*Net to client
390 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
7 rows processed
2.3 v$fixed_table视图
可以通过访问v$fixed_table视图查到所有动态试图相关信息。
查询动态视图动态表
SQL> select name from v$fixed_table where name like '%DATA%';
NAME
--------------------------------------------------------------------------------------------
X$KRBPDATA
X$SHADOW_DATAFILE
X$DIAG_IPS_FILE_METADATA
X$DIAG_VIPS_FILE_METADATA
GV$DATABASE_KEY_INFO
V$DATABASE_KEY_INFO
查看动态试图个数
SQL> select count(*) from v$fixed_table;
COUNT(*)
----------
2898
共有2898个动态试图
注:
动态性能视图填充了来自实例(内存)和控制文件的信息,前缀为DBA_,all_,user_则是填充了来自数据字典的信息。由此可以得出不同阶段查询不同的视图。
静态试图在system数据表空间上,非open状态看不见