DB2数据库系统表查询
通过系统目录视图(SYSCAT.TABLES/SYSCAT.COLUMNS)结合统计函数和存储过程实现,具体步骤如下:
1. 表名与表注释
SELECT TABSCHEMA AS 模式名, TABNAME AS 表名, REMARKS AS 表注释 FROM SYSCAT.TABLES WHERE TYPE = 'T' -- 过滤普通表
- 说明:直接从系统表SYSCAT.TABLES中获取表的基本信息,REMARKS字段为表注释。
2. 字段数量
SELECT TABSCHEMA AS 模式名, TABNAME AS 表名, COUNT(DISTINCT COLNAME) AS 字段数量 FROM SYSCAT.COLUMNS GROUP BY TABSCHEMA, TABNAME
- 说明:通过SYSCAT.COLUMNS统计每个表的列数,需与SYSCAT.TABLES关联。
3. 数据条目数(行数)
SELECT TABSCHEMA AS 模式名, TABNAME AS 表名, CARD AS 数据条目数 FROM SYSCAT.TABLES
- 说明:CARD字段为表的估算行数,但需先执行RUNSTATS命令更新统计信息以提高准确性。
4. 容量大小
SELECT t.TABSCHEMA AS 模式名, t.TABNAME AS 表名, (t.NPAGES * b.PAGESIZE) / 1024 / 1024 AS 容量大小_MB FROM SYSCAT.TABLES t JOIN SYSCAT.TABLESPACES b ON t.TBSPACE = b.TBSPACE
- 说明:NPAGES表示表占用的页数,乘以表空间页大小(如4KB/8KB)后转换为MB。
完整查询示例(综合所有信息)
SELECT t.TABSCHEMA AS 模式名, t.TABNAME AS 表名, t.REMARKS AS 表注释, (SELECT COUNT(*) FROM SYSCAT.COLUMNS c WHERE c.TABSCHEMA = t.TABSCHEMA AND c.TABNAME = t.TABNAME) AS 字段数量, t.CARD AS 数据条目数, (t.NPAGES * b.PAGESIZE) / 1024 / 1024 AS 容量大小_MB FROM SYSCAT.TABLES t JOIN SYSCAT.TABLESPACES b ON t.TBSPACE = b.TBSPACE WHERE t.TYPE = 'T' ORDER BY t.TABSCHEMA, t.TABNAME;
注意事项
- 权限问题:需确保用户对系统目录视图(如SYSCAT.TABLES)有查询权限。
- 统计更新:CARD和NPAGES字段的准确性依赖统计信息,建议定期执行:
CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE <模式名>.<表名>');
- 容量估算:NPAGES为逻辑页数,实际物理空间可能因压缩或索引占用而不同。
扩展功能
- 表结构详情:通过DESCRIBE TABLE <表名>查看字段类型、长度等。
- 索引与约束:使用SYSCAT.INDEXES和SYSCAT.TABCONST查询索引和约束信息。
通过上述方法,可全面获取DB2表的元数据及存储信息,适用于数据库监控、优化及文档生成等场景。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18869344

浙公网安备 33010602011771号