重要性:
因为数据字典中有用户的信息,我们登录的时候要查询数据字典,有权限信息,我们做操作的时候也要查询数据字典,有约束信息
我们操作数据的时候也要查询数据字典,所以数据字典对于oracle数据库非常重要。
主要了解数据库的一些内建的对象,数据字典的了解和使用,数据字典的view是如何创建,学会查询这些表。
数据字典主要描述数据库和它的对象,包含只读表和视图,这些只读表和视图存储在system表空间中,有oracle server自动
进行维护,普通用户没有权限查看,oralce DBA也只能查看而已。 这些表的是属于sys用户的。只能select访问。
主要学习oralce 的数据字典 和 动态性能表部分
数据字典在oracle中有很重要的作用,是一个提供oralce信息的只读的表,数据字典包含:
一:数据字典包含什么信息
1:数据库中所有schema 对象的定义包括(tables, views, indexes, clusters, synonyms, sequences, procedures, functions, packages, triggers, and so on)
2:schema object对象已经分配了多少空间,当前使用了多少空间
3:存储了数据库结构的物理和逻辑结构
4:数据的完整性约束信息
5:用户的信息,角色信息,权限信息 以及审计 和 对象空间的分配情况。
数据字典由 表和视图构成,所有数据字典表的表和视图在存储空间由system表空间提供。
数据字典不仅对于数据库很重要,对于用户,dba 等都很重要,只能使用SQL语句访问数据字典,因为数据字典是只读的,只能通过SELECT语句访问这些表和view
二:数据字典的构成:
数据字典主要包含如下两个部分:
1: Base tables 基表
存储数据库的描述,当执行 create database的时候就确定了。创建基表的脚本:sql.bsq 当创建数据库的时候,这个脚本会自动调用创建基表。
这个脚本在 ORACLE_HOME/rdbms/admin下面,有兴趣的可以去看看,我的oracle这个的地址为:
D:\app\topwqp\product\11.1.0\db_1\RDBMS\ADMIN
这些基表的信息比较神秘,一般不要动,即使是DBA一般也不要操作表。
2: data dictionary views(用户可访问的views)
这些视图总结和显示数据字典的base table的信息,这些视图把base table中的信息转化为更直观更需要的信息,
大部分用户是需要访问 views 而不是base table
主要这个views的视图的创建是通过在创建视图后执行catalog.sql脚本生成的数据字典视图,
这个脚本的位置也在:D:\app\topwqp\product\11.1.0\db_1\RDBMS\ADMIN
data dictionary view 是一个静态view 因为改动小,不是不改动,而是改动很少。
下图说明了两个分类:
什么时间数据字典会改动呢?
当使用DDL(DATA DEFINE LANGUAGE)语言的时候,ORACLE SERVER会修改数据字典的信息,比如 创建表 ,删除表,添加约束和 索引等。数据字典的owner(所有者)是SYS 用户,其他用户不能修改这个用户的信息,所以安全性很高。
注意:修改和操作数据字典表也许会长期影响数据的操作。所以需慎重。
三:数据字典的使用
如何使用数据字典呢?
数据字典有三个主要的用处:
1:oracle 在找用户的信息,schema对象,和存储结构的时候需要数据字典
2:每次操作DDL(Data definition language)的时候,oracle server会修改数据字典的信息
3:一些授权的oralce用户能够通过select语句查看数据字典的信息。
PS 数据字典多使用同义的别名,使用Cache 加快访问
如何使用数据字典:
所有的数据库用户能够访问数据字典view,通过SQL语句进行访问,一些视图能够被所有的 的用户访问,但是也有些视图只能被DBA访问。
当数据库是open状态的时候,数据字典就可以访问了,数据字典中包含很多views,在这些视图中大概分为3中类型的视图,不同类型的views信息有不同 的前缀。
下面是很好的说明:
Prefix | Scope |
---|---|
| User's view (what is in the user's schema) |
| Expanded user's view (what the user can access) |
| Database administrator's view (what is in all users' schemas) |
不同视图的区别:
含有USER前缀的视图通常不包含 OWNER这一列,这一列用户通常不能看到。
一些DBA前缀的视图包含更多列的信息。
三个主要的区别就是部分列的信息不同。
USER_XXX
这个视图主要描述user关心的信息:
1:有用户自己在数据库中的私有环境,包括被用户创建的schema对象信息 和用户的权限信息。
2:显示用户和用户相关的列
3:和 ALL_XXX 的view相比没有OWNER列,其他都一致。
4:根据第三条返回的结果当然是 ALL_VIEW的子集了 subset 简直是废话;
例如:SELECT object_name, object_type FROM USER_OBJECTS;
ALL_XXX
SELECT owner, object_name, object_type FROM ALL_OBJECTS;
DBA_XXX
SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS;
数据字典一览表: select table_name from dictionary;
动态性能视图(dynamic performance V$ views)
1:virtural tables 数据库信息以表的形式展示出来
2:记录了数据库当前的活动情况
3:当操作的时候会时不时的更新
4:动态性能表的信息来自 内存 和 控制文件中
5:主要作用: 监控和调优数据库
6:owner 所有者 : sys用户
7: 表名开始于V$
8:动态性能表的一览表在 V$FIXED_TABLE;
DESC v$FIXED_TABLE
一些常用的动态性能表:
V$contrllfile 系统中的控制文件
v$parameter 数据库参数信息
v$spparameter
v$SGA
V$TABLESPACE
V$THREAD
等表信息
在oracle online document中
动态视图对于实时的监控数据库的性能非常有用:
下面讲讨论三点:
1:动态视图的目的(为什么要有动态视图)
2:动态视图的体系
3:动态视图的使用
1:The purpose of the Dynamic Performance Views
动态视图能够实时监控oracle的内脏,就相当人的各部部分的健康等,监控oracle各个部分的性能。
数据字典和动态视图有什么不同呢?
这样想像一下:数据字典像一对零件,它列出了一个汽车的所有的部分,显示了这些汽车零件的在汽车中的位置这
很容易理解,如果你想替换其中的一些零件,如果你想调整汽车的速度,换零件是一个不可取的选择。
V$动态视图就像汽车的车速计和转速计,它将告诉我们当前汽车的速度多快,通过通过调速灯帮助我们调节速度,数据库也一样,动态视图提供了数据库各个部分状况的反馈。
2:动态性能视图的体系结构
动态性能视图是一种很低级的oracle视图,我们很少需要去访问它,这些视图叫做X$ ,这个视图反应了oracle内部的结构。
X$视图位于oracle的底层,一般不是高手不要访问了。V$是创建在X$之上的视图,我觉得V$视图是X$的同义,最好利用V$去查询。
V$视图的使用:
下面是一些使用V$视图的例子:
如果ORACLE DBA想知道 who 连接这个系统,下列查询能够满足这个要求:
SQL> select sid, serial#, username, osuser, machine from v$session
2 where username is not NULL;
注意 这个sid ,serial#列是一个连接到oracle数据库的用户一个标示。username是连接到数据库的用户名,OSUSER列显示连接到数据库的用户的操作系统名称,
在oracle中有很多动态性能视图,提供了很多有价值的信息。