DB2常用操作

d:\winnt\system32\drivers\etc\services文件是对机器名到IP地址的解析。
d:\winnt\system32\drivers\etc\hosts文件是对端口名到端口号的解析。
以上两条上非DB2的,但在DB2中使用到。

db2admin start 起动DB2管理

DB2里对一个命令的HELP是:
>db2 ? 该命令

db2 连接到远程数据库
第一步建一个结点:
>db2 catalog tcpip node 结点名 remote 数据库服务器IP地址 server 端口(50000)
第二步建一个到库的联结别名:
>db2 catalog db 库名 as 别名 at node 结点名
第三步建立联结:
>db2 connect to 别名 user 用户名 using 用户密码
断开联结:
db2 connect reset


db2里需要用到一个系统环境变量:db2codepage, 缺省值是1386,此值非常重要,客户端于数据库端的db2codepage不一样时客户端就无法连上数据库端。

DB2里一个表的全名是:schema.表名,缺什情况下不同的用户看到的表是不一样的,
在程序的sql语句里必需用表的全名(切记)。

查看有哪些程序在使用该数据库:
>db2 list application
其结果中有一个字段application-handle在杀死该引用中用到

杀死一个程序对该数据库的使用:
>db2 force application {all | (application-handle)}

在库被使用时db2stop不能执行

DB2命令后所带参数:
-t 以;作为一句结束
-f 指向一个文件(即执行一个文件中的语句,在command窗口里有些命令无法执行,可先用notepad建一个文件然后执行它)
-v (我不知道是什么)
注释:-v用于显示当前所执行的sql命令。


一个windows nt 里的一般用户可以连到库,但无一般SQL语句的执行权,授权给一个用户:
>db2 grant sql语句(例如:select) on 表名 to user 用户名
取消该用户的权:
>db2 revoke sql语句 on 表名 from 用户名


DB2日志有两种:循环日志和永久型日志
循环日志:有3个文件循环写,所以会产生以前的操作记录被覆盖。好处:日志文件大小不变,备份方便,但不可以在线备份。
永久日志:其日志文件不断增涨,但操作记录不会被覆盖,可以在线备份。

如何备份:
>db2 backup db 数据库名 to 设备名(如:c:\);
恢复:
>db2 restore db 数据库名 from 设备名
(回滚rollforward我不太清楚)
注释:rollforword 是前滚的意思,向前到某一个时间,以保持数据的一致性,用于在线备份后的恢复,恢复是从log日志中开始到日志中的某一个时间,即可。只有在数据一致性得到保证的情况下,才能继续对数据库操作。

连接到数据库时报回滚错误
用下面的命令:
db2 rollforward db fmisadd to end of logs and complete

导出导入数据库:
--export
db2move hadb export -u userid -p password;
--import
db2move hadb import -u userid -p password;


导出库中表的数据:
>export to 文件名.ixf of ixf select * from 表名
>import from 文件名.ixf of ixf create into 表名
导出库的数据格式还有两种del(文件格式)和wsf,但ixf格式信息最全,包含表结构信息,可恢复出已删去的表。

sql的inner/left/right/full join,这些概念在<<数据库概论>>中有说明,left以左表为主,right以右表为主,full左右表记录都会在查寻结果中。
例如:>select aa,bb from db1 left join db2 on db1.id=db2.id


合并查寻:把两个或几个查寻结果合并到一个字段(条件是字段必须兼容)
格式:select ...... union select ....;

使用临时表:
with tmptable (字段1,...) as (select....)   --建一个临时表
select 字段1,.... from tmptable,另一个表 where....   --使用该临时表于另一个表交叉查寻。
**order by 必需出现在结果集,在临时表中不能用。

截取字符串
substr(字段名,开始位置,字符个数)

判断是否是空
字段名 is null


例子:
到什么时候活了10000天:
select distinct date('1980-01-01')+10000 day from a
一共活了多少天:
select distinct days(current date)-days(date('1980-01-01')) from a

类型转换:用cast ,例:
select distinct cast(current date as char(10))||'aa' from a

case的使用:
select case when length(rtrim(学历))=0 then '未知学历' else xl end,rs from a
例:查寻一个公司的年龄分布:
with tmptable as (select case when year(current day)-csrq<20 then '小于20岁'                                                    when year(current day)-csrq<25 then '20-24岁'                                                     when year(current day)-csrq<30 then '25-29岁'
                              when year(current day)-csrq<35 then '30-34岁'
                              when year(current day)-csrq<40 then '35-39岁'
                              when year(current day)-csrq<45 then '40-44岁'
                              when year(current day)-csrq<50 then '45-49岁' else '大于50岁' end
as x from a)
select x,count(*) from tmptable group by x;

一个数据库中有些系统建的表是用来保存该库各种信息的,如:syscat.tables
例:查有多少个userid的表:
select count(*) from syscat.tables where type='T' and tabschema='uerid'
例:产生一个备分库中所有表的文本:
select 'export to '|| tabname || '.ixf of ixf select * from userid.' ||tabname||';' from syscat.tables where type='T' and tabschema='userid';

 

性能调整:
影响到DB2性能的有:
能够利用服务器的性能:1.并行性 2.减少通信

建立Index
  <,>,=      第一类搜索谓词,
  <>,like    第二类搜索谓词,
  需要用函数 第三类搜索谓词,

select * from a
*尽量要哪个字段写哪个字段。

blocking的概念      客户端请求一次,数据库返回n个记录。

复合型SQL(我不太清楚)
注释:是指他所讲的联结union,建立临时表等复杂的sql语句。

DB2会对SQL语句优化,系统对表的信息知道的越多,优化越好,所以要做runstats
runstats命令把表的信息告诉系统,一般当数据量增加一倍时用该命令一次。

REORG命令是数据库整理,类似于磁盘碎片整理。


得到该instance的各种参数:(dbm cfg是整个DB2的参数,db cfg是对某个数据库的参数)
>db2 get dbm cfg
>db2 get db cfg for 数据库名
修改参数:
>db2 update dbm cfg using 参数 你要的数
>db2 update db cfg for 数据库名 using 参数 你要的数

 

当第一个用户连结到该数据库时会申请一个内存缓冲,默认是250页每页4k即1M。
Buffer pool size<4K>  [BUFFPAGE]=250
修改该值:
>db2 update db cfg for test using buffpage 你要的数
但它的有效还取决于syscat.bufferpools中的npages是否为-1,为-1时它才有效,否则以syscat.bufferpols中的npage为准。
可用下面的命令看:
>select * from syscat.bufferpools
一般此值的设置应为系统内存的40%左右,太大时会使系统因动用虚拟内存从而太吃力。

sql语句的优化级别:一般取2或5(最高为9)
Default query optinization class      <DFT_QUENYOPT>=5
该值越大优化越好,但优化所化时间也越长。

并行性设置:
Degree=-1 并行性全由操作系统完成。
当操作系统有并行处理时,Degree=-1
*****CUP与硬盘的个数一般为1:4到1:6;

用户最大连结数:
<MAXAPPLS>=40
BUFFPAGE与MAXPPLS的关系:BUFFPAGE>2*MXAPPLS

文章出处: http://tb.blog.csdn.net/TrackBack.aspx?PostId=290057

posted on 2007-07-20 15:51 心砚 阅读(1271) 评论(0)  编辑  收藏 所属分类: DB


只有注册用户登录后才能发表评论。


网站导航:
 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(2)

随笔分类

文章分类

文章档案

Forum

搜索

最新评论

阅读排行榜

评论排行榜