1,CLP的運(yùn)行:
???直接在cmd中鍵入:db2,報(bào)錯:DB21061E? 未初始化命令行環(huán)境。
???鍵入:db2cmd,這時(shí)會打開一個CLP窗口,在這里鍵入db2后,就可以進(jìn)行sql命令操作了。如:
?? db2 => connect to sample
2,表空間的創(chuàng)建:
?????在創(chuàng)建表空間,選擇“容器”,如果你選擇的容器(windows os)是一個非空的文件夾,那么將會報(bào)錯:
????????????[IBM][CLI Driver][DB2/NT] SQL0298N? 容器路徑不正確。? SQLSTATE=428B2
??? 只需將“容器”改為一個空的文件夾即可。
3,創(chuàng)建數(shù)據(jù)庫:
??????一個數(shù)據(jù)庫最少有三個表空間:用戶表、目錄表和臨時(shí)表,這些表空間可以采取讓OS來管理,也可以讓DB本身來管理,這里我采用讓OS來進(jìn)行管理表空間,容器的建立如下:
???????????????用戶表(空間)--- d:\MyDB\userTabSpace
???????????????目錄表(空間)--- d:\MyDB\dirTabSpace
???????????????臨時(shí)表(空間)--- d:\MyDB\tempTabSpace
4,在java中用JDBC連接DB2數(shù)據(jù)庫,先用eclipse中的Database Explorer連接:
???????
??????a,當(dāng)Class選用DB2中E:\IBM\SQLLIB\java\db2java.zip 下的COM.ibm.db2.jdbc.app.DB2Driver時(shí),Database Explorer可以連接上數(shù)據(jù)庫;當(dāng)Class選用DB2中E:\IBM\SQLLIB\java\db2jcc.jar 下的com.ibm.db2.jcc.DB2Driver時(shí),Database Explorer連接不上數(shù)據(jù)庫,報(bào)錯:No license was found,需要將包db2jcc_license_cu.jar加載到classpath下。
5,在用restore命令對DB2進(jìn)行數(shù)據(jù)恢復(fù)時(shí),如果有多個備份文件與為備份數(shù)據(jù)庫映像所提供的時(shí)間戳記值相匹配的話,那么將不能正常恢復(fù),這里采用了一個比較土的方法:如130324.001,改為:130324A.001,那么將會認(rèn)為這個文件與備份數(shù)據(jù)庫映像所提供的時(shí)間戳記值不同,不予恢復(fù)考慮。
6,oracle中的decode()函數(shù),看看在DB2中都被折騰成什么樣子了:
??語句:?select id,case when id=1 then '鄒清兵' when id=2 then '馬明燈' else name end as 姓名,name from test;
ID????????? 姓名?????? NAME
----------- ---------- ----------
????????? 1 鄒清兵???? zqb
????????? 2 馬明燈???? mmd
????????? 3 kyy??????? kyy
? 3 條記錄已選擇。
7,DB2中db2start啟動數(shù)據(jù)庫,db2stop用來關(guān)閉數(shù)據(jù)庫。但如果有數(shù)據(jù)庫正在連接時(shí),是不能關(guān)閉數(shù)據(jù)庫的,只有先斷開數(shù)據(jù)庫(connect reset)連接才能再關(guān)閉數(shù)據(jù)庫(db2stop);當(dāng)然,也可以強(qiáng)行關(guān)閉數(shù)據(jù)庫(db2stop force)。
8,查錯方法總結(jié):
?????????通過SQLSTATE代碼得到其錯誤原因,如:
???????????????db2? ?? ??08004,其中08004是SQLSTATE代碼;當(dāng)然,有時(shí)候我們得到的并不一定是SQLSTATE代碼,這時(shí)可以同樣通過命令:?db2? ?? SQL1068N,來得到其SQLSTATE代碼。
9,oracle中的rownum,可以用DB2中的row_number() over()來替代,也可以用fetch first 3 rows only,如:
????select * from (select?row_number() over() as rownum,t.*?from?xxx t) where rownum <?3
??? (select ? * ? from ? xxx ? fetch ? first ? 20 ? rows ? only) ? except ? (select ? * ? from ? xxx ? fetch ? first ? 10 ? rows ? only)