DB2日常维护命令

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 表名')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值