赵强老师什么是Oracle的数据字典

6次阅读

共计 1835 个字符,预计需要花费 5 分钟才能阅读完成。

数据字典是 oracle 寄存无关数据库信息的中央,简直所有的零碎信息和对象信息都可在数据字典中进行查问。数据字典是 oracle 数据库系统的信息外围,它是一组提供无关数据库信息的表和视图的汇合,这些表和视图是只读的。它是随着数据库的建设而建设的,当数据库执行特定动作时数据字典也会自动更新。数据一览与数据字典来记录、校验和治理正在进行的操作。

Oracle 中,sys 用户是数据字典的拥有者,数据字典保障在所有数据库的零碎表空间 system 内,任何用户都无权更改 sys 模式下的模式对象或数据字典中的行。也就是说数据字典只能查问,不能手动进行批改。

一、数据字典用处

Oracle 通过存取数据字典从而比拟不便地获取无关用户某事对象和存储构造等信息。当零碎执行了 DDL 语句后,oracle 会及时批改数据字典。任何用户只能以读的模式应用数据字典获取数据库信息。

二、数据字典存储的信息

  • 数据用户的名称
  • 为用户授予的权限和角色
  • 模式对象的名。
  • 完整性束缚的具体信息;
  • 每个字段的默认值;
  • 数据库空间的应用状况;
  • 存储审计的信息
  • 对象与用户的严格管理 (实用于高度机密治理);
  • 其余个别数据库信息

三、四种前缀的数据字典视图

  • user_:任何用户都能够读取的视图,每个用户读取的都不一样,它只提供以后用户某事下的对象信息。
 如查问以后模式下的所有对象:select object_name, object_type from user_objects;
  • all_:所有用户都可读取的用户视图,它提供与用户无关的对象信息。
 如查问以后用户可拜访的所有对象:select owner, object_name, object_type from all_objects;
  • dba_:提供了只有数据库管理员才可读取的视图,包含所有用户视图中的对象信息。
 如:select owner, object_name, object_type from sys.dba_objects;
  • v$:动静性能视图

动静性能视图用于记录以后例程的流动信息,当启动 oracle server 时,零碎会建设动静性能视图;当进行 oracle server 时,零碎会删除动静性能视图,oracle 的所有动静性能视图都是以 v_$ 开始的,并且 oracle 为每个动静性能视图都提供例了相应的同义词,并且同义词是以 v$ 开始的,例如_$datefile 的同义词为 v$datefile;动静性能视图的所有者为 sys,个别状况下,由 DBA 或是特权用户来查问动静性能视图。

四、查问数据字典示例

  • 查问用户相干的数据字典
 查问用户
select username from dba_users; -- 只有管理员权限的用户能力查问
select username from all_users; -- 以后或任何用户都可应用

-- 查看以后用户的默认表空间
select username, default_tablespace from user_users;

-- 以后用户角色
select * from user_role_privs;

-- 以后用户的零碎权限和表级权限
select * from user_sys_privs;
select * from user_tab_privs;
  • 查问表空间相干的数据字典(领有 DBA 权限的用户能力查问)
select * from dba_data_files;
select * from dba_tablespaces; -- 表空间
select tablespace_name, sum(bytes), sum(blocks) from dba_free_space group by tablespace_name; -- 闲暇表空间
select * from dba_data_files where tablespace_name='USERS'; -- 表空间对于的数据文件
select * from dba_segments where tablespace_name='USERS';

-- 查问用户模式对象所应用过的正在应用空间大小
select name, type, source_size, code_size from user_object_size;
  • 查询数据库对象(领有 DBA 权限的用户能力查问)
select * from dba_objects
select * from dba_objects where object_type = upper('package body');
select * from dba_objects where OBJECT_TYPE='TABLE' and OWNER='SCOTT'

正文完
 0