Oracle数据库数据编程SQL<6.2 数据字典表之间的关联关系>
Oracle的数据字典表之间存在复杂的关联关系,理解这些关系对于高效查询数据库元数据至关重要。以下是主要数据字典表之间的关联关系分析。
目录
一、核心关联关系图
二、主要关联关系详解
1. 对象级关联
2. 存储结构关联
3. 权限关联
4. 依赖关系关联
三、动态性能视图(V$)关联
1. 会话与SQL关联
2. 锁与会话关联
3. 等待事件关联
四、数据字典与性能视图的关联
五、实用关联查询示例
1. 查找大表及其索引
2. 查找无效对象及其依赖
3. 用户权限全景图
六、关联关系总结表
一、核心关联关系图
DBA_OBJECTS ← (1:N) → DBA_TABLES/DBA_VIEWS/DBA_INDEXES等
↑
DBA_USERS
↓
DBA_SEGMENTS ← (1:1) → DBA_EXTENTS
↑
DBA_TABLESPACES ← (1:N) → DBA_DATA_FILES
二、主要关联关系详解
1. 对象级关联
DBA_OBJECTS是核心表,与其他对象类型表通过OBJECT_ID
和OWNER
关联:
-- 表与对象的关联
SELECT o.owner, o.object_name, o.object_type, t.tablespace_name
FROM dba_objects o
JOIN dba_tables t ON o.owner = t.owner AND o.object_name = t.table_name
WHERE o.object_type = 'TABLE';
-- 索引与对象的关联
SELECT o.owner, o.object_name, i.index_type, i.table_owner, i.table_name
FROM dba_objects o
JOIN dba_indexes i ON o.owner = i.owner AND o.object_name = i.index_name
WHERE o.object_type = 'INDEX';
2. 存储结构关联
存储层次关系:表空间 → 数据文件 → 段 → 区 → 块
-- 表空间与数据文件
SELECT ts.tablespace_name, df.file_name, df.bytes/1024/1024 "Size(MB)"
FROM dba_tablespaces ts
JOIN dba_data_files df ON ts.tablespace_name = df.tablespace_name;
-- 表与段、区的关联
SELECT t.owner, t.table_name, s.segment_name, s.segment_type,
COUNT(e.extent_id) "Extent Count"
FROM dba_tables t
JOIN dba_segments s ON t.owner = s.owner AND t.table_name = s.segment_name
JOIN dba_extents e ON s.segment_name = e.segment_name AND s.owner = e.owner
GROUP BY t.owner, t.table_name, s.segment_name, s.segment_type;
3. 权限关联
-- 用户与系统权限
SELECT u.username, p.privilege, p.admin_option
FROM dba_users u
JOIN dba_sys_privs p ON u.username = p.grantee;
-- 用户与角色
SELECT u.user