写点什么

ORACLE 进阶(三)数据字典详解

  • 2022 年 7 月 05 日
  • 本文字数:2330 字

    阅读完需:约 8 分钟

ORACLE进阶(三)数据字典详解

一、Oracle 数据字典

数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。  Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行性能,反映数据库运行的一些内在信息,所以在访问这类数据字典时往往不是一成不变的。以下分别就这两类数据字典来论述。

1.1 静态数据字典

这类数据字典主要是由表和视图组成,应该注意的是,数据字典中的表是不能直接被访问的,但是可以访问数据字典中的视图。静态数据字典中的视图分为三类,它们分别由三个前缀够成:user_*all_*dba_*


  • user_* :该视图存储了关于当前用户所拥有的对象的信息。(即所有在该用户模式下的对象)

  • all_*: 该试图存储了当前用户能够访问的对象的信息。(与user_*相比,all_* 并不需要拥有该对象,只需要具有访问该对象的权限即可)

  • dba_*: 该视图存储了数据库中所有对象的信息。(前提是当前用户具有访问这些数据库的权限,一般来说必须具有管理员权限)


从上面的描述可以看出,三者之间存储的数据肯定会有重叠,其实它们除了访问范围的不同以外(因为权限不一样,所以访问对象的范围不一样),其他均具有一致性。具体来说,由于数据字典视图是由SYS(系统用户)所拥有的,所以在缺省情况下,只有 SYS 和拥有 DBA 系统权限的用户可以看到所有的视图。没有 DBA 权限的用户只能看到user_*all_*视图。如果没有被授予相关的SELECT权限的话,他们是不能看到 dba_*视图的。


由于三者具有相似性,下面以user_为例介绍几个常用的静态视图


  • user_users视图:主要描述当前用户的信息,主要包括当前用户名、帐户 id、帐户状态、表空间名、创建时间等。例如执行下列命令即可返回这些信息。


select * from user_users
复制代码


  • user_tables视图:主要描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。通过此视图可以清楚了解当前用户可以操作的表有哪些。执行命令为:select * from user_tables

  • user_objects视图:主要描述当前用户拥有的所有对象的信息,对象包括表、视图、存储过程、触发器、包、索引、序列等。该视图比user_tables视图更加全面。例如, 需要获取一个名为“package1”的对象类型和其状态的信息,可以执行下面命令:select object_type,status from user_objects where object_name=upper(‘package1’);


注意:upper 的使用,数据字典里的所有对象均为大写形式,而 PL/SQL 里不是大小写敏感的,所以在实际操作中一定要注意大小写匹配。


  • user_tab_privs视图:该视图主要是存储当前用户下对所有表的权限信息。比如,为了了解当前用户对 table1 的权限信息,可以执行如下命令:


select * from user_tab_privs where table_name=upper('table1')
复制代码


了解了当前用户对该表的权限之后就可以清楚的知道,哪些操作可以执行,哪些操作不能执行。


前面的视图均为 user_开头的,其实 all_开头的也完全是一样的,只是列出来的信息是当前用户可以访问的对象而不是当前用户拥有的对象。对于 dba_开头的需要管理员权限,其他用法也完全一样,这里就不再赘述了。

1.2 动态数据字典

Oracle 包含了一些潜在的由系统管理员如 SYS 维护的表和视图,由于当数据库运行的时候它们会不断进行更新,所以称它们为动态数据字典(或者是动态性能视图)。这些视图提供了关于内存和磁盘的运行情况,所以我们只能对其进行只读访问而不能修改它们。


Oracle 中这些动态性能视图都是以v$开头的视图,比如v$access。下面就几个主要的动态性能视图进行介绍。


  • v$access:该视图显示数据库中锁定的数据库对象以及访问这些对象的会话对象(session 对象)。


运行如下命令:


select * from v$access
复制代码


结果如下:(因记录较多,故这里只是节选了部分记录)


SIDOWNER  OBJECT  TYPE27  DKH  V$ACCESS  CURSOR27  PUBLIC  V$ACCESS  SYNONYM27  SYS  DBMS_APPLICATION_INFO  PACKAGE27  SYS  GV$ACCESS  VIEW
复制代码


  • v$session:该视图列出当前会话的详细信息。由于该视图字段较多,这里就不列详细字段,为了解详细信息,可以直接在 sql*plus 命令行下键入:desc v$session即可。

  • v$active_instance:该视图主要描述当前数据库下的活动的实例的信息。依然可以使用 select 语句来观察该信息。

  • v$context:该视图列出当前会话的属性信息。比如命名空间、属性值等。

1.3 小结

以上是 Oracle 的数据字典方面的基本内容,还有很多有用视图因为篇幅原因这里不能一一讲解,希望大家在平时使用中多留心。总之,运用好数据字典技术,可以让数据库开发人员能够更好的了解数据库的全貌,这样对于数据库优化、管理等有极大的帮助。

二、Oracle 中常用数据字典

下面列出的这些数据字典,均在 Oracle 11g R1 上,通过 Oracle Sql Developer 进行过测试的,全部通过。其中很多的数据字典都必须以 system 或者是 sysdba 用户登录才能够使用的。


---数据库实例的基本信息 desc v$instance; select * from v$instance;
--数据文件的基本信息 desc v$datafile; select * from v$datafile; desc dba_data_files; select file_name,file_id,tablespace_name,bytes,blocks, tatus,online_status from dba_data_files;
--临时文件的基本信息 desc dba_temp_files; select file_name,file_id,tablespace_name,status, from dba_temp_files;
--控制文件的基本信息 desc v$controlfile; select name,status,is_recovery_dest_file, block_size,file_size_blks from v$controlfile;
--日志文件的基本信息 desc v$logfile; select group#,status,type,member,is_recovery_dest_file from v$logfile;
复制代码


发布于: 刚刚阅读数: 4
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
ORACLE进阶(三)数据字典详解_oracle_No Silver Bullet_InfoQ写作社区