DB2常用操作

          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

          posted on 2007-07-20 15:51 心硯 閱讀(1284) 評論(0)  編輯  收藏 所屬分類: DB

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          文章分類

          文章檔案

          Forum

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大同县| 侯马市| 肇庆市| 渝北区| 广河县| 高雄县| 杨浦区| 嘉禾县| 灵台县| 高台县| 井陉县| 左权县| 青阳县| 临汾市| 运城市| 棋牌| 镇赉县| 宁武县| 北川| 修文县| 周至县| 宁远县| 蚌埠市| 油尖旺区| 益阳市| 大港区| 洛隆县| 绩溪县| 张家川| 珠海市| 二手房| 栖霞市| 昂仁县| 宁河县| 南丰县| 虞城县| 桂阳县| 翁源县| 登封市| 新余市| 河源市|