d:\winnt\system32\drivers\etc\services文件是對機器名到IP地址的解析。
d:\winnt\system32\drivers\etc\hosts文件是對端口名到端口號的解析。
以上兩條上非DB2的,但在DB2中使用到。
db2admin start 起動DB2管理
DB2里對一個命令的HELP是:
>db2 ? 該命令
db2 連接到遠程數據庫
第一步建一個結點:
>db2 catalog tcpip node 結點名 remote 數據庫服務器IP地址 server 端口(50000)
第二步建一個到庫的聯結別名:
>db2 catalog db 庫名 as 別名 at node 結點名
第三步建立聯結:
>db2 connect to 別名 user 用戶名 using 用戶密碼
斷開聯結:
db2 connect reset
db2里需要用到一個系統環境變量:db2codepage, 缺省值是1386,此值非常重要,客戶端于數據庫端的db2codepage不一樣時客戶端就無法連上數據庫端。
DB2里一個表的全名是:schema.表名,缺什情況下不同的用戶看到的表是不一樣的,
在程序的sql語句里必需用表的全名(切記)。
查看有哪些程序在使用該數據庫:
>db2 list application
其結果中有一個字段application-handle在殺死該引用中用到
殺死一個程序對該數據庫的使用:
>db2 force application {all | (application-handle)}
在庫被使用時db2stop不能執行
DB2命令后所帶參數:
-t 以;作為一句結束
-f 指向一個文件(即執行一個文件中的語句,在command窗口里有些命令無法執行,可先用notepad建一個文件然后執行它)
-v (我不知道是什么)
注釋:-v用于顯示當前所執行的sql命令。
一個windows nt 里的一般用戶可以連到庫,但無一般SQL語句的執行權,授權給一個用戶:
>db2 grant sql語句(例如:select) on 表名 to user 用戶名
取消該用戶的權:
>db2 revoke sql語句 on 表名 from 用戶名
DB2日志有兩種:循環日志和永久型日志
循環日志:有3個文件循環寫,所以會產生以前的操作記錄被覆蓋。好處:日志文件大小不變,備份方便,但不可以在線備份。
永久日志:其日志文件不斷增漲,但操作記錄不會被覆蓋,可以在線備份。
如何備份:
>db2 backup db 數據庫名 to 設備名(如:c:\);
恢復:
>db2 restore db 數據庫名 from 設備名
(回滾rollforward我不太清楚)
注釋:rollforword 是前滾的意思,向前到某一個時間,以保持數據的一致性,用于在線備份后的恢復,恢復是從log日志中開始到日志中的某一個時間,即可。只有在數據一致性得到保證的情況下,才能繼續對數據庫操作。
連接到數據庫時報回滾錯誤
用下面的命令:
db2 rollforward db fmisadd to end of logs and complete
導出導入數據庫:
--export
db2move hadb export -u userid -p password;
--import
db2move hadb import -u userid -p password;
導出庫中表的數據:
>export to 文件名.ixf of ixf select * from 表名
>import from 文件名.ixf of ixf create into 表名
導出庫的數據格式還有兩種del(文件格式)和wsf,但ixf格式信息最全,包含表結構信息,可恢復出已刪去的表。
sql的inner/left/right/full join,這些概念在<<數據庫概論>>中有說明,left以左表為主,right以右表為主,full左右表記錄都會在查尋結果中。
例如:>select aa,bb from db1 left join db2 on db1.id=db2.id
合并查尋:把兩個或幾個查尋結果合并到一個字段(條件是字段必須兼容)
格式:select ...... union select ....;
使用臨時表:
with tmptable (字段1,...) as (select....)?? --建一個臨時表
select 字段1,.... from tmptable,另一個表 where....?? --使用該臨時表于另一個表交叉查尋。
**order by 必需出現在結果集,在臨時表中不能用。
截取字符串
substr(字段名,開始位置,字符個數)
判斷是否是空
字段名 is null
例子:
到什么時候活了10000天:
select distinct date('1980-01-01')+10000 day from a
一共活了多少天:
select distinct days(current date)-days(date('1980-01-01')) from a
類型轉換:用cast ,例:
select distinct cast(current date as char(10))||'aa' from a
case的使用:
select case when length(rtrim(學歷))=0 then '未知學歷' else xl end,rs from a
例:查尋一個公司的年齡分布:
with tmptable as (select case when year(current day)-csrq<20 then '小于20歲'??????????????????????????????????????????????????? when year(current day)-csrq<25 then '20-24歲'???????????????????????????????????????????????????? when year(current day)-csrq<30 then '25-29歲'
????????????????????????????? when year(current day)-csrq<35 then '30-34歲'
????????????????????????????? when year(current day)-csrq<40 then '35-39歲'
????????????????????????????? when year(current day)-csrq<45 then '40-44歲'
????????????????????????????? when year(current day)-csrq<50 then '45-49歲' else '大于50歲' end
as x from a)
select x,count(*) from tmptable group by x;
一個數據庫中有些系統建的表是用來保存該庫各種信息的,如:syscat.tables
例:查有多少個userid的表:
select count(*) from syscat.tables where type='T' and tabschema='uerid'
例:產生一個備分庫中所有表的文本:
select 'export to '|| tabname || '.ixf of ixf select * from userid.' ||tabname||';' from syscat.tables where type='T' and tabschema='userid';
?
性能調整:
影響到DB2性能的有:
能夠利用服務器的性能:1.并行性 2.減少通信
建立Index
? <,>,=????? 第一類搜索謂詞,
? <>,like??? 第二類搜索謂詞,
? 需要用函數 第三類搜索謂詞,
select * from a
*盡量要哪個字段寫哪個字段。
blocking的概念????? 客戶端請求一次,數據庫返回n個記錄。
復合型SQL(我不太清楚)
注釋:是指他所講的聯結union,建立臨時表等復雜的sql語句。
DB2會對SQL語句優化,系統對表的信息知道的越多,優化越好,所以要做runstats
runstats命令把表的信息告訴系統,一般當數據量增加一倍時用該命令一次。
REORG命令是數據庫整理,類似于磁盤碎片整理。
得到該instance的各種參數:(dbm cfg是整個DB2的參數,db cfg是對某個數據庫的參數)
>db2 get dbm cfg
>db2 get db cfg for 數據庫名
修改參數:
>db2 update dbm cfg using 參數 你要的數
>db2 update db cfg for 數據庫名 using 參數 你要的數
?
當第一個用戶連結到該數據庫時會申請一個內存緩沖,默認是250頁每頁4k即1M。
Buffer pool size<4K>? [BUFFPAGE]=250
修改該值:
>db2 update db cfg for test using buffpage 你要的數
但它的有效還取決于syscat.bufferpools中的npages是否為-1,為-1時它才有效,否則以syscat.bufferpols中的npage為準。
可用下面的命令看:
>select * from syscat.bufferpools
一般此值的設置應為系統內存的40%左右,太大時會使系統因動用虛擬內存從而太吃力。
sql語句的優化級別:一般取2或5(最高為9)
Default query optinization class????? <DFT_QUENYOPT>=5
該值越大優化越好,但優化所化時間也越長。
并行性設置:
Degree=-1 并行性全由操作系統完成。
當操作系統有并行處理時,Degree=-1
*****CUP與硬盤的個數一般為1:4到1:6;
用戶最大連結數:
<MAXAPPLS>=40
BUFFPAGE與MAXPPLS的關系:BUFFPAGE>2*MXAPPLS
文章出處: http://tb.blog.csdn.net/TrackBack.aspx?PostId=290057