標籤: 暫無標籤

DB2是IBM一種分散式資料庫解決方案。說簡單點:DB2就是IBM開發的一種大型關係型資料庫平台.它支持多用戶或應用程序在同一條SQL 語句中查詢不同database甚至不同DBMS中的數據。目前,DB2有如下一些版本:(比如DB2 for Unix,DB2 for Windows,DB2 for AS/400,DB2 for OS/390等)

中科永聯高級技術培訓中心(www.itisedu.com)

      DB2是IBM一種分散式資料庫解決方案。說簡單點:DB2就是IBM開發的一種大型關係型資料庫平台.它支持多用戶或應用程序在同一條SQL 語句中查詢不同database甚至不同DBMS中的數據。目前,DB2有如下一些版本:(比如DB2 for Unix,DB2 for Windows,DB2 for AS/400,DB2 for OS/390等)

  DB2是IBM公司開發的關係資料庫管理系統,它有多種不同的版本,如:DB2工作組版(DB2Workgroup Edition)、DB2企業版(DB2 Enterprise Edition)、DB2個人版(DB2 Personal Edition)和DB2企業擴展版(DB2 Enterprise-Exended Edition)等,這些產品基本的數據管理功能是一樣的,區別在於支持遠程客戶能力和分散式處理能力。

  個人版適用於單機使用,即伺服器只能由本地應用程序訪問。工作組版和企業版提供了本地和遠程客戶訪問DB2的功能(當然遠程客戶要安裝相應客戶應用程序開發部件),企業版包括工作組版中的所有部件外再增加對主機連接的支持。企業擴展版允許將一個大的資料庫分佈到同一類型的多個不同計算機上,這種分散式功能尤其適用於大型資料庫的處理。

  DB2可運行在OS/2、Windows NT、UNIX操作系統上,通常將運行在這些平台上的DB2產品統稱為DB2通用資料庫,這主要是強調這些產品運行環境類似,並共享相同的源代碼。DB2通用資料庫主要組件包括資料庫引擎(Dalabase Engine )應用程序介面和一組工具。資料庫引擎提供了關係資料庫管理系統的基本功能,如管理數據、控制數據的訪問(包括併發控制)、保證數據完整性及數據安全。所有數據訪問都通過SQL介面進行。

db2起源於system r和system r*。他支持從pc到unix,從中小型機到大型機;從ibm到非ibm(hp及sun unix系統等)各種操作平台。他既可以在主機上以主/從方式獨立運行,也可以在客戶/伺服器環境中運行。其中服務
平台可以是os/400,aix,os/2,hp-unix,sun-solaris等操作系統,客戶機平台可以是os/2或windows, dos, aix, hp-ux, sun solaris等操作系統。

一、db2核心資料庫的特色

  db2資料庫核心又稱作db2公共伺服器,採用多進程多線索體系結構,可以運行於多種操作系統之上,並分別根據相應平台環境作了調整和優化,以便能夠達到較好的性能。

(1) 支持面向對象的編程

  db2支持複雜的數據結構,如無結構文本對象,可以對無結構文本對象進行布爾匹配、最接近匹配和任意匹配等搜索。可以建立用戶數據類型和用戶自定義函數。

(2) 支持多媒體應用程序

  db2支持大二分對象(blob),允許在資料庫中存取二進位大對象和文本大對象。其中,二進位大對象可以用來存儲多媒體對象。

(3) 備份和恢復能力

(4) 支持存儲過程和觸發器,用戶可以在建表時顯示的定義複雜的完整性規則

(5) 支持的硅sql查詢

(6) 支持異構分散式資料庫訪問

(7) 支持數據複製

二、開發工具

  ibm提供了許多開發工具,主要有visualizer query, visualage, visualgen。

  visualizer是客戶/伺服器環境中的集成工具軟體,主要包括visualizer query可視化查詢工具,visualizer ultimedia query可視化多媒體查詢工具,visualizer chart可視化圖標工具,visualizer procedure可視化過程工具,visualizer statistics可視化統計工具,visualizer plans可視化規劃工具, visualizer development可視化開發工具。

  visualage是一個功能很強的可視化的面向對象的應用開發工具,可翼大幅度的提高軟體開發效率。其主要特徵有:

(1) 可視化程序設計工具。

(2) 部件庫。包括支持圖形用戶介面的預製不見,以及包含資料庫查詢、事務和本地、遠程函數的通用部件。

(3) 關係資料庫支持。

(4) 群體程序設計。

(5) 支持增強的動態連接庫。

(6) 支持多媒體。

(7) 支持數據共享。

  visualgen是ibm所提供的高效開發方案中的重要組成部分。它集成了第四代語言、客戶/伺服器與面向對象技術,給用戶提供了一個完整、高效的開發環境。

三、DB2資料庫的安裝

這是在IBM RS6000 操作系統為AIX安裝的,HP9000上雷同 

1. 註冊為具有超級用戶許可權的用戶(root) 
2. 將 標有「DB2通用資料庫企業版」的軟體光碟插入驅動器 
3. 輸入如下命令,以創建一個目錄來安裝該 CD-ROM:  
# mkdir -p /cdrom 其中 cdrom 表示 CD-ROM 安裝目錄。 
輸入如下命令,來分配 CD-ROM 文件系統: 
# smitty storage 
4. 選擇文件系統 
5. 選擇添加/更改/顯示/刪除文件系統 
6. 選擇 CDROM 文件系統 
7. 選擇添加 CDROM 文件系統 
8. 在彈出窗口中,輸入如下項作為安裝點:  
/cdrom 
9. 通過輸入以下命令來安裝 CD-ROM 文件系統: smit mountf 
10. 在文件系統名稱欄位中輸入值。例如,該名稱可能是 /dev/cd0。  
11. 在安裝目錄欄位中輸入值。例如,此值可能是 /cdrom。 
12. 將安裝為只讀系統設置為 Yes。  
13. 單擊確定。 
14. cd /cdrom  
15. 輸入 ./db2setup 命令以啟動 DB2 安裝程序。 安裝 DB2 V6 窗口打開。 
16. 按 Tab 鍵更改突出顯示的選項,按 Enter 鍵選擇或取消選擇選項。  
(1) 在伺服器上安裝,一般選擇安裝以下三個產品: 
注意:要顯示想要安裝的 DB2 產品的部件,選擇定製。要在任何時候返回至先前窗口,選擇取消。 
 DB2 Administration Client 
選擇定製安裝這個產品, 
 DB2 udb enterprise edition  
選擇定製安裝這個產品,  
 DB2 Software Developer Kit  
如果同時做開發,需要定製安裝此產品。 
(2) 在「DB2產品信息」和「DB2產品庫」只選擇中國語言ZH_CN支持。 
17. 在16步確認后,將開始安裝資料庫程序。在安裝過程中,還需確認以下問題: 
(1) 是否建立DB2管理帳戶, 一般選擇建立: 
按預設建立db2管理用戶db2as(使用預設的UID,Group Id,安裝home路徑),在語言支持上, 
只選擇中國語言ZH_CN支持。 
(2) 是否建立DB2的實例, 一般選擇建立: 
 按預設建立db2管理用戶db2inst1:db2iadm1(使用預設的UID,Group Id,安裝home路徑), 
在語言支持上,只選擇中國語言ZH_CN支持。 
 按預設建立db2用戶db2fenc1:db2fenc1(使用預設的UID,Group Id,安裝home路徑), 
在語言支持上,只選擇中國語言ZH_CN支持。 
 是否建立sample資料庫(為了檢查資料庫的安裝是否正確,一般選擇建立sample資料庫) 
 是否選擇DB2的實例進程在操作系統啟動時,自動執行初始化 
如果在獨立伺服器上安裝使用,可選擇autostart,但在aix+HACMP+db2的雙機共享環境中,不要選擇 
autostart,DB2實例進程的啟動,由hacmp來控制。 

18. 安裝結果: 
資料庫程序安裝完成後,DB2的軟體程序安裝在/usr/lpp目錄中,  
DB2DIR = /usr/lpp/DB2_06_01 
注意:如果安裝過程中沒有指定建立實例和管理帳戶,在安裝完成後可以使用命令創建實例(db2icrt)。 
或者要創建或添加新的實例、「管理伺服器」或其他 DB2 產品和部件,輸入如下命令:  
/usr/lpp/DB2_06_01/install/DB2setup 
19. 驗證安裝 
在安裝時若沒有選擇建立sample資料庫,在安裝完成後可以通過命令(db2sampl)創建 SAMPLE 資料庫, 
並通過使用命令行處理器與該資料庫相連來驗證安裝: 
(1) 作為具有系統管理 (SYSADM) 許可權的用戶向系統註冊。如:db2inst1 
(2) 輸入 DB2sampl 命令以便創建 SAMPLE 資料庫。 
(3) 創建 SAMPLE 資料庫時,用資料庫別名 SAMPLE 將它自動編目。 
(4) 輸入 DB2start 命令命令來與 SAMPLE 資料庫相連,檢索在部門 20 中工作的所有僱員的列表,並重設資料庫連接: 
DB2 connect to sample 
DB2 "select * from staff where dept = 20" 
DB2 connect reset 
注意:在驗證安裝后,可除去 SAMPLE 資料庫以釋放磁碟空間。輸入 DB2 drop database sample 命令 
來卸下 SAMPLE 資料庫。 

  
若尚未未安裝 DB2 工具,則您可以通過創建 SAMPLE 資料庫, 並通過使用命令行處理器與該資料庫 
相連來驗證安裝,如下所示:  
步驟 1.  
作為具有系統管理 (SYSADM) 許可權的用戶向系統註冊。  

步驟 2.  
輸入 db2sampl 命令以便創建 SAMPLE 資料庫。  


創建 SAMPLE 資料庫時, 用資料庫別名 SAMPLE 將它自動編目。  

步驟 3.  
輸入 db2start 命令以啟動資料庫管理程序。  

步驟 4.  
輸入下列命令來與 SAMPLE 資料庫相連, 檢索在部門 20 中工作的所有僱員的列表,並重設資料庫連接:  

db2 connect to sample 
db2 "select * from staff where dept = 20" 
db2 connect reset 

如以上命令均正確執行, 則證明DB2 UDB 資料庫伺服器的安裝已經成功完成. 
   

四、DB2資料庫的備份和恢復
 
      最近,我恢復了一個資料庫.其中的辛苦不予言表,我想寫出自己用到的一些語句,和遇到相同問題的xdjm共勉。

      首先談db2資料庫的備份,我用的是backup命令。

      db2 backup database 資料庫名(我的庫是jsdb)
      忘了說了,在backup之前需要停止你要備份的資料庫,我用了db2stop force(之所以用force參數是因為這樣好停懶省事:)和db2start。這樣就保證可以成功backup了。
      備份完成後db2會告訴你一個時間戳,例如:20040831(之後好幾位)這樣就會在當前目錄下產生一個與你資料庫名相同的文件夾名例如:jsdb。這個文件夾目錄層次很重要,如果錯了會在恢復時提示找不到文件。
備份完成以後就是恢復了,我用的是restore命令。
      db2 restore database 資料庫名(jsdb)taken at 時間戳(20040831)
      執行這個語句要注意兩點:1,要把備份文件夾考到當前目錄下(我用了一個cd c:\命令設當前目錄為c盤,將jsdb文件夾考到c盤根目錄下);2,時間戳要和jsdb目錄中的一致。
這樣,就完成了恢復資料庫了。

五、DB2編程序技巧


1 DB2編程


1.1 建存儲過程時Create 后一定不要用TAB鍵
CREATE PROCEDURE
的create后只能用空格,而不可用tab健,否則編譯會通不過。
切記,切記。

1.2 使用臨時表

  要注意,臨時表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建臨時表的。
  另外,DB2的臨時表和sybase及oracle的臨時表不太一樣,DB2的臨時表是在一個session內有效的。所以,如果程序有多線程,最好不要用臨時表,很難控制。
   建臨時表時最好加上  with  replace選項,這樣就可以不顯示的drop 臨時表,建臨時表時如果不加該選項而該臨時表在該session內已創建且沒有drop,這時會發生錯誤。
1.3 從數據表中取指定前幾條記錄
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;     
    
選第一條記錄的欄位到一個變數以以下方式代替
    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 游標的使用
注意commit和rollback
使用游標時要特別注意如果沒有加with hold 選項,在Commit和Rollback時,該游標將被關閉。Commit 和Rollback有很多東西要注意。特別小心

游標的兩種定義方式
一種為
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;
這種方式使用起來比較複雜,但也比較靈活。特別lback 而要保持該cursor不被關閉,只能使用這種方式。


  另一種為
      pcursor1: for loopcs1 as  cousor1  cursor  as
select  market_code  as market_code
           from tb_market_code
           for update
        do
        end for;
       這種方式的優點是比較簡單,不用(也不允許)使用open,fetch,close。
  但不能使用with  hold 選項。如果在游標循環內要使用commit,rollback則不能使用這種方式。如果沒有commit或rollback的要求,推薦使用這種方式(看來For這種方式有問題)。

修改游標的當前記錄的方法
update tb_market_code set market_code='0' where current of cursor1;
不過要注意將cursor1定義為可修改的游標
  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 類似decode的轉碼操作
oracle中有一個函數  select decode(a1,'1','n1','2','n2','n3') aa1 from
db2沒有該函數,但可以用變通的方法
select case a1 
when '1' then 'n1' 
when '2' then 'n2' 
else 'n3'
    end as aa1 from

1.6 類似CHARINDEX查找字元在字串中的位置
Locate(『y』,』dfdasfay』)
查找』y』 在』dfdasfay』中的位置。

1.7 類似datedif計算兩個日期的相差天數
days(date(『2001-06-05』)) – days(date(『2001-04-01』))
days 返回的是從  0001-01-01 開始計算的天數
1.8 寫UDF的例子
C寫見sqllib\samples\cli\udfsrv.c

1.9 創建含identity值(即自動生成的ID)的表
建這樣的表的寫法
CREATE TABLE test
     (t1 SMALLINT NOT NULL
        GENERATED ALWAYS AS IDENTITY
        (START WITH 500, INCREMENT BY 1),
      t2 CHAR(1));
在一個表中只允許有一個identity的column.


1.10 預防欄位空值的處理
SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT
FROM DEPARTMENT
   COALESCE函數返回()中表達式列表中第一個不為空的表達式,可以帶多個表達式。
   和oracle的isnull類似,但isnull好象只能兩個表達式。 
     

1.11 取得處理的記錄數
declare v_count int;
update tb_test set t1=』0』
where t2=』2』;
--檢查修改的行數,判斷指定的記錄是否存在
get diagnostics v_ count=ROW_COUNT;     
只對update,insert,delete起作用.
不對select into 有效


1.12 從存儲過程返回結果集(游標)的用法
1、建一sp返回結果集
CREATE PROCEDURE DB2INST1.Proc1 (  )
    LANGUAGE SQL
    result sets 2(返回兩個結果集)
------------------------------------------------------------------------
-- SQL 存儲過程 
------------------------------------------------------------------------
P1: BEGIN
        declare c1 cursor  with return to caller for 
            select  market_code
            from    tb_market_code;
        --指定該結果集用於返回給調用者
        declare c2 cursor  with return to caller for 
            select  market_code
            from    tb_market_code;
         open c1;
         open c2;
END P1                                       


2、建一SP調該sp且使用它的結果集

CREATE PROCEDURE DB2INST1.Proc2 (
out out_market_code char(1))
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL 存儲過程 
------------------------------------------------------------------------
P1: BEGIN

 declare loc1,loc2 result_set_locator varying; 
--建立一個結果集數組
call proc1;
--調用該SP返回結果集。
associate result set locator(loc1,loc2) with procedure proc1;
--將返回結果集和結果集數組關聯
 allocate cursor1 cursor for result set loc1;
 allocate cursor2 cursor for result set loc2;
--將結果集數組分配給cursor
fetch  cursor1 into out_market_code;
--直接從結果集中賦值
close cursor1;         

END P1

3、動態SQL寫法
     DECLARE CURSOR C1 FOR STMT1; 
     PREPARE STMT1 FROM
        'ALLOCATE C2 CURSOR FOR RESULT SET ?';
4、注意:
一、 如果一個sp調用好幾次,只能取到最近一次調用的結果集。
二、 allocate的cursor不能再次open,但可以close,是close sp中的對應cursor。

1.13 類型轉換函數
select cast ( current time as char(8)) from tb_market_code

1.14 存儲過程的互相調用
目前,c sp可以互相調用。
Sql sp 可以互相調用,
Sql sp 可以調用C sp,
但C sp 不可以調用Sql sp(最新的說法是可以)

1.15 C存儲過程參數注意
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將不能調用該用c寫的存儲過程,產生保護性錯誤)
NO DBINFO
FENCED
MODIFIES SQL DATA
EXTERNAL NAME 'pr_clear_task_ctrl!pr_clear_task_ctrl'@


1.16 存儲過程fence及unfence
fence的存儲過程單獨啟用一個新的地址空間,而unfence的存儲過程和調用它的進程使用同一個地址空間。
一般而言,fence的存儲過程比較安全。
但有時一些特殊的要求,如要取調用者的pid,則fence的存儲過程會取不到,而只有unfence的能取到。

1.17 SP錯誤處理用法
如果在SP中調用其它的有返回值的,包括結果集、臨時表和輸出參數類型的SP,
DB2會自動發出一個SQLWarning。而在我們原來的處理中對於SQLWarning都
會插入到日誌,這樣子最後會出現多條SQLCODE=0的警告信息。
處理辦法:
定義一個標誌變數,比如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的使用
如果有多個 set  語句給變數付值,最好使用values語句,改寫為一句。這樣可以提高效率。
 
但要注意,values不能將null值付給一個變數。
values(null) into out_return_code;
這個語句會報錯的。


1.20 給select 語句指定隔離級別
select * from tb_head_stock_balance with ur
 
1.21 atomic及not atomic區別
atomic是將該部分程序塊指定為一個整體,其中任何一個語句失敗,則整個程序塊都相當於沒做,包括包含在atomic塊內的已經執行成功的語句也相當於沒做,有點類似於transaction。


2  DB2編程性能注意


2.1 大數據的導表
應該是export后再load性能更好,因為load不寫日誌。
比select into 要好。


2.2 SQL語句盡量寫複雜SQL
   盡量使用大的複雜的SQL語句,將多而簡單的語句組合成大的SQL語句對性能會有所改善。
   DB2的SQL Engieer對複雜語句的優化能力比較強,基本上不用當心語句的性能問題。
Oracle 則相反,推薦將複雜的語句簡單化,SQL Engieer的優化能力不是特別好。
這是因為每一個SQL語句都會有reset SQLCODE和SQLSTATE等各種操作,會對資料庫性能有所消耗。
一個總的思想就是盡量減少SQL語句的個數。
2.3 SQL  SP及C SP的選擇
首先,C的sp的性能比sql 的sp 的要高。
一般而言,SQL語句比較複雜,而邏輯比較簡單,sql sp 與 c sp 的性能差異會比較小,這樣從工作量考慮,用SQL寫比較好。
而如果邏輯比較複雜,SQL比較簡單,用c寫比較好。

2.4 查詢的優化(HASH及RR_TO_RS)
db2set  DB2_HASH_JOIN=Y (HASH排序優化)
   指定排序時使用HASH排序,這樣db2在表join時,先對各表做hash排序,再join,這樣可以大大提高性能。
   劇沈剛說做實驗,7個一千萬條記錄表的做join取10000條記錄,再沒有索引的情況下  72秒。

db2set  DB2_RR_TO_RS=Y       
 該設置后,不能定義RR隔離級別,如果定義RR,db2也會自動降為RS.
這樣,db2不用管理Next key,可以少管理一些東西,這樣可以提高性能。     


2.5 避免使用count(*) 及exists的方法
1、首先要避免使用count(*)操作,因為count(*)基本上要對錶做全部掃描一遍,如果使用很多會導致很慢。
2、exists比count(*)要快,但總的來說也會對錶做掃描,它只是碰到第一條符合的記錄就停下來。

如果做這兩中操作的目的是為
       select into 服務的話,就可以省略掉這兩步。
直接使用select into 選擇記錄中的欄位。

如果是沒有記錄選擇到的話,db2 會將  sqlcode=100 和 sqlstate=』20000』
如果是有多條記錄的話,db2會產生一個錯誤。

程序可以創建  continue handler for  exception 
              continue handler for  not found
來檢測。
這是最快速的方法。

3、如果是判斷是不是一條,可以使用游標來計算,用一個計數器,累加,達到預定值后就離開。這個速度也比count(*) 要快,因為它只要掃描到預定值就不再掃描了,不用做全表的scan,不過它寫起來比較麻煩。


3 DB2表及sp管理


3.1 看存儲過程文本
select text from syscat.procedures where procname='PROC1';
3.2 看錶結構
describe table syscat.procedures
describe select * from syscat.procedures

3.3 查看各表對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時要注意,如果想drop 掉該function必須要先將調用該function的其它存儲過程全部drop掉。
必須先創建function,調用該function的sp才可以創建成功。
3.6 修改表結構
一次給一個表增加多個欄位
db2 "alter table tb_test add column t1 char(1) add column t2 char(2) add column t3 int"


4 DB2系統管理


4.1 DB2安裝
  在Windows 98 下安裝db2 7.1 或其他版本,如果有Jdbc錯誤或者是Windwos 98不能啟動,則將autoexec.bat 中的內容用如下內容替換:


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=信息目錄管理器

win


4.2 創建Database
create database head using codeset IBM-eucCN territory CN;
這樣可以支持中文。


4.3 手工做資料庫遠程(別名)配置
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庫了

4.4 停止啟動資料庫實例
db2start
db2stop (force)


4.5 連接資料庫及看當前連接資料庫
連接資料庫
db2  connect to head user db2inst1  using db2inst1

當前連接資料庫
db2  connect
4.6 停止啟動資料庫head
db2  activate  db  head
db2  deactivate db  head
要注意的是,如果有連接,使用deactivate db 不起作用。
如果是用activate db啟動的資料庫,一定要用deactivate db才會停止該資料庫。(當然如果是db2stop也會停止)。
使用activate db,這樣可以減少第一次連接時的等待時間。
Database如果不是使用activate db啟動而是通過連接資料庫而啟動的話,當所有的連接都退出后,db也就自動停止。

4.7 查看及停止資料庫當前的應用程序
查看應用程序:
db2   list   applications  show  detail 

授權標識 | 應用程序名 | 應用程序句柄 |  應用程序標識 | 序號#  | 代理程序 |  協調程序 | 狀態 |  狀態更改時間 |  DB 名 | DB 路徑|                                                      |    節點號 |   pid/線程

其中:1、應用程序標識的第一部分是應用程序的IP地址,不過是已16進位表示的。
2、pid/線程即是在unix下看到的線程號。

停止應用程序:
db2 "force application(236)"
db2 「force application all」

其中:該236是查看中的應用程序句柄。


4.8 查看本instance下有哪些database
db2 LIST DATABASE DIRECTORY  【 on /home/db2inst1 】
4.9 查看及更改資料庫head的配置
請注意,在大多數情況下,更改了數據的配置后,只有在所有的連接全部斷掉后才會生效。

查看資料庫head的配製
db2 get db cfg for head


更改資料庫head的某個設置的值
4.9.1 改排序堆的大小
db2 update db cfg for head using SORTHEAP 2048
將排序堆的大小改為2048個頁面,查詢比較多的應用最好將該值設置比較大一些。
4.9.2 改事物日誌的大小
db2 update db cfg for head using  logfilsiz  40000
該項內容的大小要和資料庫的事物處理相適應,如果事物比較大,應該要將該值改大一點。否則很容易處理日誌文件滿的錯誤。

4.9.3 出現程序堆內存不足時修改程序堆內存大小
db2 update db cfg for head using  applheapsz  40000
該值不能太小,否則會沒有足夠的內存來運行應用程序。

4.10 查看及更改資料庫實例的配置
查看資料庫實例配置
db2  get dbm cfg 
更改資料庫實例配製

4.10.1 打開對鎖定情況的監控。
db2 update dbm cfg using dft_mon_lock  on
4.10.2 更改診斷錯誤捕捉級別
db2 update dbm cfg using diaglevel 3
0 為不記錄信息
1 為僅記錄錯誤
2 記錄服務和非服務錯誤
預設是3,記錄db2的錯誤和警告
4 是記錄全部信息,包括成功執行的信息
一般情況下,請不要用4,會造成db2的運行速度非常慢。


4.11 db2環境變數
db2 重裝後用如下方式設置db2的環境變數,以保證sp可編譯
將set_cpl 放到AIX上, chmod +x set_cpl, 再運行之

set_cpl的內容
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命令環境設置
db2=>list command options
db2=>update command options using C off--或on,只是臨時改變
db2=>db2set db2options=+c --或-c,永久改變

4.13 改變隔離級別
DB2SET DB2_SQLROUTINE_PREPOPTS=CS|RR|RS|UR

交互環境更改session的隔離級別,
       db2 change isolation  to UR
請注意只有沒有連接資料庫時可以這樣來改變隔離級別。

4.14 管理db\instance的參數
get db cfg for head(db)
get dbm cfg(instance)

4.15 升級后消除版本問題
db2   bind  @db2ubind.lst
db2   bind   @db2cli.lst

4.16 查看資料庫表的死鎖
再用命令中心查詢數據時要注意,如果用了互動式查詢數據,命令中心將會給所查的記錄加了s鎖.這時如果要update記錄,由於update要使用x鎖,排它鎖,將會處於鎖等待.

首先,將監視開關打開
db2 update dbm cfg using dft_mon_lock  on
快照
  db2 get snapshot for  Locks  on  cleardb   >snap.log
                    tables 
bufferpools
tablespaces
database
   然後再看snap.log中的內容即可。
對Lock可根據Application handle(應用程序句柄)看每個應用程序的鎖的情況。
 監視完畢后,不要忘了將監視器關閉
     db2 update dbm cfg using dft_mon_lock  off

六、DB2常用知識

以下主要以DB27.X為基礎的.以下的字元為小寫.

  本文對DB2高手來說是不用看的.

  1.DB2產品的級別有那些?

  企業版的 ENTERPRISE EDITION

  工作企業擴展版 ENTERPRISE EXTENDED EDITION

  個人版的 PERSONAL EDITION

  衛星版的 SATELLITE EDITION

  微型版的 EVERYPLACE

  

  2.可以連接到DB2資料庫的產品有哪些?

  DB2客戶端

  DB2CONNECT

  DB2DATA propagator

  DB2NET.DATA

  DB2DATA joiner

  DB2 RELATIONAL CONNECT

  WebSphere應用伺服器

  等

  

  3.DB2支持的通訊協議有哪些?

  TCP/IP

  NETBIOS

  APPG

  IPX/SPX

  NAMEPIPE

  等

  

  4.DB2客戶端產品有哪些?

  DB2運行時間客戶端DB2 RUNTIME CLIENT

  DB2管理客戶端DB2ADMINI STRATION CLIENT

  DB2應用程序開發客戶端DB2 APPLICATION DEVELOP MENT CLIENT

  DB2瘦客戶端 DB2 THIN CLIENT

  

  5.一個資料庫是否可以安裝在多個資料庫伺服器上?

  可以

  

  6.從哪個版本后存儲過程可以用SQL語句來創建?

  7.1版后

  

  7.DB2提供哪些關係擴展器?

  文本擴展器 TEXT EXTENDER

  圖象擴展器 IMAGE EXTENDER

  音頻擴展器 AUDIO EXTENDER

  視頻擴展器 VIDEO EXTENDER

  空間數據擴展器 SPATIAL EXTENDER

  XML擴展器 XML EXTENDER

  網路搜索擴展器NET.SEARCH EXTENDER

  

  8.WINDOWS和OS/2環境下的DB2安裝目錄結構?

  用SETUP.EXE來安裝

  

  \SQLLIB安裝的根目錄,包括README文件

  \SQLLIB\ADSM包含ADSTAR分散式存儲管理器文件

  \SQLLIB\BIN包含DB2工具的可執行文件

  \SQLLIB\BND包含DB2工具的綁定文件

  \SQLLIB\CC包含運行控制中心所需的文件

  \SQLLIB\CFG包含默認的系統配置文件

  \SQLLIB\CONV包含代碼頁轉換表文件

  \SQLLIB\DB2默認的實例目錄

  \SQLLIB\DB2DAS00預設的DB2管理伺服器目錄

  \SQLLIB\DOC包含DB2聯機手冊

  \SQLLIB\FUNCTION默認的用戶自定義函數目錄

  \SQLLIB\FUNCTION\UNFENCED默認的非隔離用戶自定義函授目錄

  \SQLLIB\HELP聯機幫助文件

  \SQLLIB\JAVADB2所需的JAVA類庫

  JAVA12包含JDK1.2的支持程序

  \SQLLIB\MISC包含HTML搜索伺服器文件

  \SQLLIB\MSG\PRIME包含信息文件

  \SQLLIB\QP包含QUERYPATROLLER的客戶端文件

  \SQLLIB\SAMPLES包含樣常式序和樣例腳本

  \SQLLIB\SPMLOG包含DB2同步點管理器日誌文件

  \SQLLIB\THNSETUP包含瘦客戶端安裝文件

  9.UNIX和LINUX環境下的DB2安裝目錄結構?

  用DB2SETUP.EXE來安裝

  安裝的根目錄下還將創建以下目錄:

  

  README安裝的根目錄,包括README文件

  ADM包含系統管理工具文件

  ADSM包含ADSTAR分散式存儲管理器文件

  BIN包含DB2工具的二進位可執行文件

  BND包含DB2工具的綁定文件

  CC包含運行控制中心所需的文件

  CFG包含默認的系統配置文件

  CONV包含代碼頁轉換表文件

  DOC包含DB2聯機手冊

  FUNCTION默認的用戶自定義函數目錄

  FUNCTION\UNFENCED默認的非隔離用ё遠ㄒ搴諛柯?lt;BR>  INSTALL包含安裝程序

  INSTANCE包含實例腳本

  JAVADB2所需的JAVA類庫

  LIBDB2庫文件

  MAP包含DB2CONNECT使用的映射文件

  MISC包含HTML搜索伺服器文件

  SAMPLES包含樣常式序和樣例腳本

  MSG\$L包含DB2信息文件


  10.AIX下用哪個命令來安裝DB2?

  INSTALLP命令

  

  11.同一操作系統下可以安裝多個DB2資料庫?

  可以的

  

  12.如何停止實例?

  DB2STOP

  

  13.如何啟動實例?

  DB2START

  【page】


  14.如何修改註冊項的值?

  DB2SET可以修改

  如:

  設定當前實例的一個參數

  DB2SET PARAMETER=VALUE

  

  設定一個全局級的參數

  DB2SET PARAMETER=VALUE-G(小寫)

  

  查看能在配置文件註冊表中設置的所有變數的列表

  DB2SET-LR(小寫)

  

  15.如何在CLP執行操作系統的命令?

  在命令前加"!"作為前綴

  DB2=>!DIR C:\

  

  16.在CLP中命令過長怎麼辦?

  用"\"作為續行符號

  

  17.如何獲得DB2的命令的語法相關信息?

  DB2 ?顯示所有DB2命令

  DB2 ? COMMAND顯示命令信息

  DB2 ? SQLnnnn 顯示這個SQLCODE的解釋信息

  DB2 ? DB2nnnn 顯示這個DB2錯誤的解釋信息

  

  18.如何查看當前CLP的設置?

  DB2=>LIST COMAND OPTIONS

  

  19.如何更新當前CLP會話的特定項設置?

  DB2 UPDATE COMMAND OPTIONS USING OPTIONS...

  

  20.COMMAND WINDOWS可以通過哪個命令調用?

  DB2CMD命令

  

  21.管理伺服器的默認名為?

  UNIX下為DB2AS

  WINDOWS下為DB2DAS00

  

22.常用管理DB2伺服器實例的命令?

  DB2ADMIN START 啟動DB2管理伺服器實例

  DB2ADMIN STOP 停止DB2管理服器實例

   DASICRTUNIX下創建DB2管理伺服器實例

  DASIDROPUNIX下刪除DB2管理伺服器實例

  DB2 ADMIN CREATE WINDOWS OR OS/2下創建DB2管理伺服器實例

  DB2 ADMIN DROP WINDOWSOROS/2下刪除DB2管理伺服器實例

  DB2 GET ADMIN CFG 顯示DB2管理伺服器的配置參數

  DB2 UPDATE ADMIN CFG 修改DB2管理伺服器的配置參數

  DB2 RESET ADMIN CFG將DB2管理伺服器的配置參數設為默認值

  

  23.DB2目錄分為哪幾種?

  系統資料庫目錄

  本地資料庫目錄

  節點目錄

  DCS目錄

  管理節點目錄

  

  24.如何查看系統資料庫目錄?

  LIST DB DIRECTORY

  

  25.如何查看資料庫伺服器目錄?

  LIST NODE DIRECTORY

  

  26.DB2實例的伺服器的默認埠是?

  50000

  伺服器名稱為DB2CDB2

  

  27.DB2UDB伺服器端的認證類型有?

  SERVER

  SERVER_ENCRYPT

  CLIENT

  DCE

  DCE_SERVER_ENCRYPT

  KERBEROS

  KRB_SERVER_ENCRYPT

  

  28.DB2客戶端的認證類型有?

  SERVER

  SERVER_ENCRYPT

  DCS

  DCS_ENCRYPT

  CLIENT

  DCE

  

  29.DB2中有哪幾種類型的許可權?

  SYSADM 系統管理許可權

  SYSCTRL系統控制許可權

  SYSMAINT系統維護許可權

  DBADM 資料庫管理許可權

  LOAD 對錶進行LOAD操作的許可權

  

  30.不能通過GRANT授權的許可權有哪種?

  SYSAM

  SYSCTRL

  SYSMAINT

  要更該上述許可權必須修改資料庫管理器配置參數

  

  31.表的類型有哪些?

  永久表(基表)

  臨時表(說明表)

  臨時表(派生表)

  

   


   

51.安裝DB2默認的事例名稱是?

  在WINDOWS或OS/2中默認的是DB2

  在LINUX或UNIX環境下默認的是DB2INST1

  

  52.安裝后的默認帳戶是?

  在WINDOWS或OS/2中默認的是DB2ADMIN

  在LINUX或UNIX環境下默認的是DB2AS

  

53.事例的類型有哪些?

  CLIENT(客戶)

  STANDALONE(獨立的)

  SATELLITE(衛星)

  EEDB2

  EEE


68.一個資料庫至少包括哪些表空間?

  一個目錄表空間

  一個或多個用戶表空間

  一個或多個臨時表空間【page】

  

  69.根據數據與存儲空間之間移動的控制方式不同,分哪兩種表空間?

  系統管理的空間(SMS)

  資料庫管理的空間(DMS)


81.表的類型有哪些?

  基本表

    結果表

  概要表

  類型表

  子類型

  子表

  聲明的臨時表

  系統臨時表


105.DB2資料庫監控的兩個組成部分?

  快照監控(SNAPSHOTMONITOR)可返回特定時間點的資料庫活動的快照.

  事件監控(EVENTMONITOR)記錄事件發生的數據.

  

  106.系統監控的數據元素類型?

  計數器(COUNTER)記錄活動發生的次數.

  測量(GAUGE)測量條目的當前值.

  水線(WATERMARK)從監控來元素達到的最大或最小數值.

  信息(INFORMATION)監控活動的參照類型細節.

  時間點(TIMESTAMP)活動發生的日期時間.

  時間(TIME)返回一個活動花費的時間.

114.DB2的SQL語句的類別?

  DCL:數據控制語言,提供對資料庫對象的訪問許可權.

  DDL:數據定義語言,創建,修改,刪除資料庫對象的.

  DML:數據操縱語言,用來插入,更新,刪除數據的.【page】

  115.DCL的許可權有哪些?

  CONTROL許可權:如果用戶創建一個對象,則改用戶能完全訪問該對象.

  GRANT語句將許可權授予給用戶.

  REVOKE語句撤銷一個用戶的許可權.

  116.DDL有哪些?

  CREATE

  DECLARE

  ALTER

    DROP

  等

117.DML有哪些?

  INSERT

  SELECT

  UPDATE

  DELETE

  等

  

  118.DB2有沒有布爾類型?

  沒有

  

  119.如何查詢DB2的內置函數?

  自帶文檔ADMINISTION-->SQLREFERENCE-->FUNCTIONS內

綜述
  IBM公司研製的一種關係型資料庫系統。DB2主要應用於大型應用系統,具有較好的可伸縮性,可支持從大型機到單用戶環境,應用於OS/2、Windows等平台下。 DB2提供了高層次的數據利用性、完整性、安全性、可恢復性,以及小規模到大規模應用程序的執行能力,具有與平台無關的基本功能和SQL命令。DB2採用了數據分級技術,能夠使大型機數據很方便地下載到LAN資料庫伺服器,使得客戶機/伺服器用戶和基於LAN的應用程序可以訪問大型機數據,並使資料庫本地化及遠程連接透明化。 它以擁有一個非常完備的查詢優化器而著稱,其外部連接改善了查詢性能,並支持多任務并行查詢。 DB2具有很好的網路支持能力,每個子系統可以連接十幾萬個分散式用戶,可同時激活上千個活動線程,對大型分散式應用系統尤為適用。   DB2是IBM出口的一系列關係型資料庫管理系統,分別在不同的操作系統平台上服務。雖然DB2產品是基於UNIX的系統和個人計算機操作系統,在基於UNIX系統和微軟在windows系統下的Access方面,DB2追尋了ORACLE的資料庫產品。   除了它可以提供主流的OS/390和VM操作系統,以及中等規模的AS/400系統之外,IBM還提供了跨平台(包括基於UNIX的LINUX,HP-UX,Sun Solaris,以及SCO UnixWare;還有用於個人電腦的OS/2操作系統,以及微軟的Windows 2000和其早期的系統)的DB2產品。DB2資料庫可以通過使用微軟的開放資料庫連接(ODBC)介面,Java資料庫連接(JDBC)介面,或者CORBA介面代理被任何的應用程序訪問。   7月14日,IBM全球同步發布了一款具有劃時代意義的資料庫產品——DB2 9(「DB2」是IBM資料庫產品系列的名稱)。而這款新品最大特點即是率先實現了可擴展標記語言(XML)和關係數據間的無縫交互,而無需考慮數據的格式、平台或位置。   DB2的前世今生和未來:   對於每個最終站在獎台上淚水盈面的奧運冠軍來說,為此刻他或她也許已經付出了5年甚至10年的艱苦努力。相比這些人類的冠軍們,這個世界還有另外一種意義上的冠軍,它們雖沒有淚水,卻依然在歷史上留下了非凡的軌跡—DB2就是這類冠軍中的一員。這個資料庫領域裡當之無愧的冠軍,已用了足足25年來描繪它的軌跡。   紀念IBM DB2的誕生   IBM DB2已經25周歲拉!DB2回顧與展望

相關評論

同義詞:暫無同義詞