使用DB2数据库过程中常用的一些操作,总结了几点如下:
1.服务启停、连接
db2stop(正常停止、需要等待)
db2 force application all(强杀db2所有进程,由于异步进行,可能也需要等待)
db2start(启动服务)
db2 connect to $dbname user $username using $password
2.命令行执行sql文件
db2 -svtf sample.sql
3建立分区表
CREATE TABLE JCUST_SUB_ACCT_INFO (column1 …)
PARTITION BY RANGE(OPEN_DATE)
( STARTING '19/07/2016' ENDING '25/07/2016',
STARTING '26/07/2016' ENDING '30/07/2016')
4.表空间操作
查看表所在表空间
select tabname, tbspace from syscat.tables where tabname='JINTEGRAL_DATA_INFO'
查看表空间使用情况
select substr(tbsp_name,1,20) as表空间名称,substr(tbsp_content_type,1,10) as表空间类型,sum(tbsp_total_size_kb)/1024 as总大小M,
sum(tbsp_used_size_kb)/1024 as
已用大小
M,sum(tbsp_free_size_kb)/1024 as
可用大小
M,tbsp_page_size AS
页数
from SYSIBMADM.TBSP_UTILIZATIONgroup by tbsp_name,tbsp_content_type,tbsp_page_size order by 1
查看表空间使用情况 db2pd -d dbname -tablespaces
扩大表空间有3种方法:
扩展容器50G
db2 "alter tablespace tablespace_name extend (file '/data1/ts2/con0' 50G,file'/data1/ts2/con1' 50G)"
增加容器,不过会rebalance,影响系统性能
db2 "alter tablespace tablespacename add (file '/data1/ts2/con2'50G)"
通过altertablespace begin new stripe set选项,该选项不rebalance,不会对系统性能造成影响,但它会造成数据偏移。
db2 "alter tablespace tablespace_name begin new stripe set (file'/data1/ts2/con3' 10G)"
创建表空间:
create tablespace TS4R_INDEX
pagesize 4K
managed by database using(file 'E:\DNJC\TS4R_INDEX' 10G)
extentsize 32
bufferpool BP_4K
dropped table recovery off;
修改表空间大小(可改大改小),前提是表空间不是自增的
db2 "ALTER TABLESPACE TMP_JFXTTMB RESIZE (file'/home/db2inst1/database/jfxt/rlvtmp' 20G)"
表空间设为自增长:
db2 alter tablespace idx_data autoresize yes increasesize 10240K maxsize none;
查看表空间是否为自增长及增长大小:
db2 get snapshot for tablespaces on netdb |more;
查看表空间数据文件路径
db2 list tablespaces show detail
再根据表空间名称对应的编号,例如是5,则
db2 list tablespace containers for 5
db2pd -d jfxtdb -tablespaces
5.db2锁操作
查询锁
db2 get snapshot for locks on <dbname> (需要snapshot的访问权限)
解锁
找到锁的句柄编号,例如句柄为8,执行以下语句进行解锁
db2 "force application(8)"
db2数据库监控:
db2top -d <dbname> -n <nodename> -u <username> -p <passwd>-V skm4 -B -i 2
或者直接db2top -d <dbname>
6.db2日志文件配置修改
获取配置:db2 get db cfg for <dbname>
修改配置:
db2 update db cfg for <dbname> using LOGFILSIZ 4096
db2 update db cfg for <dbname> using LOGPRIMARY 20
db2 update db cfg for <dbname> using LOGSECOND 15
规定,主日志文件及辅助日志文件总个数共不能超过150个,修改完以后,重启db2服务,重启后用使用命令
db2 connect to <dbname> user <username> using <passwd>
连接连接数据库可能需要等待一段时间,看日志文件的多少和大小。
这个同时也是针对DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011(数据库的日志文件已满)的解决方法之一。
7.表操作不写事务日志
在一个事务中,执行表数据更新操作之前,先执行
ALTER TABLE JINTEGRAL_DATA_INFO ACTIVATE NOT LOGGED INITIALLY
该表就不再写日志,但是update、insert、delete操作不写事务日志只在单个事务内有效,commmit过后失效。
8.db2load & load游标
load清空表
db2 "LOAD FROM /dev/null OF DEL REPLACE INTO JINTEGRAL_DATA_INFO_HSTNONRECOVERABLE"
export导出数据
db2 "EXPORT TO data_hst.del OF DEL MODIFIED BY CODEPAGE=1208 NOCHARDEL COLDEL0x7C SELECT * FROMJINTEGRAL_DATA_INFO_HST"
load指定文件行数ROWCOUNT
db2 "LOAD FROM data_hst.del OF DEL MODIFIED BY CODEPAGE=1208CHARDEL0x22 COLDEL| ROWCOUNT 5000000 INSERT INTO JINTEGRAL_DATA_INFO_HST NONRECOVERABLE";
从游标load,区别于insert into... select * from ...,大数据量情况下只会产生极少的事务日志
db2 "DECLARE CUR2 CURSOR FOR SELECT * FROM JINTEGRAL_DATA_INFO ";
db2 "LOAD FROM CUR2 OF CURSOR INSERT INTO JINTEGRAL_DATA_INFO_HST NONRECOVERABLE";
9. db2load失败后查询及解除暂挂状态
db2 load query table JINTEGRAL_DATA_INFO_HST
db2 "load from /dev/null of del terminate into JINTEGRAL_DATA_INFONONRECOVERABLE"
10.查看表的ddl信息
db2look -d jfxtdb -t jfxt.JINTEGRAL_DATA_INFO_HST -a -e -x -o ./outfile