逻辑和物理存储结构之间的关系
逻辑和物理存储结构之间的关系
物理数据库结构
Oracle数据库的主要物理结构包括:
- 数据文件:
- 存储数据库对象数据,如表、索引的数据块。
- 控制文件:
- 记录数据库结构信息,用于实例恢复。
- 联机重做日志文件:
- 存储数据库事务操作产生的重做记录。
- 参数文件:
- 描述数据库实例的参数配置信息。
- 口令文件:
- 存储数据库用户的鉴权信息。
- 警告日志、跟踪文件:
- 记录数据库运行时的错误、性能统计等信息。
- 归档重做日志文件:
- 存档的重做日志,用于数据库恢复。
- 备份文件:
- RMAN自动或手动生成的数据库备份文件。
- 导出文件:
- 数据泵导出的转储文件。
这些文件和日志在磁盘上组织存储,构成了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数据库的主要逻辑结构包括:
- 数据结构:
- 表,视图等数据库对象,组织存储业务数据。
- 元数据结构:
- 数据字典,包含了数据库对象、用户等元数据。
- 存储结构:
- 表空间、段等逻辑存储单元,保存数据库对象。
- 程序结构:
- 存储过程、函数、包、触发器等PL/SQL程序。
- 事务结构:
- 保证数据库修改的完整性。
- 锁结构:
- 控制并发访问数据库对象。
- SQL执行结构:
- 解析、优化、执行SQL语句。
- 内存缓存结构:
- 缓冲区、共享池等,加速访问。
- 网络结构:
- 监听器、数据库链接支持网络连接。
这些逻辑结构决定了Oracle数据库系统的功能、性能以及实施业务逻辑的能力。
数据结构
Oracle数据库中的主要数据结构包括:
- 表(Table)
- 存储数据记录的基本结构,包含行和列。
- 视图(View)
- 虚拟表,显示查询结果,不存储实际数据。
- 索引(Index)
- 提高查询速度的数据库对象,有B树索引,位图索引等。
- 同义词(Synonym)
- 可替换表名的别名,隐藏基表信息。
- 序列(Sequence)
- 生成连续编号的对象,通常用于主键。
- 物化视图(Materialized View)
- 预先计算和存储查询结果的视图。
- 外部表(External Table)
- 使用外部文件的数据的虚拟表。
- 分区表(Partitioned Table)
- 将大表分解为多个分区以提高管理效率。
合理运用这些数据结构可以优化数据库的存储,查询性能,以及维护工作。
元数据结构
Oracle数据库的主要元数据结构包括:
- 数据字典
- 存储数据库对象、用户、权限等元数据的信息库。
- 数据库目录
- 描述数据库文件的物理存储信息。
- 全局数据字典
- 在分布式数据库中,集中存储所有数据库字典信息。
- 系统表和视图
- 以表和视图结构存储数据字典和数据库目录数据。
- V$动态性能视图
- 提供数据库状态和性能统计信息的视图。
- 环回分析
- 通过分析v$系统表来监控和优化数据库。
- DBA_表、ALL_表、USER_表
- 存储每个用户可访问的字典对象和信息。
- 导出字典
- 将字典对象结构和数据导出以便于分享和迁移。
- 字典缓存
- 在SGA中缓存经常查询的字典数据。
元数据对于数据库正常运行以及数据库管理至关重要。
存储结构
Oracle数据库的主要存储结构包括:
- 表空间(Tablespace)
- 逻辑存储单元,包含数据文件。
- 数据文件(Datafile)
- 物理上存储数据块的操作系统文件。
- 段(Segment)
- 表空间中存储表、索引等数据库对象的逻辑存储单元。
- 区(Extent)
- 段中的一组连续数据块。
- 数据块(Data Block)
- 数据库对象存储的最小逻辑单元。
- Slot
- 数据块内部结构,存储行数据。
- LOB
- 存储大对象的内部结构。
- 簇(Cluster)
- 存储相关表的数据块的组合。
- 块(Block)
- 操作系统读写的最小物理单元。
合理组织这些存储结构,可以优化Oracle的存储效率。
程序结构
Oracle数据库中的主要程序结构包括:
- 存储过程(Stored Procedure)
- 数据库中存储和执行的PL/SQL程序。
- 函数(Function)
- 与存储过程类似,但可以返回值。
- 包(Package)
- 相关程序的集合,分包规范和包主体。
- 触发器(Trigger)
- 在某事件发生时自动执行的PL/SQL代码块。
- 数据库链接(Database Link)
- 连接到另一个数据库的通道。
- SQL翻译器
- 分析和转换SQL语句的组件。
- SQL执行计划
- 由优化器生成的SQL执行步骤。
- 调度程序(Scheduler)
- 用于计划和执行任务。
- 作业(Job)
- 由调度程序执行的数据库任务。
Oracle程序结构扩展了数据库的功能。
事务结构
Oracle数据库的事务结构主要包括:
- 事务(Transaction)
- 一组DML语句,作为一个不可分割的工作单位执行。
- 提交(Commit)
- 提交事务,持久化事务的修改。
- 回滚(Rollback)
- 取消事务,撤销未提交的修改。
- 保留点(Savepoint)
- 事务中设置 intermediate 的提交点。
- 读一致性(Read Consistency)
- 同一事务看到数据的一致视图。
- 并发控制
- 协调事务之间对数据的访问。
- 冲突检测与排队
- 检测并解决访问冲突的机制。
- 锁(Lock)
- 在数据上加锁以防冲突。
- 死锁检测(Deadlock Detection)
- 检测事务间的循环等待并取消事务。
事务结构保证了数据库修改的完整性和一致性。
锁结构
Oracle数据库中的主要锁结构包括:
- DML锁
- 控制对行(Row)级数据的访问,如行级排他锁/共享锁。
- DDL锁
- 在修改对象结构时加锁,如Alter Table时的表锁。
- 内部锁
- 保护内部数据结构,如数据字典缓存的字典锁。
- 全局资源锁
- 串行访问全局资源,如在启用联机备份时的备份锁。
- 自我死锁预防锁
- 防止同一会话对同一资源重复请求锁。
- Latch
- 轻量级控制机制,如保护内存结构的latch。
- 全局事务锁
- 在分布式数据库环境中协调事务。
- 簇锁
- 加在整个簇(Cluster)上的锁。
- 表分区锁
- 对分区表的各分区加锁。
锁机制保证了数据库中数据访问的一致性和完整性。
SQL执行结构
Oracle数据库执行SQL语句主要涉及以下几个结构:
- SQL解析器
- 检查语法并转换为内部格式。
- 优化器
- 根据统计信息生成执行计划。
- 行源生成器
- 根据计划获取表和索引的数据。
- 哈希聚合
- 对行源进行哈希聚合操作。
- 排序
- 对行源进行排序。
- 连接器
- 实现多表连接查询。
- 分组器
- 根据GROUP BY进行分组。
- 分区器
- 对分区对象访问进行分区剪枝。
- 并行执行
- 根据需求进行并行计算。
- 结果集
- 输出和传递SQL查询的结果集。
Oracle通过这些结构高效执行SQL语句。
内存缓存结构
Oracle数据库的主要内存缓存结构包括:
- 数据库缓冲区缓存
- 缓存经常访问的数据块,避免磁盘IO。
- 字典缓存
- 加速访问数据字典项的缓存。
- SQL执行计划
- 缓存SQL和它的优化执行计划。
- SQL语句解析树
- 缓存解析过的SQL语句,避免重复解析。
- PL/SQL程序
- 缓存可复用的PL/SQL函数、过程等。
- 表定义缓存
- 缓存经常使用的表结构定义信息。
- 排序区
- 用于SQL语句排序操作的内存区域。
- 分组区
- 用于GROUP BY操作的内存工作区。
- 分区缓存
- 缓存分区位置信息,提高分区表访问速度。
- 结果集缓存
- 缓存SQL查询结果集,实现重新使用。
利用这些缓存机制,可以大大提升数据库性能。
网络结构
Oracle数据库的主要网络结构包括:
- 监听器
- 监听客户端连接请求的后台进程。
- 接受者进程
- 接受客户端连接,创建服务进程的后台进程。
- 调度程序进程
- 将连接请求分配给共享服务器进程。
- 共享服务器进程
- 为客户端提供服务的进程。
- 专用服务器进程
- 专为一个客户端创建的服务进程。
- 数据库链接
- 连接两个数据库实例用于分布式查询。
- Net服务名
- 客户端用于连接的Oracle网络服务名。
- SQL*Net
- Oracle的网络通信协议。
- TNS列表
- 记录网络服务名称和连接信息。
- Oracle网关
- 与非Oracle系统的数据交换的接口。
这些网络结构支持客户端访问以及在分布式系统中的数据交互。
数据字典
对于Oracle数据库,其自带了数据字典的功能,主要包含以下组成部分:
- 数据字典表
Oracle中的数据字典表存放的是数据库自身的元数据,如用户、表空间、数据文件、用户对象等的定义信息。主要的字典表包括:
- USER_TABLES - 用户拥有的表信息
- USER_TAB_COLUMNS - 用户拥有的表列信息
- USER_PROCEDURES - 用户的存储过程信息
- DBA_TABLESPACES - 系统的表空间信息
等等。这些表可以通过SQL查询来查看数据库的设计信息。
-
动态性能表(V$ views)
V$开头的视图包含了数据库当前运行状态的信息,如系统资源使用情况、会话信息、性能统计数据等。如V$SESSION、V$PROCESS等。 -
包和字典视图
DBMS_METADATA包可以提取数据库对象的元数据。数据字典视图以DICT开头,提供了对系统 catalog 的读取接口。 -
数据字典缓存
将 recentlyaccessed 数据字典信息缓存到SGA中,提高读取速度。 -
企业管理器
图形界面管理工具,可以浏览、查询数据库的结构信息。
综上,Oracle的数据字典为数据库的配置、性能监控和故障排查提供了详细信息支持,是Oracle数据库管理的重要组成部分。
语法
Oracle中的数据字典主要可以通过以下方式进行访问:
- 系统表
这些表存储在系统表空间中,记录了Oracle数据库的元数据,可以直接用SELECT语句查询,例如:
SELECT * FROM all_tables WHERE table_name = 'EMPLOYEES';
- 字典视图
字典视图是对系统表的封装,提供了更方便的查询接口,通常以DICT或V$开头,例如:
SELECT * FROM DICT WHERE table_name = 'TABLES';
- 动态性能视图
动态性能视图以V$开头,提供实时的数据库状态和性能数据,例如:
SELECT * FROM V$SESSION;
- 包DBMS_METADATA
可以通过该包提取数据库对象的元数据,例如:
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYEES') FROM DUAL;
- 企业管理器
图形界面管理工具,可以浏览和查询数据库结构信息。
所以Oracle数据字典访问的主要语法构成是:
-
通过直接 SELECT 查询系统表
-
使用字典视图和动态性能视图
-
调用 DBMS_METADATA 包的函数
-
企业管理器图形操作
实例
这里给出一些Oracle数据字典的查询示例:
- 查询用户SCOTT下的所有表:
SELECT TABLE_NAME
FROM USER_TABLES
WHERE TABLESPACE_NAME = 'USERS'
- 查询表EMP的结构:
SELECT COLUMN_NAME, DATA_TYPE, NULLABLE
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'EMP'
- 查询用户的所有存储过程:
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'PROCEDURE'
- 查询BUFFER_POOL_STATISTICS的信息:
SELECT * FROM V$BUFFER_POOL_STATISTICS
- 使用DBMS_METADATA提取表定义:
SELECT DBMS_METADATA.GET_DDL('TABLE','EMP') FROM DUAL
- 使用数据字典视图查询表空间信息:
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数据库的重要工具,它记录了数据库内部的关键元数据信息。合理利用数据字典可以给生产环境带来以下效益:
- 更好地理解数据库结构
数据字典包含了表、视图、索引等对象的详细信息,可以快速了解数据库的组织结构。
- 更高效的数据库管理
借助数据字典可以方便地查询和管理数据库对象,而无需记住所有对象名称。
- 更准确地诊断问题
分析数据字典信息可以找到数据库对象之间的关联性,协助定位潜在问题。
- 优化性能调整方案
根据数据字典中的统计信息制定索引、分区等调优方案。
- 加快新应用开发
开发人员可以使用数据字典快速确定对象名,提高开发效率。
- 强化安全控制
通过数据字典分析权限和审计信息,找到并防范安全隐患。
- 主动式管理数据库
定期检查数据字典信息,可以发现数据库的变化并作出调整。
- 建立最佳实践
根据数据字典统计信息不断优化和改进数据库配置。
总之,合理利用数据字典可以让DBA更高效地管理Oracle数据库,将最大限度发挥其效能并保证高可靠性。
作为一名运维人员,该如何使用数据字典
作为Oracle数据库的运维人员,可以这样使用数据字典来辅助工作:
-
查询表结构 - 使用 user_tab_columns 等视图查询表的列信息,快速了解表结构。
-
查询索引信息 - 通过 user_indexes 等视图查看表的索引,检查索引是否合理。
-
检查对象依赖 - 使用 user_dependencies 等视图分析对象之间的依赖关系。
-
查看用户权限 - 使用 user_tab_privs等视图检查用户的权限分配情况。
-
分析系统使用情况 - 使用 v$tables等视图统计系统中的对象数,估算系统资源使用情况。
-
优化SQL执行 - 根据 v$sql等视图提供的统计信息,分析和调优SQL语句的性能。
-
监控数据库性能 - 检查 v$sysstat 等视图,分析系统的性能指标是否正常。
-
审计用户操作 - 查询 dba_audit_trail 等审计相关视图,核查数据库的访问日志。
-
定位问题根源 - 综合各视图的信息,快速定位数据库故障的原因。
-
制定维护策略 - 根据性能和统计信息,合理规划空间、索引等方面的维护策略。
熟练利用数据字典可以极大提高Oracle数据库的管理和维护效率。
作为一名开发人员,该如何使用数据字典
作为Oracle开发人员,可以这样使用数据字典提高工作效率:
-
查询表结构 - 使用user_tab_columns等视图快速获取表的列信息,确认开发需求。
-
检查依赖关系 - 通过user_dependencies等视图分析对象依赖,评估变更影响。
-
设计索引 - 根据user_indexes等视图设计合理的索引,优化查询性能。
-
编写SQL - 参考v$sql_plan等视图中的示例SQL语句,提高SQL编写能力。
-
分析执行计划 - 通过v$sql_plan等视图检查SQL执行计划的合理性。
-
定位性能问题 - 使用v$sess_time_model等视图分析SQL的瓶颈所在。
-
评估资源使用 - 检查v$resource_limit等视图评估内存、IO使用情况。
-
排查代码错误 - 分析user_errors等视图快速定位代码bug。
-
审核权限需求 - 使用user_tab_privs等视图审核程序需要的权限。
-
测试数据管理 - 使用recyclebin等视图管理测试环境中的测试数据。
充分利用数据字典可以显著提升开发效率和代码质量。