DB2手册.docx
- 文档编号:12623941
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:153
- 大小:99.08KB
DB2手册.docx
《DB2手册.docx》由会员分享,可在线阅读,更多相关《DB2手册.docx(153页珍藏版)》请在冰豆网上搜索。
DB2手册
1前言8
2DB2专有名词解释8
2.1Instance(实例)8
2.2DB2AdministrationServer(管理服务器)8
2.3Container(容器)8
2.4DRDA8
2.5DARI8
2.6SPM8
2.7FCM8
2.8ADSM8
2.9DCE9
3DB2编程9
3.1建存储过程时Create后一定不要用TAB键9
3.2使用临时表9
3.3从数据表中取指定前几条记录9
3.4游标的使用10
3.5类似decode的转码操作10
3.6类似charindex查找字符在字串中的位置11
3.7类似datedif计算两个日期的相差天数11
3.8写UDF的例子11
3.9创建含identity值(即自动生成的ID)的表11
3.10预防字段空值的处理11
3.11取得处理的记录数11
3.12从存储过程返回结果集(游标)的用法11
3.13类型转换函数12
3.14存储过程的互相调用13
3.15C存储过程参数注意13
3.16存储过程fence及unfence13
3.17SP错误处理用法13
3.18values的使用14
3.19给select语句指定隔离级别14
3.20atomic及notatomic区别14
3.21C及SQL存储过程名称都要注意长度14
3.22怎样获得自己的数据库连接句柄14
3.23类似于ORACLE的Namepipe14
3.24类似于ORACLE的TRUNCATE清表但不记日志的做法15
3.25用cli编程批量的insert15
4DB2一些不好的限制18
4.1临时表不能建索引18
4.2cursor不能定义为withur(可以但…)18
4.3cursororderby以后不能forupdate18
4.4程序中间不能自由改变隔离级别18
4.5update不能用一个表中的记录为条件修改另一个表中的记录。
18
4.6如果显示调用存储过程时传null值要注意18
5DB2编程性能注意19
5.1大数据的导表的使用(export,load,import)(小心)19
5.1.1import的用法19
5.1.2性能比较19
5.1.3export用法19
5.2SQL语句尽量写复杂SQL19
5.3SQLSP及CSP的选择19
5.4查询的优化(HASH及RR_TO_RS)20
5.5避免使用count(*)及exists的方法20
5.6Commit的次数要适当20
5.7Insert和update速度比较20
5.8使用临时表取代一条一条插入21
5.9循环次数很多时注意减少执行语句(附例子)21
5.10看程序执行时间及结果db2batch22
5.11看程序或语句具体的执行计划shell(改写后的语句)22
5.12两个表做join的不同方式的区别23
5.12.1notin方式23
5.12.2except方式24
5.12.3notexist方式24
6其他系统和DB2的交互25
7DB2表及sp管理25
7.1权限管理25
7.1.1数据库权限控制25
7.1.2schema权限控制25
7.1.3tablespace权限控制25
7.1.4table权限控制26
7.1.5package权限控制26
7.2建存储过程会占用很多的系统资源(特别是io)26
7.3看存储过程文本26
7.4看表结构26
7.5看表的索引信息26
7.6查看各表对sp的影响(被哪些sp使用)26
7.7查看sp使用了哪些表27
7.8查看function被哪些sp使用27
7.9查sp的ID号27
7.10从sp的id号查存储过程名称27
7.11创建及使用summarytable27
7.12修改表结构28
7.13给一个表改名28
7.14得到一个表或库的相关脚本28
7.15在对表操作的性能下降后对表做整理28
7.16查看语句的执行计划29
7.17查看sp的执行计划29
7.18更改存储过程的隔离级别29
7.19取全部表的大小29
8DB2系统管理31
8.1DB2EE及WORKGROUP版本的区别31
8.2怎样判断DB2实例的版本号和修补级别?
31
8.3DB2客户端安装时选择语言32
8.4DB2安装32
8.4.1AIX中自动启动db232
8.4.2AIX中用户使用db2的环境34
8.4.3在win98下安装db2报Jdbc错误34
8.4.4将一台机器上的数据库复制到另外一台机器35
8.4.5在WIN2000下编译本地sp设置36
8.5启动支持远程管理数据库服务(db2admin)36
8.6安装另一个instance要注意的地方36
8.6.1通讯配置36
8.6.2更改文件权限36
8.7Db2的C编译报没有licsence36
8.8Db2的进程管理36
8.9创建Database37
8.10Database的备份37
8.11Tablespace37
8.11.1创建临时表空间37
8.11.2将Tablespace授权给用户使用38
8.11.3看Tablespace信息38
8.11.4去掉tag38
8.12手工做数据库别名配置及去除该别名配置38
8.13手工做数据库远程(别名)配置38
8.14停止启动数据库实例39
8.15连接数据库及看当前连接数据库39
8.16停止启动数据库head39
8.17查看及停止数据库当前的应用程序39
8.18查看本instance下有哪些database40
8.19查看及更改数据库head的配置40
8.19.1设置使用2G以外的内存40
8.19.2更改Bufferpool的大小40
8.19.3更改dbheap的大小40
8.19.4改catalogcache的大小40
8.19.5改事务buff的大小41
8.19.6改工具堆大小41
8.19.7改排序堆的大小41
8.19.8改stmtheap的大小41
8.19.9改事务日志的大小41
8.19.10改锁的相关参数的大小42
8.19.11出现程序堆内存不足时修改程序堆内存大小42
8.19.12NUM_IOCLEANERS及NUM_IOSERVERS数量设置42
8.19.13成组commit设置MINICOMMIT42
8.19.14设置连接数的相关参数MAXAPPLS43
8.19.15设置包缓冲区PCKCACHESZ43
8.20日志管理43
8.20.1更改日志文件的存放路径43
8.20.2监控应用程序日志使用情况43
8.20.3循环日志和归档日志43
8.20.4循环日志日志满的原因43
8.21查看及更改数据库实例的配置44
8.21.1打开对锁定情况的监控。
44
8.21.2更改诊断错误捕捉级别44
8.21.3更改最大代理数44
8.22db2环境变量44
8.23db2命令环境设置45
8.24改变隔离级别45
8.25管理db\instance的参数46
8.26升级后消除版本问题46
8.27查看数据库表的死锁46
8.28查看数据库的事件46
8.29数据库性能下降后做runstats及rebind包。
47
8.30修复诊断数据库db2dart的使用47
8.31获取数据库的信息db2support的使用47
8.32分析DB2diag.log的方法47
8.32.1Obj={pool:
2;obj:
10;type:
0}含义47
8.32.2错误信息所在位置1(errno)48
8.32.3错误信息所在位置1(FFFFnnnn或nnnnFFFF)48
9DB2一般问题48
9.1有关锁的知识48
9.2有关锁的对象知识49
10DB2疑难问题49
10.1建SP时drop不掉怎么办49
10.2C的过程老是出现时间戳问题?
49
10.3FORCURSOR问题?
50
10.4数据库启动资源冲突问题50
10.5DB2stop不下去问题51
10.6数据库日志满问题51
10.7ForceApplication导致instance崩溃问题51
10.8存储过程名称和过程运行有关的问题51
10.9看Db2diag.log中的内容52
10.10decimal除法的问题,Db2做sum时有bug(实际上不是)52
10.11case的问题53
10.12一个较复杂sql语句错误54
10.13编译语句挂起的现象57
10.14远程连接连不上去,报tcp/ip错误60
10.15tabspce实际上没有表,但还是报满60
11DB2编程教训61
11.1常被大家访问同一记录的表的修改61
11.2大表改小表61
11.3查询表数据使用ur的隔离级别61
11.4Delete,update后及时commit61
12AIX系统管理61
12.1查看磁盘使用情况61
12.2看目录的文件占用硬盘情况62
12.3看IO情况62
12.4查看CPU情况62
12.5查看系统资源总的使用情况62
12.6看正在运行的线程/进程62
12.6.1看正在运行的线程62
12.6.2看按占cpu比例排序的进程62
12.6.3看按占内存比例排序的进程62
12.7查看内存使用情况62
12.8查看共享内存、消息队列等使用情况63
12.9根下不要建文件系统63
12.10文件操作63
12.10.1看文本文件自动新增长内容63
12.10.2将大文件拆分63
12.10.3文件打包63
12.10.4文件压缩63
12.10.5文件解压63
12.10.6bz2文件处理63
12.11看逻辑卷信息64
12.12重启机器64
13AIX系统限制64
13.1Fork太多会导致系统崩溃64
13.2对文件大小的限制64
13.3磁带备份的速度64
14AIX及DB2相关文档及网站64
14.1取db2最新补丁程序64
14.2国际化的DB2用户组织65
14.3错误信息所在位置1(errno)65
14.4错误信息所在位置1(FFFFnnnn或nnnnFFFF)65
15DB2和oracle的对比65
15.1用户管理不一样65
15.2表空间使用不一样65
15.3保证事务的一致性方式不一样65
16oracle上sql语句性能优化(DB2也可以参考)65
16.1oracle中索引问题65
16.2oracle中索引问题66
17怎样判断DB2实例的版本号和修补级别?
68
18在LINUX上创建DB2裸设备方法71
19DB2relationalconn连接SQLSERVER的方法步骤72
20数据库配置参数摘要75
21数据库管理程序配置参数摘要77
22如何实施存储过程的发布80
23表空间重定向81
24如何设置RAID环境下的DB2表空间81
25DB2的安全管理机制有哪些?
81
26DB2V7.1在RedHatV7.2下的安装说明82
27如何在RedHatLinux7.1上安装DB2EEE(扩展企业版)86
28db2diag.log中大量出现关于TCP/IP协议的DIA3208E错误90
29如何在命令行用FETCH命令查看用DECLARECURSOR(游标)指定的结果集91
30问题:
如何配置ODBC.INI?
92
1前言
该部分经验主要是在首都国际机场,海口梅兰国际机场系统的开发过程中得到的。
环境是使用IBMs80机器,AIX4.3操作系统,4G内存,DB2数据库(UDB7.2版本),
存储设备是EMC磁盘阵列,12对硬盘,做RAID1,即可用12个硬盘,每个36G。
其中4个被用做bcv(也是一个镜像系统,和工作库中的数据一模一样,可以用于快速创建一个和工作环境一样的开发环境。
具体不是很懂)。
实际可用8个物理硬盘,每个划为4个9G盘。
2DB2专有名词解释
2.1Instance(实例)
相当于Informix的InformixServer的概念,在一台机器上可以有多个相互独立的实例,并同时运行.每个实例可以管理若干个数据库,一个数据库只属于一个实例.
2.2DB2AdministrationServer(管理服务器)
与DB2AdministrationClient对称.一个DB2数据库如果需要远端的管理,就需要在有DB2数据库的机器上有管理服务进程以接收远端的管理客户进程的请求.一般来讲,一个在R/6000上的DB2,由于AIX一般无图形界面,最好在局域网内有一台有图形界面的机器(例如装有Win98或WinNT)来对其进行远程管理.因为用带图形界面的DB2控制中心,可以很方便的查看DB2的状态,详细形象的监控DB2的性能,对DB2的配置参数进行精确的调整,而这些都是用DB2的命令行难以实现的.控制中心提供的SmartGuide功能,更可以让数据库管理员不用关心数据库内部实现的细节,而对数据库进行较精确的调整.
2.3Container(容器)
与Informix中的chunk概念基本一样.但DB2数据库管理进程在向容器内写数据时,所有一个表空间内的容器是均衡着写入的.并且这种均衡是实时的,例如在一个表空间中加入一个容器后,该容器所处的表空间中其它容器的数据会很快的均衡到该容器来.
2.4其他
DRDA
分布式关系数据库结构DistributedRelationalDatabaseArchitecture
DARI
数据库应用远程接口DatabaseApplicationRemoteInterface
SPM
SynchronousPointManagement,相当于Informix的checkpoint
FCM
FastCommunicationManagement,用于数据库分区间通信
ADSM
ADSTARDistributedStorageManager
DCE
DistributedComputeEnvironment
3DB2编程
3.1建存储过程时Create后一定不要用TAB键
createprocedure的create后只能用空格,而不可用tab健,否则编译会通不过。
切记,切记。
3.2使用临时表
要注意,临时表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建临时表的。
另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。
所以,如果程序有多线程,最好不要用临时表,很难控制。
建临时表时最好加上withreplace选项,这样就可以不显示的drop临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。
注意:
一旦rollback,该临时表将不存在。
临时表有好几种定义方式。
但如果是对notnull及default值有什么要求的话,最好还是使用完整字段列表来定义。
因为有一次,我使用了liketableincludingcolumndefault来定义,但default还是没有按预料的那样带过来.
如下例,可以作为常用的临时表的定义方式。
declareglobaltemporarytabletmp_tb_clear_match_detail(
tradedatechar(8)notnull--业务日期
)
withreplaceoncommitpreserverowsnotlogged;
oncommitpreserve:
是在commit时不将临时表的内容释放。
临时表中也可以使用自增字段:
declareglobaltemporarytablett(aachar
(1),bbintgeneratedalwaysasidentity)notlogged
经过本人测试,对临时表做插入比做update速度要快很多,插入50000条记录是用15秒,再对该表中插入1000条记录,用时不到1秒,而update其中1000条,用时60秒。
临时表中不能建索引,很不好用。
3.3从数据表中取指定前几条记录
select*fromtb_market_codefetchfirst1rowsonly
但下面这种方式不允许
selectmarket_codeintov_market_code
fromtb_market_codefetchfirst1rowsonly;
选第一条记录的字段到一个变量以以下方式代替
declarev_market_codechar
(1);
declarecursor1cursorforselectmarket_codefromtb_market_code
fetchfirst1rowsonlyforupdate;
opencursor1;
fetchcursor1intov_market_code;
closecursor1;
3.4游标的使用
注意commit和rollback
使用游标时要特别注意如果没有加withhold选项,在Commit和Rollback时,该游标将被关闭。
Commit和Rollback有很多东西要注意。
游标的两种定义方式
一种为
declarecontinuehandlerfornotfound
begin
setv_notfound=1;
end;
declarecursor1cursorwithholdforselectmarket_codefromtb_market_codeforupdate;
opencursor1;
setv_notfound=0;
fetchcursor1intov_market_code;
whilev_notfound=0Do
--work
setv_notfound=0;
fetchcursor1intov_market_code;
endwhile;
closecursor1;
这种方式使用起来比较复杂,但也比较灵活。
特别是可以使用withhold选项。
如果循环内有commit或rollback而要保持该cursor不被关闭,只能使用这种方式。
另一种为
pcursor1:
forloopcs1ascousor1cursoras
selectmarket_codeasmarket_code
fromtb_market_code
forupdate
do
endfor;
这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。
但不能使用withhold选项。
如果在游标循环内要使用commit,rollback则不能使用这种方式。
如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。
修改游标的当前记录的方法
updatetb_market_codesetmarket_code='0'wherecurrentofcursor1;
不过要注意将cursor1定义为可修改的游标
declarecursor1cursorforselectmarket_codefromtb_market_codeforupdate;
forupdate不能和GROUPBY、DISTINCT、ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。
3.5类似decode的转码操作
oracle中有一个函数selectdecode(a1,'1','n1','2','n2','n3')aa1from
db2没有该函数,但可以用变通的方法
selectcasea1
when'1'then'n1'
when'2'then'n2'
else'n3'
endasaa1from
3.6类似charindex查找字符在字串中的位置
Locate(‘y’,’dfdasfay’)
查找’y’在’dfdasfay’中的位置。
3.7类似datedif计算两个日期的相差天数
days(date(‘2001-06-05’))–days(date(‘2001-04-01’))
days返回的是从0001-01-01开始计算的天数
下面一个例子是取该天所在的周的星期一的日:
date(days('2001-08-20')-dayofweek('2001-08-20')+2)
3.8写UDF的例子
C写见sqllib\samples\cli\udfsrv.c
3.9创建含identity值(即自动生成的ID)的表
建这样的表的写法
CREATETABLEtest
(t1SMALLINTNOTNULL
GENERATEDALWAYSASIDENTITY
(STARTWITH500,INCREMENTBY1),
t2CHAR
(1));
在一个表中只允许有一个identity的column.
3.10预防字段空值的处理
SELECTDEPTNO,DEPTNAME,COALESCE(MGRNO,'ABSENT'),ADMRDEPT
FROMDEPARTMENT
COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。
和oracle的isnull类似,但isnull好象只能两个表达式。
3.11取得处理的记录数
declarev_cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB2 手册