oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示

发布于:2025-05-01 ⋅ 阅读:(28) ⋅ 点赞:(0)

oracle 查询指定用户下每个表占用空间的大小,倒序显示

使用场景:数据分析;导出医院正式库到开发环境时,查询出占用表空间高的业务表、导出时排除该表

在Oracle数据库中,要查询指定用户下每个表占用空间的大小并以倒序显示,可以使用数据字典视图DBA_SEGMENTS(或ALL_SEGMENTS,如果你有权限访问这些视图),结合DBA_TABLES(或ALL_TABLES)来获取相关信息。下面是如何实现这一查询的步骤:

说明:SUM(s.bytes) / 1024 / 1024 AS space_used_mb 这部分计算了总字节数并转换为MB(兆字节),以便更直观地显示空间使用量。

1. 使用DBA_SEGMENTS和DBA_TABLES

如果你有DBA权限,可以使用DBA_SEGMENTS和DBA_TABLES视图。这将提供该oracle实例下每个表的空间使用情况,但请注意,你需要有相应的权限。

SELECT 
    t.owner,
    t.table_name,
    SUM(s.bytes) / 1024 / 1024 AS space_used_mb
FROM 
    dba_segments s
JOIN 
    dba_tables t ON s.owner = t.owner AND s.segment_name = t.table_name
WHERE 
    s.segment_type = 'TABLE'
    AND t.owner = 'C##BBP402CYTJDEV41'  -- 替换为你的用户名
    -- and t.owner in('C##BBP402CYTJDEV41','C##AUDIT_USER') --或者使用in查询多个用户、如果不带owner查询条件、则查询实例下所有表占用空间
GROUP BY 
    t.owner, t.table_name
ORDER BY 
    space_used_mb DESC;

在这里插入图片描述

2. 使用USER_SEGMENTS和USER_TABLES(仅限当前用户)

如果你只想查看当前用户(schema)下的表空间使用情况,可以使用USER_SEGMENTS和USER_TABLES视图。

SELECT 
    t.table_name,
    SUM(s.bytes) / 1024 / 1024 AS space_used_mb
FROM 
    user_segments s
JOIN 
    user_tables t ON s.segment_name = t.table_name
WHERE 
    s.segment_type = 'TABLE'
GROUP BY 
    t.table_name
ORDER BY 
    space_used_mb DESC;

网站公告

今日签到

点亮在社区的每一天
去签到