国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
DB2編程序小小技巧
一些編程經(jīng)驗(yàn),與大家共享!Mqzitug
Mqzitug
1        DB2編程        Mqzitug
1.1        建存儲(chǔ)過(guò)程時(shí)CREATE 后一定不要用TAB鍵        3Mqzitug
1.2        使用臨時(shí)表        3Mqzitug
1.3        從數(shù)據(jù)表中取指定前幾條記錄        3Mqzitug
1.4        游標(biāo)的使用        4Mqzitug
注意commit和rollback        4Mqzitug
游標(biāo)的兩種定義方式        4Mqzitug
修改游標(biāo)的當(dāng)前記錄的方法        5Mqzitug
1.5        類(lèi)似DECODE的轉(zhuǎn)碼操作        5Mqzitug
1.6        類(lèi)似CHARINDEX查找字符在字串中的位置        5Mqzitug
1.7        類(lèi)似DATEDIF計(jì)算兩個(gè)日期的相差天數(shù)        5Mqzitug
1.8        寫(xiě)UDF的例子        5Mqzitug
1.9        創(chuàng)建含IDENTITY值(即自動(dòng)生成的ID)的表        6Mqzitug
1.10        預(yù)防字段空值的處理        6Mqzitug
1.11        取得處理的記錄數(shù)        6Mqzitug
1.12        從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法        6Mqzitug
1.13        類(lèi)型轉(zhuǎn)換函數(shù)        8Mqzitug
1.14        存儲(chǔ)過(guò)程的互相調(diào)用        8Mqzitug
1.15        C存儲(chǔ)過(guò)程參數(shù)注意        8Mqzitug
1.16        存儲(chǔ)過(guò)程FENCE及UNFENCE        8Mqzitug
1.17        SP錯(cuò)誤處理用法        9Mqzitug
1.18        IMPORT用法        9Mqzitug
1.19        VALUES的使用        9Mqzitug
1.20        給SELECT 語(yǔ)句指定隔離級(jí)別        10Mqzitug
1.21        ATOMIC及NOT ATOMIC區(qū)別        10Mqzitug
2        DB2編程性能注意        10Mqzitug
2.1        大數(shù)據(jù)的導(dǎo)表        10Mqzitug
2.2        SQL語(yǔ)句盡量寫(xiě)復(fù)雜SQL        10Mqzitug
2.3        SQL  SP及C SP的選擇        10Mqzitug
2.4        查詢(xún)的優(yōu)化(HASH及RR_TO_RS)        11Mqzitug
2.5        避免使用COUNT(*) 及EXISTS的方法        11Mqzitug
3        DB2表及SP管理        12Mqzitug
3.1        看存儲(chǔ)過(guò)程文本        12Mqzitug
3.2        看表結(jié)構(gòu)        12Mqzitug
3.3        查看各表對(duì)SP的影響(被哪些SP使用)        12Mqzitug
3.4        查看SP使用了哪些表        12Mqzitug
3.5        查看FUNCTION被哪些SP使用        12Mqzitug
3.6        修改表結(jié)構(gòu)        12Mqzitug
4        DB2系統(tǒng)管理        13Mqzitug
4.1        DB2安裝        13Mqzitug
4.2        創(chuàng)建DATABASE        14Mqzitug
4.3        手工做數(shù)據(jù)庫(kù)遠(yuǎn)程(別名)配置        14Mqzitug
4.4        停止啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例        14Mqzitug
4.5        連接數(shù)據(jù)庫(kù)及看當(dāng)前連接數(shù)據(jù)庫(kù)        14Mqzitug
4.6        停止啟動(dòng)數(shù)據(jù)庫(kù)HEAD        15Mqzitug
4.7        查看及停止數(shù)據(jù)庫(kù)當(dāng)前的應(yīng)用程序        15Mqzitug
4.8        查看本INSTANCE下有哪些DATABASE        15Mqzitug
4.9        查看及更改數(shù)據(jù)庫(kù)HEAD的配置        16Mqzitug
4.9.1        改排序堆的大小        16Mqzitug
4.9.2        改事物日志的大小        16Mqzitug
4.9.3        出現(xiàn)程序堆內(nèi)存不足時(shí)修改程序堆內(nèi)存大小        16Mqzitug
4.10        查看及更改數(shù)據(jù)庫(kù)實(shí)例的配置        16Mqzitug
4.10.1        打開(kāi)對(duì)鎖定情況的監(jiān)控。        16Mqzitug
4.10.2        更改診斷錯(cuò)誤捕捉級(jí)別        17Mqzitug
4.11        DB2環(huán)境變量        17Mqzitug
4.12        DB2命令環(huán)境設(shè)置        17Mqzitug
4.13        改變隔離級(jí)別        17Mqzitug
4.14        管理DBINSTANCE的參數(shù)        18Mqzitug
4.15        升級(jí)后消除版本問(wèn)題        18Mqzitug
4.16        查看數(shù)據(jù)庫(kù)表的死鎖        18Mqzitug
Mqzitug
1        DB2編程Mqzitug
1.1        建存儲(chǔ)過(guò)程時(shí)Create 后一定不要用TAB鍵Mqzitug
create        procedureMqzitug
的create后只能用空格,而不可用tab健,否則編譯會(huì)通不過(guò)。Mqzitug
切記,切記。Mqzitug
Mqzitug
1.2        使用臨時(shí)表Mqzitug
Mqzitug
  要注意,臨時(shí)表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建臨時(shí)表的。Mqzitug
  另外,DB2的臨時(shí)表和sybase及oracle的臨時(shí)表不太一樣,DB2的臨時(shí)表是在一個(gè)session內(nèi)有效的。所以,如果程序有多線程,最好不要用臨時(shí)表,很難控制。Mqzitug
   建臨時(shí)表時(shí)最好加上  with  replace選項(xiàng),這樣就可以不顯示的drop 臨時(shí)表,建臨時(shí)表時(shí)如果不加該選項(xiàng)而該臨時(shí)表在該session內(nèi)已創(chuàng)建且沒(méi)有drop,這時(shí)會(huì)發(fā)生錯(cuò)誤。Mqzitug
1.3        從數(shù)據(jù)表中取指定前幾條記錄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
        選第一條記錄的字段到一個(gè)變量以以下方式代替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        游標(biāo)的使用Mqzitug
注意commit和rollbackMqzitug
使用游標(biāo)時(shí)要特別注意如果沒(méi)有加with hold 選項(xiàng),在Commit和Rollback時(shí),該游標(biāo)將被關(guān)閉。Commit 和Rollback有很多東西要注意。特別小心Mqzitug
Mqzitug
游標(biāo)的兩種定義方式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
這種方式使用起來(lái)比較復(fù)雜,但也比較靈活。特別是可以使用with hold 選項(xiàng)。如果循環(huán)內(nèi)有commit或rollback 而要保持該cursor不被關(guān)閉,只能使用這種方式。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
       這種方式的優(yōu)點(diǎn)是比較簡(jiǎn)單,不用(也不允許)使用open,fetch,close。Mqzitug
  但不能使用with  hold 選項(xiàng)。如果在游標(biāo)循環(huán)內(nèi)要使用commit,rollback則不能使用這種方式。如果沒(méi)有commit或rollback的要求,推薦使用這種方式(看來(lái)For這種方式有問(wèn)題)。Mqzitug
Mqzitug
修改游標(biāo)的當(dāng)前記錄的方法Mqzitug
update tb_market_code set market_code='0' where current of cursor1;Mqzitug
不過(guò)要注意將cursor1定義為可修改的游標(biāo)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        類(lèi)似decode的轉(zhuǎn)碼操作Mqzitug
oracle中有一個(gè)函數(shù)         select decode(a1,'1','n1','2','n2','n3') aa1 fromMqzitug
db2沒(méi)有該函數(shù),但可以用變通的方法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        類(lèi)似charindex查找字符在字串中的位置Mqzitug
Locate(‘y’,’dfdasfay’)Mqzitug
        查找’y’ 在’dfdasfay’中的位置。Mqzitug
Mqzitug
1.7        類(lèi)似datedif計(jì)算兩個(gè)日期的相差天數(shù)Mqzitug
days(date(‘2001-06-05’)) – days(date(‘2001-04-01’))Mqzitug
days 返回的是從  0001-01-01 開(kāi)始計(jì)算的天數(shù)Mqzitug
1.8        寫(xiě)UDF的例子Mqzitug
C寫(xiě)見(jiàn)sqllibsamplescliudfsrv.cMqzitug
Mqzitug
1.9        創(chuàng)建含identity值(即自動(dòng)生成的ID)的表Mqzitug
建這樣的表的寫(xiě)法Mqzitug
CREATE TABLE testMqzitug
     (t1 SMALLINT NOT NULLMqzitug
        GENERATED ALWAYS AS IDENTITYMqzitug
        (START WITH 500, INCREMENT BY 1),Mqzitug
      t2 CHAR(1));Mqzitug
在一個(gè)表中只允許有一個(gè)identity的column.Mqzitug
Mqzitug
1.10        預(yù)防字段空值的處理Mqzitug
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPTMqzitug
FROM DEPARTMENTMqzitug
   COALESCE函數(shù)返回()中表達(dá)式列表中第一個(gè)不為空的表達(dá)式,可以帶多個(gè)表達(dá)式。Mqzitug
   和oracle的isnull類(lèi)似,但isnull好象只能兩個(gè)表達(dá)式。Mqzitug
     Mqzitug
Mqzitug
1.11        取得處理的記錄數(shù)Mqzitug
        declare v_count int;Mqzitug
update        tb_test                set                t1=’0’Mqzitug
                where        t2=’2’;Mqzitug
        --檢查修改的行數(shù),判斷指定的記錄是否存在Mqzitug
        get diagnostics        v_ count=ROW_COUNT;     Mqzitug
        只對(duì)update,insert,delete起作用.Mqzitug
        不對(duì)select into 有效Mqzitug
Mqzitug
Mqzitug
1.12        從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法Mqzitug
1、建一sp返回結(jié)果集Mqzitug
CREATE PROCEDURE DB2INST1.Proc1 (  )Mqzitug
    LANGUAGE SQLMqzitug
    result sets 2(返回兩個(gè)結(jié)果集)Mqzitug
------------------------------------------------------------------------Mqzitug
-- SQL 存儲(chǔ)過(guò)程 Mqzitug
------------------------------------------------------------------------Mqzitug
P1: BEGINMqzitug
        declare c1 cursor  with return to caller for Mqzitug
            select  market_codeMqzitug
            from    tb_market_code;Mqzitug
        --指定該結(jié)果集用于返回給調(diào)用者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調(diào)該sp且使用它的結(jié)果集Mqzitug
Mqzitug
CREATE PROCEDURE DB2INST1.Proc2 (Mqzitug
out out_market_code char(1))Mqzitug
    LANGUAGE SQLMqzitug
------------------------------------------------------------------------Mqzitug
-- SQL 存儲(chǔ)過(guò)程 Mqzitug
------------------------------------------------------------------------Mqzitug
P1: BEGINMqzitug
Mqzitug
declare loc1,loc2 result_set_locator varying; Mqzitug
--建立一個(gè)結(jié)果集數(shù)組Mqzitug
call proc1;Mqzitug
--調(diào)用該SP返回結(jié)果集。Mqzitug
associate result set locator(loc1,loc2) with procedure proc1;Mqzitug
--將返回結(jié)果集和結(jié)果集數(shù)組關(guān)聯(lián)Mqzitug
allocate cursor1 cursor for result set loc1;Mqzitug
allocate cursor2 cursor for result set loc2;Mqzitug
--將結(jié)果集數(shù)組分配給cursorMqzitug
fetch  cursor1 into out_market_code;Mqzitug
--直接從結(jié)果集中賦值Mqzitug
close cursor1;         Mqzitug
Mqzitug
END P1Mqzitug
Mqzitug
3、動(dòng)態(tài)SQL寫(xiě)法Mqzitug
     DECLARE CURSOR C1 FOR STMT1; Mqzitug
     PREPARE STMT1 FROMMqzitug
        'ALLOCATE C2 CURSOR FOR RESULT SET ?';Mqzitug
4、注意:Mqzitug
一、        如果一個(gè)sp調(diào)用好幾次,只能取到最近一次調(diào)用的結(jié)果集。Mqzitug
二、        allocate的cursor不能再次open,但可以close,是close sp中的對(duì)應(yīng)cursor。Mqzitug
Mqzitug
1.13        類(lèi)型轉(zhuǎn)換函數(shù)Mqzitug
select cast ( current time as char(8)) from tb_market_codeMqzitug
Mqzitug
1.14        存儲(chǔ)過(guò)程的互相調(diào)用Mqzitug
目前,c sp可以互相調(diào)用。Mqzitug
Sql sp 可以互相調(diào)用,Mqzitug
Sql sp 可以調(diào)用C sp,Mqzitug
但C sp 不可以調(diào)用Sql sp(最新的說(shuō)法是可以)Mqzitug
Mqzitug
1.15        C存儲(chǔ)過(guò)程參數(shù)注意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將不能調(diào)用該用c寫(xiě)的存儲(chǔ)過(guò)程,產(chǎn)生保護(hù)性錯(cuò)誤)Mqzitug
NO DBINFOMqzitug
FENCEDMqzitug
MODIFIES SQL DATAMqzitug
EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@Mqzitug
Mqzitug
Mqzitug
1.16        存儲(chǔ)過(guò)程fence及unfenceMqzitug
fence的存儲(chǔ)過(guò)程單獨(dú)啟用一個(gè)新的地址空間,而unfence的存儲(chǔ)過(guò)程和調(diào)用它的進(jìn)程使用同一個(gè)地址空間。Mqzitug
一般而言,fence的存儲(chǔ)過(guò)程比較安全。Mqzitug
但有時(shí)一些特殊的要求,如要取調(diào)用者的pid,則fence的存儲(chǔ)過(guò)程會(huì)取不到,而只有unfence的能取到。Mqzitug
Mqzitug
1.17        SP錯(cuò)誤處理用法Mqzitug
如果在SP中調(diào)用其它的有返回值的,包括結(jié)果集、臨時(shí)表和輸出參數(shù)類(lèi)型的SP,Mqzitug
DB2會(huì)自動(dòng)發(fā)出一個(gè)SQLWarning。而在我們?cè)瓉?lái)的處理中對(duì)于SQLWarning都Mqzitug
會(huì)插入到日志,這樣子最后會(huì)出現(xiàn)多條SQLCODE=0的警告信息。Mqzitug
處理辦法:Mqzitug
定義一個(gè)標(biāo)志變量,比如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
如果有多個(gè) set  語(yǔ)句給變量付值,最好使用values語(yǔ)句,改寫(xiě)為一句。這樣可以提高效率。Mqzitug
Mqzitug
但要注意,values不能將null值付給一個(gè)變量。Mqzitug
values(null) into out_return_code;Mqzitug
這個(gè)語(yǔ)句會(huì)報(bào)錯(cuò)的。Mqzitug
Mqzitug
Mqzitug
1.20        給select 語(yǔ)句指定隔離級(jí)別Mqzitug
select * from tb_head_stock_balance with urMqzitug
Mqzitug
1.21        atomic及not atomic區(qū)別Mqzitug
atomic是將該部分程序塊指定為一個(gè)整體,其中任何一個(gè)語(yǔ)句失敗,則整個(gè)程序塊都相當(dāng)于沒(méi)做,包括包含在atomic塊內(nèi)的已經(jīng)執(zhí)行成功的語(yǔ)句也相當(dāng)于沒(méi)做,有點(diǎn)類(lèi)似于transaction。Mqzitug
Mqzitug
Mqzitug
2         DB2編程性能注意Mqzitug
2.1        大數(shù)據(jù)的導(dǎo)表Mqzitug
應(yīng)該是export后再load性能更好,因?yàn)閘oad不寫(xiě)日志。Mqzitug
比select into 要好。Mqzitug
Mqzitug
2.2        SQL語(yǔ)句盡量寫(xiě)復(fù)雜SQLMqzitug
   盡量使用大的復(fù)雜的SQL語(yǔ)句,將多而簡(jiǎn)單的語(yǔ)句組合成大的SQL語(yǔ)句對(duì)性能會(huì)有所改善。Mqzitug
   DB2的SQL Engieer對(duì)復(fù)雜語(yǔ)句的優(yōu)化能力比較強(qiáng),基本上不用當(dāng)心語(yǔ)句的性能問(wèn)題。Mqzitug
        Oracle 則相反,推薦將復(fù)雜的語(yǔ)句簡(jiǎn)單化,SQL Engieer的優(yōu)化能力不是特別好。Mqzitug
                這是因?yàn)槊恳粋€(gè)SQL語(yǔ)句都會(huì)有reset SQLCODE和SQLSTATE等各種操作,會(huì)對(duì)數(shù)據(jù)庫(kù)性能有所消耗。Mqzitug
                一個(gè)總的思想就是盡量減少SQL語(yǔ)句的個(gè)數(shù)。Mqzitug
2.3        SQL  SP及C SP的選擇Mqzitug
首先,C的sp的性能比sql 的sp 的要高。Mqzitug
一般而言,SQL語(yǔ)句比較復(fù)雜,而邏輯比較簡(jiǎn)單,sql sp 與 c sp 的性能差異會(huì)比較小,這樣從工作量考慮,用SQL寫(xiě)比較好。Mqzitug
        而如果邏輯比較復(fù)雜,SQL比較簡(jiǎn)單,用c寫(xiě)比較好。Mqzitug
Mqzitug
2.4        查詢(xún)的優(yōu)化(HASH及RR_TO_RS)Mqzitug
db2set         DB2_HASH_JOIN=Y                (HASH排序優(yōu)化)Mqzitug
   指定排序時(shí)使用HASH排序,這樣db2在表join時(shí),先對(duì)各表做hash排序,再join,這樣可以大大提高性能。Mqzitug
   劇沈剛說(shuō)做實(shí)驗(yàn),7個(gè)一千萬(wàn)條記錄表的做join取10000條記錄,再?zèng)]有索引的情況下  72秒。Mqzitug
Mqzitug
db2set         DB2_RR_TO_RS=Y       Mqzitug
         該設(shè)置后,不能定義RR隔離級(jí)別,如果定義RR,db2也會(huì)自動(dòng)降為RS.Mqzitug
        這樣,db2不用管理Next key,可以少管理一些東西,這樣可以提高性能。     Mqzitug
Mqzitug
Mqzitug
2.5        避免使用count(*) 及exists的方法Mqzitug
1、首先要避免使用count(*)操作,因?yàn)閏ount(*)基本上要對(duì)表做全部掃描一遍,如果使用很多會(huì)導(dǎo)致很慢。Mqzitug
2、exists比count(*)要快,但總的來(lái)說(shuō)也會(huì)對(duì)表做掃描,它只是碰到第一條符合的記錄就停下來(lái)。Mqzitug
Mqzitug
如果做這兩中操作的目的是為Mqzitug
       select into 服務(wù)的話,就可以省略掉這兩步。Mqzitug
直接使用select into 選擇記錄中的字段。Mqzitug
Mqzitug
如果是沒(méi)有記錄選擇到的話,db2 會(huì)將  sqlcode=100 和 sqlstate=’20000’Mqzitug
如果是有多條記錄的話,db2會(huì)產(chǎn)生一個(gè)錯(cuò)誤。Mqzitug
Mqzitug
程序可以創(chuàng)建  continue handler for  exception Mqzitug
              continue handler for  not foundMqzitug
來(lái)檢測(cè)。Mqzitug
這是最快速的方法。Mqzitug
Mqzitug
3、如果是判斷是不是一條,可以使用游標(biāo)來(lái)計(jì)算,用一個(gè)計(jì)數(shù)器,累加,達(dá)到預(yù)定值后就離開(kāi)。這個(gè)速度也比count(*) 要快,因?yàn)樗灰獟呙璧筋A(yù)定值就不再掃描了,不用做全表的scan,不過(guò)它寫(xiě)起來(lái)比較麻煩。Mqzitug
Mqzitug
Mqzitug
3        DB2表及sp管理Mqzitug
3.1        看存儲(chǔ)過(guò)程文本Mqzitug
select text from syscat.procedures where procname='PROC1';Mqzitug
3.2        看表結(jié)構(gòu)Mqzitug
describe table syscat.proceduresMqzitug
describe select * from syscat.proceduresMqzitug
Mqzitug
3.3        查看各表對(duì)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時(shí)要注意,如果想drop 掉該function必須要先將調(diào)用該function的其它存儲(chǔ)過(guò)程全部drop掉。Mqzitug
        必須先創(chuàng)建function,調(diào)用該function的sp才可以創(chuàng)建成功。Mqzitug
3.6        修改表結(jié)構(gòu)Mqzitug
一次給一個(gè)表增加多個(gè)字段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系統(tǒng)管理Mqzitug
4.1        DB2安裝Mqzitug
  在Windows 98 下安裝db2 7.1 或其他版本,如果有Jdbc錯(cuò)誤或者是Windwos 98不能啟動(dòng),則將autoexec.bat 中的內(nèi)容用如下內(nèi)容替換: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        創(chuàng)建DatabaseMqzitug
create database head using codeset IBM-eucCN territory CN;Mqzitug
這樣可以支持中文。Mqzitug
Mqzitug
Mqzitug
4.3        手工做數(shù)據(jù)庫(kù)遠(yuǎn)程(別名)配置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庫(kù)了Mqzitug
Mqzitug
4.4        停止啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例Mqzitug
db2startMqzitug
db2stop (force)Mqzitug
Mqzitug
Mqzitug
4.5        連接數(shù)據(jù)庫(kù)及看當(dāng)前連接數(shù)據(jù)庫(kù)Mqzitug
連接數(shù)據(jù)庫(kù)Mqzitug
db2  connect to head user db2inst1  using db2inst1Mqzitug
Mqzitug
當(dāng)前連接數(shù)據(jù)庫(kù)Mqzitug
db2  connectMqzitug
4.6        停止啟動(dòng)數(shù)據(jù)庫(kù)headMqzitug
db2  activate  db  headMqzitug
db2  deactivate db  headMqzitug
要注意的是,如果有連接,使用deactivate db 不起作用。Mqzitug
如果是用activate db啟動(dòng)的數(shù)據(jù)庫(kù),一定要用deactivate db才會(huì)停止該數(shù)據(jù)庫(kù)。(當(dāng)然如果是db2stop也會(huì)停止)。Mqzitug
使用activate db,這樣可以減少第一次連接時(shí)的等待時(shí)間。Mqzitug
Database如果不是使用activate db啟動(dòng)而是通過(guò)連接數(shù)據(jù)庫(kù)而啟動(dòng)的話,當(dāng)所有的連接都退出后,db也就自動(dòng)停止。Mqzitug
Mqzitug
4.7        查看及停止數(shù)據(jù)庫(kù)當(dāng)前的應(yīng)用程序Mqzitug
查看應(yīng)用程序:Mqzitug
db2   list          applications         show  detail Mqzitug
        Mqzitug
授權(quán)標(biāo)識(shí) | 應(yīng)用程序名 | 應(yīng)用程序句柄 |  應(yīng)用程序標(biāo)識(shí) | 序號(hào)#  | 代理程序 |  協(xié)調(diào)程序 | 狀態(tài) |  狀態(tài)更改時(shí)間 |  DB 名 | DB 路徑|                                                      |    節(jié)點(diǎn)號(hào) |   pid/線程Mqzitug
Mqzitug
        其中:1、應(yīng)用程序標(biāo)識(shí)的第一部分是應(yīng)用程序的IP地址,不過(guò)是已16進(jìn)制表示的。Mqzitug
                2、pid/線程即是在unix下看到的線程號(hào)。Mqzitug
Mqzitug
停止應(yīng)用程序:Mqzitug
db2 "force application(236)"Mqzitug
db2 “force application all”Mqzitug
Mqzitug
其中:該236是查看中的應(yīng)用程序句柄。Mqzitug
Mqzitug
Mqzitug
4.8        查看本instance下有哪些databaseMqzitug
db2 LIST DATABASE DIRECTORY  [ on /home/db2inst1 ]Mqzitug
4.9        查看及更改數(shù)據(jù)庫(kù)head的配置Mqzitug
請(qǐng)注意,在大多數(shù)情況下,更改了數(shù)據(jù)的配置后,只有在所有的連接全部斷掉后才會(huì)生效。Mqzitug
Mqzitug
查看數(shù)據(jù)庫(kù)head的配制Mqzitug
db2 get db cfg for headMqzitug
Mqzitug
Mqzitug
更改數(shù)據(jù)庫(kù)head的某個(gè)設(shè)置的值Mqzitug
4.9.1        改排序堆的大小Mqzitug
                                db2 update db cfg for head using SORTHEAP 2048Mqzitug
        將排序堆的大小改為2048個(gè)頁(yè)面,查詢(xún)比較多的應(yīng)用最好將該值設(shè)置比較大一些。Mqzitug
4.9.2        改事物日志的大小Mqzitug
                        db2 update db cfg for head using  logfilsiz  40000Mqzitug
                        該項(xiàng)內(nèi)容的大小要和數(shù)據(jù)庫(kù)的事物處理相適應(yīng),如果事物比較大,應(yīng)該要將該值改大一點(diǎn)。否則很容易處理日志文件滿(mǎn)的錯(cuò)誤。Mqzitug
Mqzitug
4.9.3        出現(xiàn)程序堆內(nèi)存不足時(shí)修改程序堆內(nèi)存大小Mqzitug
                        db2 update db cfg for head using  applheapsz  40000Mqzitug
                        該值不能太小,否則會(huì)沒(méi)有足夠的內(nèi)存來(lái)運(yùn)行應(yīng)用程序。Mqzitug
Mqzitug
4.10        查看及更改數(shù)據(jù)庫(kù)實(shí)例的配置Mqzitug
查看數(shù)據(jù)庫(kù)實(shí)例配置Mqzitug
db2  get dbm cfg Mqzitug
更改數(shù)據(jù)庫(kù)實(shí)例配制Mqzitug
Mqzitug
4.10.1        打開(kāi)對(duì)鎖定情況的監(jiān)控。Mqzitug
                                db2 update dbm cfg using dft_mon_lock  onMqzitug
4.10.2        更改診斷錯(cuò)誤捕捉級(jí)別Mqzitug
                        db2 update dbm cfg using diaglevel                3Mqzitug
                                        0 為不記錄信息Mqzitug
                                        1 為僅記錄錯(cuò)誤Mqzitug
                                        2 記錄服務(wù)和非服務(wù)錯(cuò)誤Mqzitug
缺省是3,記錄db2的錯(cuò)誤和警告Mqzitug
                                        4 是記錄全部信息,包括成功執(zhí)行的信息Mqzitug
                        一般情況下,請(qǐng)不要用4,會(huì)造成db2的運(yùn)行速度非常慢。Mqzitug
                                Mqzitug
4.11        db2環(huán)境變量Mqzitug
db2 重裝后用如下方式設(shè)置db2的環(huán)境變量,以保證sp可編譯Mqzitug
將set_cpl 放到AIX上, chmod +x set_cpl, 再運(yùn)行之Mqzitug
Mqzitug
set_cpl的內(nèi)容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命令環(huán)境設(shè)置Mqzitug
        db2=>;list command optionsMqzitug
        db2=>;update command options using C off--或on,只是臨時(shí)改變Mqzitug
        db2=>;db2set db2options=+c --或-c,永久改變Mqzitug
Mqzitug
4.13        改變隔離級(jí)別Mqzitug
DB2SET DB2_SQLROUTINE_PREPOPTS=CS|RR|RS|URMqzitug
        Mqzitug
交互環(huán)境更改session的隔離級(jí)別,Mqzitug
       db2 change isolation  to URMqzitug
                請(qǐng)注意只有沒(méi)有連接數(shù)據(jù)庫(kù)時(shí)可以這樣來(lái)改變隔離級(jí)別。Mqzitug
Mqzitug
4.14        管理dbinstance的參數(shù)Mqzitug
get db cfg for head(db)Mqzitug
get dbm cfg(instance)Mqzitug
Mqzitug
4.15        升級(jí)后消除版本問(wèn)題Mqzitug
db2   bind  @db2ubind.lstMqzitug
db2   bind   @db2cli.lstMqzitug
Mqzitug
4.16        查看數(shù)據(jù)庫(kù)表的死鎖Mqzitug
再用命令中心查詢(xún)數(shù)據(jù)時(shí)要注意,如果用了交互式查詢(xún)數(shù)據(jù),命令中心將會(huì)給所查的記錄加了s鎖.這時(shí)如果要update記錄,由于update要使用x鎖,排它鎖,將會(huì)處于鎖等待.Mqzitug
Mqzitug
首先,將監(jiān)視開(kāi)關(guān)打開(kāi)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中的內(nèi)容即可。Mqzitug
對(duì)Lock可根據(jù)Application handle(應(yīng)用程序句柄)看每個(gè)應(yīng)用程序的鎖的情況。Mqzitug
監(jiān)視完畢后,不要忘了將監(jiān)視器關(guān)閉Mqzitug
     db2 update dbm cfg using dft_mon_lock  off
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
[原創(chuàng)] DB2編程序小小技巧
【轉(zhuǎn)】SqlServer中用SQL語(yǔ)句附加數(shù)據(jù)庫(kù)及修改數(shù)據(jù)庫(kù)邏輯文件名
SQL Server 存儲(chǔ)過(guò)程
Alter Database 語(yǔ)句 Set 子句選項(xiàng)
python操作mysql數(shù)據(jù)庫(kù) | 菜鳥(niǎo)教程
lua簡(jiǎn)單操作sqlite3
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服