版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
DB2基礎(chǔ)DB2是IBM一種分布式數(shù)據(jù)庫解決方案。說簡單點:DB2就是IBM開發(fā)的一種大型關(guān)系型數(shù)據(jù)庫平臺.它支持多用戶或應用程序在同一條SQL語句中查詢不同database甚至不同DBMS中的數(shù)據(jù)。目前,DB2有如下一些版本:(比如DB2forUnix,DB2forWindows,DB2forAS/400,DB2forOS/390等)DB2是IBM公司開發(fā)的關(guān)系數(shù)據(jù)庫管理系統(tǒng),它有多種不同的版本,如:DB2工作組版(DB2WorkgroupEdition)、DB2企業(yè)版(DB2EnterpriseEdition)>DB2個人版(DB2PersonalEdition)和DB2企業(yè)擴展版(DB2Enterprise-ExendedEdition)等,這些產(chǎn)品基本的數(shù)據(jù)管理功能是一樣的,區(qū)別在于支持遠程客戶能力和分布式處理能力。個人版適用于單機使用,即服務器只能由本地應用程序訪問。工作組版和企業(yè)版提供了本地和遠程客戶訪問DB2的功能(當然遠程客戶要安裝相應客戶應用程序開發(fā)部件),企業(yè)版包括工作組版中的所有部件外再增加對主機連接的支持。企業(yè)擴展版允許將一個大的數(shù)據(jù)庫分布到同一類型的多個不同計算機上,這種分布式功能尤其適用于大型數(shù)據(jù)庫的處理。DB2可運行在OS/2、WindowsNT、UNIX操作系統(tǒng)上,通常將運行在這些平臺上的DB2產(chǎn)品統(tǒng)稱為DB2通用數(shù)據(jù)庫,這主要是強調(diào)這些產(chǎn)品運行環(huán)境類似,并共享相同的源代碼°DB2通用數(shù)據(jù)庫主要組件包括數(shù)據(jù)庫引擎(DalabaseEngine)應用程序接口和一組工具。數(shù)據(jù)庫引擎提供了關(guān)系數(shù)據(jù)庫管理系統(tǒng)的基本功能,如管理數(shù)據(jù)、控制數(shù)據(jù)的訪問(包括并發(fā)控制)、保證數(shù)據(jù)完整性及數(shù)據(jù)安全。所有數(shù)據(jù)訪問都通過SQL接口進行。db2起源于systemr和systemr*。他支持從pc到unix,從中小型機到大型機;從ibm到非ibm(hp及sununix系統(tǒng)等)各種操作平臺。他既可以在主機上以主/從方式獨立運行,也可以在客戶/服務器環(huán)境中運行。其中服務平臺可以是os/400,aix,os/2,hp-unix,sun-solaris等操作系統(tǒng),客戶機平臺可以是os/2或windows,dos,aix,hp-ux,sunsolaris等操作系統(tǒng)。一、 db2核心數(shù)據(jù)庫的特色db2數(shù)據(jù)庫核心又稱作db2公共服務器,采用多進程多線索體系結(jié)構(gòu),可以運行于多種操作系統(tǒng)之上,并分別根據(jù)相應平臺環(huán)境作了調(diào)整和優(yōu)化,以便能夠達到較好的性能。(1) 支持面向?qū)ο蟮木幊蘢b2支持復雜的數(shù)據(jù)結(jié)構(gòu),如無結(jié)構(gòu)文本對象,可以對無結(jié)構(gòu)文本對象進行布爾匹配、最接近匹配和任意匹配等搜索??梢越⒂脩魯?shù)據(jù)類型和用戶自定義函數(shù)。(2) 支持多媒體應用程序db2支持大二分對象(blob),允許在數(shù)據(jù)庫中存取二進制大對象和文本大對象。其中,二進制大對象可以用來存儲多媒體對象。(3) 備份和恢復能力(4) 支持存儲過程和觸發(fā)器,用戶可以在建表時顯示的定義復雜的完整性規(guī)則(5) 支持的硅sql查詢(6) 支持異構(gòu)分布式數(shù)據(jù)庫訪問(7) 支持數(shù)據(jù)復制二、 開發(fā)工具ibm提供了許多開發(fā)工具,主要有visualizerquery,visualage,visualgen。visualizer是客戶/服務器環(huán)境中的集成工具軟件,主要包括visualizerquery可視化查詢工具,visualizerultimediaquery可視化多媒體查詢工具,visualizerchart可視化圖標工具,visualizerprocedure可視化過程工具,visualizerstatistics可視化統(tǒng)計工具,visualizerplans可視化規(guī)劃工具,visualizerdevelopment可視化開發(fā)工具。visualage是一個功能很強的可視化的面向?qū)ο蟮膽瞄_發(fā)工具,可翼大幅度的提高軟件開發(fā)效率。其主要特征有:(1) 可視化程序設計工具。(2) 部件庫。包括支持圖形用戶接口的預制不見,以及包含數(shù)據(jù)庫查詢、事務和本地、遠程函數(shù)的通用部件。(3) 關(guān)系數(shù)據(jù)庫支持。(4) 群體程序設計。(5) 支持增強的動態(tài)連接庫。支持多媒體。支持數(shù)據(jù)共享。visualgen是ibm所提供的高效開發(fā)方案中的重要組成部分。它集成了第四代語言、客戶服務器與面向?qū)ο蠹夹g(shù),給用戶提供了一個完整、高效的開發(fā)環(huán)境。三、DB2數(shù)據(jù)庫的安裝這是在IBMRS6000操作系統(tǒng)為AIX安裝的,HP9000上雷同注冊為具有超級用戶權(quán)限的用戶(root)將標有“。82通用數(shù)據(jù)庫企業(yè)版”的軟件光盤插入驅(qū)動器輸入如下命令,以創(chuàng)建一個目錄來安裝該CD-ROM:#mkdir-p/cdrom其中cdrom表示CD-ROM安裝目錄。輸入如下命令,來分配CD-ROM文件系統(tǒng):#smittystorage選擇文件系統(tǒng)選擇添加/更改/顯示/刪除文件系統(tǒng)選擇CDROM文件系統(tǒng)選擇添加CDROM文件系統(tǒng)在彈出窗口中,輸入如下項作為安裝點: /cdrom通過輸入以下命令來安裝CD-ROM文件系統(tǒng):smitmountf在文件系統(tǒng)名稱字段中輸入值。例如,該名稱可能是/dev/cd0。在安裝目錄字段中輸入值。例如,此值可能是/cdrom。將安裝為只讀系統(tǒng)設置為Yes。單擊確定。cd/cdrom輸入./db2setup命令以啟動DB2安裝程序。安裝DB2V6窗口打開。按Tab鍵更改突出顯示的選項,按Enter鍵選擇或取消選擇選項。在服務器上安裝,一般選擇安裝以下三個產(chǎn)品:注意:要顯示想要安裝的DB2產(chǎn)品的部件,選擇定制。要在任何時候返回至先前窗口,選擇取消。?DB2AdministrationClient選擇定制安裝這個產(chǎn)品,?DB2UDBenterpriseedition選擇定制安裝這個產(chǎn)品,?DB2SoftwareDeveloperKit如果同時做開發(fā),需要定制安裝此產(chǎn)品。在“DB2產(chǎn)品信息”和“DB2產(chǎn)品庫”只選擇中國語言ZH_CN支持。在16步確認后,將開始安裝數(shù)據(jù)庫程序。在安裝過程中,還需確認以下問題:是否建立DB2管理帳戶,一般選擇建立:按缺省建立db2管理用戶db2as(使用缺省的UID,GroupId,安裝home路徑),在語言支持上,只選擇中國語言ZH_CN支持。是否建立DB2的實例,一般選擇建立:?按缺省建立db2管理用戶db2inst1:db2iadm1(使用缺省的UID,GroupId,安裝home路徑),在語言支持上,只選擇中國語言ZH_CN支持。?按缺省建立db2用戶db2fenc1:db2fenc1(使用缺省的UID,GroupId,安裝home路徑),在語言支持上,只選擇中國語言ZH_CN支持。?是否建立sample數(shù)據(jù)庫(為了檢查數(shù)據(jù)庫的安裝是否正確,一般選擇建立sample數(shù)據(jù)庫)?是否選擇DB2的實例進程在操作系統(tǒng)啟動時,自動執(zhí)行初始化如果在獨立服務器上安裝使用,可選擇autostart,但在aix+hacmp+db2的雙機共享環(huán)境中,不要選擇autostart,DB2實例進程的啟動,由hacmp來控制。安裝結(jié)果:數(shù)據(jù)庫程序安裝完成后,DB2的軟件程序安裝在/usr/lpp目錄中,DB2DIR=/usr/lpp/DB2_06_01注意:如果安裝過程中沒有指定建立實例和管理帳戶,在安裝完成后可以使用命令創(chuàng)建實例(db2icrt)0或者要創(chuàng)建或添加新的實例、“管理服務器”或其他DB2產(chǎn)品和部件,輸入如下命令:/usr/lpp/DB2_06_01/install/DB2setup19.驗證安裝在安裝時若沒有選擇建立sample數(shù)據(jù)庫,在安裝完成后可以通過命令(db2sampl)創(chuàng)建SAMPLE數(shù)據(jù)庫,并通過使用命令行處理器與該數(shù)據(jù)庫相連來驗證安裝:作為具有系統(tǒng)管理(SYSADM)權(quán)限的用戶向系統(tǒng)注冊。如:db2inst1輸入DB2sampl命令以便創(chuàng)建SAMPLE數(shù)據(jù)庫。創(chuàng)建SAMPLE數(shù)據(jù)庫時,用數(shù)據(jù)庫別名SAMPLE將它自動編目。輸入DB2start命令以啟動數(shù)據(jù)庫管理程序。輸入下列命令來與SAMPLE數(shù)據(jù)庫相連,檢索在部門20中工作的所有雇員的列表,并重設數(shù)據(jù)庫連接:DB2connecttosampleDB2"select*fromstaffwheredept=20"DB2connectreset注意:在驗證安裝后,可除去SAMPLE數(shù)據(jù)庫以釋放磁盤空間。輸入DB2dropdatabasesample命令來卸下SAMPLE數(shù)據(jù)庫。若尚未未安裝DB2工具,則您可以通過創(chuàng)建SAMPLE數(shù)據(jù)庫,并通過使用命令行處理器與該數(shù)據(jù)庫相連來驗證安裝,如下所示:步驟1.作為具有系統(tǒng)管理(SYSADM)權(quán)限的用戶向系統(tǒng)注冊。步驟2,輸入db2sampl命令以便創(chuàng)建SAMPLE數(shù)據(jù)庫。創(chuàng)建SAMPLE數(shù)據(jù)庫時,用數(shù)據(jù)庫別名SAMPLE將它自動編目。步驟3,輸入db2start命令以啟動數(shù)據(jù)庫管理程序。步驟4,輸入下列命令來與SAMPLE數(shù)據(jù)庫相連,檢索在部門20中工作的所有雇員的列表,并重設數(shù)據(jù)庫連接:db2connecttosampledb2"select*fromstaffwheredept=20"db2connectreset如以上命令均正確執(zhí)行,則證明DB2UDB數(shù)據(jù)庫服務器的安裝已經(jīng)成功完成.四、 DB2數(shù)據(jù)庫的備份和恢復最近,我恢復了一個數(shù)據(jù)庫,其中的辛苦不予言表,我想寫出自己用到的一些語句,和遇到相同問題的xdjm共勉。首先談db2數(shù)據(jù)庫的備份,我用的是backup命令。db2backupdatabase數(shù)據(jù)庫名(我的庫是jsdb)忘了說了,在backup之前需要停止你要備份的數(shù)據(jù)庫,我用了db2stopforce(之所以用force參數(shù)是因為這樣好停懶省事:)和db2start。這樣就保證可以成功backup了。備份完成后db2會告訴你一個時間戳,例如:20040831(之后好幾位)這樣就會在當前目錄下產(chǎn)生一個與你數(shù)據(jù)庫名相同的文件夾名例如:jsdb。這個文件夾目錄層次很重要,如果錯了會在恢復時提示找不到文件。備份完成以后就是恢復了,我用的是restore命令。db2restoredatabase數(shù)據(jù)庫名(jsdb)takenat時間戳(20040831)執(zhí)行這個語句要注意兩點:1,要把備份文件夾考到當前目錄下(我用了一個cd。:\命令設當前目錄為c盤,將jsdb文件夾考到c盤根目錄下);2,時間戳要和jsdb目錄中的一致。這樣,就完成了恢復數(shù)據(jù)庫了。五、 DB2編程序技巧1DB2編程1.1建存儲過程時Create后一定不要用TAB鍵createprocedure的create后只能用空格,而不可用tab健,否則編譯會通不過。切記,切記。1.2使用臨時表要注意,臨時表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建臨時表的。另外,DB2的臨時表和sybase及oracle的臨時表不太一樣,DB2的臨時表是在一個session內(nèi)有效的。所以,如果程序有多線程,最好不要用臨時表,很難控制。建臨時表時最好加上withreplace選項,這樣就可以不顯示的drop臨時表,建臨時表時如果不加該選項而該臨時表在該session內(nèi)已創(chuàng)建且沒有drop,這時會發(fā)生錯誤。1.3從數(shù)據(jù)表中取指定前幾條記錄select*fromtb_market_codefetchfirst1rowsonly但下面這種方式不允許selectmarket_codeintov_market_codefromtb_market_codefetchfirst1rowsonly;選第一條記錄的字段到一個變量以以下方式代替declarev_market_codechar(1);declarecursor1cursorforselectmarket_codefromtb_market_codefetchfirst1rowsonlyforupdate;opencursor1;fetchcursor1intov_market_code;closecursor1;1.4游標的使用注意commit和rollback使用游標時要特別注意如果沒有加withhold選項,在Commit和Rollback時,該游標將被關(guān)閉。Commit和Rollback有很多東西要注意。特別小心游標的兩種定義方式一種為declarecontinuehandlerfornotfoundbeginsetv_notfound=1;end;declarecursor1cursorwithholdforselectmarket_codefromtb_market_codeforupdate;opencursor1;setv_notfound=0;fetchcursor1intov_market_code;whilev_notfound=0Do--worksetv_notfound=0;fetchcursor1intov_market_code;endwhile;closecursor1;這種方式使用起來比較復雜,但也比較靈活。特別是可以使用withhold選項。如果循環(huán)內(nèi)有commit或rollback而要保持該cursor不被關(guān)閉,只能使用這種方式。另一種為pcursor1:forloopcs1ascousor1cursorasselectmarket_codeasmarket_codefromtb_market_codeforupdatedoDB2基礎(chǔ)知識endfor;這種方式的優(yōu)點是比較簡單,不用(也不允許)使用open,fetch,close。但不能使用withhold選項。如果在游標循環(huán)內(nèi)要使用commit,rollback則不能使用這種方式。如果沒有commit或rollback的要求,推薦使用這種方式(看來For這種方式有問題)。修改游標的當前記錄的方法updatetb_market_codesetmarket_code='0'wherecurrentofcursor!;不過要注意將cursor!定義為可修改的游標declarecursor!cursorforselectmarket_codefromtb_market_codeforupdate;forupdate不能和GROUPBY、DISTINCT>ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。1.5類似decode的轉(zhuǎn)碼操作oracle中有一個函數(shù)selectdecode(a1,'1','n1','2','n2','n3')aa1fromdb2沒有該函數(shù),但可以用變通的方法selectcasea1when'1'then'n1'when'2'then'n2'else'n3'endasaa1from1.6類似charindex查找字符在字串中的位置Locate(?y,,,dfdasfay,)查找’y’在’dfdasfay’中的位置。1.7類似datedif計算兩個日期的相差天數(shù)days(date(?2001-06-05'))-days(date(?2001-04-0T))days返回的是從0001-01-01開始計算的天數(shù)1.8寫UDF的例子C寫見sqllib\samples\cli\udfsrv.c1.9創(chuàng)建含identity值(即自動生成的ID)的表建這樣的表的寫法CREATETABLEtest(t1SMALLINTNOTNULLGENERATEDALWAYSASIDENTITY(STARTWITH500,INCREMENTBY1),t2CHAR(1));在一個表中只允許有一個identity的column.1.10預防字段空值的處理SELECTDEPTNO,DEPTNAME,COALESCE(MGRNO,'ABSENT'),ADMRDEPTFROMDEPARTMENTCOALESCE函數(shù)返回()中表達式列表中第一個不為空的表達式,可以帶多個表達式。和oracle的isnull類似,但isnull好象只能兩個表達式。1.11取得處理的記錄數(shù)declarev_countint;updatetb_testsett1='0'wheret2='2';--檢查修改的行數(shù),判斷指定的記錄是否存在getdiagnosticsv_count=ROW_COUNT;只對update,insert,delete起作用.不對selectinto有效1.12從存儲過程返回結(jié)果集(游標)的用法1、建一sp返回結(jié)果集CREATEPROCEDUREDB2INST1.Proc1()LANGUAGESQLresultsets2(返回兩個結(jié)果集)--SQL存儲過程P1:BEGINdeclarec1cursorwithreturntocallerforselectmarket_codefromtb_market_code;--指定該結(jié)果集用于返回給調(diào)用者declarec2cursorwithreturntocallerforselectmarket_codefromtb_market_code;openc1;openc2;ENDP12、建一SP調(diào)該sp且使用它的結(jié)果集CREATEPROCEDUREDB2INST1.Proc2(outout_market_codechar(1))LANGUAGESQL--SQL存儲過程P1:BEGINdeclareloc1,loc2result_set_locatorvarying;--建立一個結(jié)果集數(shù)組callproc1;--調(diào)用該SP返回結(jié)果集。associateresultsetlocator(loc1,loc2)withprocedureproc1;--將返回結(jié)果集和結(jié)果集數(shù)組關(guān)聯(lián)allocatecursor1cursorforresultsetloc1;allocatecursor2cursorforresultsetloc2;--將結(jié)果集數(shù)組分配給cursorfetchcursor1intoout_market_code;--直接從結(jié)果集中賦值closecursor1;ENDP13、 動態(tài)SQL寫法DECLARECURSORC1FORSTMT1;PREPARESTMT1FROM'ALLOCATEC2CURSORFORRESULTSET?';4、 注意:一、 如果一個sp調(diào)用好幾次,只能取到最近一次調(diào)用的結(jié)果集。二、 allocate的cursor不能再次open,但可以close,是closesp中的對應cursor。1.13類型轉(zhuǎn)換函數(shù)selectcast(currenttimeaschar(8))fromtb_market_code1.14存儲過程的互相調(diào)用目前,csp可以互相調(diào)用。Sqlsp可以互相調(diào)用,Sqlsp可以調(diào)用Csp,但Csp不可以調(diào)用Sqlsp(最新的說法是可以)C存儲過程參數(shù)注意createprocedurepr_clear_task_ctrl(ININ_BRANCH_CODEchar(4),ININ_TRADEDATEchar(8),ININ_TASK_IDchar(2),ININ_SUB_TASK_IDchar(4),OUTOUT_SUCCESS_FLAGINTEGER)DYNAMICRESULTSETS0LANGUAGECPARAMETERSTYLEGENERALWITHNULLS(如果不是這樣,sql的sp將不能調(diào)用該用c寫的存儲過程,產(chǎn)生保護性錯誤)NODBINFOFENCEDMODIFIESSQLDATAEXTERNALNAME'pr_clear_task_ctrl!pr_clear_task_ctrl'@存儲過程fence及unfencefence的存儲過程單獨啟用一個新的地址空間,而unfence的存儲過程和調(diào)用它的進程使用同一個地址空間。一般而言,fence的存儲過程比較安全。但有時一些特殊的要求,如要取調(diào)用者的pid,則fence的存儲過程會取不到,而只有unfence的能取到。SP錯誤處理用法如果在SP中調(diào)用其它的有返回值的,包括結(jié)果集、臨時表和輸出參數(shù)類型的SP,DB2會自動發(fā)出一個SQLWarningo而在我們原來的處理中對于SQLWarning都會插入到日志,這樣子最后會出現(xiàn)多條SQLCODE=0的警告信息。處理辦法:定義一個標志變量,比如DECLAREV_STATUSINTEGERDEFAULT0,在CALLSPNAME之后,SETV_STATUS=1,DECLARECONTINUEHANDLERFORSQLWARNINGBEGINIFV_STATUS<>1THEN--警告處理,插入日志SETV_STATUS=0;ENDIF;END;import用法db2importfromghl.outofDELmessageserr.txtinsertintodb2inst1.tb_dbf_match_ha注意要加schmavalues的使用如果有多個set語句給變量付值,最好使用values語句,改寫為一句。這樣可以提高效率。但要注意,values不能將null值付給一個變量。values(null)intoout_return_code;這個語句會報錯的。1.20給select語句指定隔離級別select*fromtb_head_stock_balancewithur1.21atomic及notatomic區(qū)別atomic是將該部分程序塊指定為一個整體,其中任何一個語句失敗,則整個程序塊都相當于沒做,包括包含在atomic塊內(nèi)的已經(jīng)執(zhí)行成功的語句也相當于沒做,有點類似于transaction0DB2編程性能注意2.1大數(shù)據(jù)的導表應該是export后再load性能更好,因為load不寫日志。比selectinto要好。SQL語句盡量寫復雜SQL盡量使用大的復雜的SQL語句,將多而簡單的語句組合成大的SQL語句對性能會有所改善。DB2的SQLEngieer對復雜語句的優(yōu)化能力比較強,基本上不用當心語句的性能問題。Oracle則相反,推薦將復雜的語句簡單化,SQLEngieer的優(yōu)化能力不是特別好。這是因為每一個SQL語句都會有resetSQLCODE和SQLSTATE等各種操作,會對數(shù)據(jù)庫性能有所消耗。一個總的思想就是盡量減少SQL語句的個數(shù)。SQLSP及CSP的選擇首先,C的sp的性能比sql的sp的要高。一般而言,SQL語句比較復雜,而邏輯比較簡單,sqlsp與csp的性能差異會比較小,這樣從工作量考慮,用SQL寫比較好。而如果邏輯比較復雜,SQL比較簡單,用c寫比較好。2.4查詢的優(yōu)化(HASH及RR_TO_RS)db2setDB2_HASH_JOIN=Y(HASH排序優(yōu)化)指定排序時使用HASH排序,這樣db2在表join時,先對各表做hash排序,再join,這樣可以大大提高性能。劇沈剛說做實驗,7個一千萬條記錄表的做join取10000條記錄,再沒有索引的情況下72秒。db2setDB2_RR_TO_RS=Y該設置后,不能定義RR隔離級別,如果定義RR,db2也會自動降為RS.這樣,db2不用管理Nextkey,可以少管理一些東西,這樣可以提高性能。2.5避免使用count(*)及exists的方法1、 首先要避免使用count(*)操作,因為count(*)基本上要對表做全部掃描一遍,如果使用很多會導致很慢。2、 exists比count(*)要快,但總的來說也會對表做掃描,它只是碰到第一條符合的記錄就停下來。如果做這兩中操作的目的是為selectinto服務的話,就可以省略掉這兩步。直接使用selectinto選擇記錄中的字段。如果是沒有記錄選擇到的話,db2會將sqlcode=100和sqlstate=’20000’如果是有多條記錄的話,db2會產(chǎn)生一個錯誤。程序可以創(chuàng)建continuehandlerforexceptioncontinuehandlerfornotfound來檢測。這是最快速的方法。3、如果是判斷是不是一條,可以使用游標來計算,用一個計數(shù)器,累加,達到預定值后就離開。這個速度也比count(*)要快,因為它只要掃描到預定值就不再掃描了,不用做全表的scan,不過它寫起來比較麻煩。DB2表及sp管理3.1看存儲過程文本selecttextfromcedureswhereprocname='PROC1';3.2看表結(jié)構(gòu)describetableceduresdescribeselect*fromcedures3.3查看各表對sp的影響(被哪些sp使用)selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebname='TB_BRANCH'))3.4查看sp使用了哪些表selectbnamefromsyscat.packagedepwherebtype='T'andpkgnamein(selectbnamefromsysibm.sysdependencieswherednamein(selectspecificnamefromcedureswhereprocname='PR_CLEAR_MATCH_DIVIDE_SHA'))3.5查看function被哪些sp使用selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebnamein(selectSPECIFICNAMEfromSYSCAT.functionswherefuncname='GET_CURRENT_DATE')))使用function時要注意,如果想drop掉該function必須要先將調(diào)用該function的其它存儲過程全部drop掉。必須先創(chuàng)建function,調(diào)用該function的sp才可以創(chuàng)建成功。3.6修改表結(jié)構(gòu)一次給一個表增加多個字段:db2"altertabletb_testaddcolumnt1char(1)addcolumnt2char(2)addcolumnt3int"4DB2系統(tǒng)管理DB2安裝在Windows98下安裝db27.1或其他版本,如果有Jdbc錯誤或者是Windwos98不能啟動,則將autoexec.bat中的內(nèi)容用如下內(nèi)容替換:C:\PROGRA~1\TRENDP~1\PCSCAN.EXEC:\C:\WINDOWS\COMMAND\/NS/WIN95remC:\WINDOWS\COMMAND.COM/E:32768REM[Header]REM[CD-ROMDrive]REM[Miscellaneous]REM[Display]setPATH=%PATH%;C:\MSSQL\BINN;C:\PROGRA~1\SQLLIB\BIN;C:\PROGRA~1\SQLLIB\FUNCTION;C:\PROGRA?1\SQLLIB\SAMPLES\REPL;C:\PROGRA?1\SQLLIB\HELPIFEXISTC:\PROGRA~1\IBM\IMNNQ\IMQENVBATCALLC:\PROGRA~1\IBM\IMNNQ\IMQENV.BJTIFEXISTC:\PROGRA~1\IBM\IMNNQ\IMNENVBATCALLC:\PROGRA~1\IBM\IMNNQ\IMNENV.BJTsetDB2INSTANCE=DB2setCLASSPATH=.;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\binsetMDIS_PROFILE=C:\PROGRA?1\SQLLIB\METADATA\PROFILESsetLC_ALL=ZH_CNsetINCLUDE=C:\PROGRA?1\SQLLIB\INCLUDE;C:\PROGRA?1\SQLLIB\LIB;C:\PROGRA?1\SQLLIB\TEMPLATES\INCLUDEsetLIB=C:\PROGRA?1\SQLLIB\LIBsetDB2PATH=C:\PROGRA?1\SQLLIBsetDB2TEMPDIR=C:\PROGRA?1\SQLLIBsetVWS_TEMPLATES=C:\PROGRA?1\SQLLIB\TEMPLATESsetVWS_LOGGING=C:\PROGRA?1\SQLLIB\LOGGINGsetVWSPATH=C:\PROGRA?1\SQLLIBsetVWS_FOLDER=IBMDB2setICM_FOLDER=>息目錄管理器win創(chuàng)建DatabasecreatedatabaseheadusingcodesetIBM-eucCNterritoryCN;這樣可以支持中文。4.3手工做數(shù)據(jù)庫遠程(別名)配置db2catalogtcpipnodenodelremote00server50000db2catalogdbheadastest1atnodenode1然后既可使用:db2connecttotest1user...using...連上head庫了4.4停止啟動數(shù)據(jù)庫實例db2start、db2stop(force)4.5連接數(shù)據(jù)庫及看當前連接數(shù)據(jù)庫連接數(shù)據(jù)庫:db2connecttoheaduserdb2inst1usingdb2inst1當前連接數(shù)據(jù)庫:db2connect4.6停止啟動數(shù)據(jù)庫headdb2activatedbheaddb2deactivatedbhead要注意的是,如果有連接,使用deactivatedb不起作用。如果是用activatedb啟動的數(shù)據(jù)庫,一定要用deactivatedb才會停止該數(shù)據(jù)庫。(當然如果是db2stop也會停止)。使用activatedb,這樣可以減少第一次連接時的等待時間。Database如果不是使用activatedb啟動而是通過連接數(shù)據(jù)庫而啟動的話,當所有的連接都退出后,db也就自動停止。4.7查看及停止數(shù)據(jù)庫當前的應用程序查看應用程序:db2listapplicationsshowdetail授權(quán)標識|應用程序名|應用程序句柄|應用程序標識|序號#|代理程序|協(xié)調(diào)程序|狀態(tài)|狀態(tài)更改時間|DB名|DB路徑| |節(jié)點號|pid/線程其中:1、 應用程序標識的第一部分是應用程序的IP地址,不過是已16進制表示的。2、 pid/線程即是在unix下看到的線程號。停止應用程序:db2"forceapplication(236)”db2“forceapplicationall”其中:該236是查看中的應用程序句柄。4.8查看本instance下有哪些databasedb2LISTDATABASEDIRECTORY[on/home/db2inst1]4.9查看及更改數(shù)據(jù)庫head的配置請注意,在大多數(shù)情況下,更改了數(shù)據(jù)的配置后,只有在所有的連接全部斷掉后才會生效。查看數(shù)據(jù)庫head的配制db2getdbcfgforhead更改數(shù)據(jù)庫head的某個設置的值4.9.1改排序堆的大小db2updatedbcfgforheadusingSORTHEAP2048將排序堆的大小改為2048個頁面,查詢比較多的應用最好將該值設置比較大一些。4.9.2改事物日志的大小db2updatedbcfgforheadusinglogfilsiz40000該項內(nèi)容的大小要和數(shù)據(jù)庫的事物處理相適應,如果事物比較大,應該要將該值改大一點。否則很容易處理日志文件滿的錯誤。4.9.3出現(xiàn)程序堆內(nèi)存不足時修改程序堆內(nèi)存大小db2updatedbcfgforheadusingapplheapsz40000該值不能太小,否則會沒有足夠的內(nèi)存來運行應用程序。4.10查看及更改數(shù)據(jù)庫實例的配置查看數(shù)據(jù)庫實例配置db2getdbmcfg更改數(shù)據(jù)庫實例配制4.10.1打開對鎖定情況的監(jiān)控。db2updatedbmcfgusingdft_mon_lockon4.10.2更改診斷錯誤捕捉級別db2updatedbmcfgusingdiaglevel30為不記錄信息1為僅記錄錯誤2記錄服務和非服務錯誤缺省是3,記錄db2的錯誤和警告4是記錄全部信息,包括成功執(zhí)行的信息一般情況下,請不要用4,會造成db2的運行速度非常慢。db2環(huán)境變量db2重裝后用如下方式設置db2的環(huán)境變量,以保證sp可編譯將set_cpl放到AIX上,chmod+xset_cpl,再運行之set_cpl的內(nèi)容db2setDB2_SQLROUTINE_COMPILE_COMMAND="xlc_r-g\-I$HOME/sqllib/includeSQLROUTINE_FILENAME.c\-bE:SQLROUTINE_FILENAME.exp-eSQLROUTINE_ENTRY\-oSQLROUTINE_FILENAME-L$HOME/sqllib/lib-lc-ldb2"db2setDB2_SQLROUTINE_KEEP_FILES=1db2命令環(huán)境設置db2=>listcommandoptionsdb2=>updatecommandoptionsusingCoff--或on,只是臨時改變db2=>db2setdb2options=+c--或-c,永久改變4.13改變隔離級別DB2SETDB2_SQLROUTINE_PREPOPTS=CS|RR|RS|UR交互環(huán)境更改session的隔離級別,db2changeisolationtoUR請注意只有沒有連接數(shù)據(jù)庫時可以這樣來改變隔離級別。4.14管理db\instance的參數(shù)getdbcfgforhead(db)getdbmcfg(instance)4.15升級后消除版本問題db2 bind@db2ubind.lstdb2 bind @db2cli.lst4.16查看數(shù)據(jù)庫表的死鎖再用命令中心查詢數(shù)據(jù)時要注意,如果用了交互式查詢數(shù)據(jù),命令中心將會給所查的記錄加了s鎖.這時如果要update記錄,由于update要使用x鎖,排它鎖,將會處于鎖等待.首先,將監(jiān)視開關(guān)打開db2updatedbmcfgusingdft_mon_lockon快照db2getsnapshotforLocksoncleardb>snap.logtablesbufferpoolstablespacesdatabase然后再看snap.log中的內(nèi)容即可。對Lock可根據(jù)Applicationhandle(應用程序句柄)看每個應用程序的鎖的情況。監(jiān)視完畢后,不要忘了將監(jiān)視器關(guān)閉db2updatedbmcfgusingdft_mon_lockoff六、DB2常用知識以下主要以DB27.X為基礎(chǔ)的.以下的字符為小寫.本文對DB2高手來說是不用看的.DB2產(chǎn)品的級別有那些?企業(yè)版的ENTERPRISEEDITION、工作組版WORKGROUPEDITION、企業(yè)擴展版ENTERPRISEEXTENDEDTION、個人版的PERSONALEDITION、衛(wèi)星版的SATELLITEEDITION、微型版的EVERYPLACE可以連接到DB2數(shù)據(jù)庫的產(chǎn)品有哪些?DB2客戶端、DB2CONNECT、DB2DATAPROPAGATOR、DB2NET.DATA、DB2DATAJOINER、DB2RELATIONALCONNECT.WEBSPHERE應用服務器等DB2支持的通訊協(xié)議有哪些?TCP/IP、NETBIOS、APPG、IPX/SPX、NAMEPIPE等DB2客戶端產(chǎn)品有哪些?DB2運行時間客戶端DB2RUNTIMECLIENTDB2管理客戶端DB2ADMINISTRATIONCLIENTDB2應用程序開發(fā)客戶端DB2APPLICATIONDEVELOPMENTCLIENTDB2瘦客戶端DB2THINCLIENT一個數(shù)據(jù)庫是否可以安裝在多個數(shù)據(jù)庫服務器上?可以從哪個版本后存儲過程可以用SQL語句來創(chuàng)建?7.1版后DB2提供哪些關(guān)系擴展器?文本擴展器TEXTEXTENDER圖象擴展器IMAGEEXTENDER音頻擴展器AUDIOEXTENDER視頻擴展器VIDEOEXTENDER空間數(shù)據(jù)擴展器SPATIALEXTENDERXML擴展器XMLEXTENDER網(wǎng)絡搜索擴展器NET.SEARCHEXTENDERWINDOWS和OS/2環(huán)境下的DB2安裝目錄結(jié)構(gòu)?用SETUP.EXE來安裝\SQLLIB安裝的根目錄,包括README文件\SQLLIB\ADSM包含ADSTAR分布式存儲管理器文件\SQLLIB\BIN包含DB2工具的可執(zhí)行文件\SQLLIB\BND包含DB2工具的綁定文件\SQLLIB\CC包含運行控制中心所需的文件\SQLLIB\CFG包含默認的系統(tǒng)配置文件\SQLLIB\CONV包含代碼頁轉(zhuǎn)換表文件\SQLLIB\DB2默認的實例目錄\SQLLIB\DB2DAS00缺省的DB2管理服務器目錄\SQLLIB\DOC包含DB2聯(lián)機手冊\SQLLIB\FUNCTION默認的用戶自定義函數(shù)目錄\SQLLIB\FUNCTION\UNFENCED默認的非隔離用戶自定義函授目錄\SQLLIB\HELP聯(lián)機幫助文件\SQLLIB\JAVADB2所需的JAVA類庫JAVA12包含JDK1.2的支持程序\SQLLIB\MISC包含HTML搜索服務器文件\SQLLIB\MSG\PRIME包含信息文件\SQLLIB\QP包含QUERYPATROLLER的客戶端文件\SQLLIB\SAMPLES包含樣例程序和樣例腳本\SQLLIB\SPMLOG包含DB2同步點管理器日志文件\SQLLIB\THNSETUP包含瘦客戶端安裝文件UNIX和LINUX環(huán)境下的DB2安裝目錄結(jié)構(gòu)?用DB2SETUP.EXE來安裝安裝的根目錄下還將創(chuàng)建以下目錄:README安裝的根目錄,包括README文件ADM包含系統(tǒng)管理工具文件ADSM包含ADSTAR分布式存儲管理器文件BIN包含DB2工具的二進制可執(zhí)行文件BND包含DB2工具的綁定文件CC包含運行控制中心所需的文件CFG包含默認的系統(tǒng)配置文件CONV包含代碼頁轉(zhuǎn)換表文件DOC包含DB2聯(lián)機手冊FUNCTION默認的用戶自定義函數(shù)目錄FUNCTION\UNFENCED默認的非隔離用。遠T搴諛柯?lt;BR> INSTALL包含安裝程序INSTANCE包含實例腳本JAVADB2所需的JAVA類庫LIBDB2庫文件MAP包含DB2CONNECT使用的映射文件MISC包含HTML搜索服務器文件SAMPLES包含樣例程序和樣例腳本MSG\$L包含DB2信息文件AIX下用哪個命令來安裝DB2?INSTALLP命令同一操作系統(tǒng)下可以安裝多個DB2數(shù)據(jù)庫?可以的如何停止實例?DB2STOP如何啟動實例?DB2START[page]如何修改注冊項的值?DB2SET可以修改如:設定當前實例的一個參數(shù)DB2SETPARAMETER=VALUE設定一個全局級的參數(shù)DB2SETPARAMETER=VALUE-G(小寫)查看能在配置文件注冊表中設置的所有變量的列表DB2SET-LR(小寫)如何在CLP執(zhí)行操作系統(tǒng)的命令?在命令前加"!"作為前綴DB2=>!DIRC:\在CLP中命令過長怎么辦?用”\"作為續(xù)行符號如何獲得DB2的命令的語法相關(guān)信息?DB2?顯示所有DB2命令DB2?COMMAND顯示命令信息DB2?SQLnnnn顯示這個SQLCODE的解釋信息DB2?DB2nnnn顯示這個DB2錯誤的解釋信息如何查看當前CLP的設置?DB2=>LISTCOMANDOPTIONS如何更新當前CLP會話的特定項設置?DB2UPDATECOMMANDOPTIONSUSINGOPTIONS...COMMANDWINDOWS可以通過哪個命令調(diào)用?DB2CMD命令管理服務器的默認名為?UNIX下為DB2AS、WINDOWS下為DB2DAS00常用管理DB2服務器實例的命令?DB2ADMINSTART啟動DB2管理服務器實例DB2ADMINSTOP停止DB2管理服器實例DASICRTUNIX下創(chuàng)建DB2管理服務器實例DASIDROPUNIX下刪除DB2管理服務器實例DB2ADMINCREATEWINDOWSOROS/2下創(chuàng)建DB2管理服務器實例DB2ADMINDROPWINDOWSOROS/2下刪除DB2管理服務器實例DB2GETADMINCFG顯示DB2管理服務器的配置參數(shù)DB2UPDATEADMINCFG修改DB2管理服務器的配置參數(shù)DB2RESETADMINCFG將DB2管理服務器的配置參數(shù)設為默認值DB2目錄分為哪幾種?系統(tǒng)數(shù)據(jù)庫目錄、本地數(shù)據(jù)庫目錄、節(jié)點目錄、DCS目錄、管理節(jié)點目錄如何查看系統(tǒng)數(shù)據(jù)庫目錄?LISTDBDIRECTORY如何查看數(shù)據(jù)庫服務器目錄?LISTNODEDIRECTORYDB2實例的服務器的默認端口是?50000、服務器名稱為DB2CDB2DB2UDB服務器端的認證類型有?SERVER、SERVER_ENCRYPT、CLIENT、DCE、DCE_SERVER_ENCRYPT、KERBEROS、KRB_SERVER_ENCRYPTDB2客戶端的認證類型有?SERVER、SERVER_ENCRYPT、DCS、DCS_ENCRYPT、CLIENT、DCEDB2中有哪幾種類型的權(quán)限?SYSADM系統(tǒng)管理權(quán)限、SYSCTRL系統(tǒng)控制權(quán)限、SYSMAINT系統(tǒng)維護權(quán)限、DBADM數(shù)據(jù)庫管理權(quán)限、LOAD對表進行LOAD操作的權(quán)限不能通過GRANT授權(quán)的權(quán)限有哪種?SYSAM、SYSCTRL、SYSMAINT要更該上述權(quán)限必須修改數(shù)據(jù)庫管理器配置參數(shù)表的類型有哪些?永久表(基表)、臨時表(說明表)、臨時表(派生表)51.安裝DB2默認的事例名稱是?在WINDOWS或OS/2中默認的是DB2在LINUX或UNIX環(huán)境下默認的是DB2INST152.安裝后的默認帳戶是?在WINDOWS或OS/2中默認的是DB2ADMIN在LINUX或UNIX環(huán)境下默認的是DB2AS53.事例的類型有哪些?CLIENT(客戶)、STANDALONE(獨立的)、SATELLITE(衛(wèi)星)、EEDB2、EEE一個數(shù)據(jù)庫至少包括哪些表空間?一個目錄表空間、一個或多個用戶表空間、一個或多個臨時表空間[page]根據(jù)數(shù)據(jù)與存儲空間之間移動的控制方式不同,分哪兩種表空間?系統(tǒng)管理的空間(SMS)、數(shù)據(jù)庫管理的空間(DMS)81.表的類型有哪些?基本表、結(jié)果表、概要表、類型表、子類型、子表、聲明的臨時表、系統(tǒng)臨時表DB2數(shù)據(jù)庫監(jiān)控的兩個組成部分?快照監(jiān)控(SNAPSHOTMONITOR)W返回特定時間點的數(shù)據(jù)庫活動的快照.事件監(jiān)控(EVENTMONITOR)記錄事件發(fā)生的數(shù)據(jù).系統(tǒng)監(jiān)控的數(shù)據(jù)元素類型?計數(shù)器(COUNTER)記錄活動發(fā)生的次數(shù).測量(GAUGE)測量條目的當前值.水線(WATERMARK)從監(jiān)控來元素達到的最大或最小數(shù)值.信息(INFORMATION)監(jiān)控活動的參照類型細節(jié).時間點(TIMESTAMP)活動發(fā)生的日期時間.時間(TIME)返回一個活動花費的時間.DB2的SQL語句的類別?DCL:數(shù)據(jù)控制語言,提供對數(shù)據(jù)庫對象的訪問權(quán)限.DDL:數(shù)據(jù)定義語言,創(chuàng)建,修改,刪除數(shù)據(jù)庫對象的.DML:數(shù)據(jù)操縱語言,用來插入,更新,刪除數(shù)據(jù)的.[page]DCL的權(quán)限有哪些?CONTROL權(quán)限:如果用戶創(chuàng)建一個對象,則改用戶能完全訪問該對象.GRANT語句將權(quán)限授予給用戶.REVOKE語句撤銷一個用戶的權(quán)限.DDL有哪些?CREATE、DECLARE、ALTER、DROP等、DML有哪些?INSERT、SELECT、UPDATE、DELETE等DB2有沒有布爾類型?沒有如何查詢DB2的內(nèi)置函數(shù)?自帶文檔ADMINISTION-->SQLREFERENCE-->FUNCTIONS內(nèi)自己寫的DB2常用基本命令1:查詢DB2錯誤號的詳細解釋windows平臺:db2_?_sql1009(錯誤號是1009)aix平臺:db2_"?"_sql1009(錯誤號是1009,因為在AIX上,問號是系統(tǒng)特殊字符,所以需要通過雙引號轉(zhuǎn)義)2:查詢在DB2CLP中可以試用的命令db2_?3:查詢某一個表空間所使用的數(shù)據(jù)容器分布第一步:查詢表空間的ID號db2_list_tablespaces第二步:查詢某一個表空間所使用的數(shù)據(jù)容器db2_list_tablespace_containers_for_12 ("12"是某一個表空間的ID號)DB2數(shù)據(jù)庫設計和最高性能原則數(shù)據(jù)壓縮DB2提供了壓縮表空間或分區(qū)內(nèi)數(shù)據(jù)的功能。通過指定 CREATETABLESPACE(創(chuàng)建表空間)語句中的COMPRESSYES(壓縮許可)選項,之后在表空間上同時執(zhí)行LOAD或REORG實用工具集,即可完成該功能。數(shù)據(jù)的壓縮是通過用更短的串來替換頻繁出現(xiàn)的字符串實現(xiàn)的。系統(tǒng)還創(chuàng)建了一個字典,包含了原始字節(jié)串和它們的替代串之間的映射信息。一定數(shù)量的CPU資源被用于在執(zhí)行數(shù)據(jù)存儲對其進行壓縮,之后,當外部存儲設備讀取時,數(shù)據(jù)又被解壓縮。然而,數(shù)據(jù)壓縮也能夠提供性能方面的好處,因為更多的數(shù)據(jù)存儲在更小的空間內(nèi)(在DASD上和緩沖池中);同未經(jīng)壓縮的數(shù)據(jù)相比,這樣可以產(chǎn)生更少的同時讀取、更小的I/O等。接下來是當試圖決定是否壓縮一個表空間或分區(qū)時,需要考慮的一些事情:行的長度:行越長(尤其是在接近頁的尺寸時)壓縮的有效性就越低°DB2的行不能夠跨頁,當一頁上有多于一行的情況時,你也許不能獲得足夠的壓縮。表的尺寸:對于較大的表,壓縮具有較好的效果。對于很小的表,壓縮字典的大小8KB到64KB)可能會抵消壓縮節(jié)省下的所有空間。數(shù)據(jù)中的模式:對于一個特定的表空間或分區(qū),數(shù)據(jù)中重復出現(xiàn)的模式的頻率,決定了壓縮的效果。含有大量重復字符串的數(shù)據(jù)能夠獲得顯著的壓縮效果。壓縮估計:DB2提供了一個單獨的實用工具集,DSN1COMP,它可以用來測定數(shù)據(jù)壓縮將有怎樣的效果。想獲得有關(guān)運行該使用工具的額外信息,請參考DB2實用工具集指南和參考手冊。處理成本:在壓縮和解壓縮DB2數(shù)據(jù)時,會消耗一些CPU資源。如果你用IBM的同步數(shù)據(jù)壓縮硬件特征,所消耗的CPU資源將比利用DB2軟件仿真程序低得多(當DB2啟動時,這決定了硬件壓縮特征是否可用)。更好的字典:當用LOAD使用工具集來建立壓縮字典時,DB2用戶用最初載入的n行(n取決于你能夠壓縮的數(shù)據(jù)量)來決定字典的內(nèi)容。REORG采用取樣技術(shù)來建立字典。它不僅使用最初載入的n行,還在實用工具執(zhí)行UNLOAD(未載入)階段的剩余時間里繼續(xù)對數(shù)據(jù)行采樣。通常情況下,我們推薦你在自己的特定環(huán)境下,壓縮那些DB2表空間和分區(qū),這將會使你的環(huán)境受益;因為在更小的空間內(nèi)存儲更多的數(shù)據(jù)的性能優(yōu)勢,幾乎總是在價值上超過壓縮和解壓縮數(shù)據(jù)所消耗的CPU資源。載入大表在處理大批量數(shù)據(jù)時,將數(shù)據(jù)初始載入表中可能會對系統(tǒng)性能產(chǎn)生挑戰(zhàn)。為了在載入過程中實現(xiàn)并行性,你可以手動創(chuàng)建多個LOAD作業(yè),每個分區(qū)建一個;或者作為另一個選擇,你可以在一個LOAD程序中載入多個分區(qū)。每個分區(qū)都延伸至I/O子系統(tǒng),這種方式可以更容易地實現(xiàn)最理想的并行性。為了使性能最優(yōu)化,在LOAD語句中指定SORTKEYS參數(shù)也很重要。這個參數(shù)指示DB2將索引方法傳遞給內(nèi)存中的分類程序,而不是將關(guān)鍵字寫入或者再次讀取DASD上的排序任務文件。SORTKEYS也能夠?qū)崿F(xiàn)載入和分類之間的交迭,因為分類是作為一個獨立的任務運行的。還有一些關(guān)于載入大表的額外的建議,如下:一次LOAD一個表。如果可能的話,為你預期的任務賦予較高的優(yōu)先級,來獲得最高的消耗時間。在系統(tǒng)綜合體上分配工作。將二級索引分解為小段,以便獲得并行性(見PIECESIZE內(nèi)的討論)。在數(shù)據(jù)的初始載入過程中,指定LOGNO(用于防止記錄日志,它耗費了相當多的資源),在成功載入數(shù)據(jù)之后運行一個圖像復制。自由空間考慮事項分配自由空間的主要目的,是為了將數(shù)據(jù)行保存在相同的物理序列中作為群集索引,這樣一來將減少需要重新組織數(shù)據(jù)的頻率。此外,較好的行聚簇將導致更快的讀取訪問和更快的行插入。但是,自由空間的過度分配又將導致DASD空間的浪費、每一個I/O傳輸?shù)臄?shù)據(jù)較少、緩沖池的利用效率較低,以及需要掃描更多的頁。表空間和索引中的自由空間分配,由CREATE或ALTERTABLESPACE和CREATE或ALTERINDEX語句中的PCTFREE和FREEPAGE選項決定。PCTFREE在載入或者重新組織數(shù)據(jù)時,為DB2指示表空間或索引中有多大的百分比是閑置的。在插入新的行和索引條目時,DB2將利用那些自由空間。如果沒有足夠的自由空間在正確的頁(即以正確的聚簇序列)上寫入行或者索引條目,那么DB2必須將多出來的數(shù)據(jù)放在另外的頁上作為代替。在越來越多的記錄放置在物理序列之外的情況下,系統(tǒng)性能將會受到嚴重影響。FREEPAGE在載入或者重新組織數(shù)據(jù)時,為DB2指示一個整頁成為自由空間的次數(shù)。例如,如果你將FREEPAGE確定為5,在每填滿5頁的數(shù)據(jù)之后,DB2將分配一整頁的自由空間。如果你的表中的行大于半頁,F(xiàn)REEPAGE將是很有用的,因為在這樣的情況下,你不能在這一頁中插入第二行。是否在你的表空間內(nèi)定義自由空間,分配的數(shù)量又是多少,這些都主要取決于表空間中表的插入特性(刪除活動性居于次要程度)。換句話說,向表中插入行有多大的頻率,并且這些行插入的位置是在哪里?根據(jù)上述標準,四種主要的類別如下:只讀表:如果在表上不會有任何修正,定義時就可以不分配自由空間。同樣,也就不需要運行REORG實用工具集。隨機插入:對于含有相當大數(shù)量已有行和相對較少插入行的動作的表,使用默認的PCTFREE(表為5,索引為10)是一個好的起始點。之后,用RUANSTATS來監(jiān)視數(shù)據(jù)組織破壞的程度,并且結(jié)合你要求的運行REORG的頻率,根據(jù)需要上調(diào)或下調(diào)PCTFREEo對于插入活動很頻繁的表,你可能需要使用比默認值較高的PCTFREE的值。對于初始為空或只含有極少數(shù)行的表(例如,在一個新數(shù)據(jù)庫部署的過程中),你也許需要確定一個非常高的PCTFREE值,并相當頻繁地運行REORG,直到表中的行數(shù)比較多了。在表的末端插入:如果表中行的長度不增加,那么就沒有必要分配自由空間,因為它們可以加在表的末端。而且既然它們是以物理聚簇序列的形式寫入的,REORG也不需要了。但是如果表含有可修改的VARCHAR類型的列,或是如果表是壓縮過的,那么行的長度有可能增加,這將使得一行被擠到另外一頁上去。通過在表空間上執(zhí)行RUNSTATS然后核查DB2目錄表SYSIBM.SYSTABLEPART的NEARINDREF和FARINDREF列,你就能夠確定這些。如果你的表變亂了,那么為表空間設定一個PCTFREE值,并且用RUNSTATS繼續(xù)監(jiān)視放錯位置的行的數(shù)目。根據(jù)你觀察到的數(shù)據(jù)和趨勢,相應地調(diào)整你的REORG的頻率和PCTFREE值。通過設定REORGTABLESPACE中的INDREFLIMIT和REPORTONLY選項,你就能夠在更新后的DB2表中監(jiān)視紊亂的數(shù)量和速度。插入一個熱點:這是表具有很頻繁的插入活動的情況,這種插入活動集中在一個位置(或多個位置)而不是正好處于表的末端。這可能是要應付的最困難的種類。試著增加PCTFREE的數(shù)值。如果插入保持在開頭的段,行也不是很長,幾行可以存儲在同一頁之內(nèi)。FREEPAGE是在這種情形下另外的一個考慮。有必要嚴密監(jiān)視表變亂有多么快,這樣就可以在性能顯著下降之前運行REORGo索引設計考慮事項索引是一個DB2對象(獨立的VSAM數(shù)據(jù)集),它是從相應表中的一個或更多列中摘錄出來的一系列有規(guī)則的條目。很多DB2專家主張為一個表空間建立恰當?shù)乃饕?,這也許是將訪問DB2數(shù)據(jù)應用程序的性能最優(yōu)化的惟一最有效的方法。幾年前,在I/T中DASD的成本和空間是一個更重要的考慮因素。隨著技術(shù)的發(fā)展,通過以特大硬盤為代價,加上更多索引(或增加現(xiàn)有索引的列)來減少I/O的折中方法,在這幾年里越來越具吸引力。索引主要的性能優(yōu)勢表現(xiàn)在:為表中被請求的數(shù)據(jù)行提供直接指針消除了排序,如果結(jié)果集的請求順序與索引相匹配的話避免了必須讀取數(shù)據(jù)行,如果被請求的列全部包含在索引條目中的話分區(qū)索引當在DB2UDBV7中創(chuàng)建分區(qū)表空間時,DB2依照CREATEINDEX語句中的PART子句將分區(qū)中的數(shù)據(jù)進行劃分。那個索引則成為所謂的分區(qū)索引,這種分區(qū)方法被稱為受控索引分區(qū)。為了對索引進行分區(qū),建議你選擇不易改變的關(guān)鍵列。對這些列的更改可能使得一個行從某一分區(qū)移動到另外一個分區(qū),從而導致性能下降。受控表分區(qū)是DB2V8的一個重要的特征?,F(xiàn)在,當創(chuàng)建分區(qū)表時,分區(qū)界限的確定由CREATETABLE語句代替了原來的CREATEINDEXo在受控索引分區(qū)中,分區(qū)表的、分區(qū)索引和聚簇的概念全都結(jié)合在一起。而對于受控表分區(qū),這三個概念是獨立的。這就增加了靈活性,允許你去考慮更有潛力的設計方法;并且也因此增加了改善。82數(shù)據(jù)庫及其應用程序性能的可能性。構(gòu)建索引的時機CREATEINDEX(創(chuàng)建索引)CREATEINDEX語句使用戶具有了這樣的能力:立即構(gòu)建索引,或者將構(gòu)建推遲到更加方便的時間。如果你立即構(gòu)建索引,將會對表空間進行掃描,這會占用相當長的時間。通過設定DEFER,你可以推遲索引的構(gòu)建。無論什么時候,只要可能,在最初載入一個表之前創(chuàng)建表上的所有索引,因為LOAD實用工具集構(gòu)建索引比CREATEINDEX過程更加有效。如果你需要在已存在(并且有很多數(shù)據(jù))的表上創(chuàng)建一個索引,那么可以使用DEFER語句。稍后,你就可以用REBUILDINDEX實用工具集,它和LOAD實用工具集一樣,是一種更加有效的填充索引的方法。PIECESIZE(片段尺寸)DB2UDBV5引進了一個新特征,它給了你一定的靈活性,從而可以將非分區(qū)索引NPI)分解為小段,并且控制組成索引空間的多個數(shù)據(jù)集的大小。分段的這種用法能夠使一個NPI的索引頁展開為多個數(shù)據(jù)集。片段的尺寸由CREATE或ALTERINDEX語句中的關(guān)鍵字PIECESIZE確定。PIECESIZE的值必然是兩個強制值中的一個,其變動范圍為最小256KB到最大64GB。常規(guī)表空間的默認值為2GB,大的表空間默認值是4GB。如果你的NPI有可能顯著增長,那么選擇相對較大的表空間。同樣,在確定首要和次要的空間分配數(shù)值CREATEINDEX語句的PRIQTY和SECQTY選項)時,記住PIECESIZE的值。利用這一選項,可以通過發(fā)揮并行性來改善NPI的掃描性能。另一個優(yōu)勢是可以減少讀取或更新過程中的I/O沖突。通過設定較小的PIECESIZE值,你可以創(chuàng)建更多的片段,因而對片段的位置有更好的控制。將片段置于獨立的I/O路徑,可以減少了訪問NPI所需的SQL操作的沖突。理想的索引通過檢查一個應用程序中的SQL語句,你可以建立一個假想的完美的索引。首先,索引所包括的所有列都是WHERE子句,這使得索引的審查可以用于將不合格的行拒于結(jié)果集之外。將這些列放在索引的開始。當在SQL語句上執(zhí)行EXPLAIN時,這會使得MATCHCOLS的價值最大化。其次,確保索引以適當?shù)捻樞蚝羞@些列(依照ORDERBY子句),從而可以避免進行排序。這可以在執(zhí)行EXPLAIN時,通過檢查PLAN_TABLE的所有不同的SORT*列來驗證。最后,如果可能的話,將所有的列包含在索引的SELECT中,這樣就不需要訪問表中的行了。索引條目可以提供所有的請求數(shù)據(jù)。這將在EXPLAIN中以INDEXONLY=Y的方式表現(xiàn)出來。在很多情況下,實現(xiàn)如此理想的索引的代價太大了,或者說是不切合實際的,甚至是不可能實現(xiàn)的,因為所涉及的列的數(shù)量太大了。組成一個索引的列的數(shù)目在體系結(jié)構(gòu)方面有限制,并且對于一個索引條目的總長也有限制(盡管這些限制實際上允許相當大的索引條目尺寸和靈活性)。此外,這也是出于索引維護成本的考慮。建立理想的索引可使查詢性能獲得極大提高,但是對于SQL寫入DB2數(shù)據(jù)庫(INSERT、UPDATE或DELETE)就有消極的影響。因此,你應該經(jīng)常選擇實現(xiàn)只包含WHERE和ORDERBY語句中涉及的列的索引。并行處理的考慮事項幾年來,通過實現(xiàn)了并行處理的各種方法,DB2在數(shù)據(jù)訪問方面的性能獲得了改進。為了改進數(shù)據(jù)密集型只讀查詢的性能,DB2V3引進了查詢I/O并行機制。在這種類型的并行性中,DB2充分利用了可用的I/O帶寬,并使分區(qū)表空間中成為可能。利用這種方法,DB2使得一個查詢中的多
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《客戶跟蹤技巧》課件
- 《chapter固定資產(chǎn)》課件
- 《肩關(guān)節(jié)鏡簡介》課件
- 單位管理制度合并選集【人事管理篇】
- 2024第八屆全國職工職業(yè)技能大賽(網(wǎng)約配送員)網(wǎng)上練兵考試題庫-中(多選題)
- 單位管理制度分享匯編人事管理篇
- 單位管理制度分享大全人力資源管理篇十篇
- 單位管理制度范例選集人力資源管理篇十篇
- 單位管理制度呈現(xiàn)合集人事管理十篇
- 《電子欺騙》課件
- Cinema 4D從入門到精通PPT完整版全套教學課件
- T-SHSPTA 002-2023 藥品上市許可持有人委托銷售管理規(guī)范
- 我國雙語教育發(fā)展現(xiàn)狀以及建議
- 放射治療技術(shù)常用放射治療設備課件
- 保研推免個人簡歷
- 《計算機組成原理》武漢大學2023級期末考試試題答案
- 廣東廣州白云區(qū)2021學年第二學期期末學生學業(yè)質(zhì)量診斷調(diào)研六年級語文(含答案)
- 公安院校公安專業(yè)招生體檢表
- 2023-2024學年四川省瀘州市小學數(shù)學四年級上冊期末評估測試題
- GB/T 9944-2015不銹鋼絲繩
- GB/T 5019.11-2009以云母為基的絕緣材料第11部分:塑型云母板
評論
0/150
提交評論