DB2-使用经验总结

1.表的创建、删除、修改、查看和库内备份

(1)删除表
  DROP TABLE TableName ;

(2)创建表
  CREATE TABLE TableName
  ( 字段名 数据类型 ,
    PRIMARY KEY (字段名)
  )IN Space1 INDEX IN Space2 ;--创建表(表空间Space1存放数据,Space2存放索引)

(3)修改表

     ALTER TABLE TableName VOLATILE CARDINALITY;--将表TableName设置为易失表

    alter table cmer_catedoc_h add a varchar();--添加一列

    alter table cmer_catedoc_h drop column a ;--删除一列

  (4)查看表

  db2 list tables ;
  db2 list tables FOR USER /ALL /system / SCHEMA SchemaName [show detail] ;

 (5)库内备份:

      create table table1_backup like table1;--建立一个和table1一模一样的备份表
      insert into table1_backup  select * from table1;--将table1中的数据插入到新建的备份表中

2.列的修改

 (1)修改某列的数据类型和长度:

     alter table TABLENAME ALTER column columnName SET DATA TYPE varchar(10000)

3.改了表结构后发现表不能使用了,需要对改过的表进行重构,使用reorg   table   <tablename>就可以了

4.查看数据库中所有的表现在的锁:

(1)db2 回车

(2)connect to  数据库别名 user 用户名 using 密码

(3)db2 get snapshot for locks on yourdatabasename 这行命令要求当前的用户具有数据库的最高权限

  (4) force application all

解锁表的命令:(要求登录到服务器)

首先用db2inst1用户登录,命令为:su - db2isnt1

(db2 get snapshot for locks on  /用户db2inst1)
db2 get snapshot for locks on  pjt |more
db2 "force application(Application handle)"

db2 force application all

db2 get snapshot for locks on  tjtii |more

5.终止访问数据库的所有进程:force application all

6.DB2密码过期:在使用db2数据库的时候有时会出现密码到期的提示,这是需要在系统的用户管理里面重新设置下用户密码,并将用户的属性设置为密码永不过期就可以了。

7.与数据库的连接、断开
    db2 CONNECT TO DBName [user UserID using PWD]--建立连接
    db2 CONNECT reset /db2 disconnect CURRENT --断开连接

8.查看DB2的表空间 LIST TABLESPACES SHOW DETAIL

9.在进行数据库恢复的时候,有时会抛出一些错误,这时,可以在备份文件目录中相应的.msg文件中查看详细的错误信息。在目录下有个import.out文件中记录的是所有的导入过程中的日志。还有一个db2move.lst文件,该文件中指定了使用

db2move JB137 import -u db2inst1 -p db2inst1 命令进行数据库导入时,需要导入的表。因此通过修改db2move.lst文件可以修改导入到数据库中的表。

10.DB2 update语句:update history set rtime = current timestamp where rid = 'abc'

11.DB2:空值判断:SELECT * FROM CMER_YGKH_KJYJ_A where CMER_YGKH_KJYJ_A.DEF1 IS NULL

12.在进行DB2数据库恢复的时候,如果用同一个用户反复恢复同一个数据库备份,已使用表空间的大小不会增加;如果用不同的用户反复恢复同一个数据库备份,已使用表空间会逐渐变大。

13.db2中时间差计算

Select * from cmer_ygkh_kjyj_b where

(((DAYS(COALESCE(cmer_ygkh_kjyj_b.CNFK_TIME,'2010-07-02 11:04:26')) - DAYS(COALESCE(cmer_ygkh_kjyj_b.TIFK_TIME,'2010-07-02 11:04:26'))) * 86400 +  (MIDNIGHT_SECONDS(COALESCE(cmer_ygkh_kjyj_b.CNFK_TIME,'2010-07-02 11:04:26')) - MIDNIGHT_SECONDS(COALESCE(cmer_ygkh_kjyj_b.TIFK_TIME,'2010-07-02 11:04:26'))))>=86400)

14.db2中对某个字符串表示的时间减去一小时。

SELECT  to_char(timestamp('2002-10-20 04:00:00')-1 hours,'YYYY-MM-DD HH24:MI:SS') FROM SM_USER

15.查询时对数据库中的某一字段忽略大小写的方法

select * from table1 where upper(column1)='A'

或者

select * from table1 where lower(column1)='a'

16.DB2中trim方法的使用,下面的例子表示查找所有HISTORY_VERSION_NO 为空 或者HISTORY_VERSION_NO全部为空格的记录:

select HISTORY_VERSION_NO from PUR_CONT_BASE_INFO where HISTORY_VERSION_NO is null or trim(HISTORY_VERSION_NO) ='';

17.修改数据库中某个表中的某个字段的默认值:

ALTER TABLE  PUR_CONT_BASE_INFO
      ALTER COLUMN  HISTORY_VERSION_NO  SET DEFAULT '1.0';

18.DB2中取查询结果中第一条记录的语句:

select  * from base_pro_region where pro_desc='ZJ' ORDER BY REGION_CODE DESC fetch first 1 rows only;

19:截取字符串:update fram_agreement o set o.PRO_NO = substr(o.MAKER_CODE,1,34)  where o.AGREEMENT_ID like 'CU%'

20:使用视图:

CREATE VIEW User_In_Use  AS
SELECT * FROM SM_USER where SM_USER.DR=0;52

CREATE VIEW USER_In_Use_And_Password AS
SELECT * FROM User_In_Use where User_In_Use.PWDPARAM>'2010-10-01';

21.DB2分页查询语句: 

(1)select * from (

         select ROW_NUMBER() OVER(ORDER BY DOC_UUID DESC) AS ROWNUM, DOC_UUID, DOC_DISPATCHORG,  DOC_SIGNER, DOC_TITLE    from DT_DOCUMENT  ) a 

where ROWNUM > 20 and ROWNUM <=30

(2)ROW_NUMBER()函数的使用
增加行号,不排序

select * from ( select ROW_NUMBER() OVER() AS ROWNUM,t.*  from DT_DOCUMENT  t ) a

增加行号,按某列排序

select * from ( select ROW_NUMBER() OVER( ORDER BY DOC_UUID DESC ) AS ROWNUM,t.*  from DT_DOCUMENT  t ) a 

(3)带记录总数的分页查询

SELECT

 B.TOTLE4PAGEQUERY,A.*

 FROM

( SELECT ROW_NUMBER() OVER( ORDER BY TS DESC) AS ROWNUM4PAGEQUERY, SM_USER.* FROM SM_USER WHERE USER_CODE LIKE '%zhao%' ) AS A,

(SELECT COUNT(*) AS TOTLE4PAGEQUERY FROM SM_USER WHERE USER_CODE LIKE '%zhao%') AS B

where 1=1 and A.ROWNUM4PAGEQUERY>20 and A.ROWNUM4PAGEQUERY<=30

22.DB2查看表信息的语句 

查看表信息
可以使用表所示的命令来获取表信息。



命    令

描    述

list tables

列出用于当前用户的表

list tables for all

列出数据库中定义的所有表

list tables for schema schemaname

列出指定模式中的表

                                                                                     

命    令

描    述

list tables for schema

列出以当前用户名为模式的表

describe table tablename

显示指定的表的结构


 

23.在数据库中的某个特定的表空间上建立表:

DROP TABLE DB2INST1.CMER_YGKH_YGCD;

CREATE TABLE DB2INST1.CMER_YGKH_YGCD
 (
 PK_CDZT CHARACTER (20) NOT NULL,
 SWSB_TIME CHARACTER (10),
 SWXB_TIME CHARACTER (10),
 XWSB_TIME CHARACTER (10),
 XWXB_TIME CHARACTER (10),
 SBHOUR INTEGER,
 ISCHECKED CHARACTER (1),
 DEF1 VARCHAR (100),
 DEF2 VARCHAR (100),
 DEF3 VARCHAR (100),
 DEF4 VARCHAR (100),
 DEF5 VARCHAR (100),
 DEF6 VARCHAR (100),
 DEF7 VARCHAR (100),
 DEF8 VARCHAR (100),
 DEF9 VARCHAR (100),
 DEF10 VARCHAR (100),
 TS CHARACTER (19),
 DR SMALLINT,
 PRIMARY KEY (PK_CDZT)
 )
 IN tableSpaceXXX;


 24.Linux系统下DB2数据库重启方法:

(1)用远程连接工具连接到Linux

(2)执行命令su - db2inst1切换到db2inst1用户

(3)输入db2 +回车 进入db2命令行

(4)输入db2stop +回车(db2stop force+回车 强制停止) 终止db2数据库服务

(5)输入db2start+回车 启动db2数据库服务

25.db2中所有表信息的查看

db2中所有的表信息都存在于syscat.tables表中通过select * from syscat.tables 可以得到数据库中所有表的信息

26.删除db2数据库中某个用户下所有的表

通过 select 'drop table ' ||tabname ||';' from syscat.tables where tabschema='DB2INST1' 语句可以生成所有的删除语句,然后复制所有的查询结果,批量执行即可

27.在数据库恢复的时候有时会抛出日志已满的错误,这时候需要扩展数据库的日志空间,使用一下语句扩展数据库的日志空间

db2 get db cfg for jltest |grep size //该语句用于查询数据库所有的空间大小,包括日志空间

db2 update db cfg using LOGFILSIZ 204900 //该语句用于更新数据库的日志空间大小

28.有时在新建数据库的时候会出现The application is already connected to another database错误,这时需要执行 db2 connect reset 命令,清空所有连接,然后就可以新建数据库了。

29.删除数据库:(1)force applications all    // 终止与数据库相连的所有进程

                          (2)drop database 数据库实例名 //删除数据库

30.查询数据库配置信息并修改日志配置

查看数据库的配置参数:db2 get db cfg for <dbname> //查询数据库的所有配置参数

                                或者db2 get db cfg for <dbname> |grep <配置参数名称> // 只查询数据库中指定的配置参数的信息(配置参数名称:比如:size表示数据库中所有配置的空间大小信息)>

日志文件大小(4KB) (LOGFILSIZ) = 1024 (每个日志文件大小为1024*4KB=4MB)


主日志文件的数目     (LOGPRIMARY) = 3
辅助日志文件的数目   (LOGSECOND) = 1

修改数据库的配置参数:db2 update db cfg for <dbname> using <p> <v>
修改日志文件大小:db2 update db cfg for <dbname> using LOGFILSIZ 4096
修改主日志文件个数:db2 update db cfg for <dbname> using LOGPRIMARY 6
修改辅助日志文件个数:db2 update db cfg for <dbname> using LOGSECOND 10

31.DB2中查找某个字符串不为空,为空白字符串的方法:select * from table1 where table1.attr1='';

32.DB2中所有的列定义信息存储在syscat.COLUMNS中,查找某个表的所有列定义的语句如下:

select * from syscat.COLUMNS WHERE  syscat.COLUMNS.TABNAME=‘table_name’

33.DB2获得某个字符类型字段的长度

 select  length(c1) from table1

34.替换查询出来的字段值。如果查询出来的字段是字符串,则可以直接用下面的方式对结果进行加工

SELECT REPLACE(REPLACE(FRAM_AGREEMENT.IS_ASSIGN,'1','是'),'0','否') FROM TABLE1

:将查询出的结果中的1替换成是,0替换成否。

如果查询出来的字段是数字型,要先将数字型转换成字符串型在执行以上操作。

35.某个表上索引的查看删除和创建

(1)查看索引

 select *  from SYSCAT.INDEXES  where TABNAME='表名'

 或者

 db2 describe indexes FOR TABLE TableName show detail;

或者

 db2 describe indexes FOR TABLE TableName ;

(2)删除索引

DROP INDEX Index_Name ;-

(3)创建索引
  CREATE INDEX Index_Name ON TableName(F1) ;--对表TableName的F1字段创建索引Index_Name

36.表空间的创建、删除
  db2 CREATE BUFFERPOOL STMABMP IMMEDIATE  SIZE 25000 PAGESIZE 8K--创建缓冲池STMABMP
  db2 DROP tablespace STMABMP--删除表空间
  db2 CREATE  REGULAR TABLESPACE STMA PAGESIZE 8 K  MANAGED BY SYSTEM | DATABASE
      USING ('D:\DB2Container\Stma' ) EXTENTSIZE 8 OVERHEAD 10.5
      PREFETCHSIZE 8 TRANSFERRATE 0.14 BUFFERPOOL  STMABMP  DROPPED TABLE RECOVERY OFF
     --在D:\DB2Container\Stma下创建系统/数据库管理表空间STMA
  db2 BACKUP DATABASE 数据库别名 TABLESPACE 表空间名 [ONLINE} TO 介质名--表空间的备份
  db2 list tablespaces show detail --列出所以表空间信息
  db2 list tablespace containers for SpaceID--列出对应表空间的容器详情

--修改表空间

  ALTER TABLESPACE 表空间名 RESIZE(FILE '已满的容器名' 更改后容器的大小)

  ALTER TABLESPACE 表空间名 EXTEND(FILE '已满的容器名' 准备增加的大小)--可以是实际大小或者页数

37.数据库的创建、删除
  db2 CREATE db DBName [using codeset GBK territory CN]--创建数据库
  db2 DROP db DBName--删除数据库
  db2 list db directory--列出所有数据库目录(包括远程编目的数据库)

  db2 list db directory ON location--如Windows下的C: ,Unix下的/home/db2inst1(本地数据库)

  db2 list active databases--列出活动的数据库和连接数

38.显示timestamp字段的详细信息,精确到秒:

SELECT to_char(IMPORTLOG_A.CREATE_DATE,'YYYY-MM-DD HH24:MI:SS') FROM IMPORTLOG_A;

39.查询创建日期在某个日期之前的记录:

select * from ERPEX.AU_EMPLOYEE a where a.ENABLE_STATUS='1'  and a.CREATE_DATE<timestamp('2011-04-02 20:00:00');

转载于:https://my.oschina.net/uniquejava/blog/313616

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值