Oracle系列之二:Oracle数据字典

简介: Oracle系列之二:Oracle数据字典


1. 什么是Oracle数据字典

数据字典(Data Dictionary)是Oracle元数据(Metadata)的存储地点,汇集了数据库对象及数据库运行时需要的基础信息。Oracle RDBMS使用数据字典记录和管理对象信息和安全信息,用户可以通过数据字典获取数据库相关信息,从而进行数据库管理、优化和维护工作。

2. 数据字典的内容

数据字典包括以下内容:

  • 所有数据库Schema对象的定义(表、视图、索引、聚簇、同义词、序列、过程、函数、包、触发器等);
  • Oracle用户名称、角色、权限等信息;
  • 完整性约束信息;
  • 数据库的空间分配和使用情况;
  • 字段缺省值;
  • 审计信息;
  • 其他数据库信息。

Oracle字典包括四个层次,分别为内部RDBMS表(X)、基础数据字典表、数据字典视图和动态性能视图( V )、基础数据字典表、数据字典视图和动态性能视图(V)、基础数据字典表、数据字典视图和动态性能视图(V)。

(1)X$表

X$表是Oracle数据库的核心部分,用于跟踪内部数据库信息,维持数据库正常运行,在数据库启动时由Oracle应用程序动态创建,不允许SYSDBA之外的用户直接访问。X$表是加密命名的且不作文档说明。Oracle通过X$建立起其他大量视图,供用户查询管理数据库之用。

(2)数据字典表、数据字典视图

数据字典表(Data Dictionary Table)用以存储表、索引、约束以及其他数据库结构的信息,

表名都用$结尾(如tab$、obj$、ts$等),在创建数据库的时候通过运行sql.bsq$ORACLE_HOME/RDBMS/admin目录下)脚本来创建。

数据字典表的用户都是sys,存在在system这个表空间里,Oracle对这些数据字典都分别建立了数据字典视图,Oracle针对这些对象的范围,分别把视图命名为DBA_XXXXALL_XXXXUSER_XXXX,dictionary视图记录了所有的数据字典视图的名称。

  • user_类视图:描述了当前用户schema下的对象;
  • all_类视图:描述了当前用户有权限访问到的所有对象的信息;
  • dba_类视图:包括了所有数据库对象的信息;

通常USER_类视图不包含Owner字段,查询返回当前用户的对象信息。

e.g.

SQL> select username from all_users; //查询所有用户
SQL> select username from dba_users; //查询dba用户
SQL> select table_name from user_tables;  //查询当前用户的表
SQL> select table_name from all_tables;  //查询所有用户的表
SQL> select table_name from dba_tables;  //查询包括系统表
SQL> select owner,constraint_name,constraint_type,table_name from user_constraints; 
SQL> select owner,constraint_name,constraint_type,table_name from all_ constraints; 
SQL> select owner,constraint_name,constraint_type,table_name from dba_ constraints ;

(3)动态性能视图

动态性能(V$)视图(Dynamic Performance View)记录了数据库运行时的信息和统计数据。

创建X$表之后,Oracle创建了GV$和V$视图,在GV$和V$之后,Oracle建立了GV_$和V_$视图,随后为这些视图建立了公共同义词。这些工作都是通过catalog.sql脚本实现的。通过V_$视图,Oracle把V$视图和普通用户隔离,V_$视图的权限可以授予其他用户,而Oracle不允许任何对于V$视图的直接授权。Oracle提供了一些特殊视图用以记录其他视图创建方式,如v$fixed_view_defition,可以查看视图的定义。

SQL> select view_definition from v\$fixed_view_definition where view_name ='V$NLS_PARAMETERS';

3. 数据字典应用示例

(1)查询表的信息

查询DBA_TABLES视图可以获取所有表的信息,包括表名、表空间、拥有者等等。例如,以下查询语句可以获取所有表的表名和表空间:

SQL> SELECT table_name, tablespace_name FROM dba_tables;

(2)查询索引的信息

查询DBA_INDEXES视图可以获取所有索引的信息,包括索引名、所属表、索引类型等等。例如,以下查询语句可以获取所有索引的信息:

SQL> SELECT index_name, table_name, index_type FROM dba_indexes;

(3)查询用户的信息

查询DBA_USERS视图可以获取所有用户的信息,包括用户名、默认表空间、临时表空间等等。例如,以下查询语句可以获取所有用户的用户名和默认表空间:

SQL> SELECT username, default_tablespace FROM dba_users;

(4)查询表空间的信息

查询DBA_TABLESPACES视图可以获取所有表空间的信息,包括表空间名、块大小、状态等等。例如,以下查询语句可以获取所有表空间的表空间名和状态:

SQL> SELECT tablespace_name, status FROM dba_tablespaces;

(5)查询数据文件的信息

查询DBA_DATA_FILES视图可以获取所有数据文件的信息,包括数据文件名、表空间名、文件大小等等。例如,以下查询语句可以获取所有数据文件的数据文件名和文件大小:

SQL> SELECT file_name, bytes FROM dba_data_files;

(6) 查询数据库的性能数据

查询DBA_HIST_SNAPSHOT视图可以获取数据库的历史性能数据,包括CPU利用率、内存利用率、I/O等等。例如,以下查询语句可以获取数据库的CPU利用率和内存利用率:

SQL> SELECT begin_interval_time, end_interval_time, cpu_usage, memory_usage
FROM dba_hist_sysmetric_summary
WHERE metric_name IN ('CPU Usage Per Sec', 'Memory Usage Per Sec')
ORDER BY begin_interval_time;
相关文章
|
10月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
在YMP校验过程中,从yashandb同步至Oracle的数据出现timestamp(0)字段不一致问题。原因是yashandb的timestamp(x)存储为固定6位小数,而Oracle的timestamp(0)无小数位,同步时会截断yashandb的6位小数,导致数据差异。受影响版本:yashandb 23.2.7.101、YMP 23.3.1.3、YDS联调版本。此问题会导致YMP校验数据内容不一致。
|
11月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有 YashanDB 版本。原因是操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常源于 system() 函数调用失败,返回 -1,通常是因为 fork() 失败。未来 YashanDB 将优化日志信息以更好地诊断类似问题。
|
10月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
本文介绍通过Flink CDC实现Oracle数据实时同步至崖山数据库(YashanDB)的方法,支持全量与增量同步,并涵盖新增、修改和删除的DML操作。内容包括环境准备(如JDK、Flink版本等)、Oracle日志归档启用、用户权限配置、增量日志记录设置、元数据迁移、Flink安装与配置、生成Flink SQL文件、Streampark部署,以及创建和启动实时同步任务的具体步骤。适合需要跨数据库实时同步方案的技术人员参考。
【YashanDB知识库】Flink CDC实时同步Oracle数据到崖山
|
10月前
|
存储 Oracle 关系型数据库
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
【YashanDB 知识库】YMP 校验从 yashandb 同步到 oracle 的数据时,字段 timestamp(0) 出现不一致
|
10月前
|
Oracle 关系型数据库 Linux
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常
|
11月前
|
Oracle 关系型数据库 Linux
【YashanDB 知识库】通过 dblink 查询 Oracle 数据时报 YAS-07301 异常
某客户在使用 YashanDB 通过 yasql 查询 Oracle 数据时,遇到 `YAS-07301 external module timeout` 异常,导致 dblink 功能无法正常使用,影响所有版本。问题源于操作系统资源紧张,无法 fork 新子进程。解决方法包括释放内存、停掉不必要的进程或增大进程数上限。分析发现异常原因为系统调用 fork() 失败。经验总结:优化日志记录,提供更多异常信息。
|
10月前
|
存储 Oracle 关系型数据库
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
【YashanDB知识库】YMP校验从yashandb同步到oracle的数据时,字段timestamp(0)出现不一致
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
216 2
【赵渝强老师】Oracle的还原数据
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
225 0
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
154 0

推荐镜像

更多