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;

​​注意事项​​

  1. 权限问题​:需确保用户对系统目录视图(如SYSCAT.TABLES)有查询权限。
  2. 统计更新​:CARD和NPAGES字段的准确性依赖统计信息,建议定期执行:

CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE <模式名>.<表名>');

  1. 容量估算​:NPAGES为逻辑页数,实际物理空间可能因压缩或索引占用而不同。

​​扩展功能​​

  • 表结构详情​:通过DESCRIBE TABLE <表名>查看字段类型、长度等。
  • 索引与约束​:使用SYSCAT.INDEXES和SYSCAT.TABCONST查询索引和约束信息。

通过上述方法,可全面获取DB2表的元数据及存储信息,适用于数据库监控、优化及文档生成等场景。

 

posted @ 2025-05-10 10:29  业余砖家  阅读(115)  评论(0)    收藏  举报