• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            1. DB2數(shù)據(jù)庫(kù)編程

            ◆1.1 建存儲(chǔ)過(guò)程時(shí)Create 后一定不要用TAB鍵


            create procedure

            的create后只能用空格,而不可用tab健,否則編譯會(huì)通不過(guò)。

            切記,切記。


            ◆1.2 使用臨時(shí)表


            要注意,臨時(shí)表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建臨時(shí)表的。


            另外,DB2的臨時(shí)表和sybase及oracle的臨時(shí)表不太一樣,DB2的臨時(shí)表是在一個(gè)session內(nèi)有效的。所以,如果程序有多線程,最好不要用臨時(shí)表,很難控制。


            建臨時(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ò)誤。


            ◆1.3 從數(shù)據(jù)表中取指定前幾條記錄


            select * from tb_market_code fetch first 1 rows only

             

            但下面這種方式不允許:


            select market_code into v_market_code from tb_market_code fetch first 1 rows only;

             

            選第一條記錄的字段到一個(gè)變量以以下方式代替:


            declare v_market_code char(1); declare cursor1 cursor for select market_code from tb_market_code fetch first 1 rows only for update; open cursor1; fetch cursor1 into v_market_code; close cursor1;

             

            ◆1.4 游標(biāo)的使用


            注意commit和rollback

            使用游標(biāo)時(shí)要特別注意如果沒(méi)有加with hold 選項(xiàng),在Commit和Rollback時(shí),該游標(biāo)將被關(guān)閉。Commit 和Rollback有很多東西要注意。特別小心。


            游標(biāo)的兩種定義方式:


            一種為:


            declare continue handler for not found begin set v_notfound = 1; end; declare cursor1 cursor with hold for select market_code from tb_market_code for update; open cursor1; set v_notfound=0; fetch cursor1 into v_market_code; while v_notfound=0 Do --work set v_notfound=0; fetch cursor1 into v_market_code; end while; close cursor1;

             

            這種方式使用起來(lái)比較復(fù)雜,但也比較靈活。特別是可以使用with hold 選項(xiàng)。如果循環(huán)內(nèi)有commit或rollback 而要保持該cursor不被關(guān)閉,只能使用這種方式。


            另一種為:


            pcursor1: for loopcs1 as cousor1 cursor as select market_code as market_code from tb_market_code for update do end for;

             

            這種方式的優(yōu)點(diǎn)是比較簡(jiǎn)單,不用(也不允許)使用open,fetch,close。

            但不能使用with hold 選項(xiàng)。如果在游標(biāo)循環(huán)內(nèi)要使用commit,rollback則不能使用這種方式。如果沒(méi)有commit或rollback的要求,推薦使用這種方式(看來(lái)For這種方式有問(wèn)題)。

            修改游標(biāo)的當(dāng)前記錄的方法


            update tb_market_code set market_code='0' where current of cursor1;

             

            不過(guò)要注意將cursor1定義為可修改的游標(biāo)


            declare cursor1 cursor for select market_code from tb_market_code for update;

             

            for update 不能和GROUP BY、 DISTINCT、 ORDER BY、 FOR READ ONLY及UNION, EXCEPT, or INTERSECT但 UNION ALL除外)一起使用。

             

            ◆1.5 類(lèi)似decode的轉(zhuǎn)碼操作

            oracle中有一個(gè)函數(shù)


            select decode(a1,'1','n1','2','n2','n3') aa1 from

             

            db2沒(méi)有該函數(shù),但可以用變通的方法。


            select case a1 when '1' then 'n1' when '2' then 'n2' else 'n3' end as aa1 from

             

            ◆1.6 類(lèi)似charindex查找字符在字串中的位置


            Locate(‘y’,’dfdasfay’)

            查找’y’ 在’dfdasfay’中的位置。


            ◆1.7 類(lèi)似datedif計(jì)算兩個(gè)日期的相差天數(shù)


            days(date(‘2001-06-05’)) – days(date(‘2001-04-01’))

            days 返回的是從 0001-01-01 開(kāi)始計(jì)算的天數(shù)


            ◆1.8 寫(xiě)UDF的例子


            C寫(xiě)見(jiàn)sqllib\samples\cli\udfsrv.c


            ◆1.9 創(chuàng)建含identity值(即自動(dòng)生成的ID)的表


            建這樣的表的寫(xiě)法:


            CREATE TABLE test (t1 SMALLINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 500, INCREMENT BY 1), t2 CHAR(1));

             

            在一個(gè)表中只允許有一個(gè)identity的column。


            ◆1.10 預(yù)防字段空值的處理


            SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT FROM DEPARTMENT

             

            COALESCE函數(shù)返回()中表達(dá)式列表中第一個(gè)不為空的表達(dá)式,可以帶多個(gè)表達(dá)式。

            和oracle的isnull類(lèi)似,但isnull好象只能兩個(gè)表達(dá)式。


            ◆1.11 取得處理的記錄數(shù)


            declare v_count int; update tb_test set t1=’0’ where t2=’2’; --檢查修改的行數(shù),判斷指定的記錄是否存在 get diagnostics v_ count=ROW_COUNT;

             

            只對(duì)update,insert,delete起作用.

            不對(duì)select into 有效


            ◆1.12 從存儲(chǔ)過(guò)程返回結(jié)果集(游標(biāo))的用法


            (1)建一sp返回結(jié)果集


            CREATE PROCEDURE DB2INST1.Proc1 ( ) LANGUAGE SQL result sets 2(返回兩個(gè)結(jié)果集) ------------------------------------------------------------------------ -- SQL 存儲(chǔ)過(guò)程 ------------------------------------------------------------------------ P1: BEGIN declare c1 cursor with return to caller for select market_code from tb_market_code; --指定該結(jié)果集用于返回給調(diào)用者 declare c2 cursor with return to caller for select market_code from tb_market_code; open c1; open c2; END P1

             

            (2)建一SP調(diào)該sp且使用它的結(jié)果集


            CREATE PROCEDURE DB2INST1.Proc2 ( out out_market_code char(1)) LANGUAGE SQL ------------------------------------------------------------------------ -- SQL 存儲(chǔ)過(guò)程 ------------------------------------------------------------------------ P1: BEGIN declare loc1,loc2 result_set_locator varying; --建立一個(gè)結(jié)果集數(shù)組 call proc1; --調(diào)用該SP返回結(jié)果集。 associate result set locator(loc1,loc2) with procedure proc1; --將返回結(jié)果集和結(jié)果集數(shù)組關(guān)聯(lián) allocate cursor1 cursor for result set loc1; allocate cursor2 cursor for result set loc2; --將結(jié)果集數(shù)組分配給cursor fetch cursor1 into out_market_code; --直接從結(jié)果集中賦值 close cursor1; END P1

             

            (3)動(dòng)態(tài)SQL寫(xiě)法


            DECLARE CURSOR C1 FOR STMT1; PREPARE STMT1 FROM 'ALLOCATE C2 CURSOR FOR RESULT SET ?';

             

            (4)注意:

            一、 如果一個(gè)sp調(diào)用好幾次,只能取到最近一次調(diào)用的結(jié)果集。

            二、 allocate的cursor不能再次open,但可以close,是close sp中的對(duì)應(yīng)cursor。


            ◆1.13 類(lèi)型轉(zhuǎn)換函數(shù)


            select cast ( current time as char(8)) from tb_market_code

             

            ◆1.14 存儲(chǔ)過(guò)程的互相調(diào)用


            目前,c sp可以互相調(diào)用。

            Sql sp 可以互相調(diào)用,

            Sql sp 可以調(diào)用C sp,

            但C sp 不可以調(diào)用Sql sp(最新的說(shuō)法是可以)。


            ◆1.15 C存儲(chǔ)過(guò)程參數(shù)注意


            create procedure pr_clear_task_ctrl( IN IN_BRANCH_CODE char(4), IN IN_TRADEDATE char(8), IN IN_TASK_ID char(2), IN IN_SUB_TASK_ID char(4), OUT OUT_SUCCESS_FLAG INTEGER ) DYNAMIC RESULT SETS 0 LANGUAGE C PARAMETER STYLE GENERAL WITH NULLS(如果不是這樣,sql 的sp將不能調(diào)用該用c寫(xiě)的存儲(chǔ)過(guò)程,產(chǎn)生保護(hù)性錯(cuò)誤) NO DBINFO FENCED MODIFIES SQL DATA EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@

             

            ◆1.16 存儲(chǔ)過(guò)程fence及unfence


            fence的存儲(chǔ)過(guò)程單獨(dú)啟用一個(gè)新的地址空間,而unfence的存儲(chǔ)過(guò)程和調(diào)用它的進(jìn)程使用同一個(gè)地址空間。一般而言,fence的存儲(chǔ)過(guò)程比較安全。有時(shí)一些特殊的要求,如要取調(diào)用者的pid,則fence的存儲(chǔ)過(guò)程會(huì)取不到,而只有unfence的能取到。

             


            ◆1.17 SP錯(cuò)誤處理用法


            如果在SP中調(diào)用其它的有返回值的,包括結(jié)果集、臨時(shí)表和輸出參數(shù)類(lèi)型的SP,DB2會(huì)自動(dòng)發(fā)出一個(gè)SQLWarning。而在我們?cè)瓉?lái)的處理中對(duì)于SQLWarning都會(huì)插入到日志,這樣子最后會(huì)出現(xiàn)多條SQLCODE=0的警告信息。


            處理辦法:


            定義一個(gè)標(biāo)志變量,比如DECLARE V_STATUS INTEGER DEFAULT 0,

            在CALL SPNAME之后, SET V_STATUS = 1,

            DECLARE CONTINUE HANDLER FOR SQLWARNING

            BEGIN

            IF V_STATUS <> 1 THEN

            --警告處理,插入日志

            SET V_STATUS = 0;

            END IF;

            END;


            ◆1.18 import用法


            db2 import from gh1.out of DEL messages err.txt insert into db2inst1.tb_dbf_match_ha


            注意要加schma。


            ◆1.19 values的使用


            如果有多個(gè) set 語(yǔ)句給變量付值,最好使用values語(yǔ)句,改寫(xiě)為一句。這樣可以提高效率。


            但要注意,values不能將null值付給一個(gè)變量。

            values(null) into out_return_code;

            這個(gè)語(yǔ)句會(huì)報(bào)錯(cuò)的。


            ◆1.20 給select 語(yǔ)句指定隔離級(jí)別


            select * from tb_head_stock_balance with ur

             

            ◆1.21 atomic及not atomic區(qū)別


            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。

            2.DB2編程性能注意


            ◆2.1 大數(shù)據(jù)的導(dǎo)表


            應(yīng)該是export后再load性能更好,因?yàn)閘oad不寫(xiě)日志。比select into 要好。


            ◆2.2 SQL語(yǔ)句盡量寫(xiě)復(fù)雜SQL


            盡量使用大的復(fù)雜的SQL語(yǔ)句,將多而簡(jiǎn)單的語(yǔ)句組合成大的SQL語(yǔ)句對(duì)性能會(huì)有所改善。DB2的 SQL Engieer對(duì)復(fù)雜語(yǔ)句的優(yōu)化能力比較強(qiáng),基本上不用當(dāng)心語(yǔ)句的性能問(wèn)題。Oracle 則相反,推薦將復(fù)雜的語(yǔ)句簡(jiǎn)單化, SQL Engieer的優(yōu)化能力不是特別好。這是因?yàn)槊恳粋€(gè)SQL語(yǔ)句都會(huì)有reset SQLCODE和SQLSTATE等各種操作,會(huì)對(duì)數(shù)據(jù)庫(kù)性能有所消耗。一個(gè)總的思想就是盡量減少SQL語(yǔ)句的個(gè)數(shù)。


            ◆2.3 SQL SP及C SP的選擇


            首先,C的sp的性能比sql 的sp 的要高。一般而言,SQL語(yǔ)句比較復(fù)雜,而邏輯比較簡(jiǎn)單,sql sp 與 c sp 的性能差異會(huì)比較小,這樣從工作量考慮,用SQL寫(xiě)比較好。而如果邏輯比較復(fù)雜,SQL比較簡(jiǎn)單,用c寫(xiě)比較好。


            ◆2.4 查詢(xún)的優(yōu)化(HASH及RR_TO_RS)


            db2set DB2_HASH_JOIN=Y (HASH排序優(yōu)化)

            指定排序時(shí)使用HASH排序,這樣db2在表join時(shí),先對(duì)各表做hash排序,再join,這樣可以大大提高性能。

            劇沈剛說(shuō)做實(shí)驗(yàn),7個(gè)一千萬(wàn)條記錄表的做join取10000條記錄,再?zèng)]有索引的情況下 72秒。


            db2set DB2_RR_TO_RS=Y

            該設(shè)置后,不能定義RR隔離級(jí)別,如果定義RR,db2也會(huì)自動(dòng)降為RS.

            這樣,db2不用管理Next key,可以少管理一些東西,這樣可以提高性能。


            ◆2.5 避免使用count(*) 及exists的方法


            (1)首先要避免使用count(*)操作,因?yàn)閏ount(*)基本上要對(duì)表做全部掃描一遍,如果使用很多會(huì)導(dǎo)致很慢。

            (2)exists比count(*)要快,但總的來(lái)說(shuō)也會(huì)對(duì)表做掃描,它只是碰到第一條符合的記錄就停下來(lái)。


            如果做這兩中操作的目的是為select into服務(wù)的話,就可以省略掉這兩步。


            直接使用select into 選擇記錄中的字段。


            如果是沒(méi)有記錄選擇到的話,db2 會(huì)將 sqlcode=100 和 sqlstate=’20000’

            如果是有多條記錄的話,db2會(huì)產(chǎn)生一個(gè)錯(cuò)誤。


            程序可以創(chuàng)建 continue handler for exception

            continue handler for not found 來(lái)檢測(cè)。

            這是最快速的方法。


            (3)如果是判斷是不是一條,可以使用游標(biāo)來(lái)計(jì)算,用一個(gè)計(jì)數(shù)器,累加,達(dá)到預(yù)定值后就離開(kāi)。這個(gè)速度也比count(*) 要快,因?yàn)樗灰獟呙璧筋A(yù)定值就不再掃描了,不用做全表的scan,不過(guò)它寫(xiě)起來(lái)比較麻煩。


            3. DB2表及sp管理


            ◆3.1 看存儲(chǔ)過(guò)程文本


            select text from syscat.procedures where procname='PROC1';

             

            ◆3.2 看表結(jié)構(gòu)


            describe table syscat.procedures describe select * from syscat.procedures

             

            ◆3.3 查看各表對(duì)sp的影響(被哪些sp使用)


            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'))

             

            ◆3.4 查看sp使用了哪些表


            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'))

             

            ◆3.5 查看function被哪些sp使用


            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')))

             

            使用function時(shí)要注意,如果想drop 掉該function必須要先將調(diào)用該function的其它存儲(chǔ)過(guò)程全部drop掉。

            必須先創(chuàng)建function,調(diào)用該function的sp才可以創(chuàng)建成功。

             


            ◆3.6 修改表結(jié)構(gòu)


            一次給一個(gè)表增加多個(gè)字段


            db2 "alter table tb_test add column t1 char(1) add column t2 char(2) add column t3 int"


            4.DB2系統(tǒng)管理


            ◆4.1 DB2安裝


            在Windows 98 下安裝db2 7.1 或其他版本,如果有Jdbc錯(cuò)誤或者是Windwos 98不能啟動(dòng),則將autoexec.bat 中的內(nèi)容用如下內(nèi)容替換:


            C:\PROGRA~1\TRENDP~1\PCSCAN.EXE C:\ C:\WINDOWS\COMMAND\ /NS /WIN95 rem C:\WINDOWS\COMMAND.COM /E:32768 REM [Header] REM [CD-ROM Drive] REM [Miscellaneous] REM [Display] set PATH=%PATH%;C:\MSSQL\BINN;C:\PROGRA~1\SQLLIB\BIN; C:\PROGRA~1\SQLLIB\FUNCTION;C:\PROGRA~1\SQLLIB\SAMPLES\REPL; C:\PROGRA~1\SQLLIB\HELP IF EXIST C:\PROGRA~1\IBM\IMNNQ\IMQENV.BAT CALL C:\PROGRA~1\IBM\IMNNQ\IMQENV.BAT IF EXIST C:\PROGRA~1\IBM\IMNNQ\IMNENV.BAT CALL C:\PROGRA~1\IBM\IMNNQ\IMNENV.BAT set DB2INSTANCE=DB2 set CLASSPATH=.;C:\PROGRA~1\SQLLIB\java\db2java.zip; C:\PROGRA~1\SQLLIB\java\runtime.zip;C:\PROGRA~1\SQLLIB\java\sqlj.zip; C:\PROGRA~1\SQLLIB\bin set MDIS_PROFILE=C:\PROGRA~1\SQLLIB\METADATA\PROFILES set LC_ALL=ZH_CN set INCLUDE=C:\PROGRA~1\SQLLIB\INCLUDE;C:\PROGRA~1\SQLLIB\LIB; C:\PROGRA~1\SQLLIB\TEMPLATES\INCLUDE set LIB=C:\PROGRA~1\SQLLIB\LIB set DB2PATH=C:\PROGRA~1\SQLLIB set DB2TEMPDIR=C:\PROGRA~1\SQLLIB set VWS_TEMPLATES=C:\PROGRA~1\SQLLIB\TEMPLATES set VWS_LOGGING=C:\PROGRA~1\SQLLIB\LOGGING set VWSPATH=C:\PROGRA~1\SQLLIB set VWS_FOLDER=IBM DB2 set ICM_FOLDER=信息目錄管理器

             

            ◆4.2 創(chuàng)建Database


            create database head using codeset IBM-eucCN territory CN;

             

            這樣可以支持中文。


            ◆4.3 手工做數(shù)據(jù)庫(kù)遠(yuǎn)程(別名)配置


            db2 catalog tcpip node node1 remote 172.28.200.200 server 50000 db2 catalog db head as test1 at node node1

             

            然后既可使用:


            db2 connect to test1 user … using …

             

            連上head庫(kù)了。


            ◆4.4 停止啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例


            db2start db2stop (force)

             

            ◆4.5 連接數(shù)據(jù)庫(kù)及看當(dāng)前連接數(shù)據(jù)庫(kù)


            連接數(shù)據(jù)庫(kù)

            db2 connect to head user db2inst1 using db2inst1


            當(dāng)前連接數(shù)據(jù)庫(kù)

            db2 connect


            ◆4.6 停止啟動(dòng)數(shù)據(jù)庫(kù)head


            db2 activate db head

            db2 deactivate db head


            要注意的是,如果有連接,使用deactivate db 不起作用。

            如果是用activate db啟動(dòng)的數(shù)據(jù)庫(kù),一定要用deactivate db才會(huì)停止該數(shù)據(jù)庫(kù)。(當(dāng)然如果是db2stop也會(huì)停止)。

            使用activate db,這樣可以減少第一次連接時(shí)的等待時(shí)間。

            Database如果不是使用activate db啟動(dòng)而是通過(guò)連接數(shù)據(jù)庫(kù)而啟動(dòng)的話,當(dāng)所有的連接都退出后,db也就自動(dòng)停止。


            ◆4.7 查看及停止數(shù)據(jù)庫(kù)當(dāng)前的應(yīng)用程序


            查看應(yīng)用程序:

            db2 list applications show detail


            授權(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/線程


            其中:

            1、應(yīng)用程序標(biāo)識(shí)的第一部分是應(yīng)用程序的IP地址,不過(guò)是已16進(jìn)制表示的。

            2、pid/線程即是在unix下看到的線程號(hào)。


            停止應(yīng)用程序:

            db2 "force application(236)"

            db2 “force application all”


            其中:該236是查看中的應(yīng)用程序句柄。


            ◆4.8 查看本instance下有哪些database


            db2 LIST DATABASE DIRECTORY [ on /home/db2inst1 ]

             

            ◆4.9 查看及更改數(shù)據(jù)庫(kù)head的配置


            請(qǐng)注意,在大多數(shù)情況下,更改了數(shù)據(jù)的配置后,只有在所有的連接全部斷掉后才會(huì)生效。


            查看數(shù)據(jù)庫(kù)head的配制


            db2 get db cfg for head


            更改數(shù)據(jù)庫(kù)head的某個(gè)設(shè)置的值


            ◆4.9.1 改排序堆的大小


            db2 update db cfg for head using SORTHEAP 2048

            將排序堆的大小改為2048個(gè)頁(yè)面,查詢(xún)比較多的應(yīng)用最好將該值設(shè)置比較大一些。


            ◆4.9.2 改事物日志的大小


            db2 update db cfg for head using logfilsiz 40000

            該項(xiàng)內(nèi)容的大小要和數(shù)據(jù)庫(kù)的事物處理相適應(yīng),如果事物比較大,應(yīng)該要將該值改大一點(diǎn)。否則很容易處理日志文件滿的錯(cuò)誤。


            ◆4.9.3 出現(xiàn)程序堆內(nèi)存不足時(shí)修改程序堆內(nèi)存大小


            db2 update db cfg for head using applheapsz 40000

            該值不能太小,否則會(huì)沒(méi)有足夠的內(nèi)存來(lái)運(yùn)行應(yīng)用程序。


            ◆4.10 查看及更改數(shù)據(jù)庫(kù)實(shí)例的配置


            查看數(shù)據(jù)庫(kù)實(shí)例配置

            db2 get dbm cfg

            更改數(shù)據(jù)庫(kù)實(shí)例配制


            ◆4.10.1 打開(kāi)對(duì)鎖定情況的監(jiān)控


            db2 update dbm cfg using dft_mon_lock on

             

            ◆4.10.2 更改診斷錯(cuò)誤捕捉級(jí)別


            db2 update dbm cfg using diaglevel 3

            0 為不記錄信息

            1 為僅記錄錯(cuò)誤

            2 記錄服務(wù)和非服務(wù)錯(cuò)誤

            缺省是3,記錄db2的錯(cuò)誤和警告

            4 是記錄全部信息,包括成功執(zhí)行的信息

            一般情況下,請(qǐng)不要用4,會(huì)造成db2的運(yùn)行速度非常慢。

             


            ◆4.11 db2環(huán)境變量


            db2 重裝后用如下方式設(shè)置db2的環(huán)境變量,以保證sp可編譯將set_cpl 放到AIX上, chmod +x set_cpl, 再運(yùn)行之。


            set_cpl的內(nèi)容:


            db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlc_r -g \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY \ -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2" db2set DB2_SQLROUTINE_KEEP_FILES=1

             

            ◆4.12 db2命令環(huán)境設(shè)置


            db2=>list command options db2=>update command options using C off--或on,只是臨時(shí)改變 db2=>db2set db2options=+c --或-c,永久改變

             

            ◆4.13 改變隔離級(jí)別


            DB2SET DB2_SQLROUTINE_PREPOPTS=CS|RR|RS|UR

             

            交互環(huán)境更改session的隔離級(jí)別,db2 change isolation to UR,請(qǐng)注意只有沒(méi)有連接數(shù)據(jù)庫(kù)時(shí)可以這樣來(lái)改變隔離級(jí)別。


            ◆4.14 管理db\instance的參數(shù)


            get db cfg for head(db) get dbm cfg(instance)

             

            ◆4.15 升級(jí)后消除版本問(wèn)題


            db2 bind @db2ubind.lst db2 bind @db2cli.lst

             

            ◆4.16 查看數(shù)據(jù)庫(kù)表的死鎖


            再用命令中心查詢(xún)數(shù)據(jù)時(shí)要注意,如果用了交互式查詢(xún)數(shù)據(jù),命令中心將會(huì)給所查的記錄加了s鎖.這時(shí)如果要update記錄,由于update要使用x鎖,排它鎖,將會(huì)處于鎖等待。


            首先,將監(jiān)視開(kāi)關(guān)打開(kāi),


            db2 update dbm cfg using dft_mon_lock on

             

            快照


            db2 get snapshot for Locks on cleardb >snap.log tables bufferpools tablespaces database

             

            然后再看snap.log中的內(nèi)容即可。


            對(duì)Lock可根據(jù)Application handle(應(yīng)用程序句柄)看每個(gè)應(yīng)用程序的鎖的情況。


            監(jiān)視完畢后,不要忘了將監(jiān)視器關(guān)閉。


            db2 update dbm cfg using dft_mon_lock off

            文章來(lái)源:動(dòng)態(tài)網(wǎng)站制作(www.knowsky.com) 出處:http://www.knowsky.com/396856.html

            亚洲AV日韩AV天堂久久| 久久午夜福利电影| 精品免费久久久久久久| 久久青草国产精品一区| 久久露脸国产精品| 亚洲中文字幕久久精品无码APP | 久久久91人妻无码精品蜜桃HD| 久久噜噜久久久精品66| 精品熟女少妇av免费久久| 国产成人精品久久亚洲高清不卡 | 日韩欧美亚洲国产精品字幕久久久| 久久无码高潮喷水| 久久最近最新中文字幕大全 | 精品久久久久久久久久中文字幕| 性欧美大战久久久久久久| 99久久成人国产精品免费| 免费精品国产日韩热久久| 91精品国产综合久久香蕉 | 国产精品18久久久久久vr| 久久中文字幕人妻熟av女| 久久久青草久久久青草| 亚洲级αV无码毛片久久精品| 人人狠狠综合久久亚洲婷婷| 久久婷婷人人澡人人爽人人爱| 日韩精品国产自在久久现线拍| 久久婷婷五月综合97色一本一本 | 国产成人久久激情91| 亚洲午夜无码久久久久| 久久综合偷偷噜噜噜色| 亚洲精品无码久久久久AV麻豆| 伊人色综合久久| 久久免费美女视频| www亚洲欲色成人久久精品| 久久精品国产一区二区三区日韩| 亚洲精品乱码久久久久久按摩 | 国产激情久久久久影院小草| 国产国产成人精品久久| 91久久精品91久久性色| a高清免费毛片久久| 18岁日韩内射颜射午夜久久成人| 久久久九九有精品国产|