IBM DB2 基础管理与常用命令速查
IBM DB2 基础管理与常用命令速查一、具体的问题
刚接手一台跑着 DB2 的服务器,最常见的尴尬是:不知道实例在不在跑、不知道里面建了几个库、连不进去、看不清表结构、备份命令也一时想不起来。这篇文章把"接管一台陌生 DB2"的标准动作串成一条线,照着敲就能把环境摸清楚,并沉淀出一份日常可复用的命令清单。
DB2 的命令体系分两层:一层是操作系统级的实例与数据库管理命令(db2start、db2stop、db2ilist 等),另一层是连进数据库后用 db2 "SQL 或特殊命令" 执行的语句。新手最容易混的就是这两层——以为敲了 db2 就能直接写 SQL,结果立刻报 SQL1024N 说没连库。本文先讲清结构,再给一条从头摸到尾的实操链。
二、核心原理
1. 实例、数据库、表空间三层结构
DB2 的层级是:实例(instance,一个操作系统用户对应一个)→ 数据库(database,挂在实例下)→ 表空间(tablespace,数据库的物理存储容器)→ 表与索引。一台机器可以跑多个实例(每个实例一个用户,如 db2inst1),一个实例下又能建多个库。理解了这层关系,很多"连不上"的问题就能定位到具体一层:是实例没起、库没激活、还是忘了 connect。
2. 命令的两层入口
[*]系统层命令直接敲:db2start 启动实例、db2stop 停止、db2ilist 看本机有哪些实例。
[*]连库后要用 db2 "SQL" 形式执行,例如 db2 "connect to SAMPLE",连上之后才能 db2 "select count(*) from syscat.tables"。注意 SQL 要包在双引号里;CLP 下分号可加可不加,但加上更清晰。
3. 编目(catalog)是远程连接的关键
本地库用 list db directory 能直接看到;远程库必须先编目节点再编目数据库,否则 connect 会报 SQL10007N。这一步是很多新人卡住的地方:在自己笔记本上连生产库,忘了先 catalog tcpip node 和 catalog database,折腾半天连不上还以为是账号问题。
三、实例参考(动手步骤)
下面以"只给你 IP、实例用户和口令的一台 DB2 主机"为例,给出完整可照做的排查链:
1) 看实例是否在跑:
ps -ef | grep db2sysc
db2ilist
若 db2ilist 列出 db2inst1 但进程不在,用 su - db2inst1 切到实例用户后再 db2start。
2) 列出本机有哪些库:
db2 list db directory
记下目标库名(如 SAMPLE)。若列表为空,说明库没建或者没编目进来。
3) 连库并验证可读:
db2 connect to SAMPLE
db2 "select count(*) from syscat.tables"
db2 "values current schema"
syscat.tables 是系统目录视图,能看到库里所有表,比 list tables 信息全。
4) 看单表结构(前后对比:连库前这句会报 SQL1024N,连库后正常返回列定义):
db2 describe table DB2INST1.EMPLOYEE
连库前执行 → SQL1024N 未连接;连库后 → 输出列名、类型、长度。
5) 抽一份建表语句做归档(db2look 自动导出 DDL,省得手敲):
db2look -d SAMPLE -e -z DB2INST1 -o sample_ddl.sql
生成的 sample_ddl.sql 包含库内所有表的建表语句,迁移或重建时直接跑即可。
6) 做一次在线备份(日常必做):
db2 backup db SAMPLE online to /db2backup compress
备份前先确认已开归档日志:db2 get db cfg for SAMPLE | grep LOGARCHMETH1,否则 online 备份会失败。
7) 看运行诊断与锁:
db2pd -db SAMPLE -locks
db2diag -gi "level=Error" | head -50
db2pd 是免连库的实时诊断工具,db2diag 看报错日志,定位问题极快。
四、实操检查清单
[*]接手新机第一件事:db2ilist 加 ps -ef | grep db2sysc 确认实例状态,没起就 db2start。
[*]永远先 db2 connect to <库> 再敲 SQL;看到 SQL1024N 就是忘了连库。
[*]远程连接务必先 catalog tcpip node 再 catalog database,否则连不上生产库。
[*]想知道库里有什么表,优先查 syscat.tables 系统视图,比 list tables 信息全。
[*]改库参数用 db2 update db cfg using <参数> <值>,改完需重启实例或重新激活才生效。
[*]备份前确认 LOGARCHMETH1 已设归档路径,否则 online 备份会直接报错。
[*]排查性能与锁用 db2pd 和 db2diag 这对组合,少走弯路。
[*]抽取 DDL 用 db2look,别手抄建表语句,避免漏列漏约束。
五、一个常被忽略的坑:参数改了不生效
曾有一次把日志缓冲参数调大,执行 db2 update db cfg using LOGBUFSZ 256 后以为立刻生效,结果监控显示没变。原因是数据库级参数改完需要重启实例(db2stop / db2start)或 db2 activate db SAMPLE 重新激活才加载新值,有的参数还要求所有连接先断开。教训很直接:改完参数后用 db2 get db cfg for SAMPLE | grep LOGBUFSZ 回读确认,看到是新值才算改成功,别凭"命令返回成功"就下结论。这个坑在交接环境时尤其容易翻车,因为前任可能改了一半没激活,你看到的运行值和配置值并不一致,光看配置会误判。
补充一条备份纪律:在线备份会依赖归档日志链,一旦 LOGARCHMETH1 是 OFF(循环日志),就只能做离线备份,且备份期间库不可写。生产环境务必在首次上线前就把归档打开,并定期验证备份文件能恢复——很多团队直到真出事才发现自己从没成功恢复过一次。
页:
[1]