Oracle 查询用户下表名,表列数,表行数,表大小的SQL

oracle,查询,用户,表列,行数,大小,sql · 浏览次数 : 394

小编点评

## 数据库信息分析 SQL 以下是您的 SQL 代码的总结: ```sql SELECT x.table_name AS 表名, x.表行数, x.表列数, y.表大小 AS 表大小单位MB FROM ( SELECT b.table_name, a.num_rows AS 表行数, b.count1 AS 表列数 FROM user_tables a INNER JOIN ( SELECT table_name, count( column_name ) AS count1 FROM user_tab_columns GROUP BY table_name ) b ON a.table_name = b.table_name ORDER BY b.table_name ) x LEFT outer JOIN ( SELECT sum( tablesize ) AS 表大小, tablename AS tablename FROM ( SELECT sum( C.bytes ) / 1024 / 1024 AS tablesize, C.table_name AS tablename FROM ( SELECT A.table_name, B.bytes FROM user_lobs A, user_extents B WHERE A.segment_name = B.segment_name ) C GROUP BY C.table_name UNION ALL SELECT sum( bytes ) / 1024 / 1024 AS tablesize, segment_name AS tablename FROM user_extents WHERE segment_type = 'TABLE' GROUP BY segment_name ) GROUP BY tablename ORDER BY 1 DESC ) y ON x.table_name = y.tablename ORDER BY y.表大小 desc; ``` **总结:** * 代码首先使用 subquery 提取所有表的信息,包括表名称、行数和列数。 * 然后使用 left outer join 将所有表的信息与表大小信息进行关联。 * 代码最后按照表大小降序排列结果。 **注意:** * 代码中使用了 `order by` 子句,可能导致结果的排序顺序不按照预期。 * 您可以根据需要进行数据清理和修改。

正文

最近想分析下数据库的信息, 然后写了这个SQL. 比较lowB一些. 

因为Oracle的 deferred_segment_creation 参数的影响.
很多表如果是0行,那么是不会创建extents 存储信息.
所以很多取出来的表大小信息为空. 

这也就导致了查询结果表大小为空的情况. 
为了能够准确显示表信息, 我这边进行了 left outer join的操作

SQL比较简单未进行任何优化

有多个至少两重的关联子查询用来展示结果. 

 

具体SQL为:

SELECT
    x.table_name AS 表名,
    x.表行数,
    x.表列数,
    y.表大小 AS 表大小单位MB 
FROM
    (
    SELECT
        b.table_name,
        a.num_rows AS 表行数,
        b.count1 AS 表列数 
    FROM
        user_tables a
        INNER JOIN ( SELECT table_name, count( column_name ) AS count1 FROM user_tab_columns GROUP BY table_name ) b ON a.table_name = b.table_name 
    ORDER BY
        b.table_name 
    ) x LEFT outer
    JOIN (
    SELECT
        sum( tablesize ) AS 表大小,
        tablename 
    FROM
        (
        SELECT
            sum( C.bytes ) / 1024 / 1024 AS tablesize,
            C.table_name AS tablename 
        FROM
            ( SELECT A.table_name, B.bytes FROM user_lobs A, user_extents B WHERE A.segment_name = B.segment_name ) C 
        GROUP BY
            C.table_name UNION ALL
        SELECT
            sum( bytes ) / 1024 / 1024 AS tablesize,
            segment_name AS tablename 
        FROM
            user_extents 
        WHERE
            segment_type = 'TABLE' 
        GROUP BY
            segment_name 
        ) 
    GROUP BY
        tablename 
    ORDER BY
        1 DESC 
    ) y ON x.table_name = y.tablename 
ORDER BY
    y.表大小 desc 

具体效果就不描述了. 

与Oracle 查询用户下表名,表列数,表行数,表大小的SQL相似的内容:

Oracle 查询用户下表名,表列数,表行数,表大小的SQL

最近想分析下数据库的信息, 然后写了这个SQL. 比较lowB一些. 因为Oracle的 deferred_segment_creation 参数的影响. 很多表如果是0行,那么是不会创建extents 存储信息. 所以很多取出来的表大小信息为空. 这也就导致了查询结果表大小为空的情况. 为了能够准

[转帖]Oracle创建用户和表空间

一、概述 1.数据库实际管理中,不同业务系统需要使用’不同的用户'进行管理维护和使用,这样做把业务数据和系统数据独立分开管理,利于数据库系统管理; 2.在数据库中创建业务系统用户时候,建议为用户创建指定的用户表空间,否则全部默认为user表空间存储,使得user表空间容易过大,不易管理、查询。 二、

oracle并发与多版本控制

1 相关概念 1.1 并发控制 数据库对多个用户同时查询或者操作数据的管理。 1.2 多版本控制 oracle能物化多个版本的数据,使在一个时间点读一个表,保证在这个时间点读到的表数据是一致的。oracle的多版本控制机制是oracle提供读一致性的基础。 1.3 事务的作用 事务使数据库从一种一致

数据安全始终是一个不可忽视的问题

最近,自己的一个测试环境,遭遇了hacker攻击。 具体是oracle用户被攻破了,原因是该环境通过DDNS连接到了外网,而因为只是测试,没有注意安全防范,设置的口令过于简单。 下面记录下,也作为警醒。 1.发现资源使用异常 CPU告警,使用top去查询资源使用情况发现CPU使用率非常高,达到94%

小知识:使用oracle用户查看RAC集群资源状态

正常情况按照标准配置的环境变量,只能grid用户查看RAC集群资源状态。 crsctl stat res -t 但是绝大部分操作其实都是oracle用户来操作,比如启停数据库,操作完成以后就需要检查下集群资源状态。 看到好多DBA在现场操作时就是来回各种切换或开多个窗口。 其实有两个简单的解决方法可

小知识:grep过滤以#号开头的注释行 和 空行

xtts的配置文件,有很多注释不想直接去掉的情况下,想清楚的看到目前设置了哪些参数,可以用grep过滤查看: `grep -vE '^#|^$' xtt.properties` 效果如下: ```shell [oracle@db11gcas xtt]$ grep -vE '^#|^$' xtt.pr

[转帖]Oracle查看所有用户及其权限

https://www.cnblogs.com/huazhixu/p/15788803.html Oracle查看所有用户及其权限:Oracle数据字典视图的种类分别为:USER,ALL 和 DBA.USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息ALL_*:有关用户可以访问的对象的

[转帖]Oracle 创建和查看DBLink 的方法

https://www.cnblogs.com/zhouzangood/articles/4612441.html 1、如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: select * from user_sys_privs where privilege like

关于19c RU补丁报错问题的分析处理

本文演示关于19c RU补丁常见报错问题的分析处理: 1.查看补丁应用失败的原因 2.问题解决后可继续应用补丁 3.发现DB的RU补丁未更新 4.opatchauto应用DB补丁报错解决 1.查看补丁应用失败的原因 补丁应用失败有详细日志记录原因; 故意使用oracle用户解压补丁,然后测试是否可以

[转帖]GC overhead limit exceeded原因分析及解决方案

https://zhuanlan.zhihu.com/p/88956975 最近一个上线运行良好的项目出现用户无法登录或者执行某个操作时,有卡顿现象。查看了日志,出现了大量的java.lang.OutOfMemoryError: GC overhead limit exceeded错误。 oracl