DB2数据库运维脚本,在不断的持续更新中

由于个人的需要,写了一份数据库运维脚本。  写本脚本的用意是:
   写一个自动收集数据库信息的脚本,这个脚本能把想要的数据保存到一个表格文件 中,方便excel等图表软件的处理。这些数据可以利用图表软件和word生 成定期的 维护报告。本脚本的终极目标是自己动手实现数据库日常运维的自动化。
   脚本主要定时收集数据库大小、数据库缓冲池、数据库表空间、锁、排 序、应用链接、自动存储路径的信息。

欢迎大家提出宝贵建议!{:3_57:}

附件:

附件图标test.sh (11.92 KB)

附件图标DPR.zip (2.66 MB)

附件图标checker.sh (12.02 KB)

附件图标collector.sh (19.84 KB)

附件图标getevmon.ksh (1.24 KB)

附件图标getsnap.ksh (1.46 KB)

附件图标dbcheck.sh (16.83 KB)

附件图标DBA脚本.doc (89.5 KB)

附件图标ibm_db-2.0.4.1-py2.7-win-amd64.egg (421.22 KB)

参与136

81同行回答

yulu4314yulu4314技术支持长春
很好的内容,收藏一下!显示全部

很好的内容,收藏一下!

收起
系统集成 · 2021-02-24
浏览1843
apple83729apple83729系统工程师昆明融汇科技
非常感谢显示全部
非常感谢收起
系统集成 · 2015-03-15
浏览958
study123study123系统架构师ERICSSON
强人很多啊,db2china人才济济,藏龙卧虎之地显示全部
强人很多啊,db2china人才济济,藏龙卧虎之地收起
系统集成 · 2014-04-04
浏览1288
ce97ce97软件开发工程师某某某
DB2维护脚本说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。由于我们用的是V82的DB2,也没怎么研究DB2自己的自动RUNSTATS维护,所以就自己整了一个脚本更新表的统计信息,顺便对存储过程的包更新执行计...显示全部
DB2维护脚本

说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。

由于我们用的是V82的DB2,也没怎么研究DB2自己的自动RUNSTATS维护,所以就自己整了一个脚本更新表的统计信息,顺便对存储过程的包更新执行计划、重新绑定。刚开始的时候只有一个数据库,脚本写的比较简单,后来数据库一多起来就只好改进脚本。原理很简单,从SYSCAT.TABLES里面选出类型是'T'和'S'的表,同时剔除个别不需要更新统计值的表,按照固定的格式生成RUNSTATS语句。对存储过程的包也是用相似的方法,不过数据从SYSCAT.PACKAGES来。

脚本的调用必须传三个参数,位置都是固定的,分别是数据库名,用户名,密码。

我对自己现在的RUNSTATS语句模板也不是很有把握。"RUNSTATS ON TABLE tabname WITH DISTRIBUTION ON ALL COLUMNS AND INDEXES ALL",选择了这些参数足够吗?

由于现在的数据库数据量都比较少,没有超过100GB的,所以现在都是每天用这个脚本更新统计值。想了解几百GB甚至是TB级别的数据库,统计值更新的策略一般是怎样的?

之前有老大提到DPF的环境,这里完全没有考虑DPF的情形。请了解DPF的朋友介绍一下在分区环境下更新统计值有什么需要注意的。

如果大家有更好的方法或者想法,请不吝赐教。

欢迎转发试用,转贴请注明出处。谢谢!


##############################################
#r.sh DBNAME USER PASS
. $HOME/sqllib/db2profile

DBNAME=$1
USER=$2
PASS=$3

LOG=~/mon/runstats.$DBNAME.log
SQL=~/mon/runstats.$DBNAME.sql
date +%Y-%m-%d.%H:%M:%S > $LOG
db2 connect to $DBNAME user $USER using $PASS >> $LOG
echo "connect to $DBNAME user $USER using $PASS ;" > $SQL

db2 "select 'RUNSTATS ON TABLE ' || ltrim(rtrim(tabschema)) || '.' || ltrim(rtrim(tabname)) || ' WITH DISTRIBUTION ON ALL COLUMNS AND INDEXES ALL ;' from syscat.tables where type in ('S', 'T') and tabname not in ('TB_LOG') order by npages desc" | grep -i "RUNSTATS" >> $SQL

db2 "select 'REBIND ' || ltrim(rtrim(pkgschema)) || '.' || ltrim(rtrim(pkgname)) || ' ;' from syscat.packages where pkgschema not in ('NULLID') order by last_bind_time" | grep -i "^REBIND" >> $SQL

echo "disconnect all ;" >> $SQL

echo RUNSTATS AND REBIND START >> $LOG
date +%Y-%m-%d.%H:%M:%S >> $LOG

db2 -tvf $SQL >> $LOG

echo RUNSTATS AND REBIND END >> $LOG
date +%Y-%m-%d.%H:%M:%S >> $LOG
##############################################收起
系统集成 · 2014-04-03
浏览1259
ce97ce97软件开发工程师某某某
DB2维护脚本DB2维护脚本(1)说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。今天发的是自己写的第一个DB2维护脚本,主要是为了提高自己检查服务器的运行情况的效率和准确性。原理很简单,但实际中很好用...显示全部
DB2维护脚本

DB2维护脚本(1)

说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。

今天发的是自己写的第一个DB2维护脚本,主要是为了提高自己检查服务器的运行情况的效率和准确性。原理很简单,但实际中很好用。经过不断调整、完善,才得到现在这个版本。

脚本的主要目的是列出当前实例中所有的应用连接,之后分别统计:
1、状态既不是“UOW Waiting”也不是“Connect Completed”的连接的数量,个人觉得这两种状态以外的连接都应该算是活动的连接,如果同一时间很多这样的进程,大致可以判断服务器的繁忙程度
2、状态是UOW Waiting或者Connect Completed的连接的数量
3、当前所有连接的总数

最后将状态既不是“UOW Waiting”也不是“Connect Completed”的连接的快照信息也显示出来。

# c.sh
#
. $HOME/sqllib/db2profile
export LANG=en_US
date "+%Y-%m-%d %H:%M:%S"
tmpfile=~/tmp/c$RANDOM.tmp.out

db2 list application show detail |grep -ivE "^$|application name|handle|-------------------------" > $tmpfile
grep -ivE "uow wait|connect completed" $tmpfile|wc -l
grep -iE "uow wait|connect complete" $tmpfile|wc -l
grep -iE "$HOME" $tmpfile|wc -l
grep -ivE "uow wait|connect completed" $tmpfile
rm -fr $tmpfile收起
系统集成 · 2014-04-03
浏览1228
ce97ce97软件开发工程师某某某
DB2维护脚本最近比较忙,没时间整理完整的脚本,拿两个最近经常用的DB2管理SQL语句来凑数。说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。第一个SQL,通过snapshot_tbs_cfg()快照函数,获取表空间的最新...显示全部
DB2维护脚本

最近比较忙,没时间整理完整的脚本,拿两个最近经常用的DB2管理SQL语句来凑数。

说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。

第一个SQL,通过snapshot_tbs_cfg()快照函数,获取表空间的最新使用情况,每天检查表空间的使用趋势,通过FREEPERC判断DMS表空间的可用空间的比例。

第二个SQL,通过snapshot_lock()快照函数,获取属于当前连接数据库的所有锁对象,同时 LOCK_MODE 属于(2, 4, 5, 7, 10, 11, 12)的锁选出来。由于开发环境下,经常有开发人员说某某表被锁了,又不知道被谁、哪个进程或者服务器加了锁。通过这个SQL,加上TABLE_NAME和TABLE_SCHEMA条件,就能快速定位对指定的表加了各种互斥锁的连接的AGENTID,接下来就一个FORCE APPLICATION (AGENTID),将连接断了。

有个问题,快照函数一定要具有实例用户或者数据库管理员权限的用户才能运行,有什么办法可以授权给普通的用户能够调用,例如封装成视图可以吗?

如果大家有更好的方法或者想法,请不吝赐教。

欢迎转发试用,转贴请注明出处。谢谢!


##############################################
select snapshot_timestamp, tablespace_id, tablespace_name, page_size, decimal(free_pages,18,2)/decimal(total_pages,18,2) * 100 as FREEPERC, decimal(used_pages*page_size,30,2) / 1024 /1024 USEDMB, total_pages, high_water_mark, usable_pages, used_pages, free_pages from table(snapshot_tbs_cfg('',-1)) a order by tablespace_type, used_pages*page_size desc;

select snapshot_timestamp, agent_id, table_file_id, lock_object_type, lock_mode, table_name, table_schema, tablespace_name from table(snapshot_lock('',-1)) a where lock_mode in (2, 4, 5, 7, 10, 11, 12);

另外附上DB2内部对 LOCK_MODE 常量各种值的描述:
/******************************************************************************/
/* lock modes (lock_mode)                                                     */
/******************************************************************************/

#define SQLM_LNON  0                  /*  No Lock                             */
#define SQLM_LOIS  1                  /*  Intention Share Lock                */
#define SQLM_LOIX  2                  /*  Intention Exclusive Lock            */
#define SQLM_LOOS  3                  /*  Share Lock                          */
#define SQLM_LSIX  4                  /*  Share with Intention Exclusive Lock */
#define SQLM_LOOX  5                  /*  Exclusive Lock                      */
#define SQLM_LOIN  6                  /*  Intent None (For Dirty Read)        */
#define SQLM_LOOZ  7                  /*  Super Exclusive Lock                */
#define SQLM_LOOU  8                  /*  Update Lock                         */
#define SQLM_LONS  9                  /*  Next-key Share Lock                 */
#define SQLM_LONX 10                  /*  Next-key Exclusive Lock             */
#define SQLM_LOOW 11                  /*  Weak Exclusive Lock                 */
#define SQLM_LONW 12                  /*  Next-key Weak Exclusive Lock        */
##############################################收起
系统集成 · 2014-04-03
浏览1208
ce97ce97软件开发工程师某某某
db2还原脚本 --删除原有数据库db2 "drop db aic_jx"  --重新建立数据库,使用GBK编码集和中国区域代码db2 "create db aic_jx on /home/db2inst2/data/aic_jx using codeset gbk territory cn"  --进行覆盖式的重定向还原,并设定新日志文件路径db2 "restore db aic_jx...显示全部
db2还原脚本

--删除原有数据库
db2 "drop db aic_jx"
  
--重新建立数据库,使用GBK编码集和中国区域代码
db2 "create db aic_jx on /home/db2inst2/data/aic_jx using codeset gbk territory cn"
  
--进行覆盖式的重定向还原,并设定新日志文件路径
db2 "restore db aic_jx from /home/db2inst2/tmp/20061031 taken at 20061031040001 to /home/db2inst2/data/aic_jx into aic_jx newlogpath '/home/db2inst2/data/aic_jx/activelog/NODE0000/' REPLACE EXISTING redirect"
  
--重定向表空间的容器
db2 "set tablespace containers for 0 using (path '/home/db2inst2/data/aic_jx/db2inst2/NODE0000/SQL00001/SQLT0000.0')"
  
db2 "set tablespace containers for 1 using (path '/home/db2inst2/data/aic_jx/db2inst2/NODE0000/SQL00001/SQLT0001.0')"
  
db2 "set tablespace containers for 2 using (file '/home/db2inst2/data/aic_jx/USERSPACE1.DBS' 2560000)"
  
db2 "set tablespace containers for 3 using (file '/home/db2inst2/data/aic_jx/INDEXSPACE1.DBS' 968000)"
  
db2 "set tablespace containers for 4 using (file '/home/db2inst2/data/aic_jx/USERSPACE2.DBS' 102400)"
  
db2 "set tablespace containers for 5 using (file '/home/db2inst2/data/aic_jx/CDSPACE2.DBS' 51200)"
  
db2 "set tablespace containers for 6 using (path '/home/db2inst2/data/aic_jx/db2inst2/NODE0000/SQL00001/SQLT0002.0')"
  
db2 "set tablespace containers for 7 using (path '/home/db2inst2/data/aic_jx/db2inst2/NODE0000/SQL00001/SYSTOOLSPACE')"
  
db2 "set tablespace containers for 8 using (file '/home/db2inst2/data/aic_jx/TEMPUSESPACE1.DBS' 51200)"
  
--开始重定向还原
db2 "restore db aic_jx continue"
  
--还原完成检查还原数据库的配置
db2 "get db cfg for aic_jx"
  
--禁用镜像日志和出错归档日志两项数据库配置
db2 "update db cfg for aic_jx using MIRRORLOGPATH NULL"
db2 "update db cfg for aic_jx using FAILARCHPATH NULL"
 
--使用日志文件进行回滚
db2 "rollforward db aic_jx to end of logs"
db2 "rollforward db aic_jx to 2006-10-31-4.03"
db2 "rollforward db aic_jx complete"

--禁用归档日志两项数据库配置
db2 "update db cfg for aic_jx using LOGARCHMETH1 OFF"
db2 "update db cfg for aic_jx using LOGARCHMETH2 OFF"
  
--激活数据库
db2 "activate db aic_jx"
  
--检查数据库备份信息
db2 "list history backup since 20061031 for db aic_jx"
  
--其他杂项命令
db2 "set tablespace containers for using (path '')"
db2 "set tablespace containers for using (file '')"
db2 "create db test using codeset gbk territory cn"
db2 "list utilities show detail"
tail -f /home/db2inst2/sqllib/db2dump/db2diag.log收起
系统集成 · 2014-04-03
浏览1216
ce97ce97软件开发工程师某某某
DB2维护脚本说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。我们使用的DB2服务器工作时段都非常繁忙,使用nmon监控服务器发现CPU使用率很高,有时候还连带出现持续很高的磁盘读取。这个时候,DB2服务器...显示全部
DB2维护脚本

说明:所有的脚本都是基于DB2 UDB V8.2编写的,在AIX5.3的默认SHELL下运行,如果要移植到其他操作系统需要适当调整里面的语法。

我们使用的DB2服务器工作时段都非常繁忙,使用nmon监控服务器发现CPU使用率很高,有时候还连带出现持续很高的磁盘读取。这个时候,DB2服务器在执行一条写法有问题的SQL语句或者语句访问的表缺少合适的索引,或者页面程序控制的不好允许用户多次提交导致相同的SQL重复提到服务器去执行。无论哪种情况,都需要将出问题的进程找出来,看看到底在执行什么语句,执行了多长的时间,必要的时候还需要将个别进程中断。

这次脚本就是通过db2 list application show detail命令,结合使用awk命令,将状态”UOW Waiting“或者”Connect Completed“以外的进程,找出持续运行超过若干秒的进程的AGENTID,之后用db2 get snapshot for application agent AGENTID,抓进程的快照信息。

如果大家有更好的方法或者想法,请不吝赐教。

欢迎转发试用,转贴请注明出处。谢谢!

##############################################
#snap1.sh NN
#NN 即进程持续运行某句SQL语句的秒数
#snap1.sh 15 就是抓取持续运行15秒的进程的信息

. $HOME/sqllib/db2profile
export LANG=en_US
awkfile=$HOME/mon/snap1.awk
rand=$RANDOM
tempfile=$HOME/mon/snap1.temp.$rand
idfile=$HOME/mon/snap1.id.$rand
sqlfile=$HOME/mon/snap1.sql

cd ~/mon
db2 list application show detail | grep -ivE "^$|application name|handle|-------------------------" > $tempfile
cat $tempfile |awk -v wait=$1 -v HH="$(expr `date +%H`)" -v MM="$(expr `date +%M`)" -v SS="$(expr `date +%S`)" -f $awkfile > $idfile
cat $idfile | awk '{print "get snapshot for application agentid " $1 " ;"}' > $sqlfile
#awk '{print "get snapshot for application agentid " $1 " ;"}'
db2 -tvf  $sqlfile
rm -fr $tempfile $idfile

##############################################
#snap1.awk
BEGIN {
        facmd=""  ;
#       print wait,HH,MM,SS;
}

{
id=substr($0,53,6);
ip=substr($0,64,8);
status=substr($0,144,20);
date=substr($0,175,10);
hh=substr($0,186,2);
mm=substr($0,189,2);
ss=substr($0,192,2);
db=substr($0,202,8);
#print wait,id,ip,status,date,hh,mm,ss,db,HH,MM,SS;
ts=hh*3600 + mm*60 + ss;
TS=HH*3600 + MM*60 + SS;
dbpath=substr($0,212,4);
if (dbpath ~ /home/  && status !~ /UOW Waiting/ && status !~ /Connect Completed/)
{
        ts=hh*3600 + mm*60 +ss;
        TS=HH*3600 + MM*60 +SS;
        if ( HH < hh )
        {
                TS=TS + 86400;
        }
        if ( TS - ts >= wait )
        {
                #print TS,ts,Ts-ts,wait,id,ip,status,date,hh,mm,ss,db,HH,MM,SS;
                facmd=(facmd id "\n");
                }
        }
}

END {
         printf("%s", facmd) ;
}收起
系统集成 · 2014-04-03
浏览1247
ce97ce97软件开发工程师某某某
DB2 命令行中执行sql脚本db2 => connect to dbName user xxx using passworddb2 => sql语句 如果要执行一个sql脚本文件:db2 => quitc:\> db2 -tvf sql文件名db2 -td@ -f filename@是语句结束符。E:\>db2 ? optionsdb2 [option ...] [db2-command | sql-statement |[? [ph...显示全部
DB2 命令行中执行sql脚本

db2 => connect to dbName user xxx using password

db2 => sql语句



如果要执行一个sql脚本文件:

db2 => quit

c:\> db2 -tvf sql文件名
db2 -td@ -f filename
@是语句结束符。
E:\>db2 ? options
db2 [option ...] [db2-command | sql-statement |
[? [phrase | message | sqlstate | class-code]]]
option:-a、-c、-e{c|s}、-finfile、-lhistfile、-n、-o、-p、-rreport、-s、-t、
       -td;、-v、-w、-x 和 -zoutputfile。

选项 描述                                      缺省设置
------   ----------------------------------------   ---------------
-a 显示 SQLCA                                OFF
-c 自动落实                               ON
-e 显示 SQLCODE/SQLSTATE                   OFF
-f 读取输入文件                            OFF
-l 将命令记录到历史文件中                    OFF
-n 除去换行字符                            OFF
-o 显示输出                               ON
-p 显示 db2 交互式提示符                   ON
-r 将输出报告保存到文件                   OFF
-s 在命令出错时停止执行                   OFF
-t 设置语句终止字符                          OFF
-v 回送当前命令                            OFF
-w 显示 FETCH/SELECT 警告消息             ON
-x 不打印列标题                            OFF
-z 将所有输出保存到输出文件                OFF

注意:
使用 DB2OPTIONS 环境变量定制选项缺省值。
紧跟选项字母后的减号(-)使该选项关闭。
使用 UPDATE COMMAND OPTIONS 更改选项设置(以交互式或
文件输入方式)。


只能提供nt环境下编写脚本的例子给你以供参考:  
  脚本样例:  
  db2   connect   to   yourdb   user   yourname   using   yourpassword  
  db2   insert   into   newuser(username,password,email)   values('Amy','1234','Amy@ss.com')  
  db2   insert   into   newuser(username,password,email)   values('Judy','1234','Judy@ss.com')  
  db2   commit  
  db2   disconnect   yourdb  
   
  运行脚本:   运行db2cmd     X:\XXX.bat  
   
  以下摘自本论坛的FAQ可参考:   
  "  
  在命令窗口中运行DB2脚本,可用     db2     -svtf     脚本文件名     来实现。      
  例如,脚本文件名为sample.sql,运行:db2     -svtf     sample.sql      
     
        参数中:      
                s     代表遇到错误时中止运行脚本      
                v     代表输出结果到屏幕      
                t     指以;号作为每行的分隔符      
                f     指后面需跟脚本文件名     "---此摘录版权归斑竹非本人所有  
   
  具体在AS400如何编写脚本非常遗憾.


db2 -x select SERIALNO from tabname where clause

C:>db2 attach to db2164 user ccp
输入 ccp 的当前密码:

   实例连接信息

实例服务器             = DB2/NT 8.2.0
授权标识                            = CCP
本地实例别名           = DB2164


C:>db2 connect to dw164 user ccp
输入 ccp 的当前密码:

   数据库连接信息

数据库服务器         = DB2/NT 8.2.0
SQL 授权标识         = CCP
本地数据库别名       = DW164


C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur

CUST_ID              NOW_PRED_S           LOAD_TIME
-------------------- -------------------- --------------------------
            3094736. ZFS                  2008-05-07-10.02.00.453000
            3145886. ZFS                  2008-05-07-10.02.00.453000

  2 条记录已选择。


C:>db2 list command options

     命令行处理器选项设置

后端进程等待时间(秒)        (DB2BQTIME) = 1
连接至后端的重试次数           (DB2BQTRY) = 60
请求队列等待时间(秒)        (DB2RQTIME) = 5
输入队列等待时间(秒)        (DB2IQTIME) = 5
命令选项                     (DB2OPTIONS) = +m

  选项   描述                                      当前设置
------  ----------------------------------------  ---------------
   -a    显示 SQLCA                                OFF
   -c    自动落实                                  ON
   -d    检索并显示 XML 声明                       OFF
   -e    显示 SQLCODE/SQLSTATE                     OFF
   -f    读取输入文件                              OFF
   -i    显示 XML 数据并带有缩进                   OFF
   -l    将命令记录到历史记录文件中                OFF
   -m    显示受影响的行数                          OFF
   -n    除去换行字符                              OFF
   -o    显示输出                                  ON
   -p    显示交互式输入提示符                      ON
   -q    保留空格和换行符                          OFF
   -r    将输出保存到报告文件                      OFF
   -s    在命令出错时停止执行                      OFF
   -t    设置语句终止字符                          OFF
   -v    回传当前命令                              OFF
   -w    显示 FETCH/SELECT 警告消息                ON
   -x    不打印列标题                              OFF
   -z    将所有输出保存到输出文件                  OFF


C:>db2set DB2OPTIONS=-x

C:>db2 select * from CCP_STS1 fetch first 2 rows only with ur
            4654908. ZFS                  2008-05-07-10.02.00.453000
            3716687. ZFS                  2008-05-07-10.02.00.453000收起
系统集成 · 2014-04-03
浏览1277
ce97ce97软件开发工程师某某某
DB2常用脚本  列表--db2 list db directory删除用户--db2 drop db mycfsm强制停止所有应用--db2 force application all  备份数据库--db2 backup db mycfsm to 'c:\' compress恢复数据库--db2 restore db cfsm from c:DB2 8.2 恢复数据库要备份完整...显示全部
DB2常用脚本  


列表
--db2 list db directory
删除用户
--db2 drop db mycfsm
强制停止所有应用
--db2 force application all  
备份数据库
--db2 backup db mycfsm to 'c:\' compress
恢复数据库
--db2 restore db cfsm from c:
DB2 8.2 恢复数据库要备份完整文件夹
--增加用户:计算机管理-本地用户和组-用户-添加到组里
查询错误代码
--db2 ? 错误码
连接数据库
--db2 connect to 数据库名 user 用户名 using 口令
定义游标并LOAD数据
--DB2 "DECLARE C1 CURSOR FOR SELECT * from 表名"
--DB2 "LOAD FROM C1 OF CURSOR MESSAGES LOG.TXT INSERT INTO Q_CF_COLLECT_INFO(表字段,要与游标中字段相对应)
DB2数据库系统字典表
--select * from sysibm.sysdummy1
表不活动解决
--terminate
给表添加唯一索引
--alter table user add unique index(user_id,user_name);
给已经有重复数据的表添加唯一索引
--alter ignore table user add unique index(user_id,user_name);
数值转换
--cast(column as int)
--cast('00003338.10' as decimal(17,2))
导出
--EXPORT TO 'D:\tool\Quest Software\Quest Central for DB2 v5.0\Data\BASPYWMX.del' OF DEL
  select dwbh,dwmc,xysbh,khzh,zhlx,jyfw,khrq,ssjgbm,ssjgmc,xjjgbm,sjjgbm,shjjgbm,khjgbm,dwdz,dwdh,lxrxm,lxrdh,beiy from "baspapp"."md_dwzl" where khrq='2008-10-10';
db2 "export to 'c:\a.ixf' of ixf select *from  tablename'";

DBase:db2常用命令及技巧
1.db2里面的字符串连接可用"||"这个进行连接

2.如何快速删除大批量的数据表(test为数据库表)
最常用也是最多人用的语句:delete from test,但这种做法,效率比较低,花费时间太长,因为在删除数据时,要记数据库日志。
import from /dev/null of del replace into test//先清空,再导入数据(由于导入的文件为空,故相当于清空表数据),这种删除的速度较快
ALTER TABLE test activate NOT LOGGED initially WITH EMPTY TABLE ;删除表中的数据,不记日志,这种处理最快

3.导入、导出数据,支持的文件有ixf,del文件
   db2 "export to 'c:\fileName.del' of del select * from tableName" //db2中把表中的数据导入到文件
   db2 "import from 'c:\fileName.del' of del insert into tableName " //db2中把文件中的数据导入到表

4.DB2中检查表是否已存在
select * from "SYSIBM"."SYSTABLES" where lower(name) ='afa_maintransdtl'

5.处理db2锁表问题:
db2 “connect to afa”
db2 “get snapshot for locks on 实例名”
db2 “terminate”
然后查看相关信息,找到被锁定的表,执行以下语句:
db2 “force application(application handle) 注:application handle对应的是一个整数

6.在服务器上创建存储过程时:
应为存储过程指定特定的换行符,然后执行下面的语句:
db2 -td@ -vf fileName.sql (其中@为存储过程中指定的换行符)

7. 查看索引是否起作用
runstats on table afa.yj_jywtk with distribution and detailed indexes all;

8.截取数据库快照:
db2 "connect to 实例名"
db2 "update monitor switches using lock ON sort ON bufferpool ON uow ON table ON statement ON"
db2 "get snapshot for all on 实例名"

9. 查看存储过程
select procname,text from sysibm.sysprocedures;

10.
list tables 查看数据库表

11.查找字符在字串中的位置
locate('y','xyz')
查找'y'在'xyz'中的位置。

12. 计算两个日期的相差天数
days(date('2007-03-01'))-days(date('2007-02-28'))
days 返回的是从 0001-01-01 开始计算的天数

13. 为一个用户访问另一个实例创建表映射
create alias tableName for 实例名. tableName

14.如何查看表结构
describe table tableName
or
describe select * from table_name

15.如何重新启动数据库?
  restart database database_name
  
16.如何激活数据库?
  activate database database_name
  
17.如何停止数据库?
  deactivate database database_name

18.如何重命名表?
  rename table_old to table_new

19.如何定义序列?
create sequence orderseq start with 1 increment by 1 no maxvalue no cycle cache24

20.如何查看一个表的索引
         describe indexes for t欢迎光临学网,收藏本篇文章 [1] [2]


$False$

able tableName show detail



1. create database
create db testdb on /cardpro/dbdir
2. create tablespace
create tablespace tbs2 managed by database using (device '/dev/rapplv2' 4640M, device '/dev/rapplv8' 4640M )
create tablespace tbs2 managed by database using  (file '/home/db2inst1/buff4000.dat' 25000)
3. connect database
connect to testdb user using
4. create table
CREATE TABLE ACL_FUNCTION(
    FUNCTION_ID     CHAR(10)    NOT NULL,
    FUNCTION_DES    CHAR(80),
    MODULE_ID       CHAR(10)    NOT NULL,
    BATRUN_STA      CHAR(1),
    MODIFY_TIME     CHAR(30),
    MODIFY_BY       CHAR(10),
    CONSTRAINT PKACL_FUNCTION PRIMARY KEY (FUNCTION_ID)
) IN TBS1
INDEX IN TBS6
5. create index
create index cb_finacc_acctno on cp_indacc(cb_fin_acctno)
6. select, delete, insert, update
1)  select * from acl_user where user_id='test'
   选择前3条记录:  select * from acl_user fetch first 3 rows only
   查询从第m条到第n条记录:
select * from  (select  ROW_NUMBER() over() as  a, acl_user.* from  acl_user) as  acl_user  where  a >=5  and  a<=30
2 )
insert into acl_screen_fun_map values('CCPM1900C','0',null,'CPM1900',null)
insert into acl_screen_fun_map (sceen_id, button_def) values ('CCPM1900C' , '0' )
3) delete from acl_user
    delete from acl_user where user_id='test'
4)update acl_user set user_id='newtest' where user_id='test'
7. 显示相关信息
显示当前活动数据库
db2 list active databases
显示命令选项
db2 list command options
显示系统数据库目录
db2 list db directory
显示表空间
db2 list tablespaces
db2 list tablespaces show detail
显示表空间容器
db2 list tablespace containers for tablespace-id
Example: db2 list tablespace containers for 1
显示表
db2 list tables for schema cardpro 显示用户为cardpro的所有表
db2 list tables     显示当前用户所有表
db2 list tables for system    显示所有系统表
显示当前用户数据库的存取权限
db2 get authorizations
显示当前数据库的活动进程
db2 list applications
db2 list application for db
db2 force application all : 关闭所有db2 的进程
显示数据库配置信息
db2 get db cfg for
显示db2 数据库管理程序配置
db2 get dbm cfg
显示表结构
db2 describe table
显示表索引
db2 describe indexes for table
8. 重新连接
connect reset
9. 中断数据库连接
disconnect
10.  lock table
lock table in exclusive mode
lock table in share mode
11. 修改数据库参数
1) 数据库配置参数
db2 update db cfg for using
eg: db2 update db cfg for testdb using LOGRETAIN on
2) 数据库管理器配置参数
db2 update dbm cfg using
db2 update dbm cfg using MON_HEAP_SZ 512
12. 启动实例
db2start
13. 停止实例
db2stop
db2stop force
14. 授权
ADD USER:
grant  createtab,connect on database to user cardpro
SCHEMA :
grant  createin,dropin,alterin on schema cardpro to user cardpro with grant option
TABLE :
grant  control on table cp_fintbl to user cardpro
grant  select,insert,update,delete,alter,index,references on table cp_fintbl to user cardpro with grant option
VIEW :
grant  control on v_syscolumns to user cardpro
grant  select,insert,delete,update on v_syscolumns to user cardpro with grant option
INDEX :
grant control on index wb_start_card_no to user cardpro
TABLESPACE :
grant use of tablespace userspace1 to user cardpro with grant option
15. 系统表说明
检查约束 syscat.checks
列 syscat.columns
检查约束引用的列 syscat.colchecks
关键字中使用的列 syscat.keycoluse
数据类型syscat.datatype
函数参数或函数结果 syscat.funcparms
参考约束 syscat.references
模式 syscat.schemata
表约束 syscat.tabconst
表 syscat.tables
触发器 syscat.triggers
用户定义函数 syscat.functions
视图 syscat.views
16. 多数据库联合查询(FEDERATED)
首先确认实例配置参数中FEDERATED值设为YES。
然后通过以下步骤达到在mbank库中访问cards24库cardpro.cp_banknm表的目的。
1) connect to mbank user cardpro using cardpro
2)  create wrapper drda
3)  create server db2sam type db2/nt version 7.2 wrapper drda authorization db2inst1 password cardpro4bos options(node 'p610', dbname 's24db')
注意,要将数据库cards24编目在本地节点上,node对于节点名,dbname对于数据库别名
例如:
catalog tcpip node p610 remote 10.168.4.18 server 50000
catalog db cards24 as s24db at node p610
4)  create user mapping for db2inst1 server db2sam options(remote_authid 'db2inst1', remote_password 'cardpro4bos')
5)  create nickname cardpro.cp_banknm for db2sam.cardpro.cp_banknm
之后,就可以在mbank数据库中用select语句查询,如select * from cardpro.cp_banknm。
17. 利用已有表生成表结构脚本
在命令窗口中利用db2look工具,可以生成表结构。
db2look -d -a -e -o
其中,-d 后跟数据库名,-a 是指针对所有用户,-o 后跟要输出的文件名。
如果希望输出某个用户创建的表,可以用 -u 参数。指定需要输出表结构的表名,可以用 -t 参数。
例如,数据库cards24中,对于db2inst1用户创建的cp_crdtbl表,可以用下面的语句生产表结构:
db2look -d cards24 -t cp_crdtbl -u db2inst1 -e -o cp_crdtbl.sql
生成的脚本文件可以用 db2 -svtf 文件名 来执行。
18. 在命令行下执行DB2脚本(script)
在命令窗口中运行DB2脚本,可用 db2 -svtf 脚本文件名 来实现。
例如,脚本文件名为sample.sql,运行:db2 -svtf sample.sql参数中:
s 代表遇到错误时中止运行脚本
v 代表输出结果到屏幕
t 指以;号作为每行的分隔符
f 指后面需跟脚本文件名
如果希望即使遇到错误也不要中止运行脚本可以去掉参数s。
如果脚本中没有分隔符,应去掉参数t。
如果脚步中分隔符为其他字符,请用-td后接所使用的分隔符,例如如果使用的分隔符为@,可以用db2 -td@ -svf 脚本文件名 来执行脚本。收起
系统集成 · 2014-04-03
浏览1263

提问者

taylor840326
数据库管理员中国百盛集团

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2014-03-21
  • 关注会员:14 人
  • 问题浏览:127069
  • 最近回答:2021-02-24
  • X社区推广