欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

db2常见操作

程序员文章站 2022-03-26 13:01:28
...
		
1. 用SQL脚本创建表
db2 -tvf create_table.sql
db2 -tvf pub_app_par.sql

2. 命令行编译存储过程方法: 
db2 -td@ -f 存储过程文件.sql
@表示存储过程开始和结束的标识

执行一个批处理文件 
       db2 –tf 批处理文件名
      (文件中每一条命令用 ;结束)
自动生成批处理文件
     建文本文件:temp.sql
   select 'runstats on table DB2.' || tabname || ' with distribution and  detailed indexes all&#59;' from syscat.tables where tabschema='DB2' and type='T'&#59;
db2 –tf temp.sql>;runstats.sql

db2 " call 存储过程名称(参数1,参数2) " 

2.1 导出表的相关结构到一个文件中
db2look -e -d ods_ibb -t M_IBB_F_F_TX_CIB_SCURA > tmp2.sql 
db2look -e -d ods_ibb -t M_IBB_F_F_TX_STP_DEP_FUND_INFO > tmp2.sql 


3. 表空间赋权限
db2 "GRANT USE OF TABLESPACE TBS_DATA_1 TO USER IBB"
db2 "GRANT USE OF TABLESPACE TBS_DATA_2 TO USER IBB"
db2 "GRANT USE OF TABLESPACE TBS_IDX_1  TO USER IBB"

好像DB2只能修改VARCHAR2类型的并且只能增加不能减少 
建议解决方案步骤: 
  1.首先如何查看表的结构(命令:DESCRIBLETABLE   TABLE_NAME),最好用NOTE先记下. 
  2.重新写一个table.sql脚本 
  3.删除表,drop   table 
  4.重新创表db2   -td!   -f   table.sql 

4. 杀进程
db2 force application all 

5. 查看表 
db2look -e -d ods_ibb -t M_IBB_A_RPT_MSR_IDXDAT 

6. 连接数据库
db2 connect to odsdb 

7. 更改表名
RENAME TABLE  xxx to xxx_new; 

8. load方法(KEEPBLANKS 加这个关键字后,不会掉空格 )
db2 load from ${table}.del of del modified by coldel| KEEPBLANKS replace into ${table}
db2 load from M_IBB_D_CODCMP.del of del modified by coldel: replace into M_IBB_D_CODCMP    
db2 load from yz.txt of del modified by coldel: replace into yz_table

db2 load from pub_app_par.del of del replace into pub_app_par

db2 load from f_dp_tdp_fdmda_c_20081119.dat of del modified by coldel0x03 keepblanks usedefaults nochardel replace into f_dp_tdp_fdmda_c

load client from /ibb/ibbfile/input/20081119/f_tx_nin_cmjna_20081119.dat of del modified by coldel0x03 keepblanks usedefaults nochardel replace into f_tx_nin_cmjna


挑选部分字段装载:
load from t.del of del method p(1,2) insert into t_table1(sid1,name3)

9. import方法
db2 alter table ${table} activate not logged initially 

db2 import from ${table}.ixf of ixf commitcount 1000 replace into ${table} 


9.1.导出表数据
     db2 export to M_IBB_D_CODCMP.del of del select * from  M_IBB_D_CODCMP 
     db2 export to m_ibb_prog_log.del of del select * from M_IBB_PROG_LOG 
     db2 export to c:\dftz.ixf of ixf select * from dftz
     db2 " export to pb_cstlog.del of del select LOGNO ,TRANDATE ,TRANTIME ,CSTNO,
     ACCNO,TRANCODE,RESULT,INFO,IP,MAC,ISIMPORTENT,date(days(current date) -1 ) from PB_CSTLOG  "

9.2.导入表数据
import from c:\123.txt of del  insert into ylbx.czyxx
db2 import to c:\dftz.txt of del commitcount 5000 messages  c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 messages c:\dftz.msg insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 insert_update into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace into dftz
db2 import to c:\dftz.ixf of ixf commitcount 5000 create into dftz   (仅IXF)
db2 import to c:\dftz.ixf of ixf commitcount 5000 replace_create into dftz  (仅IXF)


10. 取前几条记录
select * from table fetch first n rows only   

11. 查看当前db2实例中有那些数据库:


12. 查看数据库中有那些表:
db2 connect to db_name user xxx using xxxx 
db2 connect to ods_ibb user ibb using ibb
db2 list tables

13 列出用户创建的所有表
db2 list tables for user_name  

13.1 修改表的结构
ALTER TABLE  M_IBB_F_MID_LNACCT ADD COLUMN  JGNO  CHAR(6);

14 列出所有schema为xx的表
db2 list tables for schema xxx

15. 在DB2中 merge可以用,测试通过:

MERGE INTO temp2 as a
USING (select a from temp1) as b 
  on b.a=a.a 
WHEN MATCHED THEN 
  UPDATE set a.a=b.a
WHEN NOT MATCHED THEN 
  INSERT VALUES (b.a, b.a) 


15.1 查询当前系统的日期
select current date from sysibm.sysdummy1; 

16. 查看某个表中的字段情况:

db2 describe table table_name 
db2 describe table table_name show detail 

16.1 显示这个表是否为空的情况
describe select * from M_IBB_F_MID_WJIEFA
select is_nullable from sysibm.columns where table_name='M_IBB_F_MID_WJIEFA' and ordinal_position=12

17.查看数据库服务器中有几个数据库。包括网络中数据库的引用。
	进入数据库安装目录下的bin目录:C:\Program Files\IBM\SQLLIB\BIN
	执行db2 list database directory命令
18.查看命令选项说明
list command options 
19.查看运行的数据库服务器中关联了多少个引用程序对数据库的访问。
	进入数据库安装目录下的bin目录:C:\Program Files\IBM\SQLLIB\BIN
db2 list applications命令
可以通过db2 force application(进程id)  杀死对应的进程。

20.如何强制断开应用程序和数据库的连接。
进入数据库安装目录下的bin目录:C:\Program Files\IBM\SQLLIB\BIN
	行下列的命令 db2 force applications 可以强制断开应用程序和数据库的连接。

21.如何备份数据库
	进入db2的操作环境,然后运行 
	backup database 数据库别名 user 用户名 using 密码命令

22. 复制表结构
create table tmp_famp as (select * from famp) definition only

create table test_luxt like M_IBB_F_F_NI_FDA_FAMP_A
22.1 把表中的记录直接插入进去。
insert into t_table2  select * from lccoa

做个编目:
CATALOG TCPIP NODE dev88node REMOTE 22.5.228.88 50002
CATALOG DATABASE ods_ibb AT NODE dev88node 

db2  CATALOG TCPIP NODE dev179 REMOTE 22.5.228.179 server 50000  ---OK

db2  CATALOG DATABASE etlplus AT NODE dev179 


db2  CATALOG TCPIP NODE dev1 REMOTE 22.5.234.1 server 50000
db2  CATALOG DATABASE etlplusn AT NODE dev1 

dev1
编目后要重新退出后连接下:
db2 connect to etlplus user db2inst1 using db2inst1

db2 uncatalog node

23. 存储过程procedure 调用,传出的参数用“?”代替,
 db2 "call func_test2(dec_to_dt(20080808),?)" 
 db2 " call PROC_M_IBB_A_RPT_LN_OCRNCE('20080809',?) "  

24. 退出db2命令行

quit

24. 退出cmd

exit

24.1 创建nickname 
db2 "grant select,delete,insert,update on table prog_log to user ibb" 

db2 "grant select,delete,insert,update,control,alter,index,references on table prog_log to user ibb" 


创建昵称:
CREATE NICKNAME IBB.PROG_LOG FOR ETLPLUS.ODSUSR.PROG_LOG;

25. 表被锁死
先用db2 "select tabname from syscat.
 where tabschema='db2inst1'"取出来表名
db2 "CREATE EVENT MONITOR TB_EVENTS FOR TABLES,DEADLOCKS with details WRITE TO file 'PATH'"
db2 "set EVENT MONITOR TB_EVENTS state 1"

这个是收集死锁信息。
db2evmon -db dbname -evm TB_EVENTS 
这个到存放的目录下,察看死锁信息

抓个snapshot for locks吧
snapshot先
然后再用event monitor



================================================================================
26. 导出数据的表结构
windows下面用db2look -d bdcc60 -e -a -x -i db2admin -w bdcc -o createdb.sql命令导出数据的表结构,

db2look -d ods_ibb -e -a -x -i ibb -w ibb -o odsibb.sql
db2look -d ibbdbbak -e  -dp   -i odsusr -w odsusr -o ods_ibb.sql 

--输出函数、表结构等
db2look -d ibbdbbak -e  -dp   -i odsusr -w odsusr -o ods_ibb.sql


db2look -d leafloca -l -e -o leafloca.ddl
-------导出表结构和索引、表空间-----[正确]
db2look -d ods_ibb -e  -tw % >ods.sql 

db2look -d ods_ibb -e  -dp -tw % >ods_ibb.sql   ---(含DROP )


然后用db2move bdcc60 export -u db2admin -p bdcc命令导出表数据,

db2look -d M_IBB_A_CI_BALSHT -e -a -x -i db2admin -w M_IBB_A_CI_BALSHT -o createdb.sql

但是在运行db2move bdcc60 
时,导入表数据。【也许会报一个错误】 

================================================================================
27. 用db2look -d tjoa -z DB2INST1 -e -o tjoa.ddl -i db2inst1 -w db2inst1 语句
db2look -d ods_ibb -z DB2INST2 -e -o ods_ibb.ddl -i db2inst2 -w db2inst2
生成 ddl语句 其中包括 生成表索引等于语句



28. 用db2 -tvf e:/temp/db/tjoa.ddl 创建表 

29.
用db2 "select 'export to ' || rtrim(tabname) || '.ixf of ixf select * from ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'DB2INST1'" > export.sql
语句生成导出语句文件 编辑文件、去掉开头结尾 并给每条语句的导出文件加上路径
用 db2 -tvf export.sql 导出表
在你加上的路径中便是导出文件

用db2 "select 'load from ' || rtrim(tabname) || '.ixf of ixf insert into ' || rtrim(tabname) || ';' from syscat.tables where tabschema = 'DB2INST1'" > load.sql
生成倒入语句文件 编辑文件、去掉开头结尾、并给每条语句的导入文件加上路径
用 db2 -tvf e:/temp/db/load.sql 导入数据
后建原手工建的表空间


================================================================================


DB2数据库

0.在一张表中取前n条记录并insert到新表的SQL如何写?
insert into table select * from table fetch first n rows only

1、Load 方法装入数据:
  export to tempfile of del select * from TABLENAME where not 清理条件;
  load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable;
  说明: 
  在不相关的数据表export数据时,可以采取并发的形式,以提高效率;
  TABLENAME指待清理table的名称;
  modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;
  replace into对现数据库中的内容进行替换,即将现行的数据记录清理,替换为数据文件内容;
  nonrecoverable无日志方式装入;

2、查找当前的应用:
  db2 list application |grep BTPDBS; 

3、删除当前正在使用的application:
  db2 "force application (Id1,Id2,Id3)"
   Id1,Id2,Id3 是List显示的应用号;

4、查看当前应用号的执行状态:
  db2 get snapshot for application agentid 299 |grep Row 

5、查看数据库参数:
  db2 get db cfg for <dbsname>  //当前数据库可以省略
6、修改数据库的Log数据:
  db2 update db cfg using <参数名> <参数值>

7、Db2Stop Force的用法:
  在进行Bind的时候出现如下错误:
       SQL0082C  An error has occurred which has terminated processing.
       SQL0092N  No package was created because of previous errors.
       SQL0091N  Binding was ended with "3" errors and "0" warnings.
   主要是表文件被加锁,不能继续使用;
在进行stop的时候报错:db2stop
   8/03/2005 21:46:53  0 0   SQL1025N  The database manager was not stopped because databases are still active.
   SQL1025N  The database manager was not stopped because databases are still active.
需要使用如下命令可以解决这个问题: db2stop force
   08/03/2005 21:47:49     0   0   SQL1064N  DB2STOP processing was successful.
   SQL1064N  DB2STOP processing was successful.
然后启动数据库db2start,连接数据库db2s后,重新进行bind即可。

8、缓冲池参数修改:
   db2 alter bufferpool ibmdefaultbp size 10240
  查看本表的数据内容如下:
   db2 "select * from syscat.bufferpools";  

9、DB2 日志处理:
    DB2日志是以文件的形式存放在文件系统中,分为两种模式:循环日志和归档日志。当创建新数据库时,日志的缺省模式是循环日志。在这种模式下,只能实现数据库的脱机备份和恢复。如果要实现联机备份和恢复,必须设为归档日志模式。 目前在综合业务系统中,设置的均是归档日志模式;其它系统(如事后监督、经营决策、中间业务等)一般都设置为循环日志模式。至于采用何种模式,可以通过修改数据库配置参数(LOGRETAIN)来实现: 归档日志模式:db2 update db cfg for <dbname> using logretain on 注:改为on后,查看数据库配置参数logretain的值时,实际显示的是recovery。改变此参数后,再次连接数据库会显示数据库处于备份暂挂(BACKUP PENDING)状态。这时,需要做一次对数据库的脱机备份(db2 backup db <dbname>),才能使数据库状态变为正常。 循环日志模式:db2 update db cfg for <dbname> using logretain off

10、Db2 日志处理:
    必须按照以下正确的步骤进行操作: &#1048698; 要求必须使用DB2命令PRUNE进行清理,不建议使用rm命令删除。 &#1048698; 删除前应保证应用已停止(即联机已下来)。 &#1048698; 查看当前使用的日志文件目录及第一活动日志文件 &#1048766; 用 “db2 get db cfg for <dbname>”命令查看日志文件目录(Path to log files)参数,确定数据库当前使用的日志文件目录。 例如:Path to log files = /db2log/,说明DB2日志存放目录是/db2log &#1048766; 用 “db2 get db cfg for <dbname>”命令查看第一活动日志文件(First active log file)参数,该参数对应的日志文件之前的日志文件均为归档日志文件,如果确认没有用,可以删除。 例如:First active log file = S0015913.LOG,说明当前第一活动日志文件是S0015913.LOG。 &#1048698; 备份好要删除的归档日志 &#1048698; 删除归档日志 以应用用户(如BTP)登录,执行:
$ db2 connect to <dbname>
$ db2 prune logfile prior to S???????.LOG 
注:S???????.LOG为查看到的第一活动日志文件。此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。

11、如何清理db2diag.log文件 
    db2diag.log,是用来记录DB2数据库运行中的信息的文件。可以通过此文件,查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大的,需要定期进行清理。 可以通过查看实例的配置参数DIAGPATH,来确定db2diag.log文件是放在哪个目录下:db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump,则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文件系统/home的使用率达到80%-90%左右时,应及时删除db2diag.log文件。 请按以下正确步骤操作: &#1048698; 确认应用(如BTP)、DB2已经停止。 &#1048698; 将原db2diag.log文件备份到其它文件系统下。 &#1048698; 删除db2diag.log文件。删除后,DB2会自动创建一个新的文件。

12、Load 操作
   在进行load的时候
   db2 "load from acmmst.txt of del modified by coldel| replace into acmmst nonrecoverable ”
   由于数据不规范出现错误,强行中断以后,进行操作的时候出现如下错误:
     SQL0668N  Operation not allowed for reason code "3" on table "BTP.ACMMST".
     SQLSTATE=57016
   此时,进行反方向操作即可:
   db2 "load from /dev/null of del terminate into acmmst nonrecoverable"。

   如果没有使用参数nonrecoverable,则会出现数据库状态不正确的情况,使用:
     db2 list tablesapces show detail 查看状态,如果不是正常状态,则脱机状态进行备份即可。

两个表文件之间UPDATE的方法:
   db2 "update cdmcrd set offset = (select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno) where cdmcrd.crdno in (select cdmlsl.crdno from cdmlsl)


13、多字段条件查询和修改:
    表A中的字段有actno, cnlno,bal,pwd;表B中的字段为Actno,Cnlno,TxnAmt;目的是将A表中的bal修改为B表中的TxnAmt,命令:
  db2 "update A set bal=(select txnamt from B where actno=A.actno and cnlno=A.Cnlno) where A.actno||A.cnlno in (select Actno||cnlno from B );

14、多条件匹配查询
   查询某个表中条件是B?AAA的记录:
  db2 "select * from A where actno like 'B_AAA%'".
    查询数据中存在某些字符的记录:
   db2 "select * from A where actno like '%-AAA%".

15/数据库恢复的处理
  进行数据库恢复的时候使用以下的命令:
     restore db db1 to /tstdb2/catalog  into db newlogpath /tstdb2/db2log buffer 2048
     replace existing redirect parallelism  16;
     set tablespace containers for 1  using  (path '/tstdb2/db2tmp');
     set tablespace containers for 2  using
            (device '/dev/rtstcontlv00' 2621440, device '/dev/rtstcontlv01' 2621440,
             device '/dev/rtstcontlv02' 2621440, device '/dev/rtstcontlv03' 2621440 ) ;
     restore db db1 continue;

恢复完成以后执行命令db2s时报如下的错误:
P570:>db2s
  SQL1117N  A connection to or activation of database "DB" cannot be made
  because of ROLL-FORWARD PENDING.  SQLSTATE=57019
  DB21034E  The command was processed as an SQL statement because it was not a
  valid Command Line Processor command.  During SQL processing it returned:
  SQL1024N  A database connection does not exist.  SQLSTATE=08003
解决办法如下:
P570:>db2 rollforward db db to end of logs and complete

                                Rollforward Status

Input database alias                   = db 
Number of nodes have returned status   = 1 

Node number                            = 0
Rollforward status                     = not pending
Next log file to be read               =
Log files processed                    =  - 
Last committed transaction             = 2005-11-20-10.59.23.000000 

DB20000I  The ROLLFORWARD command completed successfully.


16. 创建表空间时的OVERHEAD参数是做什么用的?
OVERHEAD,它提供容器所需时间的估计(以毫秒计),在该时间后才将数据读入内存。此开销活动包括容器的 I/O 控制器开销以及磁盘等待时间,后者包括磁盘寻道时间。 
可使用以下公式来帮助估计开销成本:

   OVERHEAD = 以毫秒计的平均寻道时间
              +(0.5 * 旋转等待时间) 
其中: 

0.5 表示半个旋转的平均开销 
对每个完整的旋转计算以毫秒计的旋转等待时间,如下所示: 
   (1 / RPM) * 60 * 1000 
其中: 
除以每分钟旋转次数来获得每个旋转所需的分钟数 
乘以 60 秒/分 
乘以 1000 毫秒/秒 
例如,假定磁盘每分钟旋转 7 200 次。使用旋转等待时间公式,结果如下: 

(1 / 7200) * 60 * 1000 = 8.328 毫秒 
然后可假定平均寻道时间为 11 毫秒,使用以上结果计算 OVERHEAD 估计值: 

   OVERHEAD = 11 + (0.5 * 8.32
            = 15.164 
得出大约 15 毫秒的 OVERHEAD 估计值。 

来自 db2 info center

17.在LINUX下开机自动启动DB2 
写个脚本
起个文件名叫 S99db2start.sh
#!/usr/bin
.  path/db2profile
db2start


18.DB2的备份和恢复问题
本人使用Veritas Netbackup对db2数据库进行备份,我是参照veritas的文档来操作的,但有些问题依然不清楚。
1.
将数据库的logretain和userexit设置为on后,在实例目录/home/db2inst1目录下的db2.conf文件中设置归档日志路径:
OBJECTTYPE ARCHIVE
DATABASE RMDB
POLICY DB2_Log_Policy
SCHEDULE User
#ARCFUNC SAVE
ARCFUNC COPY
ARCDIR /home/db2inst1/arcdir 
RETDIR /home/db2inst1/arcdir 
ENDOPER
我看文档说明,/home/db2inst1/arcdir就是归档日志路径,即当日志切换时,归档日志就会拷贝到/home/db2inst1/arcdir下,但是我备份数据库成功若干次后,在该目录下未发现任何文件,该目录是空目录,请问原因是什么?

2.
文档上给出的恢复命令较为简单:
$db2 restore db NBJSW LOAD /usr/openv/netbackup/bin/nbdb2.so64
$db2 rollforward db sample to end of logs and stop
我想请问,基于时间点的恢复如何操作。比如我要恢复一个月前的数据库,那么命令格式是什么呢?


19.主要是性能监控方面 
db2 get snapshot for dynamic sql on databasename : 


////////////////////////////////////////////////////////////////////
存储过程的写法 :
create procedure getRecord(OUT flag integer)

LANGUAGE SQL
BEGIN
DECLARE   i_tmp  integer;

select count(id) into i_tmp from table_name ;

if i_tmp>1 THEN
SET flag = 1 ;
else
 SET flag = 0 ;
end if ;

END

-----------------------------
create procedure getRecord(OUT flag integer)
LANGUAGE SQL
BEGIN
DECLARE   i_tmp  integer;
DECLARE v_id integer DEFAULT 0; 

declare c1 cursor  with return to caller for
            select count(value) as num  from cibdemo_append;
         open c1;
FETCH FROM c1 INTO v_id ;
set flag =v_id;

INSERT INTO my_log(id,code)
 VALUES('11',v_id);
 commit;

END

---------------------------------------------------------

试试下面的方法吧 
1、DB2  CREATE  TABLE  T1EXC  LIKE  T2  
T1EXC为例外表,它继承了T2的结构,不继承数据。   

2、DB2  CREATE  TABLE  T1EXC  AS  (  SELECT  *  FORM  T2)  DEFINITION ONLY 
T1EXC继承T2的结构和数据 

db2 create view v_t(a,b) as (select * from t1 union all select * from t2) 


4、DB2中只比较年月?
A、SUBSTR(CHAR(字段名),1,7) 

B、
SELECT YEAR(QYRQ) FROM  tablename 
SELECT MONTH(QYRQ) FROM tablename 
如果你要的格式是200809这样的格式也可以的,建一个TO_CHAR函数. 
CREATE FUNCTION ORAFUN.TO_CHAR 
(
TIMESTAMP_IN DATE, 
  FORMAT_STRING VARCHAR(200) 
) 
  RETURN 
with parts(yyyy, mm, dd, ddd, d, fday, ww) as ( 
  values (substr(char(timestamp_in), 1, 4), substr(char(timestamp_in), 6, 2), 
    substr(char(timestamp_in), 9, 2), char(dayofyear(timestamp_in)), char( 
    dayofweek(timestamp_in)), '', char(week(timestamp_in)) )) 
  select rtrim(replace(replace(replace(replace(replace(replace(replace( UCASE( 
      format_string), '"', ''), 'YYYY', yyyy), 'MM', mm), 'DDD', ddd), 'DD', 
      dd), 'DAY', fday), 'D', d)) 
    from parts; 
SELECT to_char(QYRQ,'yyyymm') FROM tablename 
C、
字段名:D_DATE 
YEAR(D_DATE)*100+MONTH(D_DATE) 

5\
关于DB2中日期加、减一个整数来求加减后的日期 ?
date(timestamp(日期型列名或者变量) -7 days 
我试过了下面两个sql语句都能执行 
select date('2008-01-01') +10 days from sysibm.sysdummy1 
select  current date + 10 day from sysibm.sysdummy1

SELECT CURRENT TIME FROM DUAL; 
'22:44:51' 
SELECT CURRENT DATE FROM DUAL; 
'2008-06-17' 
SELECT current date + 1 YEAR FROM DUAL;  
'2009-06-17' 
SELECT current date - 1 YEAR FROM DUAL; 
'2007-06-17' 
SELECT current date + 1 YEARS + 1 MONTHS + 1 DAYS FROM DUAL; 
'2009-07-18'  
SELECT current time + 1 HOURS - 1 MINUTES + 1 SECONDS FROM DUAL 
'23:43:33'


6\SQL 语句后面with的作用 ?

select count(*) from ntr.table_name 
with ur 

后面的with ur 是做什么用的? 

和select count(*) from ntr.table_name 有什么区别吗? 

答案:有区别, 

加上with ur的话,是脏读,有 insert 的操作,但是没有commit的,也一样会得到,如果不加的话,是不会得到其他事物中没有commit的insert的数据的
脏读是什么?
脏读就是,其他的事物如果insert一条纪录,但是他还没有commit的时候,你应该是读不到的,脏读就可以读到,他可以读到其他事物中没有提交的数据。


7\如何查询一个表是否已经部署在数据库里面了  ?
在DB2里,查询一个表是否部署在数据库里,可以用以下的语句 
SELECT * FROM SYSCAT.COLUMNS 
WHERE TABNAME=' <table_name>' 
AND TABSCHEMA=' <schema_name>' 
ORDER BY COLNO; 

在db2中varchar和character有何区别?
character   就是char, 
1.最大长度不同,char   最大254   bytes,varchar   最大   32672   bytes 
2   存储不同 
char(n)     在数据库占用   n   个字节,在数据库中以空格补足,但在取出来时末尾的空格将被去掉 

varchar(n)   在数据库中至少占用1个字节,在数据库中末尾的空格将自动去掉,实际占用录入数据长度   +1   或者   +2   字节。   

L   数据长度 
L+1   bytes   L <=M       0 <=M <=256 
L+2   bytes   L <=M       256 <M <=32672 
在数据库中末尾的空格将自动去掉 

8、
只是1天吗?visit_time=current   date   -1   days 
一天以上用days函数啊,例如
where   days(current   date)-days(sitbirthday)> 1

=================================================================================

结 , 注意事项 , 经验 , IBM , DB2数据库 , 数据 , DB2 , 注意 

1.在安装DB2数据库后,你可以通过命令行方式或图形界面方式来操作,假如你的数据库服务端不在本机,则需要在“客户机配置辅助程序”中做一个客户端连接的配置。 

2.控制中心中无法增删改数据,只能编写sql语句来实现而quest提供的工具虽然能增加数据,但居然无法用复制、粘贴和Tab键,必须逐个输入,然后用鼠标点击切换现存数据看来可以在单元格中编辑修改,但实际却无法commit,呵呵,还是老老实实写update语句,至于删除数据,更是非写delete语句不可。不过可以用PB以单元格方式编辑数据,相应的一个缺点是编辑数据的按钮和删除表的按钮太近,万一点错了删除表的按钮,pb可是不作提示就把表给删了的,faint 


3.DB2的视图里不能直接用order by语句,必须这样写: 


select × from(select a,b,c from table1 order by a)as tab 


注释:这种写法的前提是你已经打过补丁了 


4.存储过程的问题: 


DB2提供ltrim函数和rtrim函数,但偏偏不提供trim函数,如果你希望去除字符两端的空格,
对不起,必须用ltrim(rtrim()) 的方式调用insert 语句里面居然不能用表达式赋值,必须把值先赋给一个变量调用其他存储过程时竟然不能用常量做参数,必须把这个常量的值赋给一个变量,再以这个变量为参数 


select * from table fetch first n rows only 语句居然在存储过程里不可用 


5.存储过程里可以使用动态sql,但函数里却不可以使用,kao 


6. 遇到commit或rollback时自动关闭游标,所以需要慎重使用单独提交。 


proc builder老是在调试中内存不足,屏幕花掉。而如果断点调试时暂停不进行下去的时间稍微长一点就会提示超时,受不了。 


7.开发问题: 


在使用 日期变量+1 MONTHS OR 日期变量-1 MONTHS 的方式取日期时,比如日期变量值为 2004-02-29时,存储过程里将日期变量+1 MONTHS 赋值给另一 


日期变量时会出错。相应SQLSTATE为01506(db2 ? 01506):
 对 DATE 或TIMESTAMP值进行了调整,以校正算术运算得出的无效日期。 


如果要获取的只是下一月份,可采用的替代方法是获取当前日期所在月份的第一天作为基准后+1 MONTHS OR -1 MONTHS 


8.对变量的赋值不能用select ..into ..方式而要用set v=(select ..)的方式,具体的示例如下: 


drop function SXFM.ISORDERSUBMITDATE; 
CREATE FUNCTION SXFM.ISORDERSUBMITDATE(IN_ROW_ID DECIMAL(16,0)) 
RETURNS DATE 
LANGUAGE SQL 
BEGIN ATOMIC 
DECLARE V_SUBMIT_DATE DATE; 
DECLARE V_SELL_ID DECIMAL(16, 0); 
DECLARE V_BUY_ID DECIMAL(16, 0); 

set V_SELL_ID = (SELECT COALESCE(RECEIVE_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID); 
set V_BUY_ID = (SELECT COALESCE(PAY_ID,-1) FROM IS_ORDER WHERE ROW_ID=IN_ROW_ID); 
set V_SUBMIT_DATE = (SELECT DATE(MAX(A.SUBMIT_DATE)) FROM AM_AUDIT_QUEUE A,SM_USER B,SM_USER C 
WHERE A.TABLE_CODE=’IS_ORDER’ AND A.TABLE_ROW_ID=IN_ROW_ID 
AND A.AUDIT_EMP_ID=C.ROW_ID AND C.BRANCH_ID=V_BUY_ID  --审核方为付款方 
AND A.SUBMIT_EMP_ID=B.ROW_ID AND B.BRANCH_ID=V_SELL_ID); --提交方为收款方 

RETURN V_SUBMIT_DATE; 
END; 
#SYNC 10; 


===============================================================================
10、DB2有类似与ORACLE中的merge这个东东没?

要看你的DB2版本,V9是一定有MERGE的(我正在用),其他版本就不确定了,查一下SQL REFERENCE就知道啦。 

MERGE INTO TARGET_TABLE  
USING SOURCE_TABLE 
WHEN MATCHED THEN 
UPDATE ()=() 
WHEN NOT MATCHED THEN 
INSERT () VALUES () 

如果你的DB2没有MERGE,那么就试试用export+import咯,import的REPLACE关键字可以覆盖掉已有记录,小心点用,先用少数据量在测试服务器试试效果是否符合你要求。


方法1: 使用export import 
格式 
export to table_a.ixf of ixf SELECT * FROM table_a fetch first 10 rows only 

IMPORT FROM filename OF {IXF | ASC | DEL | WSF} INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE | CREATE into table_b 

例子: 

db2 create table t_import (id int not null primary key,name varchar(20),age int default 0) 
db2 create table t_import2 (id int not null primary key,name varchar(20),age int default 0) 


db2 insert into t_import values(1,'aaa',11),(2,'bbb',12),(3,'ccc',13)@ 

db2 export to d:/db2/sql/t_import.ixf of ixf select * from t_import 

db2 import from d:/db2/sql/t_import.ixf of ixf INSERT_UPDATE into t_import2 
db2 select * from t_import2 
db2 update t_import2 set name='abc',age =111 where id=2 
db2 select * from t_import2 
db2 import from d:/db2/sql/t_import.ixf of ixf INSERT_UPDATE into t_import2 
db2 select * from t_import2 

方法2 
当然也可以先删除B 表中存在A 表中相同数据,然后插入就可以了 

delete from t_import2 where id in(select id from t_import) 

insert into t_import2 select * from t_import 

方法2 更方便

11、如何计算一个表所占空间的大小  
select fpages from syscat.tables where tabname= <TABNAME> 

、如何清理db2diag.log文件 
直接 > /home/db2inst1/sqllib/db2dump/db2diag.log
/home/db2inst1/sqllib/db2dump/下的可以直接rm掉!


================================================
1.启动数据库
     db2start
2.停止数据库
     db2stop
3.连接数据库
     db2 connect to o_yd user db2 using pwd
4.读数据库管理程序配置
     db2 get dbm cfg
5.写数据库管理程序配置
     db2 update dbm cfg using 参数名 参数值
6.读数据库的配置
     db2 connect to o_yd user db2 using pwd
     db2 get db cfg for o_yd
7.写数据库的配置
     db2 connect to o_yd user db2 using pwd
     db2 update db cfg for o_yd using 参数名 参数值
8.关闭所有应用连接
     db2 force application all
     db2 force application ID1,ID2,,,Idn MODE ASYNC
     (db2 list application for db o_yd show detail)
9.备份数据库
     db2 force application all
     db2 backup db o_yd to d:
    (db2 initialize tape on \\.\tape0)
    (db2 rewind tape on \\.\tape0)
    db2 backup db o_yd to \\.\tape0
10.恢复数据库
    db2 restore db o_yd from d: to d: 
    db2 restore db o_yd from \\.\tape0 to d:
11.绑定存储过程
   db2 connect to o_yd user db2 using pwd
   db2 bind c:\dfplus.bnd
  拷贝存储过程到服务器上的C:\sqllib\function目录中
12.整理表
    db2 connect to o_yd user db2 using pwd
    db2 reorg table ydd
    db2 runstats on table ydd with distribution and indexes all


13.自动生成建表(视图)语句
在服务器上:C:\sqllib\misc目录中
db2 connect to o_yd user db2 using pwd
db2look –d o_yd –u db2 –e –p –c c:\o_yd.txt
db2look -d ods_ibb -u ibb -e -p -c c:\o_yd.txt
14.其他命令
grant dbadm on database to user bb

19select * from czyxx fetch first 1 rows only
20db2look –d ylbx –u db2admin –w –asd –a –e –o a.txt21. 显示当前用户所有表 

list tables 
15.列出所有的系统表 

  list tables for system 
16.查看表结构 
  db2 describe select * from user.tables 

csdn上的是 lingyunfeipu (凌云)整理  

17.db2 drop database ods_ibb
 

================================================

select int_to_dt (20080701,'yyyymmdd') from sysibm.sysdummy1
可以了,int_to_dt
17.
语句为:select VALUE(pbyaccounts,''), VALUE(pbyname,''),oprttype from tables001; 
 请高手指教,我不懂这个select语句的意思.VALUE(pbyname,''),代表的是什么?
VALUE(pbyname,''),如果pbyname的值为NULL,就把它显示成空格输出,如果不是NULL,就正常输出

18. 查询得到所需的存储过程代码
比如在orcle里可以用类似下面的语句查询得到所需的存储过程代码:
SELECT   TEXT
    FROM USER_SOURCE -- or DBA_SOURCE
   WHERE OWNER = :OWNER
     AND NAME = :NAME
     AND TYPE = :TYPE
ORDER BY LINE;

db2 select text from syscat.procedures where procschema= and procname=
db2look导出也可以

请教:在syscat.procedures 中字段TEXT_BODY_OFFSET承载什么作用?如果该字段的值为-1那么表示什么意思,起到什么作用呢?
客气
If LANGUAGE = SQL, the offset to the start of the SQL procedure body in the full text of the CREATE statement; -1 if LANGUAGE is not SQL.


19. 判断贵宾理财中,不同区间下的客户拥有电话的情况
    不需要case when 嵌套,只需要按组group by 即可。 
    select 
    case when TOTALVALUE > 500 then A 
         when TOTALVALUE < 500W and TOTALVALUE >=100W  then B
         ......
    end as 1 ,
    count (distinct cust_no), --客户数量
    count (distinct case when phone_num is not null then cust_no else null end), --有电话客户数量
                   
    from xxx
    group by 1
    ;
    
    
========================================================================

我的常用db2命令
关键字: db2 
一、我的收集
1.如何取当前时间?
SELECT CURRENT TIMESTAMP  FROM SYSIBM.SYSDUMMY1 
2.转换数据类型
SELECT EMPNO, CAST(RESUME AS VARCHAR(370)) 
FROM EMP_RESUME 
WHERE RESUME_FORMAT = 'ascii' 
3.如何快速清除一个大表?
  ALTER TABLE TABLE_NAME ACTIVE NOTLOGGED INITALLY WITH EMPTY TABLE
INITIALIZE TAPE
4.如何知道当前DB2的版本?
  select * from sysibm.sysvERSIONS
5.
 db2start
 db2stop
 db2stop force  
6.
LOAD FORM detail.ixf OF IXF REPLACE INTO detail

CREATE TABLE group_temp  (
    "NID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY ( START WITH +1 , INCREMENT BY +1 , NO CACHE ) , 
    "PID" INTEGER NOT NULL WITH DEFAULT 0, 
    "LVL" INTEGER NOT NULL WITH DEFAULT 0, 
    "NAME" VARCHAR(30) , 
    "REMARK" VARCHAR(30) , 
    "DEPARTMENT" VARCHAR(30) ,
primary key (NID) );

create table dept 
(deptno smallint not null generated always as identity(start with 1,
increment by 1),
deptname varchar(36) not null,
location char(30),
primary key (deptno) );


首先要建一个sequence
create sequenct sequence_name start with start_value [step step_value] 
step step_value 是可选项,默认的时候是1

例:
创建:
create sequence seq_test start with 1 
提取:
select  nextval for seq_test from sysibm.sysdummy1

 select  row_number() over()   from aryxx ;

LOAD FORM product.ixf OF IXF INSERT INTO PRODUCT
LOAD FROM INDEXING MODE REBUILD INSERT INTO PRODUCT

db2look -d leafloca -l -e -o leafloca.ddl

db2 connect to platform user db2admin using db2admin
db2 " export to  detail.ixf of IXF SELECT * FROM t_leaf_buy_detail "
db2 " load from detail.ixf OF IXF replace  INTO t_leaf_buy_detail "



7. 察看数据库配置参数信息

db2 get db cfg for platform

7.1修改列的类型
alter table xxx alter column yyy set data type decimal(p,q)

DECIMAL (n, m) -> DECIMAL (p, q)
p >= n; q >= m; (p-q) >= (n-m)

8. 更新数据库参数配置信息

db2 update db cfg for test using para_name para_value

9.察看端口号

db2 get dbm cfg|grep SVCENAME

10.生成数据库的定义

db2look -d db_alias -a -e -m -l -x -f -o db2look.sql
db2look -d ods_ibb -a -e -m -l -x -f -o odsibb.sql

11.查看是哪张表挂起 

db2 select tabname,tableid from syscat.tables where tableid=59 
表名知道后到db2move.lst(在db2move  YOURDB  export的目录中)中找到相应的.ixf文件 
 db2 load from tab11.ixf of ixf terminate into db2admin.xxxxxxxxx 
tab11.ixf对应的是xxxxxxxxx表 

db2 "load from acmmst.txt of del modified by coldel| replace into acmmst nonrecoverable ”                                                   LOAD FORM product.ixf OF IXF REPLACE INTO PRODUCT
LOAD FORM product.ixf OF IXF INSERT INTO PRODUCT
LOAD FROM INDEXING MODE REBUILD INSERT INTO PRODUCT  

db2 connect to leafloca user db2admin using db2admin 
db2 "EXPORT TO emp_photo.ixf of IXF SELECT * FROM emp_photo"
db2 "EXPORT TO employee.del of DEL SELECT firstnme, lastname FROM employee FETCH FIRST 10 ROWS ONLY"
db2 "IMPORT FROM emp_photo.ixf OF IXF COMMITCOUNT 10 REPLACE_CREATE INTO emp_photo_copy"
db2 " LOAD FROM emp_photo.ixf OF IXF REPLACE INTO emp_photo_copy  "
db2 " LOAD FROM emp_photo.ixf OF IXF REPLACE INTO emp_photo_copy SET INTEGRITY FOR emp_photo_copy ALL IMMEDIATE UNCHECKED "
db2look -d sample -l -e -o sample.ddl                                                    
12. database
db2move leafloca export -u db2admin -p db2admin
db2move leafloca import -u db2admin -p db2admin
db2 backup database leafloca to d:\lic  
db2 restore database leafloca from d:\lic taken at 20070101
二、常用命令
1. 建立数据库DB2_GCB 
CREATE DATABASE DB2_GCB ON G: ALIAS DB2_GCB 
USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM DFT_EXTENT_SZ 32 
2. 连接数据库 
connect to sample1 user db2admin using 8301206 
3. 建立别名 
create alias db2admin.tables for sysstat.tables; 
CREATE ALIAS DB2ADMIN.VIEWS FOR SYSCAT.VIEWS 
create alias db2admin.columns for syscat.columns; 
create alias guest.columns for syscat.columns; 
4. 建立表 
create table zjt_tables as 
(select * from tables) definition only; 
create table zjt_views as 
(select * from views) definition only; 

create table T_B_LEAF_SELL_DETAIL
(
   id            DECIMAL(18)    not null generated always as identity(start with 1,increment by 1),
   SELL_NO              VARCHAR(13)         ,
   TYPE_CODE            VARCHAR(6),
   SHAPE_CODE           VARCHAR(6),
   GRADE_CODE           VARCHAR(6),
   SELL_AMOUNT          DECIMAL(16,4),
   PACKAGE_CODE         VARCHAR(2),
   SELL_PRICE           DECIMAL(16,4),
   SELL_MONEY           DECIMAL(16,4),
   SELL_TAX             DECIMAL(16,4),
   SELL_TAX_MONEY       DECIMAL(16,4),
   constraint P_L_S_D primary key (id)
);

序列号create sequence seq_billcode start with 1 ;  取select  nextval for seq_billcode from sysibm.sysdummy1 ;5. 插入记录 
insert into zjt_tables select * from tables; 
insert into zjt_views select * from views; 
6. 建立视图 
create view V_zjt_tables as select tabschema,tabname from zjt_tables; 
7. 建立触发器 
CREATE TRIGGER zjt_tables_del 
AFTER DELETE ON zjt_tables 
REFERENCING OLD AS O 
FOR EACH ROW MODE DB2SQL 
Insert into zjt_tables1 values(substr(o.tabschema,1,8),substr(o.tabname,1,10)) 
8. 建立唯一性索引 
CREATE UNIQUE INDEX I_ztables_tabname 
ON zjt_tables(tabname); 
9. 查看表 
select tabname from tables 
where tabname='ZJT_TABLES'; 
10. 查看列 
select SUBSTR(COLNAME,1,20) as 列名,TYPENAME as 类型,LENGTH as 长度 
from columns 
where tabname='ZJT_TABLES'; 
11. 查看表结构 
db2 describe table user1.department 
db2 describe select * from user.tables 
12. 查看表的索引 
db2 describe indexes for table user1.department 
13. 查看视图 
select viewname from views 
where viewname='V_ZJT_TABLES'; 
14. 查看索引 
select indname from indexes 
where indname='I_ZTABLES_TABNAME'; 
15. 查看存贮过程 
SELECT SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15) 
FROM SYSCAT.PROCEDURES; 
16. 类型转换(cast) 
ip datatype:varchar 
select cast(ip as integer)+50 from log_comm_failed 
17. 重新连接 
connect reset 
18. 中断数据库连接 

18.1删除bufferpool
db2 drop bufferpool test

disconnect db2_gcb 
19. view application 
LIST APPLICATION; 
20. kill application 
FORCE APPLICATION(0); 
db2 force applications all (强迫所有应用程序从数据库断开) 
21. lock table
lock table test in exclusive mode 
22. 共享 
lock table test in share mode 
23. 显示当前用户所有表 
list tables 
24. 列出所有的系统表 
list tables for system 
 25. 显示当前活动数据库 
list active databases 
26. 查看命令选项 
list command options 
27. 系统数据库目录 
LIST DATABASE DIRECTORY 
28. 表空间 
list tablespaces 
29. 表空间容器 
LIST TABLESPACE CONTAINERS FOR 
Example: LIST TABLESPACE CONTAINERS FOR 1 
30. 显示用户数据库的存取权限 
GET AUTHORIZATIONS 
31. 启动实例 
DB2START  

32. 停止实例 
db2stop (force) 
33. 表或视图特权 
grant select,delete,insert,update on tables to user 
grant all on tables to user WITH GRANT OPTION 
34. 程序包特权 
GRANT EXECUTE 
ON PACKAGE PACKAGE-name 
TO PUBLIC 
35. 模式特权 
GRANT CREATEIN ON SCHEMA SCHEMA-name TO USER 
36. 数据库特权 
grant connect,createtab,dbadm on database to user 
37. 索引特权 
grant control on index index-name to user 
38. 信息帮助 (? XXXnnnnn ) 
例:? SQL30081 
39. SQL 帮助(说明 SQL 语句的语法) 
help statement 
例如,help SELECT 
40. SQLSTATE 帮助(说明 SQL 的状态和类别代码) 
? sqlstate 或 ? class-code 
41. 更改与"管理服务器"相关的口令 
db2admin setid username password 
42. 创建 SAMPLE 数据库 
db2sampl 
db2sampl F:(指定安装盘) 
43. 使用操作系统命令 
! dir 
44. 转换数据类型 (cast) 
SELECT EMPNO, CAST(RESUME AS VARCHAR(370)) 
FROM EMP_RESUME 
WHERE RESUME_FORMAT = 'ascii' 
45. UDF
要运行 DB2 Java 存储过程或 UDF,还需要更新服务器上的 
DB2 数据库管理程序配置,以包括在该机器上安装 JDK 的路径 
db2 update dbm cfg using JDK11_PATH d:\sqllib\java\jdk 
TERMINATE 
update dbm cfg using SPM_NAME sample 
46. 检查 DB2 数据库管理程序配置 
db2 get dbm cfg 
47. 检索具有特权的所有授权名 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH 
UNION 
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH 
ORDER BY GRANTEE, GRANTEETYPE, 3 
create table yhdab 
(id varchar(10), 
password varchar(10), 
ywlx varchar(10), 
kh varchar(10)); 
create table ywlbb 
(ywlbbh varchar(8), 
ywmc varchar(60)) 
48. 修改表结构 
alter table yhdab ALTER kh SET DATA TYPE varchar(13); 
alter table yhdab ALTER ID SET DATA TYPE varchar(13); 
alter table lst_bsi alter bsi_money set data type int; 
insert into yhdab values 
('20000300001','123456','user01','20000300001'), 
('20000300002','123456','user02','20000300002'); 
49. 业务类型说明 
insert into ywlbb values 
('user01','业务申请'), 
('user02','业务撤消'), 
('user03','费用查询'), 
('user04','费用自缴'), 
('user05','费用预存'), 
('user06','密码修改'), 
('user07','发票打印'), 
('gl01','改用户基本信息'), 
('gl02','更改支付信息'), 
('gl03','日统计功能'), 
('gl04','冲帐功能'), 
('gl05','对帐功能'), 
('gl06','计费功能'), 
('gl07','综合统计')
二. 目录视图说明
说明 目录视图 
检查约束 SYSCAT.CHECKS 
列 SYSCAT.COLUMNS 
检查约束引用的列 SYSCAT.COLCHECKS
关键字中使用的列 SYSCAT.KEYCOLUSE
数据类型 SYSCAT.DATATYPES
函数参数或函数结果 SYSCAT.FUNCPARMS
参考约束 SYSCAT.REFERENCES
模式 SYSCAT.SCHEMATA
表约束 SYSCAT.TABCONST
表 SYSCAT.TABLES
触发器 SYSCAT.TRIGGERS
用户定义函数 SYSCAT.FUNCTIONS
视图 SYSCAT.VIEWS
三. 字符串类型
二进制大对象 (BLOB) 字符串。 
字符大对象 (CLOB) 字符串,它的字符序列可以是单字节字符或多字节字符,
或这两者的组合。 
双字节字符大对象 (DBCLOB) 字符串,它的字符序列是双字节字符。 
四. 数据库范式
第一种规范形式:表中的每一行和每一列均有一个值,永远不会是一组值。 
第二种规范形式:不在关键字中的每一列提供取决于整个关键字的事实。 
第三种规范形式:每个非关键字列提供与其他非关键字列无关并只取决于该关键字的事实。 
第四种规范形式:没有行包含有关一个实体的两个或更多个独立的多值事实。 
五. 数据类型
数据类型 类型 特性 示例或范围 
CHAR(15) 定长字符串 最大长度为 254 'Sunny day ' 
VARCHAR(15) 变长字符 最大长度为 4000 'Sunny day' 
SMALLINT 数字 长度为 2 字节精度为 5 位范围为-32768 至 32767 
INTEGER 数字 长度为 4 字节精度为 10 位范围为-2147483648 至 2147483647 
REAL 数字 单精度浮点32 位近似值 范围为-3.402E+38至-1.175E-37或 
1.175E-37 至-3.402E+38或零 
DOUBLE 数字 双精度浮点64 位近似值 范围为-1.79769E+308 
至-2.225E-307或 2.225E-307 至 1.79769E+308或零 
DECIMAL(5,2) 数字 精度为 5小数位为 2 范围为 -10**31+1 至 10**31-1 
DATE 日期时间 三部分值 1991-10-27 
TIME 日期时间 三部分值 13.30.05 
TIMESTAMP 日期时间 七部分值 1991-10-27-13.30.05.000000 
六. 列函数 
列函数对列中的一组值进行运算以得到单个结果值。下列就是一些列函数的示例。 
AVG 
返回某一组中的值除以该组中值的个数的和 
COUNT 
返回一组行或值中行或值的个数 
MAX 
返回一组值中的最大值 
MIN 
返回一组值中的最小值 
七. 标量函数 
标量函数对值进行某个运算以返回另一个值。
下列就是一些由DB2 通用数据库提供的标量函数的示例。 
ABS 
返回数的绝对值 
HEX 
返回值的十六进制表示 
LENGTH 
返回自变量中的字节数(对于图形字符串则返回双字节字符数。) 
YEAR 
抽取日期时间值的年份部分 

db2start
db2 connect to icss  USER DB1

db2 get db cfg for icss

db2 update db cfg using  LOGFILSIZ 10000 (1000)
db2 update db cfg using  LOGPRIMARY 30   (3)
db2 update db cfg using  LOGSECOND  20   (2)


db2 " select * from table "

db2move icss export -tn * -u db2admin -p db2admin
db2move rone  import    -u db2admin -p db2admin 

db2 "update A set bal=(select txnamt from B where actno=A.actno and cnlno=A.Cnlno) where A.actno||A.cnlno in (select Actno||cnlno from B );

db2 "update cdmcrd set offset = (select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno) where cdmcrd.crdno in (select cdmlsl.crdno from cdmlsl) 

db2 alter bufferpool ibmdefaultbp size 10240

db2 "select * from syscat.bufferpools";


 

数据库会恢复正常,可再用db2 list tablespaces show detail查看

12. database
db2move leafloca export -u db2admin -p db2admin
db2move leafloca import -u db2admin -p db2admin
db2 backup database leafloca to d:\lic  
db2 restore database leafloca from d:\lic taken at 20070101



例如:
低效:
    SELECT DISTINCT DEPT_NO,DEPT_NAME 
    FROM DEPT D,EMP E
    WHERE D.DEPT_NO = E.DEPT_NO
高效:
    SELECT DEPT_NO,DEPT_NAME
    FROM DEPT D
    WHERE EXISTS ( SELECT ‘X’
                    FROM EMP E
                    WHERE E.DEPT_NO = D.DEPT_NO);
  EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果.



13.清空一个大表
在存储过程中动态执行

SET str_sql='alter table M_IBB_F_F_LN_PEN_LCCOA_A activate not logged initially with empty table';
EXECUTE IMMEDIATE str_sql;


/*

select null as END_TIME
from t
谁知道,上面这种语句,在DB2中是怎么写null as什么的,类似于oracle的虚列,请抢答。

更正
正确答案:
 select cast(null as coltype) as colname from tablename
 cast中要把null对应的列的类型写出
多谢姚志金,陈建峰!

答案:
select case when 1 = 1 then null end as END_TIME
from t
多谢陈建峰!

*/
su - 

select * from prog_log_ibb  with ur

db2 list applications for database ods_ibb 

------------------------------------------------------
1.建立了一个shell脚本,导出数据,db2 "select * from table " > a.txt

导出来的数据是包含表头的,但是我现在不需要表头,有没有什么办法?
db2 +x "select * from table " > a.txt

2. 想看数据库中表的大小
对表runstats
再查syscat.tables, syscat.tbspaces ,  得到  bigint(a.npages) * bigint(b.pagesize)

3.
现在需要增加每个表空间容器的大小,到底是使用extend还是使用resize呢?各有什么区别?

例子:
用EXTEND子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE EXTEND (file 'd:\db2data\acc_tbsp' 1000, file 'e:\db2data\acc_tbsp' 1000, file 'f:\db2data\acc_tbsp' 1000)
该命令的运行结果为在原有容量的基础之上,每个容器再增加1000页。

例子
用RESIZE子句更改例三所创建的表空间的容器的大小。
ALTER TABLESPACE RESOURCE RESIZE (file 'd:\db2data\acc_tbsp' 8000, file 'e:\db2data\acc_tbsp' 8000, file 'f:\db2data\acc_tbsp' 8000)
每个容器(文件)的大小变为8000页。

没啥区别,只是resize可以减小tablespace

4.扩大索引空间:db2inst2
db2 "alter tablespace TBS_IDX_1 resize (FILE '/odsibb/tbs/TBS_IDX_1' 25600M)"

重启数据库

5.
shell脚本导出数据,如何删除表头 
建立了一个shell脚本,导出数据,db2 "select * from table " > a.txt

导出来的数据是包含表头的,但是我现在不需要表头,有没有什么办法?

谢谢各位



6.以下是DB2 V8在REDHAT AS4的环境。

创建表空间:
CREATE  REGULAR  TABLESPACE userspace1 
  IN DATABASE PARTITION GROUP "IBMDEFAULTGROUP" 
  PAGESIZE 32K  
  MANAGED BY DATABASE  
  USING 
   ( FILE '/dmsdata/user0' 5120 ) ON DBPARTITIONNUM (0) 
  USING 
   ( FILE '/dmsdata/user1' 5120 ) ON DBPARTITIONNUM (1) 
   EXTENTSIZE 32 
   OVERHEAD 10.5 
   PREFETCHSIZE 32 
   TRANSFERRATE 0.14 
   BUFFERPOOL "testdbbuff" 
   DROPPED TABLE RECOVERY ON;
COMMENT ON TABLESPACE USERSPACE IS 'userspace';
CONNECT RESET;

给表空间增加container。
alter tablespace userspace1 
add 
(file'/dmsdata/usernew0' 5120) on node (0) 
add 
(file'/dmsdata/usernew1' 5120) on node (1) 
add 
(file'/dmsdata/usernew2' 5120) on node (2) 
add 
(file'/dmsdata/usernew3' 5120) on node (3);

删除一个分区,注意顺序。
db2 list database partition groups show detail
db2 alter database partition group ibmdefaultgroup drop node \(3\)
db2 redistribute db partition group ibmdefaultgroup uniform
export DB2NODE=3
db2 terminate
db2 connect to testdb
db2 drop node verify
db2stop drop dbpartitionnum 3


7.查出一个表中记录重复的数据。

select  t1.cstno   from  F_CI_PER_PB_CSTINF_APPEND  t1 ,
( select  cstno ,count(1) as cnt   from  F_CI_PER_PB_CSTINF_APPEND 
group by cstno   ) t2 
  where t1.cstno = t2 .cstno  ---'/1AKcJD2ud' 
    and t2.cnt >1 

法二:    
select  cstno ,count(1) as cnt   from  F_CI_PER_PB_CSTINF_APPEND 
group by cstno 
having count(1) >1
    
db2look -e -d ods_ibb -t M_IBB_A_RPT_LN_INCOME_tmp > tmp2.sql

执行动态SQL:into 后面接需要传出OUT的标识,using后面接传入的变量
/*
 set str_sql = 'call '||v_proc_name||' (?,?)';
        prepare s from str_sql;
        execute s into i_flg using c_cur_mon_end;
*/
db2look -e -d ods_ibb -t M_IBB_D_CODCMP M_IBB_D_PAR_CODE > tab.sql
db2look -d ods_ibb -e -dp -t M_IBB_A_TMP_PMERA M_IBB_D_ORGLVL >tab2.sql   ---(含DROP )

db2look -d leafloca -l -e -o leafloca.ddl

UNCATALOG DATABASE ODS_IBB;
CATALOG DATABASE ODS_IBB
	AS ODSIBB_BAK
	AT NODE ODS_IBB
	AUTHENTICATION SERVER;
	
别名长度受限制:ibbdbbak1
db2 "CATALOG DATABASE ODS_IBB AS ibbdbbak AT NODE node1 AUTHENTICATION SERVER "

db2 list tables for  schema ibbdb2


#用同一个用户ibbdb2 
db2 CATALOG LOCAL NODE node1 INSTANCE db2inst1                                                  
--db2 CATALOG LOCAL NODE node2 INSTANCE db2inst2                                                
db2 attach to node1                              
db2 detach                                       

db2 " CATALOG DATABASE ODS_IBB as odsibbbak AT NODE node1 AUTHENTICATION SERVER "


=================================================================
执行频率最高、运行时间最长和排序次数最多的动态 SQL 
db2 "select * from sysibmadm.top_dynamic_sql"
select STMT_SORTS, SORTS_PER_EXECUTION, substr(STMT_TEXT,1,60) as STMT_TEXT
from TOP_DYNAMIC_SQL order by STMT_SORTS desc fetch first 5 rows only
高成本应用程序
select AGENT_ID, ROWS_SELECTED, ROWS_READ from APPL_PERFORMANCE
当前正在执行的运行时间最长的查询
select ELAPSED_TIME_MIN, APPL_STATUS, AGENT_ID from long_running_sql
查询的运行频率以及这些查询中每个查询的平均执行时间
select NUM_EXECUTIONS, AVERAGE_EXECUTION_TIME_S, PREP_TIME_PERCENT from
QUERY_PREP_COST order by NUM_EXECUTIONS desc

打开会话监控开关
update monitor switches using bufferpool on sort on lock on statement on table on uow on
db2 get monitor switches 

db2 get snapshot for dynamic sql on ods_ibb > top.sql 

grep -E "Total execution time" top.sql |sort > time.sql

=================================================================
db2 list tablespaces show detail 
db2 drop tablespace TBS_DATA_DP

注意:length(dt),若dt为decimal格式,默认会把前面补0,最好先转化为int

进行多次连接后,最好执行下disconnect
db2 disconnect all 

uptime
db2_ps
tail -1000 db2diag.log 
cd db2dump


db2pd -db ods_ibb -locks
db2pd -db ods_ibb -applications
db2pd -db ods_ibb -transactions
db2pd -db ods_ibb -dynamic 

SELECT DISTINCT SIBRTH FROM F_CI_PER_CISIA FETCH FIRST 5000 rows only
db2 load query table m_ibb_f_f_ci_per_cisia 

补充:
1. 查锁表的问题:
查锁的表
db2 "SELECT AGENT_ID,TABNAME,LOCK_MODE,LOCK_STATUS,LOCK_RELEASE_FLAGS FROM SYSIBMADM.SNAPLOCK"

-----查死锁的,
db2 "  select * from sysibmadm.locks_held where lock_MODE like '%X%' " 

M_IBB_A_RPT_PSO_OPACST

db2 get snapshot for application agentid 547|more  
db2 get snapshot for application agentid 11 

db2 RUNSTATS ON TABLE table1 


db2pd -d ods_ibb -recovry
--活动监控器

db2 " force application(115) "
-----------------------------------------------
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0902yuancg/
-----------------------------------------------

db2_kill 
db2start 
db2 connect to *

db2mtrk DB2 内存跟踪器工具

vmstat 1

db2mtrk -i -v 实例级

db2mtrk -d -v 数据库级

db2mtrk -d 

/*
扩大数据库IO
--alter tablespace tbs_data_1 prefetchsize AUTOMATIC
--alter tablespace tbs_idx_1 prefetchsize AUTOMATIC

[实例用户]
db2set db2_parallel_io=*

[还原]
db2set db2_parallel_io=


*/

/* 打开监控
22.5.234.11
db2inst1
db2 update dbm cfg using DFT_MON_BUFPOOL ON
*/

LOAD 命令执行状态
db2 list utilities show detail 
alter table tabname activate not logged with empty table 
load from empfile of del replace into tabname  == 

/*LOAD时报错:由于是同组用户的权限设置有问题*/
SQL3501W  由于对数据库禁用了正向恢复,因此,表所在的表空间将不会处于备份暂挂状态

SQL3039W  可用于对 DATA BUFFER 进行 LOAD 的内存禁止全 LOAD
并行性。将使用装入并行性 "3"
SQL3109N  实用程序开始装入文件 "/home/odsusr/script/oth_del/M_IBB_D_CODCMP.del"
中的数据。
SQL2036N  文件或设备 "/home/odsusr/script/oth_del/M_IBB_D_CODCMP.del"
的路径无效。
========================================================================
/**************************************************************
 小朱尝试的方法:
20090422 ,经常报 911,912错误,同时还有968错误:
---------------------------

1572864 *4k = 6G
db2 update dbm cfg using INSTANCE_MEMORY 702864

---------------------------
ipcs -l
root用户修改/etc/sysctl.conf文件
kernel.shmall=3774873
sysctl -p 让修改生效
---------------------------
storage path/instance name/NODE####/database name/T#######/C#######.EXT

NODE#### 数据库分区号 NODE0000
T####### 表空间标识   T0000003
C####### 容器标识     C0000012

EXT 扩展名
CAT 系统目录表空间
TMP 系统临时表空间
UTM 用户临时表空间
USR 用户或常规表空间
LRG 大型表空间

---------------------------
DB2系统临时文件目录

原库 A
/ibb/odsibb/db2inst2/NODE0000/ODS_IBB/T0000001/C0000000.TMP 

备库 B
/ibbadd3/odsibb/db2inst1/NODE0000/ODS_IBB/T0000001/C0000000.TMP

*************************************************************/
db2 force applications all 

DROP DATABASE database-alias [AT DBPARTITIONNUM] 

db2inst1 

db2 idrop db2inst1
#删除实例
##/opt/ibm/db2/V9.1/instance/db2idrop  db2inst1 -f


如果报:SQL0968C 文件系统已满的情况:

db2_kill 
db2pd -db ods_ibb -recovery  --查看数据库是否在回滚
db2 restart database ods_ibb  

查看数据库详细日志:
/home/db2inst1/sqllib/db2dump 
db2diag.log

---
rz
sz 
---




nohup sh 666.sh &


db2 "export to M_CI_IDENTIFIER.del of del modified by nochardel coldel$ select * from O_ECIF_M_CI_IDENTIFIER"
db2 "export to M_CI_CUSTOMER.del of del modified by nochardel coldel$ select * from O_ECIF_M_CI_CUSTOMER"

db2 "load client from M_CI_IDENTIFIER.del of del modified by coldel$ nochardel replace into O_ECIF_M_CI_IDENTIFIER nonrecoverable"
db2 "load client from M_CI_CUSTOMER.del of del modified by coldel$ nochardel replace into O_ECIF_M_CI_CUSTOMER nonrecoverable"


db2 "load client from account_20161229.dat of del modified by coldel$ nochardel codepage = 1208 replace into O_EBK_ACCOUNT nonrecoverable"

 

相关标签: db2