技巧归纳 | 4分钟
达梦数据库查看所有表的数据条数
十月 11, 2025
达梦数据库

横向进某系统拿到一个达梦数据库凭证,我的Navicat貌似没有连接达梦数据库的选项,也没有通过 jdbc 连接的选项。所以使用一个叫SQLark的工具,跟Navicat很像。

进了一个数据库,执行select * from v$version;发现是达梦数据库V8,国产数据库了解不多。用户是SYSDBA

某个库里面表太多了,三百多个表,表名很多都是USER结尾,但打开都是空的,但是看数据库体积有很大,想统计每个表数据条数然后,看最多的几个。

但是搜了全网,达梦不支持这种视图,找到的一个方法是 新建一个表,然后每个数据塞进去:https://developer.baidu.com/article/details/2858872

这绝对不符合规定的。

所以另辟蹊径

先查当前用户能访问多少表

注意不要用 select * from user_tables; 查询当前用户的表,因为很有可能就俩 ## 开头的表,这俩表属于当前用户,但是不代表当前用户只能看这两个。

我们要查当前用户能访问哪些表:

sql
1SELECT OWNER, TABLE_NAME FROM ALL_TABLES;

然后筛选一下库,因为SYS库里太多无用的表。

sql
1SELECT OWNER, TABLE_NAME FROM ALL_TABLES where OWNER='库名';

然后一个个表查,不过要批量查

将所有表名构造成如下格式(下面代码块只是格式示例。不是具体执行语句):

sql
1SELECT 'SYSOBJECTS' AS table_name, COUNT(*) AS row_count FROM SYSOBJECTS
2UNION ALL
3SELECT 'SYSINDEXES' AS table_name, COUNT(*) AS row_count FROM SYSINDEXES
4UNION ALL
5SELECT 'SYSCOLUMNS' AS table_name, COUNT(*) AS row_count FROM SYSCOLUMNS;

我建议用表格工具构造,类似:

左边语句表名中间语句表名
SELECT 'SYSOBJECTS’ AS table_name, COUNT(*) AS row_count FROMSYSOBJECTS
SELECT 'SYSINDEXES’ AS table_name, COUNT(*) AS row_count FROMSYSINDEXES
SELECT 'SYSCOLUMNS’ AS table_name, COUNT(*) AS row_count FROMSYSCOLUMNS

然后复制到文本编辑器,把制表符删去,开启正则替换:换行符 \n 替换为 \nUNION ALL\n,这样就能在每行里面加入联合查询的语句。把最后一行的UNION ALL删掉,补个;即可构成语句。

然后打开对应库的查询窗口执行语句(不要打开错视图了,查SYS就打开SYS库的查询窗口,查其他库就打开相应查询窗口,错了会显示无效的表或视图名),就能获得所有表的数据条数。

然后终于在三百多个表中找到了存储大量用户数据的表,例图: