1.检查是否有僵尸进程
ps -emo THREAD | grep -i Z | grep -i 实例名
2.处理死锁
--第一步:查看所有死锁
db2 get snapshot for locks on <db_name>
select agent_id,tabname,lock_mode from table(snap_get_lock('<db_name>')) as aa where aa.tabname is not null;
--第二步:查看该死锁产生的进程
db2 get snapshot for application agentid ***(具体的agentid) 得到某个agentid关联的进程ID以及相关信息。
--第三步:KILL死锁
db2 "force application(agentid value)"
3.数据导出导入
导出方法:
方法1:export to d:\table1.del of del select * from 表名; 或者 export to d:\table1.ixf of ixf select * from 表名;
方法2:
db2look -d 数据库名 -e -l -u 导出用户 -z 导出模式名 -t 表名 -i 登录用户 -w 登录用户密码 -o 输出结果文件【指定表相关的DLL导出】
db2look -d 数据库名 -e -l -u 导出用户 -z 导出模式名 -v 试图 -i 登录用户 -w 登录用户密码 -o 输出结果文件【指定表相关的DLL导出】
db2look -d 数据库名 -e -l -a -i 登录用户 -w 登录用户密码 -o 输出结果文件 【这是导出整库的DDL】
db2move 数据库名 export -u 数据库用户 -p 密码 [这是整库数据导出]
导入方法:
方法1:import from d:\table1.del of del insert into 表名; 或者 import from d:\table1.ixf of ixf insert into 表名;
import from d:\table1.ixf of ixf savecount 1000 messages insert into 表名;// 其中,savecount表示完成每1000条操作,记录一次.
方法2:load from d:\table1.ixf of ixf insert into 表名; 或者 load from d:\table1.ixf of ixf replace into 表名; // 装入数据前,先删除已存在记录
load from d:\table1.ixf of ixf modified by identityignore insert into 表名; // 存在自增长字段
[注意]:使用load的性能要比import要好
方法3:无需中间文件的导入导出方法:
declare c1 cursor for select * from 表名;
load from c1 of cursor messages d:\mes.msg insert into 表名; // messages选项可以记录日志
方法4:
db2 -tvf 导出.sql -z 导入过程.log
db2 -tvd@ -f 存储过程.db2 (.db2后缀名可以任意)
方法5:
db2move 数据库名 import -io replace -u 数据库用户 -p 密码
4.查看当前活动实例
db2 get instance
5.启动/停止数据库服务
db2start / db2stop (force)
6.激活数据库实例
db2 activate database <db_name>
7.查看激活状态的数据库
db2 list active databases
8.失效数据库实例
db2 deactivate database <db_name>
9.查看数据库当前版本
db2level
10.数据库连接
断开连接但不释放资源:db2 connect reset
断开连接并释放资源:db2 terminate
连接:db2 connect to <db_name> user <user> using <pwd>
11.查看数据库配置参数
db2 list db directory
12.自动提交
db2=> update command options using C off --临时关闭自动提交
db2=> update command options using C on --临时开启自动提交
13.查看连接数据库的应用
db2 list applications
db2 list applications show detail
db2 get snapshot for application agentid *** 可以查看当前连接数据库的应用详情, ***为 db2 list applications 的 application handle
14.查看数据库表空间
db2pd -db <db_name> -tablespace
15.查看数据库配置
db2 get db cfg for <db_name>
16.查看配置实例参数
db2 get dbm cfg ; db2 update dbm cfg using ... ; db2 reset dbm cfg (恢复默认参数); 实例配置参数保存在 sqllib/db2systm文件中
17.查看配置DAS实例参数
db2 get admin cfg ; db2 update admin cfg using ...; db2 reset admin cfg ;
18.删除数据库
db2 drop db <db_name> (如果不能删除,尝试断开激活的连接或者重启db2)
19.删除实例
db2idrop -f 实例名 (加-f是为了删除sqllib,否则下次再建用例时会报错)
20.查看实例
db2ilist
21.系统启动自动启动实例
db2iauto -on 实例名 db2iauto -off 实例名
22.查看das用户
daslist
23.创建das实例
dasicrt 实例名
24.启停管理服务器(即das实例)
db2admin start/stop , 一个机器上如果装多个db2版本的产品, 也是共享一个das实例, 若das创建时是基于A版本的db2, A版本升级后,也要用A版本的dasupdt升级一下das实例。 若升级的是其他版本的db2, 则das可不用升级。
25.删除das用户
dasdrop 用户名
26.列出系统表
db2 list tables for system
27.列出所有用户表
db2 list tables
28.列出所有表
db2 list tables for all
29.列出特定用户表
db2 list tables for schema [user]
select name from sysibm.systables where type='T' and creator = '创建者';
30.系统环境变量
DB2INSTANCE , 设置当前活动实例
31.实例参数
DFTDBPATH 设置数据库安装路径
32.创建数据库
db2 create db <db_name>
(dft_extent_sz 4
catalog tablespace managed by database using (FILE 'C:\111.dat' 2000, FILE 'C:\222.dat' 2000) extentsize 8 prefetchsize 16
temporary tablespace managed by system using ('C:\333.dat', 'C:\444.dat')
user tablespace managed by database using (FILE 'C:\555.dat' 1200 extentsize 24 prefetchsize 48)
automatic storage on path1,path2
autoresize yes
initialsize 200M
increasesize 20%
maxsize none
using codeset GBK territory CN )
automatic storage--默认设置,设置数据库为自动存储,即DMS自动存储
autoresize yes--表空间用光时,自动扩展
initialsize 200M--初始表空间大小为200MB, 每个容器100MB, 因为指定了两个path.
maxsize none--不限制表空间最大大小
using codeset=GBK territory=CN--指定数据库代码页为中文
using codeset=UTF-8 territory=US 指定代码页为unicode编码,可支持XML数据
33.表空间操作
--创建表空间
db2 create tablespace <name> managed by automatic storage; DMS自动存储的数据库建立表空间, managed by可省略。
db2 create tbalespace <name> managed by system using () ; 未开启自动存储的数据库使用SMS方式建立表空间
db2 create tbalespace <name> managed by database using () extentsize 4; 未开启自动存储的数据库使用DMS方式建立表空间
extentsize 4--每个容器最多写入4个数据页; extentsize 4M--每个容器最多写入4M大小的数据
prefetchsize 4--从表空间预获取的数据页数量; prefetchsize 4M--预获取数据大小
--表空间查询
db2 list tablespaces
34.复制一张表
db2 create table t1 like t2
35.显示表结构
db2 describe table tablename
36.执行SQL脚本
db2 -tvf scripts.sql
37.查看错误代码信息
db2 ? 10054
38.停止激活的连接
db2 force application all;
db2 "force application(***某agentid)"
39.监控DB2消耗多的SQL语句
eg:(DB_NAME=SUNDB)
db2top -d SUNDB -----查看消耗资源 按照提示按 l,出现Application Handle,找到资源消耗大的Application Handle(stat)
记下app handle。
db2pd -d SUNDB -dyn -application > /tmp/db2pd1.txt ----到处会话语句,准备进行调优
40.设置连接方式(重启才会生效,新建实例和数据库后,若不设置此项,则远程客户端无法进行连接)
db2set DB2COMM=tcpip
db2set DB2COMM=
41.建立远程编目
db2 catalog tcpip node 本地节点名称(随意取名) remote IP地址 server 端口
db2 catalog db 远程数据库名称 as 本地别名 at node 本地节点名称
db2 catalog db 本地数据库名称 on 本地数据库所在目录(可通过DB2PATH环境变量查看)
db2 uncatalog node 本地节点名称 (删除节点编码)
db2 uncatalog db 远程数据库名称 (删除数据库编目)
db2 list node directory 查看编目信息
42.查看SQL的执行计划
db2expln -d 数据库名称 -u 用户名 密码 -statement "SQL语句(不加分号)" -terminal -g
43.
数据库版本变更后,迁移实例
db2imigr (大版本变更使用,比如从V8升级到V9)
db2iupdt (小版本变更使用,比如从v8.1升级到v8.2)
44.连接实例
db2 attach to 实例名
45.断开实例
db2 detach
46.创建实例
db2icrt -p 50000(端口) -u dbfenc(这是受防护用户) dbinst(这是实例名)
db2icrt -d ... > debug.log 加上-d参数可以生成debug日志,检查实例创建失败原因
47.DAS
一个用于远程管理其他实例的特殊实例。 只有用图形工具远程控制时需要。用命令行远程控制不需要。
48.db2授权
GRANT DBADM ON DATABASE TO USER 用户名
49.自增序列
CREATE TABLE CUSTOMERS
(ID INT NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
NAME CHAR(10) NOT NULL DEFAULT 'NO NAME' );
或者:
CREATE TABLE SYSINFO
(ID INT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 10 INCREMENT BY 10),
NAME CHAR(10) NOT NULL DEFAULT 'NO NAME' ) ---这种写法可以手工指定自增序列的值,前者只能系统指定。
alter table TAB_NAME alter column GENE_COL_NAME restart with 10; ---当前序列重置为10
50.显式控制db2不记录事务日志[当操作大量数据时使用,防止db2事务日志满]
alter table table_name activate not logged initially;
各种SQL操作
commit; ---commit之前的SQL都不记录事务日志,可以防止事务日志超限的问题,即执行大批量的数据插入等操作,commit之后事务日志恢复默认记录
51.查看数据库读写比
db2 get snapshot on databases global
列出的参数中Rows selected 就是SQL语句得到的结果集记录数A, Rows read 就是SQL语句一共扫描过的记录数B, A/B即为读写比,比例越高代表SQL语句效率越高
52.查看数据库表空间对应的缓冲池
db2pd -d 数据库名称 -tab
得到的结果中,Name列即为表空间名称,Id列即为表空间对应的缓冲池标识符
53.查看缓冲池使用命中率
db2pd -d 数据库名称 -buff
得到结果中,可以查看缓冲池的信息,包括总大小,命中率。 PageSz列即为每数据页的大小,单位为Byte,PA-NumPgs即为缓冲区占用的数据页数, 两者相乘即为缓冲区大小。
HitRatio列即为命中率,即查询的SQL有多少能直接在缓冲区中立即使用。
54.查看表分区信息
db2 describe DATA PARTITIONS for table 表名 show detail
select * from syscat.datapartitions where tabname in ('大写表名');--只有1个part0分区代表不是分区表
select name,tbspace,index_tbspace from sysibm.systables where type='T' and creator = '模式名' and name='大写表名' --若tbspace和index_tbspace都为空,也能说明这是分区表
55.索引信息操作
select * from syscat.indexes where tabname='大写表名';--列出表非分区索引
select * from syscat.indexpartitions where tabname = '大写表名';--列出表分区索引,可以以此判断索引是否为分区索引
create index 索引名 on 表名(索引字段) partitioned; --创建分区索引, 默认都是分区索引
create index 索引名 on 表名(索引字段) not partitioned; --创建非分区索引
db2 runstats on table 表名 with distribution and detailed indexes all --创建索引后立即生效
56.DDL语句备忘
alter table 表名 alter column 字段名 restart with ***; 修改表中自增主键起始值
57.解决SQL0668N Operation not allowed for reason code “7” on table XXX
CALL SYSPROC.ADMIN_CMD('reorg table 表名')
CALL SYSPROC.ADMIN_CMD('runstats on table 表名')