使用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