第五章 使用数据字典和动态性能视图

数据字典

任务目标:
  • 识别内置数据库对象
  • 识别数据字典的内容和用途
  • 描述如何创建数据字典视图
  • 识别数据字典视图类别
  • 查询数据字典和动态性能视图
  • 描述管理脚本命名约定

数据库创建的对象

  1. 表(Tables):表是数据库中存储数据的基本结构,用于组织和存储数据。表由行和列组成,每列定义了表中存储的数据类型和约束条件。

  2. 视图(Views):视图是基于一个或多个表的查询结果集,类似于虚拟表。视图可以简化复杂查询、隐藏数据细节,并提供安全性控制。

  3. 索引(Indexes):索引是对表中的列或列组合进行排序的数据结构,用于加快数据检索速度。通过索引,可以快速定位和访问表中的数据。

  4. 序列(Sequences):序列是数据库中生成唯一数字序列的对象,通常用于生成主键值或其他需要唯一标识的值。

  5. 存储过程(Stored Procedures):存储过程是一组预编译的 SQL 语句集合,存储在数据库中并可以被多次调用。存储过程可以实现复杂的业务逻辑和数据处理。

  6. 触发器(Triggers):触发器是与表相关联的数据库对象,当表上发生特定事件(如插入、更新、删除)时触发执行特定的操作。

  7. 包(Packages):包是存储过程、函数、变量和游标等数据库对象的集合,用于封装和组织相关的数据库逻辑。

  8. 用户定义类型(User-Defined Types):用户定义类型是用户自定义的数据类型,可以在数据库中创建并用于表的列定义或存储过程参数等。

数据字典

Oracle 数据字典是 Oracle 数据库中的一组特殊表和视图,用于存储有关数据库对象的元数据信息。这些数据字典提供了对数据库结构的详细描述,包括表、视图、索引、约束、列等对象的定义和属性。通过查询数据字典,用户可以了解数据库对象的结构、依赖关系和权限信息,有助于数据库管理、查询优化和安全性控制。

  • 是每个Oracle数据库的中心
  • 描述了数据库及其对象
  • 包含只读表和视图
  • 存储在system表空间中
  • 属于用户SYS
  • 由Oracle服务器维护
  • 通过select访问
数据字典的两部分
  • 基表
    存储了对数据库的描述
    使用CREATE DATABASE创建
  • 数据字典视图
    永固简化基表信息
    通过公共同义词访问 Accessed through public synonyms
    使用catalog.sql脚本创建

catalog.sql 用于创建常用的数据字典视图和同义词

catproc.sql 用于服务器端PL/SQL所需的脚本

  • 数据字典提供以下的信息
    逻辑和物理数据库结构、对象的定义和空间分配、完整性约束、用户、角色、特权、审计
数据字典的用途
  • Oracle服务器使用它来查找有关的信息(用户、模式对象、存储结构)
  • Oracle服务器在执行DDL语句的时候修改它
  • 用户和dba将其用作有关数据库信息的只读引用

三组静态视图

在 Oracle 数据库中,三组静态视图指的是 DBAALLUSER 这三种视图的分类。这些视图是 Oracle 数据字典中的一部分,用于提供关于数据库对象(如表、视图、索引等)的元数据信息。它们的主要区别在于提供的对象范围和访问权限:

  1. DBA 视图 :以 DBA_ 开头的视图,提供了数据库中所有模式(schemas)的对象信息,包括所有用户创建的对象。只有具有 DBA 权限的用户才能访问这些视图,用于管理整个数据库的对象。

  2. ALL 视图 :以 ALL_ 开头的视图,提供了当前用户可以访问的所有对象的信息,包括其他用户的对象。这些视图显示了当前用户有权限访问的对象,但不包括所有对象。通常用于查询当前用户可以查看的对象信息。

  3. USER 视图 :以 USER_ 开头的视图,提供了当前用户模式(schema)中的对象信息。这些视图显示了当前用户拥有的对象,不需要额外的权限即可访问。通常用于查询当前用户自己创建的对象信息。

使用desc来查看上边的表

sql 复制代码
desc all_tables;

其他的视图

1. DICTIONARY

  • 概述:数据字典是 Oracle 数据库的核心组件,包含了数据库的元数据。它提供了关于数据库对象(如表、视图、索引、用户等)的信息。
  • 用途:用于查询数据库结构和对象的属性,帮助用户理解数据库的设计和配置。

2. DICT_COLUMNS

  • 概述:这是一个视图,提供了数据字典中各个对象的列信息。
  • 用途:用于获取数据字典中所有对象的列名、数据类型及其他属性。

3. DBA_TABLES

  • 概述:提供数据库中所有表的详细信息。
  • 主要字段
    • TABLE_NAME:表名
    • OWNER:表的拥有者
    • TABLESPACE_NAME:表所在的表空间
    • NUM_ROWS:表中的行数
    • CREATED:表的创建时间
  • 用途:用于管理和监控数据库中的表。

4. DBA_INDEXES

  • 概述:提供数据库中所有索引的详细信息。
  • 主要字段
    • INDEX_NAME:索引名
    • TABLE_NAME:索引所关联的表名
    • UNIQUENESS:索引是否唯一
    • INDEX_TYPE:索引类型(如 B-tree、Bitmap 等)
  • 用途:用于优化查询性能,了解索引的使用情况。

5. DBA_TAB_COLUMNS

  • 概述:提供数据库中所有表的列信息。
  • 主要字段
    • TABLE_NAME:表名
    • COLUMN_NAME:列名
    • DATA_TYPE:数据类型
    • DATA_LENGTH:数据长度
    • NULLABLE:是否允许 NULL 值
  • 用途:用于查看表的结构,帮助开发人员理解数据模型。

6. DBA_CONSTRAINTS

  • 概述:提供数据库中所有约束的信息。
  • 主要字段
    • CONSTRAINT_NAME:约束名
    • TABLE_NAME:约束所关联的表名
    • CONSTRAINT_TYPE:约束类型(如 P:主键,F:外键,U:唯一约束)
    • SEARCH_CONDITION:约束条件
  • 用途:用于管理数据完整性,确保数据的有效性和一致性。

7. DBA_TABLESPACES

  • 概述:提供数据库中所有表空间的详细信息。
  • 主要字段
    • TABLESPACE_NAME:表空间名
    • STATUS:表空间状态(如 ONLINE、OFFLINE)
    • BLOCK_SIZE:块大小
    • INITIAL_EXTENT:初始扩展大小
  • 用途:用于管理数据库的存储结构,监控表空间的使用情况。

8. DBA_DATA_FILES

  • 概述:提供数据库中所有数据文件的信息。
  • 主要字段
    • FILE_NAME:数据文件名
    • TABLESPACE_NAME:所属表空间
    • BYTES:文件大小(以字节为单位)
    • STATUS:文件状态(如 ONLINE、OFFLINE)
  • 用途:用于监控和管理数据库的物理存储,确保数据文件的可用性。

动态性能表

介绍

  • 是一个虚拟表
  • 记录当前数据库活动
  • 在数据库运行时不断更新
  • 从内存和控制文件访问信息
  • 用于监视和调优数据库
  • 归属sys用户所有
  • 在以vs开头的同义词
  • 在v$FIXED_TABLE中列出
sql 复制代码
 SQL> desc v$fixed_table;
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME						    VARCHAR2(30)
 OBJECT_ID					    NUMBER
 TYPE						    VARCHAR2(5)
 TABLE_NUM					    NUMBER

描述一个表或视图的结构。在您提供的输出中,描述了一个名为 V$FIXED_TABLE 的视图的结构,具体如下:

  • NAME:列名,数据类型为 VARCHAR2(30)。
  • OBJECT_ID:列名,数据类型为 NUMBER。
  • TYPE:列名,数据类型为 VARCHAR2(5)。
  • TABLE_NUM:列名,数据类型为 NUMBER。

其他的表

当然,让我更详细地向您介绍您提到的这些 Oracle 数据库中的动态性能视图或系统视图:

  1. V$CONTROLFILE

    • 描述:提供了有关数据库控制文件的信息,包括控制文件的路径、大小、状态等。
    • 常用字段
      • NAME:控制文件的名称
      • STATUS:控制文件的状态
      • CREATION_CHANGE#:控制文件的创建 SCN 号码
      • BYTES:控制文件的大小
  2. V$DATABASE

    • 描述:提供了有关当前数据库的信息,如数据库名称、数据库 ID、数据库版本等。
    • 常用字段
      • NAME:数据库名称
      • DBID:数据库 ID
      • CREATED:数据库创建时间
      • VERSION:数据库版本号
  3. V$DATAFILE

    • 描述:提供了有关数据文件的信息,包括数据文件的路径、大小、状态等。
    • 常用字段
      • FILE#:数据文件编号
      • NAME:数据文件路径
      • STATUS:数据文件状态
      • BYTES:数据文件大小
  4. V$INSTANCE

    • 描述:提供了有关数据库实例的信息,如实例名称、启动时间、当前状态等。
    • 常用字段
      • INSTANCE_NAME:实例名称
      • STARTUP_TIME:实例启动时间
      • STATUS:实例状态(OPEN、MOUNTED、CLOSED)
  5. V$PARAMETER

    • 描述:提供了有关数据库参数的信息,包括初始化参数的名称、值、描述等。
    • 常用字段
      • NAME:参数名称
      • VALUE:参数值
      • DESCRIPTION:参数描述
  6. V$SESSION

    • 描述:提供了有关当前会话的信息,如会话 ID、用户名、状态等。
    • 常用字段
      • SID:会话 ID
      • USERNAME:会话用户名
      • STATUS:会话状态(ACTIVE、INACTIVE)
  7. V$SGA

    • 描述:提供了有关系统全局区域(SGA)的信息,包括 SGA 的大小、组件、使用情况等。
    • 常用字段
      • NAME:SGA 组件名称
      • BYTES:SGA 组件大小
      • USED:SGA 组件已使用大小
  8. V$TABLESPACE

    • 描述:提供了有关表空间的信息,包括表空间名称、大小、使用情况等。
    • 常用字段
      • TABLESPACE_NAME:表空间名称
      • BYTES:表空间大小
      • USED_SPACE:已使用空间大小
  9. V$THREAD

    • 描述:提供了有关数据库线程的信息,如线程 ID、状态、角色等。
    • 常用字段
      • THREAD#:线程编号
      • STATUS:线程状态
      • ROLE:线程角色(PRIMARY、STANDBY)
  10. V$VERSION

    • 描述:提供了有关数据库版本的信息,包括数据库版本号、发布日期等。
    • 常用字段
      • BANNER:数据库版本横幅
      • VERSION:数据库版本号
      • RELEASE:数据库发布日期
  11. $SPPARAMETER

    • 描述:提供了有关数据库的服务器参数的信息,包括服务器参数的名称、值、描述等。
    • 常用字段
      • NAME:参数名称
      • VALUE:参数值
      • DESCRIPTION:参数描述
  12. VSTABLESPACE

    • 描述:提供了有关表空间的信息,包括表空间名称、数据文件、大小等。
    • 常用字段
      • TABLESPACE_NAME:表空间名称
      • FILE_NAME:数据文件名
      • BYTES:表空间大小
  13. VSTHREAD

    • 描述:提供了有关数据库线程的信息,如线程 ID、状态、角色等。
    • 常用字段
      • THREAD#:线程编号
      • STATUS:线程状态
      • ROLE:线程角色(PRIMARY、STANDBY)
  14. VSVERSION

    • 描述:提供了有关数据库版本的信息,包括数据库版本号、发布日期等。
    • 常用字段
      • BANNER:数据库版本横幅
      • VERSION:数据库版本号
      • RELEASE:数据库发布日期

管理脚本命名

  1. cat*.sql:用于提取目录和数据字典信息的脚本,以 "cat" 开头,后跟描述性名称,以 ".sql" 结尾。

  2. dbms*.sql:包含数据库包规范说明的脚本,以 "dbms" 开头,后跟描述性名称,以 ".sql" 结尾。

  3. prvt*.plb:包含封装数据库包代码的脚本,以 "prvt" 开头,后跟描述性名称,以 ".plb" 结尾。

  4. utl*.sql:包含数据库实用程序视图和表的脚本,以 "utl" 开头,后跟描述性名称,以 ".sql" 结尾。

相关推荐
猿小喵9 分钟前
记录一次从库并行回放出现死锁的问题
数据库·mysql·tdsql
随风,奔跑16 分钟前
Redis
数据库·redis·缓存
IvorySQL18 分钟前
2MB 的 PostgreSQL work_mem,如何吃掉 2TB 内存?
数据库·postgresql·开源
桑榆肖物19 分钟前
有字幕,没配音?用浏览器自带语音能力,让网页视频直接“开口说话”
数据库·edge·音视频·tts
熬夜的咕噜猫1 小时前
MySQL主从复制与读写分离
网络·数据库·mysql
道清茗1 小时前
【MySQL知识点问答题】 备份技术、Invisible Indexes 和直方图的应用
数据库·mysql
芒果披萨1 小时前
sql存储过程
java·开发语言·数据库
jnrjian1 小时前
RAC 去除node的建议 dbca 和手动方法
数据库·oracle
TlYf NTLE1 小时前
redis分页查询
数据库·redis·缓存
翻斗包菜1 小时前
MySQL 全量、增量备份与恢复实战指南(含 mysqldump + binlog + XtraBackup)
数据库·oracle