逻辑和物理存储结构之间的关系

逻辑和物理存储结构之间的关系

物理数据库结构

Oracle数据库的主要物理结构包括:

  1. 数据文件:
  • 存储数据库对象数据,如表、索引的数据块。
  1. 控制文件:
  • 记录数据库结构信息,用于实例恢复。
  1. 联机重做日志文件:
  • 存储数据库事务操作产生的重做记录。
  1. 参数文件:
  • 描述数据库实例的参数配置信息。
  1. 口令文件:
  • 存储数据库用户的鉴权信息。
  1. 警告日志、跟踪文件:
  • 记录数据库运行时的错误、性能统计等信息。
  1. 归档重做日志文件:
  • 存档的重做日志,用于数据库恢复。
  1. 备份文件:
  • RMAN自动或手动生成的数据库备份文件。
  1. 导出文件:
  • 数据泵导出的转储文件。

这些文件和日志在磁盘上组织存储,构成了Oracle数据库的物理基础。

数据文件

Oracle数据库的数据文件是存储数据库实际数据的物理文件,它包含数据对象(如表、索引)的数据块。

数据文件的主要特征包括:

  • 由数据块组成 - 每个数据块对应一个OS块,默认是8KB。

  • 存储在磁盘上 - 数据库文件通常存放在磁盘或磁盘阵列中。

  • 可预先分配空间 - 创建表空间时可以指定数据文件大小。

  • 支持自动扩展 - 数据文件可以根据需要自动增大。

  • 每个表空间至少一个 - 表空间逻辑上包含一个或多个数据文件。

  • 主数据文件和可滚动文件 - 一般一个ReadOnly的主文件和若干可滚动文件。

  • 控制文件中记录结构 - 控制文件中维护每个数据文件信息。

  • 系统编号唯一标识 - 数据文件在数据库中有唯一的系统编号。

  • 支持不同块大小 - 可通过参数指定数据块大小。

  • 可存储多个对象 - 一个数据文件中可以存放多个表、索引等对象的数据。

控制文件

控制文件(Control File)是Oracle数据库非常重要的物理文件,它记录了数据库的物理结构和配置信息。

控制文件的主要作用包括:

  • 记录数据库名 - 控制文件存储创建数据库时定义的DB_NAME。

  • 记录数据文件信息 - 控制文件中维护每个数据文件的名称、路径、大小等信息。

  • 记录联机重做日志 - 记录所有联机重做日志文件的名称和序列号信息。

  • 记录备份恢复数据 - 包括存档日志及其应用信息,用于恢复。

  • 检查点信息 - 存储数据库检查点信息,如SCN、数据文件检查点等。

  • 存储数据库创建信息 - 包括创建时间,备份恢复历史等重要信息。

  • 唯一识别数据库 - 每个数据库只能拥有一个控制文件。

  • 多个控制文件副本 - 建议配置多个冗余控制文件,以防丢失。

  • 受管理的更改 - 只能通过SQL语句修改控制文件内容。

控制文件是数据库实例启动和恢复的基础。

联机重做日志文件

联机重做日志文件(Online Redo Log File)是Oracle数据库中存储重做日志记录的关键文件,用于保障数据库的事务完整性。

联机重做日志文件的主要特征包括:

  • 环形使用多个文件 - 通常配置两个或更多的重做日志文件组成环。

  • 存储重做日志记录 - 存储数据库交易产生的重做日志记录。

  • 支持恢复 - 重做日志记录可以用于实例恢复和崩溃恢复。

  • 启用崩溃恢复 - 当前填充的重做日志文件可以用于恢复。

  • LGWR进程管理 - 由后台LGWR进程负责写入日志记录。

  • 启用数据一致性 - 重做日志确保事务完成前的数据一致性。

  • 支持重复历史读 - 读一致性通过重做日志实现。

  • 启用并行重做 - 支持向多个重做日志组同时写日志。

  • 支持归档 - 已填满的日志文件被LGWR进程归档。

配置恰当的重做日志对保证Oracle数据库的高性能和完整性至关重要。

参数文件

参数文件(Parameter file)存储了Oracle数据库实例的配置信息和初始化参数。根据参数文件的参数设置,Oracle可以正确启动和运行数据库实例。

参数文件的主要特征包括:

  • 文本文件格式 - 包括参数名,参数值和注释。

  • 两种参数文件 - 服务器参数文件(SPFILE)和客户端参数文件(PFILE)。

  • 指定参数作用域 - 包括实例级参数和会话级参数。

  • 描述存储结构 - 记录数据文件,控制文件和联机日志的位置。

  • 内存配置 - 指定SGA, PGA等内存结构的大小。

  • 优化器设置 - 配置查询优化器的工作模式。

  • 安全和审计 - 设置安全认证,审计等内容。

  • 环境配置 - 如NLS,时间格式,时区等参数。

  • 兼容性与限制 - 针对不同版本的兼容性控制。

  • 修改方法 - 使用ALTER SYSTEM来动态修改参数文件。

  • 重要性 - 参数文件对数据库实例的正常运行至关关键。

口令文件

口令文件(Password File)在Oracle数据库中用于存储系统权限账户和一般账户的认证信息。

口令文件的主要特征包括:

  • 存储用户名密码 - 以加密形式存储数据库用户账号和口令。

  • 系统权限账户 - 记录SYS, SYSTEM等系统权限账户信息。

  • 本地认证使用 - 用于本地对用户身份进行验证。

  • 增强安全性 - 口令不直接存储在数据字典中。

  • 二进制文件格式 - 口令文件为操作系统的二进制文件。

  • 多个副本 - 可以配置多个口令文件副本,以防丢失。

  • ORAPWD utility - 使用ORAPWD实用工具管理口令文件。

  • 限制访问 - 口令文件默认只允许DBA组成员访问。

  • 数据字典交叉认证 - 数据字典中存储口令文件位置信息。

  • 远程登录需要 - 进行远程数据库登录时需要 mouth文件。

适当管理口令文件非常重要,以保证数据库安全。

警告日志、跟踪文件

Oracle数据库中的警告日志(Alert Log)和跟踪文件(Trace File)用于记录数据库运行时的重要信息。

警告日志的主要功能包括:

  • 记录错误信息 - 数据库运行错误,访问错误的详细记录。

  • 记录重要事件 - 数据库和实例启动,关闭事件等记录。

  • 性能统计信息 - 包括检查点,缓冲区使用等统计数据。

  • 后台进程信息 - 启动停止,异常终止等信息。

  • 管理操作记录 - 用户管理和维护操作的日志。

跟踪文件可以记录:

  • SQL语句解析和执行 - 用于SQL性能诊断。

  • 等待事件(Wait Event) - 数据库瓶颈的定位。

  • 错误堆栈 - 记录异常情况的调用栈信息。

  • 锁信息 - 包括争用,超时和死锁等锁事件。

适当分析日志和跟踪,对诊断和优化数据库的性能至关重要。

归档重做日志文件

归档重做日志文件(Archive Redo Log File)包含已经存档的重做日志块,用于数据库恢复。

归档日志文件的主要特征包括:

  • 包含填满的重做日志 - 已切换出的联机重做日志被归档。

  • 后台进程ARCH处理 - ARCn进程负责执行归档操作。

  • 支持恢复 - 提供实例恢复和介质恢复所需的日志记录。

  • 可选压缩 - 可启用归档日志的压缩选项。

  • 多个文件归档组 - 一个归档日志序列由多个文件组成。

  • 命名包含序列号 - 归档文件名中包含日志序列号信息。

  • 存储在特定目录 - 通过LOG_ARCHIVE_DEST参数指定目录。

  • 重复归档 - 可以将归档日志再次归档到其它位置。

  • 可删除已归档文件 - 验证后可删除已成功归档的日志。

  • 滚动方式 - 当前日志归档完后,切换至下一个日志文件。

配置正确的归档策略,对一个可靠的备份及恢复机制至关重要。

备份文件

备份文件是Oracle数据库通过RMAN(恢复管理器)生成的数据库备份集文件。

备份文件具有以下主要特征:

  • 包含备份数据 - 备份文件中包含了备份镜像或压缩过的数据。

  • 支持增量备份 - 通过增量备份,只备份更改过的数据块。

  • 支持压缩 - RMAN可在备份时进行数据压缩。

  • 校验备份一致性 - 在备份时会验证数据块的一致性。

  • 包含元数据信息 - 备份集中包含了所备份数据的元信息。

  • 支持加密 - 可在RMAN中对备份集进行加密。

  • 命名与标签 - RMAN自动为每个备份集命名,也可打标签。

  • 支持多种设备 - 可以备份到磁盘、磁带等不同介质上。

  • 支持恢复 - 备份文件可用于完全恢复和时间点恢复。

  • 可以拆分文件 - 一个大备份可分成多个备份文件。

导出文件

Oracle中的导出文件是通过数据泵导出实用程序(Data Pump)生成的可移植的数据文件,用于导出数据库对象和数据。

导出文件的主要特征包括:

  • 二进制格式 - 数据泵导出的文件为专有二进制格式。

  • 可移植 - 导出文件可以轻松导入到另一个数据库。

  • 增量导出 - 支持导出自上次导出后的更改。

  • 导出元数据 - 包括相关数据库对象的元数据定义。

  • 导出数据 - 将表中的实际数据导出。

  • 支持压缩 - 可以启用数据压缩选项减小文件大小。

  • 支持加密 - 可通过数据泵加密导出的数据。

  • 增强安全性 - 数据离开数据库后可防止未经授权的访问。

  • 支持多种目标 - 可以导出到磁盘文件,也支持通过管道传输。

  • 保留完整性 - 在目标数据库中可以完整还原导出的内容。

  • 方便数据迁移 - 导入导出文件可以轻松完成数据库迁移。

逻辑数据库结构

Oracle数据库的主要逻辑结构包括:

  1. 数据结构:
  • 表,视图等数据库对象,组织存储业务数据。
  1. 元数据结构:
  • 数据字典,包含了数据库对象、用户等元数据。
  1. 存储结构:
  • 表空间、段等逻辑存储单元,保存数据库对象。
  1. 程序结构:
  • 存储过程、函数、包、触发器等PL/SQL程序。
  1. 事务结构:
  • 保证数据库修改的完整性。
  1. 锁结构:
  • 控制并发访问数据库对象。
  1. SQL执行结构:
  • 解析、优化、执行SQL语句。
  1. 内存缓存结构:
  • 缓冲区、共享池等,加速访问。
  1. 网络结构:
  • 监听器、数据库链接支持网络连接。

这些逻辑结构决定了Oracle数据库系统的功能、性能以及实施业务逻辑的能力。

数据结构

Oracle数据库中的主要数据结构包括:

  1. 表(Table)
  • 存储数据记录的基本结构,包含行和列。
  1. 视图(View)
  • 虚拟表,显示查询结果,不存储实际数据。
  1. 索引(Index)
  • 提高查询速度的数据库对象,有B树索引,位图索引等。
  1. 同义词(Synonym)
  • 可替换表名的别名,隐藏基表信息。
  1. 序列(Sequence)
  • 生成连续编号的对象,通常用于主键。
  1. 物化视图(Materialized View)
  • 预先计算和存储查询结果的视图。
  1. 外部表(External Table)
  • 使用外部文件的数据的虚拟表。
  1. 分区表(Partitioned Table)
  • 将大表分解为多个分区以提高管理效率。

合理运用这些数据结构可以优化数据库的存储,查询性能,以及维护工作。

元数据结构

Oracle数据库的主要元数据结构包括:

  1. 数据字典
  • 存储数据库对象、用户、权限等元数据的信息库。
  1. 数据库目录
  • 描述数据库文件的物理存储信息。
  1. 全局数据字典
  • 在分布式数据库中,集中存储所有数据库字典信息。
  1. 系统表和视图
  • 以表和视图结构存储数据字典和数据库目录数据。
  1. V$动态性能视图
  • 提供数据库状态和性能统计信息的视图。
  1. 环回分析
  • 通过分析v$系统表来监控和优化数据库。
  1. DBA_表、ALL_表、USER_表
  • 存储每个用户可访问的字典对象和信息。
  1. 导出字典
  • 将字典对象结构和数据导出以便于分享和迁移。
  1. 字典缓存
  • 在SGA中缓存经常查询的字典数据。

元数据对于数据库正常运行以及数据库管理至关重要。

存储结构

Oracle数据库的主要存储结构包括:

  1. 表空间(Tablespace)
  • 逻辑存储单元,包含数据文件。
  1. 数据文件(Datafile)
  • 物理上存储数据块的操作系统文件。
  1. 段(Segment)
  • 表空间中存储表、索引等数据库对象的逻辑存储单元。
  1. 区(Extent)
  • 段中的一组连续数据块。
  1. 数据块(Data Block)
  • 数据库对象存储的最小逻辑单元。
  1. Slot
  • 数据块内部结构,存储行数据。
  1. LOB
  • 存储大对象的内部结构。
  1. 簇(Cluster)
  • 存储相关表的数据块的组合。
  1. 块(Block)
  • 操作系统读写的最小物理单元。

合理组织这些存储结构,可以优化Oracle的存储效率。

程序结构

Oracle数据库中的主要程序结构包括:

  1. 存储过程(Stored Procedure)
  • 数据库中存储和执行的PL/SQL程序。
  1. 函数(Function)
  • 与存储过程类似,但可以返回值。
  1. 包(Package)
  • 相关程序的集合,分包规范和包主体。
  1. 触发器(Trigger)
  • 在某事件发生时自动执行的PL/SQL代码块。
  1. 数据库链接(Database Link)
  • 连接到另一个数据库的通道。
  1. SQL翻译器
  • 分析和转换SQL语句的组件。
  1. SQL执行计划
  • 由优化器生成的SQL执行步骤。
  1. 调度程序(Scheduler)
  • 用于计划和执行任务。
  1. 作业(Job)
  • 由调度程序执行的数据库任务。

Oracle程序结构扩展了数据库的功能。

事务结构

Oracle数据库的事务结构主要包括:

  1. 事务(Transaction)
  • 一组DML语句,作为一个不可分割的工作单位执行。
  1. 提交(Commit)
  • 提交事务,持久化事务的修改。
  1. 回滚(Rollback)
  • 取消事务,撤销未提交的修改。
  1. 保留点(Savepoint)
  • 事务中设置 intermediate 的提交点。
  1. 读一致性(Read Consistency)
  • 同一事务看到数据的一致视图。
  1. 并发控制
  • 协调事务之间对数据的访问。
  1. 冲突检测与排队
  • 检测并解决访问冲突的机制。
  1. 锁(Lock)
  • 在数据上加锁以防冲突。
  1. 死锁检测(Deadlock Detection)
  • 检测事务间的循环等待并取消事务。

事务结构保证了数据库修改的完整性和一致性。

锁结构

Oracle数据库中的主要锁结构包括:

  1. DML锁
  • 控制对行(Row)级数据的访问,如行级排他锁/共享锁。
  1. DDL锁
  • 在修改对象结构时加锁,如Alter Table时的表锁。
  1. 内部锁
  • 保护内部数据结构,如数据字典缓存的字典锁。
  1. 全局资源锁
  • 串行访问全局资源,如在启用联机备份时的备份锁。
  1. 自我死锁预防锁
  • 防止同一会话对同一资源重复请求锁。
  1. Latch
  • 轻量级控制机制,如保护内存结构的latch。
  1. 全局事务锁
  • 在分布式数据库环境中协调事务。
  1. 簇锁
  • 加在整个簇(Cluster)上的锁。
  1. 表分区锁
  • 对分区表的各分区加锁。

锁机制保证了数据库中数据访问的一致性和完整性。

SQL执行结构

Oracle数据库执行SQL语句主要涉及以下几个结构:

  1. SQL解析器
  • 检查语法并转换为内部格式。
  1. 优化器
  • 根据统计信息生成执行计划。
  1. 行源生成器
  • 根据计划获取表和索引的数据。
  1. 哈希聚合
  • 对行源进行哈希聚合操作。
  1. 排序
  • 对行源进行排序。
  1. 连接器
  • 实现多表连接查询。
  1. 分组器
  • 根据GROUP BY进行分组。
  1. 分区器
  • 对分区对象访问进行分区剪枝。
  1. 并行执行
  • 根据需求进行并行计算。
  1. 结果集
  • 输出和传递SQL查询的结果集。

Oracle通过这些结构高效执行SQL语句。

内存缓存结构

Oracle数据库的主要内存缓存结构包括:

  1. 数据库缓冲区缓存
  • 缓存经常访问的数据块,避免磁盘IO。
  1. 字典缓存
  • 加速访问数据字典项的缓存。
  1. SQL执行计划
  • 缓存SQL和它的优化执行计划。
  1. SQL语句解析树
  • 缓存解析过的SQL语句,避免重复解析。
  1. PL/SQL程序
  • 缓存可复用的PL/SQL函数、过程等。
  1. 表定义缓存
  • 缓存经常使用的表结构定义信息。
  1. 排序区
  • 用于SQL语句排序操作的内存区域。
  1. 分组区
  • 用于GROUP BY操作的内存工作区。
  1. 分区缓存
  • 缓存分区位置信息,提高分区表访问速度。
  1. 结果集缓存
  • 缓存SQL查询结果集,实现重新使用。

利用这些缓存机制,可以大大提升数据库性能。

网络结构

Oracle数据库的主要网络结构包括:

  1. 监听器
  • 监听客户端连接请求的后台进程。
  1. 接受者进程
  • 接受客户端连接,创建服务进程的后台进程。
  1. 调度程序进程
  • 将连接请求分配给共享服务器进程。
  1. 共享服务器进程
  • 为客户端提供服务的进程。
  1. 专用服务器进程
  • 专为一个客户端创建的服务进程。
  1. 数据库链接
  • 连接两个数据库实例用于分布式查询。
  1. Net服务名
  • 客户端用于连接的Oracle网络服务名。
  1. SQL*Net
  • Oracle的网络通信协议。
  1. TNS列表
  • 记录网络服务名称和连接信息。
  1. Oracle网关
  • 与非Oracle系统的数据交换的接口。

这些网络结构支持客户端访问以及在分布式系统中的数据交互。

数据字典

对于Oracle数据库,其自带了数据字典的功能,主要包含以下组成部分:

  1. 数据字典表
    Oracle中的数据字典表存放的是数据库自身的元数据,如用户、表空间、数据文件、用户对象等的定义信息。主要的字典表包括:
  • USER_TABLES - 用户拥有的表信息
  • USER_TAB_COLUMNS - 用户拥有的表列信息
  • USER_PROCEDURES - 用户的存储过程信息
  • DBA_TABLESPACES - 系统的表空间信息

等等。这些表可以通过SQL查询来查看数据库的设计信息。

  1. 动态性能表(V$ views)
    V$开头的视图包含了数据库当前运行状态的信息,如系统资源使用情况、会话信息、性能统计数据等。如V$SESSION、V$PROCESS等。

  2. 包和字典视图
    DBMS_METADATA包可以提取数据库对象的元数据。数据字典视图以DICT开头,提供了对系统 catalog 的读取接口。

  3. 数据字典缓存
    将 recentlyaccessed 数据字典信息缓存到SGA中,提高读取速度。

  4. 企业管理器
    图形界面管理工具,可以浏览、查询数据库的结构信息。

综上,Oracle的数据字典为数据库的配置、性能监控和故障排查提供了详细信息支持,是Oracle数据库管理的重要组成部分。

语法

Oracle中的数据字典主要可以通过以下方式进行访问:

  1. 系统表

这些表存储在系统表空间中,记录了Oracle数据库的元数据,可以直接用SELECT语句查询,例如:

SELECT * FROM all_tables WHERE table_name = 'EMPLOYEES';
  1. 字典视图

字典视图是对系统表的封装,提供了更方便的查询接口,通常以DICT或V$开头,例如:

SELECT * FROM DICT WHERE table_name = 'TABLES';
  1. 动态性能视图

动态性能视图以V$开头,提供实时的数据库状态和性能数据,例如:

SELECT * FROM V$SESSION;
  1. 包DBMS_METADATA

可以通过该包提取数据库对象的元数据,例如:

SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES') FROM DUAL;
  1. 企业管理器

图形界面管理工具,可以浏览和查询数据库结构信息。

所以Oracle数据字典访问的主要语法构成是:

  • 通过直接 SELECT 查询系统表

  • 使用字典视图和动态性能视图

  • 调用 DBMS_METADATA 包的函数

  • 企业管理器图形操作

实例

这里给出一些Oracle数据字典的查询示例:

  1. 查询用户SCOTT下的所有表:
SELECT TABLE_NAME 
FROM USER_TABLES
WHERE TABLESPACE_NAME = 'USERS'
  1. 查询表EMP的结构:
SELECT COLUMN_NAME, DATA_TYPE, NULLABLE 
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'EMP'
  1. 查询用户的所有存储过程:
SELECT OBJECT_NAME, OBJECT_TYPE 
FROM USER_OBJECTS 
WHERE OBJECT_TYPE = 'PROCEDURE'
  1. 查询BUFFER_POOL_STATISTICS的信息:
SELECT * FROM V$BUFFER_POOL_STATISTICS
  1. 使用DBMS_METADATA提取表定义:
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP') FROM DUAL
  1. 使用数据字典视图查询表空间信息:
SELECT * FROM DICT WHERE TABLE_NAME = 'TABLESPACES'

熟练使用Oracle提供的数据字典可以让DBA更好地管理数据库,开发者更好地设计程序。这需要对表结构和各视图含义有充分的了解。

系统表

Oracle中的系统表主要存储数据库自身的元数据,记录了用户、表空间、数据文件、用户对象等的定义信息。

主要的系统表包括:

  • ALL_USERS - 数据库中的全部用户信息

  • DBA_TABLESPACES - 系统中的全部表空间信息

  • DBA_DATA_FILES - 数据库中所有的数据文件信息

  • ALL_TABLES - 当前用户可以访问的全部表信息

  • ALL_TAB_COLUMNS - 当前用户可访问的全部表列信息

  • ALL_PROCEDURES - 当前用户的全部存储过程信息

  • ALL_OBJECTS - 当前用户的全部对象信息

  • ALL_INDEXES - 当前用户的全部索引信息

  • ALL_CONSTRAINTS - 当前用户的全部约束信息

等等。

系统表都以A开头,存储在SYSTEM表空间中。我们可以通过SELECT直接查询系统表:

SELECT TABLE_NAME FROM ALL_TABLES; 

但是DBA通常会在系统表的基础上创建视图,方便用户查询而不直接访问基表。

系统表为DBA管理数据库提供了详尽的内部信息,是Oracle数据字典的核心组件。

ALL_USERS

ALL_USERS是Oracle一个重要的系统表,它包含当前用户有权限访问的所有数据库用户账户的信息。

ALL_USERS的主要列如下:

  • USERNAME - 用户名

  • USER_ID - 用户ID号

  • PASSWORD - 用户密码的HASH值

  • ACCOUNT_STATUS - 用户状态(OPEN, LOCKED等)

  • LOCK_DATE - 账户被锁定的日期

  • EXPIRY_DATE - 密码到期日

  • DEFAULT_TABLESPACE - 默认表空间

  • TEMPORARY_TABLESPACE - 临时表空间

  • CREATED - 用户创建时间

  • PROFILE - 关联的配置文件

  • INITIAL_RSRC_CONSUMER_GROUP - 用户初始资源消费组

  • EXTERNAL_NAME - 外部身份的DN

等信息。

可以用SELECT直接查询:

SELECT USERNAME,ACCOUNT_STATUS FROM ALL_USERS;

DBA通过ALL_USERS系统表可以查看和管理数据库用户账户。

DBA_TABLESPACES

DBA_TABLESPACES是Oracle一个重要的系统表,它存储了数据库中所有表空间的详细信息。

DBA_TABLESPACES的主要列有:

  • TABLESPACE_NAME - 表空间名称

  • BLOCK_SIZE - 表空间块大小

  • INITIAL_EXTENT - 对象的初始扩展区大小

  • NEXT_EXTENT - 对象的下一个扩展区大小

  • MIN_EXTENTS - 对象的最小扩展区数

  • MAX_EXTENTS - 对象的最大扩展区数

  • PCT_INCREASE - 扩展区的增量百分比

  • MIN_EXTLEN - 最小扩展区长度

  • STATUS - 表空间状态,ONLINE/OFFLINE

  • CONTENTS - 表空间类型,PERMANENT或TEMPORARY

  • LOGGING - 表空间Logging属性

  • FORCE_LOGGING - 强制Logging属性

等信息。

可以直接查询:

SELECT TABLESPACE_NAME,CONTENTS FROM DBA_TABLESPACES;

DBA_TABLESPACES表中存储了所有表空间的详细元数据。DBA经常需要查询这个表。

DBA_DATA_FILES

DBA_DATA_FILES是Oracle一个重要的系统表,它存储了数据库中的所有数据文件的信息。主要包含以下列:

  • FILE_NAME - 数据文件的物理名

  • FILE_ID - 数据文件的逻辑ID号

  • TABLESPACE_NAME - 数据文件所属的表空间

  • BYTES - 数据文件的大小(Bytes)

  • BLOCKS - 数据文件的块数

  • STATUS - 数据文件的状态,ONLINE或OFFLINE

  • RELATIVE_FNO - 数据文件在表空间中的相对文件号

  • AUTOEXTENSIBLE - 数据文件是否自动扩展

  • MAXBYTES - 数据文件的最大可扩展大小

  • MAXBLOCKS - 数据文件的最大可扩展块数

  • INCREMENT_BY - 数据文件自动扩展增量

  • USER_BYTES - 用户数据已使用空间大小

  • ONLINE_STATUS - 数据文件是否在线

等信息。

可以直接查询:

SELECT FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES;

DBA通过查询DBA_DATA_FILES来管理数据库中的数据文件。

ALL_TABLES

ALL_TABLES是Oracle中的一个重要系统表,它存储当前用户有访问权限的所有表的信息。主要包含以下列:

  • OWNER - 表的所属用户

  • TABLE_NAME - 表名

  • TABLESPACE_NAME - 表所在的表空间

  • CLUSTER_NAME - 表所属的集群

  • IOT_NAME - 表所属的索引组织表

  • STATUS - 表的状态,VALID或INVALID

  • PCT_FREE - 表的PCTFREE值

  • PCT_USED - 表使用空间百分比

  • INI_TRANS - 表的初始事务数量

  • MAX_TRANS -表的最大事务数量

  • INITIAL_EXTENT - 表的初始扩展大小

  • NEXT_EXTENT - 表的下一个扩展大小

  • MIN_EXTENTS - 表的最小扩展次数

  • MAX_EXTENTS - 表的最大扩展次数

等表参数信息。

可以直接查询:

SELECT TABLE_NAME,TABLESPACE_NAME FROM ALL_TABLES WHERE OWNER='SCOTT';

DBA经常查询ALL_TABLES来获取用户表的信息。

ALL_TAB_COLUMNS

ALL_TAB_COLUMNS是Oracle的一个重要系统表,它存储当前用户有访问权限的所有表列的信息。主要包含以下列:

  • OWNER - 表所属用户

  • TABLE_NAME - 列对应的表名

  • COLUMN_NAME - 列名称

  • DATA_TYPE - 列的数据类型

  • DATA_LENGTH - 列的长度

  • DATA_PRECISION - 列的精度(数字列)

  • DATA_SCALE - 列的小数位数(数字列)

  • NULLABLE - 列是否允许为空

  • COLUMN_ID - 列在表中的序号位置

  • DATA_DEFAULT - 列的默认值表达式

  • NUM_DISTINCT - 列的近似基数

  • LOW_VALUE - 列的最小值

  • HIGH_VALUE - 列的最大值

  • LAST_ANALYZED - 列的最近分析时间

等信息。

可以直接查询:

SELECT COLUMN_NAME,DATA_TYPE,NULLABLE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='EMP';

ALL_TAB_COLUMNS表详细存储了所有列的定义信息。

ALL_PROCEDURES

ALL_PROCEDURES是Oracle一个重要的系统表,它存储了当前用户所有有权限访问的存储过程的信息。主要包含以下列:

  • OWNER - 存储过程所属的用户

  • OBJECT_NAME - 存储过程名

  • SUBOBJECT_NAME - 存储过程中方法的名字

  • OBJECT_ID - 存储过程的对象ID

  • DATA_OBJECT_ID - 存储过程的Data Object ID

  • OBJECT_TYPE - 对象类型,PROCEDURE

  • CREATED - 存储过程的创建时间

  • LAST_DDL_TIME - 上次修改存储过程的时间

  • TIMESTAMP - 时间戳

  • STATUS - 存储过程状态,VALID或者INVALID

  • TEMPORARY - 是否是临时存储过程

  • GENERATED - 是否是系统生成的存储过程

  • SECONDARY - 是否是应用程序生成的

等信息。

可以直接查询:

SELECT OBJECT_NAME, STATUS FROM ALL_PROCEDURES WHERE OWNER='SCOTT';

DBA经常查询该表来获取存储过程的信息。

ALL_OBJECTS

ALL_OBJECTS是Oracle一个重要的系统表,它包含当前用户有访问权限的所有数据库对象的信息。主要的列有:

  • OWNER - 对象所属用户

  • OBJECT_NAME - 对象名称

  • SUBOBJECT_NAME - 对象中的子对象名称

  • OBJECT_ID - 对象的对象ID

  • DATA_OBJECT_ID - 对象的数据对象ID

  • OBJECT_TYPE - 对象类型(TABLE、INDEX、PROCEDURE等)

  • CREATED - 对象的创建时间

  • LAST_DDL_TIME - 上次修改对象的时间

  • TIMESTAMP - 时间戳,用于版本控制

  • STATUS - 对象状态(VALID/INVALID)

  • TEMPORARY - 是否临时对象

  • GENERATED - 是否系统生成对象

  • SECONDARY - 是否应用程序生成

等信息。

可以直接查询:

SELECT OBJECT_NAME,OBJECT_TYPE FROM ALL_OBJECTS WHERE OWNER='SCOTT';

ALL_OBJECTS全面反映了用户的所有数据库对象。

ALL_INDEXES

ALL_INDEXES是Oracle的一个重要系统表,它存储了当前用户所有有权限访问的索引信息。主要包含以下列:

  • OWNER - 索引所属用户

  • INDEX_NAME - 索引名称

  • INDEX_TYPE - 索引类型(NORMAL, BITMAP等)

  • TABLE_OWNER - 被索引的表所属用户

  • TABLE_NAME - 被索引的表名

  • TABLE_TYPE - 被索引的表类型(TABLE, CLUSTER等)

  • UNIQUENESS - 是否是唯一索引(UNIQUE或NONUNIQUE)

  • COMPRESSION - 索引压缩(ENABLED/DISABLED)

  • PREFIX_LENGTH - 函数索引的前缀长度

  • TABLESPACE_NAME - 索引存储的表空间

  • INI_TRANS - 索引初始事务数量

  • MAX_TRANS -索引最大事务数量

  • INITIAL_EXTENT - 索引的初始扩展大小

  • NEXT_EXTENT - 索引的下一个扩展大小

等信息。

可以直接查询:

SELECT INDEX_NAME,TABLE_NAME FROM ALL_INDEXES WHERE OWNER='SCOTT';

ALL_INDEXES表详细存储了所有索引的定义信息。

ALL_CONSTRAINTS

ALL_CONSTRAINTS是Oracle中的一个重要系统表,它存储了当前用户所有有权限访问的约束信息。主要包含以下列:

  • OWNER - 约束所属用户

  • CONSTRAINT_NAME - 约束名称

  • CONSTRAINT_TYPE - 约束类型(P - 主键,U - 唯一,C - 检查,R - 外键)

  • TABLE_NAME - 约束所在的表名

  • SEARCH_CONDITION - 检查约束的条件表达式

  • R_OWNER - 外键参照的主表所属用户

  • R_CONSTRAINT_NAME - 外键参照的唯一键或主键名

  • DELETE_RULE - 外键的ON DELETE规则(CASCADE/NO ACTION等)

  • STATUS - 约束状态(ENABLED或DISABLED)

  • DEFERRABLE - 约束是否可延迟(IMMEDIATE或DEFERRED)

  • DEFERRED - 约束是否被延迟(YES或NO)

等信息。

查询示例:

SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE FROM ALL_CONSTRAINTS WHERE OWNER='SCOTT';

ALL_CONSTRAINTS表详细存储了所有约束的定义信息。

字典视图

Oracle中的数据字典视图是对系统表的封装,提供了更加便捷和筛选过的元数据查询接口。主要的字典视图包括:

  • DICTIONARY - 所有数据字典表和视图的描述信息

  • TABLES - 数据库中所有表的信息

  • TABS - 访问权限允许的表信息

  • COLS - 表列的描述信息

  • OBJECT_TABLES - 所有对象表的描述信息

  • TABLESPACES - 表空间的描述信息

  • USERS - 数据库用户的描述信息

  • INDEXES - 所有索引的信息

等等。

数据字典视图以DICT或USER_开头,使用起来更方便简单:

SELECT * FROM DICT WHERE TABLE_NAME = 'EMPLOYEES';

数据字典视图隐藏了系统表的复杂性,包含了经过聚合和过滤的信息,是管理数据库元数据的重要工具。

DBA和开发人员可以根据需要创建自定义的数据字典视图,来实现特定的元数据查询需求。

DICTIONARY

Oracle数据字典视图DICTIONARY提供了对所有数据字典表和视图的描述信息,它包含以下常用的列:

  • TABLE_NAME - 数据字典表/视图的名称

  • COMMENTS - 对表的说明描述

  • CREATOR - 创建者

  • DATE_CREATED - 创建日期

  • TABLE_TYPE - 对象类型,如 TABLE、VIEW

  • STATUS - 状态,如 VALID、INVALID

  • TEMPORARY - 是否是临时对象

  • ACCESS_METHOD - 访问方法,如 DIRECT

  • ALLOCATION - 分配方式

  • CLUSTERED - 是否集群

  • IO_CHUNK_SIZE - IO块大小

  • PCT_INCREASE - 扩展百分比

  • PCT_USED - 已使用空间百分比

  • TABLESPACE_NAME - 所在表空间

等信息。

我们可以查询DICTIONARY来了解数据字典的组成:

SELECT TABLE_NAME,COMMENTS FROM DICTIONARY;

DICTIONARY视图提供了查询数据字典自身设计的便利方式。DBA经常需要关注这个视图。

TABLES

Oracle数据字典视图TABLES包含了数据库中所有表(包括分区表)的详细信息,它包含以下常用列:

  • OWNER - 表所属用户

  • TABLE_NAME - 表名

  • TABLESPACE_NAME - 表所在表空间

  • CLUSTER_NAME - 表所属的集群

  • IOT_NAME - 表所属的索引组织表

  • STATUS - 表的状态,VALID或INVALID

  • PCT_FREE - 表的PCTFREE值

  • PCT_USED - 表已使用空间百分比

  • INI_TRANS - 初始事务数量

  • MAX_TRANS - 最大事务数量

  • INITIAL_EXTENT - 初始扩展大小

  • NEXT_EXTENT - 下一个扩展大小

  • MIN_EXTENTS - 最小扩展次数

  • MAX_EXTENTS - 最大扩展次数

  • PCT_INCREASE - 扩展增量百分比

  • FREELISTS - 表的FREELISTS值

  • FREELIST_GROUPS - 表的FREELIST GROUPS值

等信息。

我们可以查询TABLES视图来检查所有表的设计参数:

SELECT TABLE_NAME,TABLESPACE_NAME,PCT_FREE FROM TABLES;

TABLES视图全面反映了数据库中的表信息,是管理表结构的重要工具。

TABS

Oracle 数据字典视图TABS主要包含了当前用户有访问权限的表和视图的相关信息,它包含以下常见列:

  • OWNER - 表所属的 schema 名称

  • TABLE_NAME - 表的名称

  • TABLE_TYPE - 表的类型,如 TABLE、VIEW等

  • STATUS - 表的状态,如 VALID、INVALID等

  • TEMPORARY - 是否是临时表,Y或N

  • DURATION - 临时表的持续性,如 TRANSACTION 或 SESSION

  • Cluster_NAME - 表所属的簇名称

  • IOT_NAME - 表所属的索引组织表名称

  • LOGGING - 表的日志记录属性,如LOGGING或NOLOGGING

  • INSERT_AS_SELECT - 表是否支持插入时选择,Y或N

  • DEGREE - 表的并行度

  • INSTANCES - 表实例号

  • CACHE - 是否 CACHE

  • TABLESPACE_NAME - 表所在的表空间

我们可以用TABS视图查询自己有访问权限的表:

SELECT TABLE_NAME,TABLESPACE_NAME FROM TABS;

TABS视图简化了对表元数据的查询,是日常数据库管理的重要工具。

COLS

Oracle数据字典视图COLS包含了数据库中的所有表列的信息,它的常见列如下:

  • OWNER - 所属用户schema

  • TABLE_NAME - 列所在的表名

  • COLUMN_NAME - 列名

  • DATA_TYPE - 列的数据类型

  • DATA_LENGTH - 列的长度

  • DATA_PRECISION - 列的精度

  • DATA_SCALE - 列的小数位数

  • NULLABLE - 列是否允许NULL

  • COLUMN_ID - 列在表中的序号位置

  • DEFAULT_LENGTH - 默认值的长度

  • DATA_DEFAULT - 列的默认值

  • NUM_DISTINCT - 列的基数/唯一值估计数

  • LOW_VALUE - 列的最小值

  • HIGH_VALUE - 列的最大值

  • LAST_ANALYZED - 上次收集列统计信息的时间

等信息。

我们可以查询COLS视图来获取表列的详细设计信息:

SELECT * FROM COLS WHERE TABLE_NAME='EMP';

COLS视图全面反映了数据库中所有列的定义,是管理列设计的重要工具。

OBJECT_TABLES

OBJECT_TABLES是Oracle数据字典中的一个重要字典视图,它提供所有对象表的描述信息。对象表是存储对象类型数据的表。

OBJECT_TABLES中的主要列信息包括:

  • OWNER - 对象表所属用户

  • TABLE_NAME - 对象表名

  • TABLESPACE_NAME - 表存放表空间

  • CLUSTER_NAME - 表所属的集群

  • IOT_NAME - 表所属的索引组织表

  • STATUS - 对象表状态,VALID或INVALID

  • TEMPORARY - 是否是临时表

  • SECONDARY - 是否是对象表的辅助存储表

  • NESTED - 对象表是否包含嵌套表

  • SUBPARTITION_TEMPLATE - 子分区模板

  • SUPERTYPE_OWNER - 父对象OWNER

  • SUPERTYPE_NAME - 父对象名

等信息。

我们可以这样查询:

SELECT TABLE_NAME, TABLESPACE_NAME FROM OBJECT_TABLES;

OBJECT_TABLES视图使我们可以方便地管理和查询数据库中的对象表。

TABLESPACES

Oracle数据字典视图TABLESPACES包含所有表空间的详细信息,主要的列信息如下:

  • TABLESPACE_NAME - 表空间名称

  • BLOCK_SIZE - 表空间块大小

  • INITIAL_EXTENT - 对象初始扩展区大小

  • NEXT_EXTENT - 对象下一个扩展区大小

  • MIN_EXTENTS - 对象最小扩展区数

  • MAX_EXTENTS - 对象最大扩展区数

  • PCT_INCREASE - 扩展区增量百分比

  • MIN_EXTLEN - 最小扩展区长度

  • STATUS - 表空间状态,ONLINE或OFFLINE

  • CONTENTS - 表空间类型,PERMANENT或TEMPORARY

  • LOGGING - 表空间日志记录属性

  • FORCE_LOGGING - 强制日志记录

  • EXTENT_MANAGEMENT - 表空间区管理,LOCAL或DICTIONARY

等信息。

查询示例:

SELECT TABLESPACE_NAME,CONTENTS FROM TABLESPACES; 

TABLESPACES视图使DBA可以方便地查看和管理所有表空间。

USERS

Oracle数据字典视图USERS包含了数据库中所有用户账户的信息。它的主要列如下:

  • USERNAME - 用户名

  • USER_ID - 用户ID号

  • PASSWORD - 用户密码的加密HASH值

  • ACCOUNT_STATUS - 账户状态,OPEN、LOCKED等

  • LOCK_DATE - 账户被锁定的日期

  • EXPIRY_DATE - 密码到期日

  • DEFAULT_TABLESPACE - 默认表空间

  • TEMPORARY_TABLESPACE - 临时表空间

  • LOCAL_TEMP_TABLESPACE -本地临时表空间

  • PROFILE - 关联的配置文件

  • INITIAL_RSRC_CONSUMER_GROUP - 初始资源消费组

  • EXTERNAL_NAME - 外部身份的 distinguished name

  • PASSWORD_VERSIONS - 密码版本,如10G、11G

  • EDITIONS_ENABLED - 是否启用版本

等信息。

示例查询:

SELECT USERNAME,ACCOUNT_STATUS FROM USERS;

USERS视图使DBA可以方便地查看和管理数据库用户。

INDEXES

Oracle 数据字典视图INDEXES提供了数据库中的所有索引信息,主要包含以下列:

  • OWNER - 索引所属的用户schema

  • INDEX_NAME - 索引名称

  • INDEX_TYPE - 索引类型(NORMAL、BITMAP等)

  • TABLE_OWNER - 被索引的表所属的schema

  • TABLE_NAME - 被索引的表名称

  • TABLE_TYPE - 被索引的表类型(TABLE或CLUSTER等)

  • UNIQUENESS - 是否是唯一索引(UNIQUE或NONUNIQUE)

  • COMPRESSION - 是否开启索引压缩(ENABLED或DISABLED)

  • TABLESPACE_NAME - 索引存储的表空间

  • STATUS - 索引状态(VALID或INVALID)

  • NUM_ROWS - 索引估计行数

  • SAMPLE_SIZE - SAMPLE SIZE值

  • LAST_ANALYZED - 上次收集统计信息时间

等信息。

例如可以这样查询:

SELECT INDEX_NAME, TABLE_NAME, UNIQUENESS FROM INDEXES;

INDEXES视图使DBA可以方便地查看和管理所有数据库索引。

动态视图

Oracle中的动态性能视图(Dynamic Performance Views)以V$开头,它提供了数据库当前性能和资源使用状态的信息。常用的动态视图包括:

  • V$SESSION - 当前连接到数据库的会话信息

  • V$PROCESS - 当前活动的后台进程信息

  • V$TRANSACTION - 当前活动的事务信息

  • V$LOCK - 当前获得的锁信息

  • V$OPEN_CURSOR - 当前打开的游标信息

  • V$MEMORY_TARGET_ADVICE - 自动内存管理建议

  • V$SYSSTAT - 各种性能统计信息

  • V$SYSTEM_EVENT - 等待事件统计信息

  • V$SQLAREA - SQL语句执行性能数据

  • V$DATABASE - 数据库信息

  • V$LOG - 联机重做日志文件信息

  • V$PARAMETER - 参数设置信息

等等。

查询动态视图的语法与视图类似:

SELECT * FROM V$SESSION;

动态视图可以实时查看数据库性能和资源使用情况,用于数据库监控、调优和故障排查。但是频繁查询动态视图本身会增加开销。

DBA经常通过定期查询或脚本获取动态视图数据,来监控数据库运行状况。

V$SESSION

V$SESSION是Oracle中一个非常重要的动态性能视图,它提供了数据库当前连接的会话信息。主要的列信息包括:

  • SID - 会话的标识ID

  • SERIAL# - 会话的序列号

  • USERNAME - 会话用户名称

  • SCHEMA_NAME - 会话的方案名称

  • STATUS - 会话状态(ACTIVE, INACTIVE等)

  • SERVER - 会话链接的数据库实例名称

  • SQL_ID - 当前正在执行的SQL语句的标识符

  • SQL_CHILD_NUMBER - 执行计划的子编号

  • PROCESS - 会话对应的后台进程名

  • BLOCKING_SESSION - 当前阻塞会话的SID号

  • BLOCKING_SESSION_STATUS - 阻塞会话的状态

  • EVENT - 会话当前正在等待的事件

等信息。

可以查询活动会话:

SELECT SID,STATUS,EVENT FROM V$SESSION WHERE STATUS = 'ACTIVE';

V$SESSION是DBA诊断数据库性能和故障的重要工具。

V$PROCESS

V$PROCESS是Oracle中的一个重要的动态性能视图,它提供了有关数据库实例中活动的后台进程的信息。主要的列信息包括:

  • PID - 进程标识号ID

  • SPID - 会话进程标识号ID

  • PROGRAM - 进程的程序名称

  • BACKGROUND - 是否是背景进程

  • PSPID - 进程的父进程ID

  • SID - 进程对应的会话ID

  • USERNAME - 进程对应的用户名称

  • SERIAL# - 进程对应的会话序列号

  • TERMINAL - 进程连接的终端标识符

  • MODULE - 进程当前调用的模块

  • ACTION - 进程的当前活动操作类型

  • CLIENT_INFO - 进程的客户端信息

  • STATUS - 进程的状态(WAITED/RUNNING)

  • BLOCKED - 当前是否被阻塞

  • WAIT_CLASS - 进程等待事件的类名

等信息。

查询示例:

SELECT PID, PROGRAM, MODULE FROM V$PROCESS;

V$PROCESS视图让DBA可以查看数据库进程的活动状态。

V$TRANSACTION

V$TRANSACTION是Oracle中的一个动态性能视图,它提供当前活动的事务信息。主要包含以下列:

  • SES_ADDR - 会话地址

  • TRANSACTION# - 事务标识号

  • USED_UBLK - 事务已用UNDO块数

  • USED_UREC - 事务已用UNDO记录数

  • LOG_IO - 事务已生成的redo size

  • PHY_IO - 事务造成的物理IO数

  • CR_GET - 事务执行的consistent gets数

  • CR_CHANGE - 事务引起的UNDO记录数

  • START_TIME - 事务的开始时间

  • START_SCNB - 事务开始时的SCN号

  • STATUS - 事务的状态

  • ISOLATION_LEVEL - 事务的隔离级别

  • ROW_WAIT_OBJ# - 事务等待的对象号

  • ROW_WAIT_FILE# - 事务等待的文件号

等信息。

查询活动事务:

SELECT TRANSACTION#,STATUS FROM V$TRANSACTION;

V$TRANSACTION视图让DBA可以监控数据库中事务的状态。

V$LOCK

V$LOCK是Oracle中的一个重要动态性能视图,它提供当前获得的所有锁的信息。主要的列有:

  • ADDR - 锁资源的内存地址

  • KADDR - 锁记录的内存地址

  • SID - 持有该锁的会话标识号

  • TYPE - 锁的类型(TX/MR/SR等)

  • ID1 - 锁资源标识号1

  • ID2 - 锁资源标识号2

  • LMODE - 锁的模式(Exclusive/Share)

  • REQUEST - 锁定的模式(Exclusive/Share/None)

  • CTIME - 锁的获取时间

  • BLOCK - 当前是否被阻塞(Yes/No)

  • ST_TIME - 阻塞时间开始

  • IN_TRANS - 事务状态(ACTIVE/COMMITTED/ROLLEDBACK)

等信息。

查询示例:

SELECT SID,TYPE,LMODE FROM V$LOCK;

V$LOCK视图用于分析锁争用和死锁问题。

V$OPEN_CURSOR

V$OPEN_CURSOR是Oracle中一个重要的动态性能视图,它提供了当前打开的游标信息。主要的列有:

  • SADDR - 发出开启游标请求的会话地址

  • SID - 开启游标的会话标识号

  • USER_NAME - 开启游标的用户名

  • ADDRESS - 游标代码的内存地址

  • HASH_VALUE - 游标代码的哈希值

  • SQL_ID - 游标执行的SQL语句标识符

  • SQL_CHILD_NUMBER - 执行计划的子编号

  • SQL_TEXT - 游标执行的SQL文本片段

  • LAST_SQL_ACTIVE_TIME - 上一次执行时间

  • PARSING_USER_ID - 解析用户的ID

  • PARSING_SCHEMA_ID - 解析用户的方案ID

  • KEPT_VERSIONS - 保留的版本数

  • EXECUTIONS - 游标的执行次数

等信息。

查询示例:

SELECT SQL_ID,EXECUTIONS FROM V$OPEN_CURSOR;

V$OPEN_CURSOR视图让DBA监控数据库中打开和执行的SQL。

V$MEMORY_TARGET_ADVICE

V$MEMORY_TARGET_ADVICE是一个Oracle动态性能视图,它提供了自动内存管理和内存优化建议。主要包含以下信息:

  • MEMORY_SIZE - 建议的SGA和PGA内存目标大小

  • MEMORY_SIZE_FACTOR - 计算内存大小的倍增因子

  • ESTD_DB_TIME - 估计完成数据库工作的时间

  • ESTD_DB_TIME_FACTOR - 时间的倍减因子

  • VERSION - 数据库版本

  • CURRENT_SGA_SIZE - 当前SGA大小

  • CURRENT_PGA_SIZE - 当前PGA大小

  • ADVICE_STATUS - 建议生成的状态

  • PGA_TARGET_FOR_ESTIMATE - 估算中使用的PGA大小

  • SGA_TARGET_FOR_ESTIMATE - 估算中使用的SGA大小

  • ESTD_PHYSICAL_IO - 估算的物理IO次数

等信息。

使用案例:

SELECT MEMORY_SIZE, ESTD_DB_TIME FROM V$MEMORY_TARGET_ADVICE; 

该视图可用于分析和调整内存大小。

V$SYSSTAT

V$SYSSTAT是Oracle中一个非常重要的性能统计信息视图。它提供了各种系统级别的统计信息,可以用于监控和调优数据库。主要包含以下统计信息:

  • logical reads - 逻辑读次数

  • logical reads cache - 逻辑读缓存次数

  • physical reads - 物理读次数

  • physical reads direct - 直接路径读次数

  • physical writes - 物理写次数

  • redo size - Redo日志生成量

  • bytes received - 接收的网络流量字节数

  • bytes sent - 发送的网络流量字节数

  • parse count - 解析次数

  • execute count - 执行次数

  • user commits - 用户提交次数

  • user rollbacks - 用户回滚次数

  • logons cumulative - 总登录次数

  • consistent gets - 一致性读次数

等等许多系统统计信息。

查询示例:

SELECT name, value FROM V$SYSSTAT;

V$SYSSTAT视图是数据库性能诊断和优化的重要工具。

V$SYSSTAT视图提供了Oracle数据库各种重要的性能统计信息,常见的统计项及含义包括:

  • buffer_cache_hit:缓冲区缓存命中数,反映系统缓存命中效率

  • consistent_gets:一致性读请求数,表示查询所有需要的块

  • physical_reads:物理IO读请求数,表示磁盘读取数据块次数

  • redo_size:Redo日志生成大小,反映事务操作强度

  • parse_count:解析语句请求数,表示硬解析次数

  • session_cached_cursors:缓存游标数量,显示被会话重复使用的游标数

  • logons:会话登录数,反映系统负载

  • enqueue_timeouts:发生的所有锁请求超时次数

  • gc_cr_block_received:全局缓存一致性读块接收数

  • gc_cu_block_received:全局缓存当前块接收数

等等。

DBA可以通过定期观察这些统计指标来监控系统性能状态和瓶颈。

例如,观察物理读次数升高可能表示缓存失效严重,需要进行故障排查和调优。

V$SYSTEM_EVENT

V$SYSTEM_EVENT是Oracle中的一个动态性能视图,它提供了与等待事件相关的统计信息。主要的统计信息包括:

  • EVENT# - 等待事件编号

  • EVENT - 等待事件名称

  • TOTAL_WAITS - 该事件的总等待次数

  • TOTAL_TIMEOUTS - 该事件导致的超时次数

  • TIME_WAITED - 该事件的总等待时间(秒)

  • AVERAGE_WAIT - 平均每次等待时间(毫秒)

  • TIME_WAITED_MICRO - 总等待时间(微秒)

  • EVENT_ID - 事件标识符

  • WAIT_CLASS_ID - 事件类别标识符

  • WAIT_CLASS# - 事件所属类别编号

  • WAIT_CLASS - 事件类别名称

等信息。

查询示例:

SELECT EVENT, TOTAL_WAITS, TIME_WAITED FROM V$SYSTEM_EVENT;

通过该视图,DBA可以分析数据库等待事件情况,找出性能瓶颈。

V$SQLAREA

V$SQLAREA是Oracle中一个重要的性能统计视图,它提供了执行计划的性能统计信息。主要的列信息包括:

  • SQL_ID - SQL语句的标识符

  • PLAN_HASH_VALUE - 执行计划的哈希值

  • EXECUTIONS - 语句执行的次数

  • LOADS - 语句被加载进共享池的次数

  • FIRST_LOAD_TIME - 语句首次加载时间

  • INVALIDATIONS - 语句因改变而被INVALID的次数

  • PARSE_CALLS - 解析调用次数

  • DISK_READS - 磁盘读次数

  • BUFFER_GETS - 缓冲区读次数

  • ROWS_PROCESSED - 处理行数

  • CPU_TIME - CPU时间

  • ELAPSED_TIME - 花费的总时间

  • optimizer_mode - 优化器模式

等信息。

查询示例:

SELECT SQL_TEXT,EXECUTIONS,BUFFER_GETS FROM V$SQLAREA; 

V$SQLAREA视图让DBA分析和调优SQL语句执行。

V$DATABASE

V$DATABASE是Oracle中一个重要的动态性能视图,它提供当前数据库的一些基本信息。主要包含以下列:

  • DBID - 数据库标识符

  • NAME - 数据库名称

  • CREATED - 数据库创建时间

  • RESETLOGS_CHANGE# - 重置日志的System Change Number

  • RESETLOGS_TIME - 重置日志的时间

  • PRIOR_RESETLOGS_CHANGE# - 上一次重置日志的SCN

  • PRIOR_RESETLOGS_TIME - 上一次重置日志的时间

  • LOG_MODE - 数据库运行模式(ARCHIVELOG或NOARCHIVELOG)

  • CHECKPOINT_CHANGE# - 上次Checkpoint的SCN号

  • ARCHIVELOG_CHANGE# - 存档重做日志的SCN号

  • CONTROLFILE_TYPE - 控制文件类型(STANDBY或LOGICAL)

  • OPEN_RESETLOGS - 打开的重置日志组数

  • VERSION - 数据库版本

  • STATUS - 数据库状态(OPEN或CLOSED)

等信息。

查询示例:

SELECT NAME, DBID, VERSION FROM V$DATABASE;

V$DATABASE给出当前数据库的概要信息。

V$LOG

V$LOG是Oracle中的一个动态性能视图,它提供了数据库联机重做日志文件的相关信息。主要包含以下列:

  • GROUP# - 重做日志组编号

  • STATUS - 日志状态(ACTIVE或INACTIVE)

  • TYPE - 日志类型(ONLINE或STANDBY)

  • MEMBER - 日志文件的组成员名称

  • IS_RECOVERY_DEST_FILE - 是否是恢复目标文件

  • FIRST_CHANGE# - 日志中第一个SCN变更号

  • FIRST_TIME - 日志中第一个变更的时间戳

  • NEXT_CHANGE# - 日志中下一个可用SCN变更号

  • FIRST_TIME - 日志中下一个变更的时间戳

  • ARCHIVED - 日志是否被归档

  • BLOCKS - 日志文件的大小(块数)

  • BLOCK_SIZE - 日志块大小

等信息。

查询示例:

SELECT GROUP#, MEMBER FROM V$LOG;

V$LOG视图让DBA可以监控重做日志组的状态。

V$PARAMETER

V$PARAMETER是Oracle中的一个动态性能视图,它显示数据库参数的配置信息。主要包含以下列:

  • NUM - 参数编号

  • NAME - 参数名称

  • TYPE - 参数类型

  • VALUE - 参数当前值

  • DISPLAY_VALUE - 参数显示值

  • DEFAULT_VALUE - 参数默认值

  • ISDEFAULT - 是否使用默认值

  • ISMODIFIED - 参数值是否被修改过

  • ISADJUSTED - 是否由系统调整过

  • ISDEPRECATED - 是否不推荐使用了

  • ISBASIC - 是否是基本参数

  • DESCRIPTION - 参数的描述信息

等信息。

查询示例:

SELECT NAME, VALUE FROM V$PARAMETER; 

通过V$PARAMETER,DBA可以快速查看数据库参数设置。

数据字典能给企业带来什么效益

Oracle的数据字典是管理和使用Oracle数据库的重要工具,它记录了数据库内部的关键元数据信息。合理利用数据字典可以给生产环境带来以下效益:

  1. 更好地理解数据库结构

数据字典包含了表、视图、索引等对象的详细信息,可以快速了解数据库的组织结构。

  1. 更高效的数据库管理

借助数据字典可以方便地查询和管理数据库对象,而无需记住所有对象名称。

  1. 更准确地诊断问题

分析数据字典信息可以找到数据库对象之间的关联性,协助定位潜在问题。

  1. 优化性能调整方案

根据数据字典中的统计信息制定索引、分区等调优方案。

  1. 加快新应用开发

开发人员可以使用数据字典快速确定对象名,提高开发效率。

  1. 强化安全控制

通过数据字典分析权限和审计信息,找到并防范安全隐患。

  1. 主动式管理数据库

定期检查数据字典信息,可以发现数据库的变化并作出调整。

  1. 建立最佳实践

根据数据字典统计信息不断优化和改进数据库配置。

总之,合理利用数据字典可以让DBA更高效地管理Oracle数据库,将最大限度发挥其效能并保证高可靠性。

作为一名运维人员,该如何使用数据字典

作为Oracle数据库的运维人员,可以这样使用数据字典来辅助工作:

  1. 查询表结构 - 使用 user_tab_columns 等视图查询表的列信息,快速了解表结构。

  2. 查询索引信息 - 通过 user_indexes 等视图查看表的索引,检查索引是否合理。

  3. 检查对象依赖 - 使用 user_dependencies 等视图分析对象之间的依赖关系。

  4. 查看用户权限 - 使用 user_tab_privs等视图检查用户的权限分配情况。

  5. 分析系统使用情况 - 使用 v$tables等视图统计系统中的对象数,估算系统资源使用情况。

  6. 优化SQL执行 - 根据 v$sql等视图提供的统计信息,分析和调优SQL语句的性能。

  7. 监控数据库性能 - 检查 v$sysstat 等视图,分析系统的性能指标是否正常。

  8. 审计用户操作 - 查询 dba_audit_trail 等审计相关视图,核查数据库的访问日志。

  9. 定位问题根源 - 综合各视图的信息,快速定位数据库故障的原因。

  10. 制定维护策略 - 根据性能和统计信息,合理规划空间、索引等方面的维护策略。

熟练利用数据字典可以极大提高Oracle数据库的管理和维护效率。

作为一名开发人员,该如何使用数据字典

作为Oracle开发人员,可以这样使用数据字典提高工作效率:

  1. 查询表结构 - 使用user_tab_columns等视图快速获取表的列信息,确认开发需求。

  2. 检查依赖关系 - 通过user_dependencies等视图分析对象依赖,评估变更影响。

  3. 设计索引 - 根据user_indexes等视图设计合理的索引,优化查询性能。

  4. 编写SQL - 参考v$sql_plan等视图中的示例SQL语句,提高SQL编写能力。

  5. 分析执行计划 - 通过v$sql_plan等视图检查SQL执行计划的合理性。

  6. 定位性能问题 - 使用v$sess_time_model等视图分析SQL的瓶颈所在。

  7. 评估资源使用 - 检查v$resource_limit等视图评估内存、IO使用情况。

  8. 排查代码错误 - 分析user_errors等视图快速定位代码bug。

  9. 审核权限需求 - 使用user_tab_privs等视图审核程序需要的权限。

  10. 测试数据管理 - 使用recyclebin等视图管理测试环境中的测试数据。

充分利用数据字典可以显著提升开发效率和代码质量。

posted @ 2023-07-27 16:59  BBBone  阅读(54)  评论(0编辑  收藏  举报