一些编程经验,与大家共享!Mqzitug
Mqzitug 1 DB2编程 Mqzitug 1.1 建存储过程时CREATE 后一定不要用TAB键 3Mqzitug 1.2 使用临时表 3Mqzitug 1.3 从数据表中取指定前几条记录 3Mqzitug 1.4 游标的使用 4Mqzitug 注意commit和rollback 4Mqzitug 游标的两种定义方式 4Mqzitug 修改游标的当前记录的方法 5Mqzitug 1.5 类似DECODE的转码操作 5Mqzitug 1.6 类似CHARINDEX查找字符在字串中的位置 5Mqzitug 1.7 类似DATEDIF计算两个日期的相差天数 5Mqzitug 1.8 写UDF的例子 5Mqzitug 1.9 创建含IDENTITY值(即自动生成的ID)的表 6Mqzitug 1.10 预防字段空值的处理 6Mqzitug 1.11 取得处理的记录数 6Mqzitug 1.12 从存储过程返回结果集(游标)的用法 6Mqzitug 1.13 类型转换函数 8Mqzitug 1.14 存储过程的互相调用 8Mqzitug 1.15 C存储过程参数注意 8Mqzitug 1.16 存储过程FENCE及UNFENCE 8Mqzitug 1.17 SP错误处理用法 9Mqzitug 1.18 IMPORT用法 9Mqzitug 1.19 VALUES的使用 9Mqzitug 1.20 给SELECT 语句指定隔离级别 10Mqzitug 1.21 ATOMIC及NOT ATOMIC区别 10Mqzitug 2 DB2编程性能注意 10Mqzitug 2.1 大数据的导表 10Mqzitug 2.2 SQL语句尽量写复杂SQL 10Mqzitug 2.3 SQL SP及C SP的选择 10Mqzitug 2.4 查询的优化(HASH及RR_TO_RS) 11Mqzitug 2.5 避免使用COUNT(*) 及EXISTS的方法 11Mqzitug 3 DB2表及SP管理 12Mqzitug 3.1 看存储过程文本 12Mqzitug 3.2 看表结构 12Mqzitug 3.3 查看各表对SP的影响(被哪些SP使用) 12Mqzitug 3.4 查看SP使用了哪些表 12Mqzitug 3.5 查看FUNCTION被哪些SP使用 12Mqzitug 3.6 修改表结构 12Mqzitug 4 DB2系统管理 13Mqzitug 4.1 DB2安装 13Mqzitug 4.2 创建DATABASE 14Mqzitug 4.3 手工做数据库远程(别名)配置 14Mqzitug 4.4 停止启动数据库实例 14Mqzitug 4.5 连接数据库及看当前连接数据库 14Mqzitug 4.6 停止启动数据库HEAD 15Mqzitug 4.7 查看及停止数据库当前的应用程序 15Mqzitug 4.8 查看本INSTANCE下有哪些DATABASE 15Mqzitug 4.9 查看及更改数据库HEAD的配置 16Mqzitug 4.9.1 改排序堆的大小 16Mqzitug 4.9.2 改事物日志的大小 16Mqzitug 4.9.3 出现程序堆内存不足时修改程序堆内存大小 16Mqzitug 4.10 查看及更改数据库实例的配置 16Mqzitug 4.10.1 打开对锁定情况的监控。 16Mqzitug 4.10.2 更改诊断错误捕捉级别 17Mqzitug 4.11 DB2环境变量 17Mqzitug 4.12 DB2命令环境设置 17Mqzitug 4.13 改变隔离级别 17Mqzitug 4.14 管理DBINSTANCE的参数 18Mqzitug 4.15 升级后消除版本问题 18Mqzitug 4.16 查看数据库表的死锁 18Mqzitug Mqzitug 1 DB2编程Mqzitug 1.1 建存储过程时Create 后一定不要用TAB键Mqzitug create procedureMqzitug 的create后只能用空格,而不可用tab健,否则编译会通不过。Mqzitug 切记,切记。Mqzitug Mqzitug 1.2 使用临时表Mqzitug Mqzitug 要注意,临时表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建临时表的。Mqzitug 另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。Mqzitug 建临时表时最好加上 with replace选项,这样就可以不显示的drop 临时表,建临时表时如果不加该选项而该临时表在该session内已创建且没有drop,这时会发生错误。Mqzitug 1.3 从数据表中取指定前几条记录Mqzitug select * from tb_market_code fetch first 1 rows onlyMqzitug Mqzitug 但下面这种方式不允许Mqzitug select market_code into v_market_code Mqzitug from tb_market_code fetch first 1 rows only; Mqzitug Mqzitug 选第一条记录的字段到一个变量以以下方式代替Mqzitug declare v_market_code char(1);Mqzitug declare cursor1 cursor for select market_code from tb_market_code Mqzitug fetch first 1 rows only for update;Mqzitug open cursor1;Mqzitug fetch cursor1 into v_market_code;Mqzitug close cursor1;Mqzitug Mqzitug 1.4 游标的使用Mqzitug 注意commit和rollbackMqzitug 使用游标时要特别注意如果没有加with hold 选项,在Commit和Rollback时,该游标将被关闭。Commit 和Rollback有很多东西要注意。特别小心Mqzitug Mqzitug 游标的两种定义方式Mqzitug 一种为Mqzitug declare continue handler for not foundMqzitug beginMqzitug set v_notfound = 1;Mqzitug end;Mqzitug Mqzitug declare cursor1 cursor with hold for select market_code from tb_market_code for update;Mqzitug open cursor1;Mqzitug set v_notfound=0;Mqzitug fetch cursor1 into v_market_code;Mqzitug while v_notfound=0 DoMqzitug --workMqzitug set v_notfound=0;Mqzitug fetch cursor1 into v_market_code;Mqzitug end while;Mqzitug close cursor1;Mqzitug 这种方式使用起来比较复杂,但也比较灵活。特别是可以使用with hold 选项。如果循环内有commit或rollback 而要保持该cursor不被关闭,只能使用这种方式。Mqzitug 另一种为Mqzitug pcursor1: for loopcs1 as cousor1 cursor asMqzitug select market_code as market_codeMqzitug from tb_market_codeMqzitug for updateMqzitug doMqzitug end for;Mqzitug 这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。Mqzitug 但不能使用with hold 选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。Mqzitug Mqzitug 修改游标的当前记录的方法Mqzitug update tb_market_code set market_code='0' where current of cursor1;Mqzitug 不过要注意将cursor1定义为可修改的游标Mqzitug declare cursor1 cursor for select market_code from tb_market_code Mqzitug for update;Mqzitug Mqzitug for update 不能和GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除外)一起使用。Mqzitug Mqzitug Mqzitug Mqzitug 1.5 类似decode的转码操作Mqzitug oracle中有一个函数 select decode(a1,'1','n1','2','n2','n3') aa1 fromMqzitug db2没有该函数,但可以用变通的方法Mqzitug select case a1 Mqzitug when '1' then 'n1' Mqzitug when '2' then 'n2' Mqzitug else 'n3'Mqzitug end as aa1 fromMqzitug Mqzitug 1.6 类似charindex查找字符在字串中的位置Mqzitug Locate(‘y’,’dfdasfay’)Mqzitug 查找’y’ 在’dfdasfay’中的位置。Mqzitug Mqzitug 1.7 类似datedif计算两个日期的相差天数Mqzitug days(date(‘2001-06-05’)) – days(date(‘2001-04-01’))Mqzitug days 返回的是从 0001-01-01 开始计算的天数Mqzitug 1.8 写UDF的例子Mqzitug C写见sqllibsamplescliudfsrv.cMqzitug Mqzitug 1.9 创建含identity值(即自动生成的ID)的表Mqzitug 建这样的表的写法Mqzitug CREATE TABLE testMqzitug (t1 SMALLINT NOT NULLMqzitug GENERATED ALWAYS AS IDENTITYMqzitug (START WITH 500, INCREMENT BY 1),Mqzitug t2 CHAR(1));Mqzitug 在一个表中只允许有一个identity的column.Mqzitug Mqzitug 1.10 预防字段空值的处理Mqzitug SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPTMqzitug FROM DEPARTMENTMqzitug COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。Mqzitug 和oracle的isnull类似,但isnull好象只能两个表达式。Mqzitug Mqzitug Mqzitug 1.11 取得处理的记录数Mqzitug declare v_count int;Mqzitug update tb_test set t1=’0’Mqzitug where t2=’2’;Mqzitug --检查修改的行数,判断指定的记录是否存在Mqzitug get diagnostics v_ count=ROW_COUNT; Mqzitug 只对update,insert,delete起作用.Mqzitug 不对select into 有效Mqzitug Mqzitug Mqzitug 1.12 从存储过程返回结果集(游标)的用法Mqzitug 1、建一sp返回结果集Mqzitug CREATE PROCEDURE DB2INST1.Proc1 ( )Mqzitug LANGUAGE SQLMqzitug result sets 2(返回两个结果集)Mqzitug ------------------------------------------------------------------------Mqzitug -- SQL 存储过程 Mqzitug ------------------------------------------------------------------------Mqzitug P1: BEGINMqzitug declare c1 cursor with return to caller for Mqzitug select market_codeMqzitug from tb_market_code;Mqzitug --指定该结果集用于返回给调用者Mqzitug declare c2 cursor with return to caller for Mqzitug select market_codeMqzitug from tb_market_code;Mqzitug open c1;Mqzitug open c2;Mqzitug END P1 Mqzitug Mqzitug Mqzitug 2、建一SP调该sp且使用它的结果集Mqzitug Mqzitug CREATE PROCEDURE DB2INST1.Proc2 (Mqzitug out out_market_code char(1))Mqzitug LANGUAGE SQLMqzitug ------------------------------------------------------------------------Mqzitug -- SQL 存储过程 Mqzitug ------------------------------------------------------------------------Mqzitug P1: BEGINMqzitug Mqzitug declare loc1,loc2 result_set_locator varying; Mqzitug --建立一个结果集数组Mqzitug call proc1;Mqzitug --调用该SP返回结果集。Mqzitug associate result set locator(loc1,loc2) with procedure proc1;Mqzitug --将返回结果集和结果集数组关联Mqzitug allocate cursor1 cursor for result set loc1;Mqzitug allocate cursor2 cursor for result set loc2;Mqzitug --将结果集数组分配给cursorMqzitug fetch cursor1 into out_market_code;Mqzitug --直接从结果集中赋值Mqzitug close cursor1; Mqzitug Mqzitug END P1Mqzitug Mqzitug 3、动态SQL写法Mqzitug DECLARE CURSOR C1 FOR STMT1; Mqzitug PREPARE STMT1 FROMMqzitug 'ALLOCATE C2 CURSOR FOR RESULT SET ?';Mqzitug 4、注意:Mqzitug 一、 如果一个sp调用好几次,只能取到最近一次调用的结果集。Mqzitug 二、 allocate的cursor不能再次open,但可以close,是close sp中的对应cursor。Mqzitug Mqzitug 1.13 类型转换函数Mqzitug select cast ( current time as char(8)) from tb_market_codeMqzitug Mqzitug 1.14 存储过程的互相调用Mqzitug 目前,c sp可以互相调用。Mqzitug Sql sp 可以互相调用,Mqzitug Sql sp 可以调用C sp,Mqzitug 但C sp 不可以调用Sql sp(最新的说法是可以)Mqzitug Mqzitug 1.15 C存储过程参数注意Mqzitug create procedure pr_clear_task_ctrl(Mqzitug IN IN_BRANCH_CODE char(4),Mqzitug IN IN_TRADEDATE char(8),Mqzitug IN IN_TASK_ID char(2),Mqzitug IN IN_SUB_TASK_ID char(4),Mqzitug OUT OUT_SUCCESS_FLAG INTEGER )Mqzitug Mqzitug DYNAMIC RESULT SETS 0Mqzitug LANGUAGE C Mqzitug PARAMETER STYLE GENERAL WITH NULLS(如果不是这样,sql 的sp将不能调用该用c写的存储过程,产生保护性错误)Mqzitug NO DBINFOMqzitug FENCEDMqzitug MODIFIES SQL DATAMqzitug EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@Mqzitug Mqzitug Mqzitug 1.16 存储过程fence及unfenceMqzitug fence的存储过程单独启用一个新的地址空间,而unfence的存储过程和调用它的进程使用同一个地址空间。Mqzitug 一般而言,fence的存储过程比较安全。Mqzitug 但有时一些特殊的要求,如要取调用者的pid,则fence的存储过程会取不到,而只有unfence的能取到。Mqzitug Mqzitug 1.17 SP错误处理用法Mqzitug 如果在SP中调用其它的有返回值的,包括结果集、临时表和输出参数类型的SP,Mqzitug DB2会自动发出一个SQLWarning。而在我们原来的处理中对于SQLWarning都Mqzitug 会插入到日志,这样子最后会出现多条SQLCODE=0的警告信息。Mqzitug 处理办法:Mqzitug 定义一个标志变量,比如DECLARE V_STATUS INTEGER DEFAULT 0,Mqzitug 在CALL SPNAME之后, SET V_STATUS = 1,Mqzitug DECLARE CONTINUE HANDLER FOR SQLWARNINGMqzitug BEGINMqzitug IF V_STATUS <>; 1 THENMqzitug --警告处理,插入日志Mqzitug SET V_STATUS = 0;Mqzitug END IF;Mqzitug END;Mqzitug 1.18 import用法Mqzitug db2 import from gh1.out of DEL messages err.txt insert into db2inst1.tb_dbf_match_haMqzitug Mqzitug 注意要加schmaMqzitug Mqzitug 1.19 values的使用Mqzitug 如果有多个 set 语句给变量付值,最好使用values语句,改写为一句。这样可以提高效率。Mqzitug Mqzitug 但要注意,values不能将null值付给一个变量。Mqzitug values(null) into out_return_code;Mqzitug 这个语句会报错的。Mqzitug Mqzitug Mqzitug 1.20 给select 语句指定隔离级别Mqzitug select * from tb_head_stock_balance with urMqzitug Mqzitug 1.21 atomic及not atomic区别Mqzitug atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction。Mqzitug Mqzitug Mqzitug 2 DB2编程性能注意Mqzitug 2.1 大数据的导表Mqzitug 应该是export后再load性能更好,因为load不写日志。Mqzitug 比select into 要好。Mqzitug Mqzitug 2.2 SQL语句尽量写复杂SQLMqzitug 尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性能会有所改善。Mqzitug DB2的SQL Engieer对复杂语句的优化能力比较强,基本上不用当心语句的性能问题。Mqzitug Oracle 则相反,推荐将复杂的语句简单化,SQL Engieer的优化能力不是特别好。Mqzitug 这是因为每一个SQL语句都会有reset SQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。Mqzitug 一个总的思想就是尽量减少SQL语句的个数。Mqzitug 2.3 SQL SP及C SP的选择Mqzitug 首先,C的sp的性能比sql 的sp 的要高。Mqzitug 一般而言,SQL语句比较复杂,而逻辑比较简单,sql sp 与 c sp 的性能差异会比较小,这样从工作量考虑,用SQL写比较好。Mqzitug 而如果逻辑比较复杂,SQL比较简单,用c写比较好。Mqzitug Mqzitug 2.4 查询的优化(HASH及RR_TO_RS)Mqzitug db2set DB2_HASH_JOIN=Y (HASH排序优化)Mqzitug 指定排序时使用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能。Mqzitug 剧沈刚说做实验,7个一千万条记录表的做join取10000条记录,再没有索引的情况下 72秒。Mqzitug Mqzitug db2set DB2_RR_TO_RS=Y Mqzitug 该设置后,不能定义RR隔离级别,如果定义RR,db2也会自动降为RS.Mqzitug 这样,db2不用管理Next key,可以少管理一些东西,这样可以提高性能。 Mqzitug Mqzitug Mqzitug 2.5 避免使用count(*) 及exists的方法Mqzitug 1、首先要避免使用count(*)操作,因为count(*)基本上要对表做全部扫描一遍,如果使用很多会导致很慢。Mqzitug 2、exists比count(*)要快,但总的来说也会对表做扫描,它只是碰到第一条符合的记录就停下来。Mqzitug Mqzitug 如果做这两中操作的目的是为Mqzitug select into 服务的话,就可以省略掉这两步。Mqzitug 直接使用select into 选择记录中的字段。Mqzitug Mqzitug 如果是没有记录选择到的话,db2 会将 sqlcode=100 和 sqlstate=’20000’Mqzitug 如果是有多条记录的话,db2会产生一个错误。Mqzitug Mqzitug 程序可以创建 continue handler for exception Mqzitug continue handler for not foundMqzitug 来检测。Mqzitug 这是最快速的方法。Mqzitug Mqzitug 3、如果是判断是不是一条,可以使用游标来计算,用一个计数器,累加,达到预定值后就离开。这个速度也比count(*) 要快,因为它只要扫描到预定值就不再扫描了,不用做全表的scan,不过它写起来比较麻烦。Mqzitug Mqzitug Mqzitug 3 DB2表及sp管理Mqzitug 3.1 看存储过程文本Mqzitug select text from syscat.procedures where procname='PROC1';Mqzitug 3.2 看表结构Mqzitug describe table syscat.proceduresMqzitug describe select * from syscat.proceduresMqzitug Mqzitug 3.3 查看各表对sp的影响(被哪些sp使用)Mqzitug select PROCNAME from SYSCAT.PROCEDURES where SPECIFICNAME in(select dname from sysibm.sysdependencies where bname in ( select PKGNAME from syscat.packagedep where bname='TB_BRANCH'))Mqzitug Mqzitug 3.4 查看sp使用了哪些表Mqzitug select bname from syscat.packagedep where btype='T' and pkgname in(select bname from sysibm.sysdependencies where dname in (select specificname from syscat.procedures where procname='PR_CLEAR_MATCH_DIVIDE_SHA'))Mqzitug 3.5 查看function被哪些sp使用Mqzitug select PROCNAME from SYSCAT.PROCEDURES where SPECIFICNAME in(select dname from sysibm.sysdependencies where bname in ( select PKGNAME from syscat.packagedep where bname in (select SPECIFICNAME from SYSCAT.functions where funcname='GET_CURRENT_DATE')))Mqzitug Mqzitug Mqzitug 使用function时要注意,如果想drop 掉该function必须要先将调用该function的其它存储过程全部drop掉。Mqzitug 必须先创建function,调用该function的sp才可以创建成功。Mqzitug 3.6 修改表结构Mqzitug 一次给一个表增加多个字段Mqzitug db2 "alter table tb_test add column t1 char(1) add column t2 char(2) add column t3 int"Mqzitug Mqzitug Mqzitug 4 DB2系统管理Mqzitug 4.1 DB2安装Mqzitug 在Windows 98 下安装db2 7.1 或其他版本,如果有Jdbc错误或者是Windwos 98不能启动,则将autoexec.bat 中的内容用如下内容替换:Mqzitug Mqzitug Mqzitug C:PROGRA~1TRENDP~1PCSCAN.EXE C: C:WINDOWSCOMMAND /NS /WIN95 Mqzitug rem C:WINDOWSCOMMAND.COM /E:32768Mqzitug REM [Header]Mqzitug Mqzitug REM [CD-ROM Drive]Mqzitug Mqzitug REM [Miscellaneous]Mqzitug Mqzitug REM [Display]Mqzitug Mqzitug set PATH=%PATH%;C:MSSQLBINN;C:PROGRA~1SQLLIBBIN;C:PROGRA~1SQLLIBFUNCTION;C:PROGRA~1SQLLIBSAMPLESREPL;C:PROGRA~1SQLLIBHELPMqzitug IF EXIST C:PROGRA~1IBMIMNNQIMQENV.BAT CALL C:PROGRA~1IBMIMNNQIMQENV.BATMqzitug IF EXIST C:PROGRA~1IBMIMNNQIMNENV.BAT CALL C:PROGRA~1IBMIMNNQIMNENV.BATMqzitug set DB2INSTANCE=DB2Mqzitug set CLASSPATH=.;C:PROGRA~1SQLLIBjavadb2java.zip;C:PROGRA~1SQLLIBjavaruntime.zip;C:PROGRA~1SQLLIBjavasqlj.zip;C:PROGRA~1SQLLIBbinMqzitug set MDIS_PROFILE=C:PROGRA~1SQLLIBMETADATAPROFILESMqzitug set LC_ALL=ZH_CNMqzitug set INCLUDE=C:PROGRA~1SQLLIBINCLUDE;C:PROGRA~1SQLLIBLIB;C:PROGRA~1SQLLIBTEMPLATESINCLUDEMqzitug set LIB=C:PROGRA~1SQLLIBLIBMqzitug set DB2PATH=C:PROGRA~1SQLLIBMqzitug set DB2TEMPDIR=C:PROGRA~1SQLLIBMqzitug set VWS_TEMPLATES=C:PROGRA~1SQLLIBTEMPLATESMqzitug set VWS_LOGGING=C:PROGRA~1SQLLIBLOGGINGMqzitug set VWSPATH=C:PROGRA~1SQLLIBMqzitug set VWS_FOLDER=IBM DB2Mqzitug set ICM_FOLDER=信息目录管理器Mqzitug Mqzitug winMqzitug Mqzitug Mqzitug 4.2 创建DatabaseMqzitug create database head using codeset IBM-eucCN territory CN;Mqzitug 这样可以支持中文。Mqzitug Mqzitug Mqzitug 4.3 手工做数据库远程(别名)配置Mqzitug db2 catalog tcpip node node1 remote 172.28.200.200 server 50000Mqzitug db2 catalog db head as test1 at node node1Mqzitug Mqzitug 然后既可使用:Mqzitug db2 connect to test1 user … using …Mqzitug 连上head库了Mqzitug Mqzitug 4.4 停止启动数据库实例Mqzitug db2startMqzitug db2stop (force)Mqzitug Mqzitug Mqzitug 4.5 连接数据库及看当前连接数据库Mqzitug 连接数据库Mqzitug db2 connect to head user db2inst1 using db2inst1Mqzitug Mqzitug 当前连接数据库Mqzitug db2 connectMqzitug 4.6 停止启动数据库headMqzitug db2 activate db headMqzitug db2 deactivate db headMqzitug 要注意的是,如果有连接,使用deactivate db 不起作用。Mqzitug 如果是用activate db启动的数据库,一定要用deactivate db才会停止该数据库。(当然如果是db2stop也会停止)。Mqzitug 使用activate db,这样可以减少第一次连接时的等待时间。Mqzitug Database如果不是使用activate db启动而是通过连接数据库而启动的话,当所有的连接都退出后,db也就自动停止。Mqzitug Mqzitug 4.7 查看及停止数据库当前的应用程序Mqzitug 查看应用程序:Mqzitug db2 list applications show detail Mqzitug Mqzitug 授权标识 | 应用程序名 | 应用程序句柄 | 应用程序标识 | 序号# | 代理程序 | 协调程序 | 状态 | 状态更改时间 | DB 名 | DB 路径| | 节点号 | pid/线程Mqzitug Mqzitug 其中:1、应用程序标识的第一部分是应用程序的IP地址,不过是已16进制表示的。Mqzitug 2、pid/线程即是在unix下看到的线程号。Mqzitug Mqzitug 停止应用程序:Mqzitug db2 "force application(236)"Mqzitug db2 “force application all”Mqzitug Mqzitug 其中:该236是查看中的应用程序句柄。Mqzitug Mqzitug Mqzitug 4.8 查看本instance下有哪些databaseMqzitug db2 LIST DATABASE DIRECTORY [ on /home/db2inst1 ]Mqzitug 4.9 查看及更改数据库head的配置Mqzitug 请注意,在大多数情况下,更改了数据的配置后,只有在所有的连接全部断掉后才会生效。Mqzitug Mqzitug 查看数据库head的配制Mqzitug db2 get db cfg for headMqzitug Mqzitug Mqzitug 更改数据库head的某个设置的值Mqzitug 4.9.1 改排序堆的大小Mqzitug db2 update db cfg for head using SORTHEAP 2048Mqzitug 将排序堆的大小改为2048个页面,查询比较多的应用最好将该值设置比较大一些。Mqzitug 4.9.2 改事物日志的大小Mqzitug db2 update db cfg for head using logfilsiz 40000Mqzitug 该项内容的大小要和数据库的事物处理相适应,如果事物比较大,应该要将该值改大一点。否则很容易处理日志文件满的错误。Mqzitug Mqzitug 4.9.3 出现程序堆内存不足时修改程序堆内存大小Mqzitug db2 update db cfg for head using applheapsz 40000Mqzitug 该值不能太小,否则会没有足够的内存来运行应用程序。Mqzitug Mqzitug 4.10 查看及更改数据库实例的配置Mqzitug 查看数据库实例配置Mqzitug db2 get dbm cfg Mqzitug 更改数据库实例配制Mqzitug Mqzitug 4.10.1 打开对锁定情况的监控。Mqzitug db2 update dbm cfg using dft_mon_lock onMqzitug 4.10.2 更改诊断错误捕捉级别Mqzitug db2 update dbm cfg using diaglevel 3Mqzitug 0 为不记录信息Mqzitug 1 为仅记录错误Mqzitug 2 记录服务和非服务错误Mqzitug 缺省是3,记录db2的错误和警告Mqzitug 4 是记录全部信息,包括成功执行的信息Mqzitug 一般情况下,请不要用4,会造成db2的运行速度非常慢。Mqzitug Mqzitug 4.11 db2环境变量Mqzitug db2 重装后用如下方式设置db2的环境变量,以保证sp可编译Mqzitug 将set_cpl 放到AIX上, chmod +x set_cpl, 再运行之Mqzitug Mqzitug set_cpl的内容Mqzitug db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlc_r -g Mqzitug -I$HOME/sqllib/include SQLROUTINE_FILENAME.c Mqzitug -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY Mqzitug -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2"Mqzitug Mqzitug db2set DB2_SQLROUTINE_KEEP_FILES=1Mqzitug 4.12 db2命令环境设置Mqzitug db2=>;list command optionsMqzitug db2=>;update command options using C off--或on,只是临时改变Mqzitug db2=>;db2set db2options=+c --或-c,永久改变Mqzitug Mqzitug 4.13 改变隔离级别Mqzitug DB2SET DB2_SQLROUTINE_PREPOPTS=CS|RR|RS|URMqzitug Mqzitug 交互环境更改session的隔离级别,Mqzitug db2 change isolation to URMqzitug 请注意只有没有连接数据库时可以这样来改变隔离级别。Mqzitug Mqzitug 4.14 管理dbinstance的参数Mqzitug get db cfg for head(db)Mqzitug get dbm cfg(instance)Mqzitug Mqzitug 4.15 升级后消除版本问题Mqzitug db2 bind @db2ubind.lstMqzitug db2 bind @db2cli.lstMqzitug Mqzitug 4.16 查看数据库表的死锁Mqzitug 再用命令中心查询数据时要注意,如果用了交互式查询数据,命令中心将会给所查的记录加了s锁.这时如果要update记录,由于update要使用x锁,排它锁,将会处于锁等待.Mqzitug Mqzitug 首先,将监视开关打开Mqzitug db2 update dbm cfg using dft_mon_lock onMqzitug 快照Mqzitug db2 get snapshot for Locks on cleardb >;snap.logMqzitug tables Mqzitug bufferpoolsMqzitug tablespacesMqzitug databaseMqzitug 然后再看snap.log中的内容即可。Mqzitug 对Lock可根据Application handle(应用程序句柄)看每个应用程序的锁的情况。Mqzitug 监视完毕后,不要忘了将监视器关闭Mqzitug db2 update dbm cfg using dft_mon_lock off |
|