上一篇
“小王,客户报表跑完了吗?”
“经理,我SQL写好了,但系统一直报‘表不存在’……”
“你查DB2 Catalog了吗?”
“啊?那是什么?”
如果你也遇到过这种对话,今天我们就来彻底搞懂DB2 Catalog——这个藏在数据库背后的“万能字典”。
简单说,它就是DB2数据库的“户口本”,所有数据库对象(表、视图、索引…)的元数据都登记在这里,当你执行SELECT * FROM EMPLOYEE
时,DB2会先翻Catalog确认:
关键点:
SYSCAT
模式下的系统表中(如SYSCAT.TABLES
) SYSIBM.SYSTABLES
) db2look
工具可导出Catalog结构 SELECT TABNAME FROM SYSCAT.TABLES WHERE TABSCHEMA = 'HR' AND TYPE = 'T'
输出示例:
PAYROLL
EMPLOYEE
DEPARTMENT
SELECT *
惨剧)SELECT COLNAME, TYPENAME, LENGTH FROM SYSCAT.COLUMNS WHERE TABNAME = 'ORDERS' ORDER BY COLNO
SELECT FK_NAME, PK_TABNAME, FK_COLNAMES FROM SYSCAT.REFERENCES WHERE PK_TABNAME = 'CUSTOMERS'
SELECT INDNAME, UNIQUERULE, COLNAMES FROM SYSCAT.INDEXES WHERE TABNAME = 'PRODUCTS'
SELECT TABNAME, NPAGES*4/1024 AS "Size_MB" FROM SYSCAT.TABLES WHERE TABSCHEMA = 'FINANCE'
“这破权限设置太麻烦,我直接改SYSCAT.TABAUTH
吧!”
后果:轻则报错SQL0551N
,重则数据库崩溃,正确做法是用GRANT/REVOKE
语句。
-- 自动更新(推荐新手) CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE SCHEMA.TABLE') -- 带采样设置(高级优化) RUNSTATS ON TABLE HR.EMPLOYEE WITH DISTRIBUTION AND DETAILED INDEXES ALL
某客户案例:DB2 Catalog增长到50GB导致性能下降,解决方案:
DECLARE GLOBAL TEMPORARY TABLE
REORG TABLE SYSCAT.INDEXES
重组系统表 在云数据库时代,DB2 Catalog的设计依然有价值:
SYSCAT.VIEWS
可追溯所有视图定义变更 下次遇到“表不存在”报错时,不妨先问问DB2 Catalog,就像老DBA常说的:
“读懂Catalog的人,数据库会对他/她敞开所有秘密。”
(注:本文操作基于DB2 12.0版本,测试环境使用2025年8月最新补丁包)
本文由 受绿夏 于2025-08-02发表在【云服务器提供商】,文中图片由(受绿夏)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/517320.html
发表评论