DB2

DB2

一種關系型數據庫系統
IBM公司研制的一種關系型數據庫系統。DB2主要應用于大型應用系統,具有較好的可伸縮性,可支持從大型機到單用戶環境,應用于OS/2、Windows等平台下。DB2提供了高層次的數據利用性、完整性、安全性、可恢複性,以及小規模到大規模應用程序的執行能力,具有與平台無關的基本功能和SQL命令。DB2采用了數據分級技術,能夠使大型機數據很方便地下載到LAN數據庫服務器,使得客戶機/服務器用戶和基于LAN的應用程序可以訪問大型機數據,并使數據庫本地化及遠程連接透明化。[1]
    中文名: 外文名: 别名: 開發商:IBM 軟件授權:專業版,免費版 軟件名稱:DB2 軟件平台:Unix,Windows,Linux 軟件版本:V10.5 軟件語言:sql 更新時間:2013年6月

簡介

它以擁有一個非常完備的查詢優化器而著稱,其外部連接改善了查詢性能,并支持多任務并行查詢。DB2具有很好的網絡支持能力,每個子系統可以連接十幾萬個分布式用戶,可同時激活上千個活動線程,對大型分布式應用系統尤為适用。DB2是IBM出口的一系列關系型數據庫管理系統,分别在不同的操作系統平台上服務。雖然DB2産品是基于UNIX的系統和個人計算機操作系統,在基于UNIX系統和微軟在windows系統下的Access方面,DB2追尋了ORACLE的數據庫産品。

操作環境

除了它可以提供主流的OS/390和VM操作系統,以及中等規模的AS/400系統之外,IBM還提供了跨平台(包括基于UNIX的LINUX,HP-UX,SunSolaris,以及SCOUnixWare;還有用于個人電腦的OS/2操作系統,以及微軟的Wind ows2000和其早期的系統)的DB2産品。DB2數據庫可以通過使用微軟的開放數據庫連接(ODBC)接口,Java數據庫連接(JDBC)接口,或者CORBA接口代理被任何的應用程序訪問。

發展曆史

1997:

1.IBM發布了可以支持Web的DB2forOS/390V5,這是當時唯一能夠支持64,000個并發用戶和百TB級别的數據庫産品。

2.IBM發布了DB2UDBforUNIX、WindowsandOS/2,該産品支持ROLLUP和CUBE函數,對聯機分析處理(OLAP)具有重要意義。

3.IDUG第一次技術論壇在加拿大多倫多召開。

4.IBM發布了用于企業級内容管理的EDMSuite,該産品包含了用于管理計算機生成報表的OnDemand和管理圖像的ImagePlusVisualInfo。

5.IBM基于RS/6000SP架構的超級計算機"深藍"在國際象棋的6番棋對抗中戰勝了世界棋王卡斯帕羅夫。

1998:

1.IBM發布了DB2OLAPServer,這是一個基于DB2的完整的OLAPSolution。這個産品是和ArborSoftware(Hyperion的前身)合作開發的。

2.IBM發布了DB2DataLinks技術,該技術可使DB2對外部文件進行管理。

3.DB2的shared-noting集群技術擴展到Windows和Solaris平台。

4.IBM發布了DB2SpatialExtender,這是與ESRI公司在DataJoiner基礎上聯合開發的,該産品賦予了DB2對地理信息數據的存取能力。

5.IBM發布了ContentConnect,該産品是EnterpriseInformationPortal(EIP)的前身。

6.DB2對SCOUnixWare平台提供支持。

7.DB2UDBV5.2增加了對sqlj、Java存儲過程和用戶自定義函數的支持。

8.IBM發布DB2UDBforAS/400,使AS/400成為充分支持電子商務的機型。

1999:

1.IBM為了對移動計算提供支持,發布了DB2UDB衛星版和DB2Everywhere(這是一個适用于手持設備的微型關系數據庫管理系統,現在的版本被稱為DB2Everyplace)。

2.IBM發布了EnterpriseInformationPortal,該産品可以跨數字圖書館和EDMSuite提供一個統一的聯合檢索功能。

3.DB2增加了能夠識别XML語言的文本檢索功能,從而引入了XML支持,并啟動了DB2XMLExtender的beta計劃。

4.IBM發布了Intel平台上的DB2UDBforLinux。

5.IBM研究機構将DB2的聯邦(federation)功能和Garlic技術(Garlic的目标是使能大規模多媒體信息系統,

2000:

1.IBM發布了DB2XMLExtender,成為在業界第一個為數據庫提供内置XML支持的廠商。

2.IBM将VisualWarehouse集成到DB2中,為DB2提供了内置的數據倉庫管理功能。

3.DB2對Linux的支持進一步增強,能夠支持基于Intel的Linux集群、發布了可以運行在主機上的DB2UDBforLinux和可以運行在嵌入式Linux上的DB2Everyplace。

4.DB2開始支持NUMA-Q平台,可以運行在該平台上的類UNIX操作系統DYNIX/PTX上。

5.DB2通過Net.SearchExtender提供了in-memory高速文本檢索功能。

60IBM啟動了數據庫管理工具業務,起初着重于為主機上的IMS和DB2提供高效管理工具,最終這項業務擴展到UNIX、Linux和Windows平台。Informix數據庫産品也在支持之列。

7.IBM開始通過在DB2中集成DataJoiner來提供數據聯邦(federation)功能

8.IBM發布了用于管理數字資産的ContentManager。IBM數字圖書館和EDMSuite産品現在都被包含在一個單一的架構中來提供多媒體資産管理和企業内容管理。荷蘭國家圖書館、梵蒂岡圖書館都是最早的用戶。

9.DB2在主機上銷售出了它的第10000個許可證。

2001:

1.IBM以10億美金收購了Informix的數據庫業務,這次收購擴大了IBM的分布式數據庫業務。

2.DB2OLAPServer中增添了數據挖掘功能。

3.IBM發布了第一個能夠支持多種平台的DB2工具。

4.DB2提供了基于SOAP的Web服務的支持。DB2XMLExtender和存儲過程可以使DB2成為Web服務的提供者。

5.IBM科學家在納米碳管晶體管技術領域取得突破。IBM用納米碳管制造出了世界上第一批納米晶體管--由直徑10個原子大小的碳原子組成的小圓柱結構,比當今基于矽的晶體管小500倍。

6.DB2拓寬了其數據聯邦(federation)的能力,可以對WebSphereMQ消息隊列和生命科學領域特定格式的文件提供支持。

7.IBM發布了DB2UDBforOS/390.

2002:

1.IBM發布了Xperanto,這是一個基于标準的信息集成中間件的演示版,可以用來優化對分散數據源的存取。這個演示版本使用了XML、Xquery、Web服務、數據聯邦(federation)和全文檢索等先進技術。

2.IBM宣布計劃收購RationalSoftwareCorp,從而使得IBM軟件能夠支持從設計、開發、部署到管理和維護的完整過程。

3.DB2通過基于SOAP的Web服務擴展了數據聯邦(federation)的能力。并可以作為Web服務的使用者出現在Web服務架構中。

4.DB2OLAPServer中添加了hybrid(多維和關系)分析能力。

5.作為IBM自主運算策略的一部分,SMART(自我管理和資源調節)技術在DB2UDBV8.1中首次正式應用。

6.IBM并購TarianSotware,從而加強了ContentManager中記錄管理組件的功能。

2003:

1.IBM将數據管理産品統一更名為信息管理産品,旨在改變很多用戶對于DB2家族産品隻能完成單一的數據管理的印象,強調了DB2家族在信息的處理與集成方面的能力。

2006:

IBM發布DB29,将數據庫領域帶入XML時代。IT建設業已進入SOA(Service-OrientedArchitecture)時代。實現SOA,其核心難點是順暢解決不同應用間的數據交換問題。XML以其可擴展性、與平台無關性和層次結構等特性,成為構建SOA時不同應用間進行數據交換的主流語言。而如何存儲和管理幾何量級的XML數據、直接支持原生XML文檔成為SOA構建效率和質量的關鍵。在這這種情況下,IBM推出了全面支持OriginalXML的DB29,使XML數據的存儲問題迎刃而解,開創了一個新的XML數據庫時代。DB2 産品組件和功能:

DB2 Engine 是整個數據庫系統的核心,提供了 DB2 的基本功能。 DB2 引擎類似汽車的發動機,負責管理和控制對數據的存取;負責生成程序包(存儲存取計劃的數據庫對象);提供事務的管理; 保障數據的完整性和數據保護; 提供應用程序并發控制。 數據庫引擎(DB2Engine)設計的完善與否,決定了數據庫系統是否穩定和高效。 DB2 Engine 是所有數據庫中最強大的數據庫引擎。

DB2 客戶機

DB2 V9 大大簡化了将應用程序連接到 DB2 數據庫所需的基礎設施的部署。 

DB2 V9提供以下客戶機:

DB2 V9 Runtime Client (DB2 RTCL)DB2 V9 Client

Java Common Client (JCC)

DB2 V9 Client Lite

還有 通信支持(Communication Support),DB2 Relational Connect, DB2 Data Joiner, DB2 擴展器(DB2 Extender) 等部分,有些部分不是必須的。

複制遷移

以下方法經測試,在環境IBM x346,3.2G×2,4G,RAID 1,DB2 V8.2.4,Win2000 Adv Server,DMS表空間中,數據的load速度在60-100萬條/min左右。

背景:需要更改數據庫表空間,或者需要将數據庫中所有表的數據遷移到一個新的數據庫中。

步驟:

1.通過db2控制台(db2cc)選中源數據庫中的所有表,将其導出成DDL腳本;

2.根據需要對腳本進行必要的修改,譬如更改表空間為GATHER;

3.新建數據庫,新建DMS表空間:GATHER;

4.将DDL腳本在此數據庫中執行;

5.編寫代碼查詢源數據庫中的所有表,自動生成export腳本;

6.編寫代碼查詢源數據庫中的所有表,自動生成import腳本;

7.連接源數據庫執行export腳本;

8.連接目标數據庫執行import腳本;

附錄1:生成export腳本代碼示例:/**

* 創建導出腳本* @param conn

* @param creator 表創建者

* @param filePath

*/public void createExportFile(Connection conn,String creator,String filePath) throws Exception {DBBase dbBase = new DBBase(conn);String selectTableSql 2= "select name from sysibm.systables where creator = '" + creator + "' and type='T'";try {dbBase.executeQuery(selectTableSql2);} catch (Exception ex) {throw ex;} finally {dbBase.close();}DBResult result = dbBase.getSelectDBResult();List list = new ArrayList();while (result.next()) {String table = result.getString(1);list.add(table);}StringBuffer sb = new StringBuffer();String enterFlag = " ";for (int i = 0; i < list.size();i++) {String tableName = (String)list.get(i);sb.append("db2 "export to aa" + String.valueOf(i+1)+ ".ixf of ixf select * from " + tableName + """);sb.append(enterFlag);}String str = sb.toString();FileUtility.saveStringToFile(filePath, str, false);

附錄2:生成import腳本代碼示例:/**

* 創建裝載腳本

* @param conn

* @param creator 表創建者

* @param filePath

*/public void createLoadFile(Connection conn,String creator,String filePath) throws Exception {DBBase dbBase = new DBBase(conn);String selectTableSql = "select name from sysibm.systables where creator = '" + creator + "' and type='T'";try {dbBase.executeQuery(selectTableSql);} catch (Exception ex) {throw ex;} finally {dbBase.close();}DBResult result = dbBase.getSelectDBResult();List list = new ArrayList();while (result.next()) {String table = result.getString(1);list.add(table);}StringBuffer sb = new StringBuffer();String enterFlag = " ";for (int i = 0; i < list.size();i++) {String tableName = (String)list.get(i);sb.append("db2 "load from aa" + String.valueOf(i+1)+ ".ixf of ixf into " + tableName + " COPY NO without prompting "");sb.append(enterFlag);}String str = sb.toString();FileUtility.saveStringToFile(filePath, str, false);}附錄3:export腳本示例db2 connect to testdb user test password test:

db2 "export to aa1.ixf of ixf select * from table1"

db2 "export to aa2.ixf of ixf select * from table2"

db2 connect reset 附錄4:import腳本示例db2 connect to testdb user test password test

db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting "

db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting "

db2 connect reset

常用命令

1.關閉db2

db2stop 或db2stop force。

在腳本中一般兩個都寫上,避免使用db2stop force命令,如:

db2stop

db2stop force

2.啟動db2

db2start

3.創建數據庫

db2 create db 或db2 create db using codeset GBK territory CN

4.删除數據庫

執行此操作要小心。

db2 drop db 

如果不能删除,斷開所有數據庫連接或者重啟db2。

5.斷開數據庫連接

db2 force application all

6.連接數據庫

db2 connect to  user  using 

7.斷開數據庫連接

斷開當前數據庫連接:

db2 connect reset或者:db2 disconnect current

斷開所有數據庫的連接:

db2 disconnect all

8.備份數據庫

db2 backup db 

備注:執行以上

命令之前需要斷開數據庫連接

9.恢複數據庫

db2 restore db 

10.導出數據文件

db2move  export

[-sn <模式名稱,一般為db2admin>]

[-tn <表名,多個之間用逗号分隔>]

11.導入數據文件

db2move  import

12.列出數據庫中所有db

db2 list db directory

13.進入db2命令環境

在“運行”中執行:db2cmd

14.獲取db2數據庫管理配置環境信息

db2 get dbm cfg

15.獲取db2某個數據庫數據庫管理配置環境信息

db2 get db cfg for 

或者:連接至某個數據庫以後執行db2 get db cfg。

16.設置聯合數據庫為可用(默認聯合數據庫不可用)

db2 update dbm cfg using federated yes

17.更改db2日志空間的大小

備注:以下命令為了防止db2數據庫過份使用硬盤空間而設,僅用于開發者自己機器上的db2,如果是服務器,則參數需要修改。

db2 UPDATE DB CFG FOR  USING logretain OFF

logPRimary 3 logsecond 2 logfilsiz 25600;

如果頁大小是4KB,則以上命令創建3個100M的日志文件,占用300MB硬盤空間。25600*4KB=102400KB。

18.創建臨時表空間

DB2 CREATE USER TEMPORARY TABLESPACE STMaspACE PAGESIZE 32 K

MANAGED BY DATABASE USING (FILE 'D:DB2_TABSTMASPACE.F1' 10000)

EXTENTSIZE 256

19.獲取數據庫管理器的快照數據

db2 –v get snapshot for dbm

20.顯示進行程号

db2 list applications show detail

21.調查錯誤

sqlcode:産品特定錯誤碼;

sqlstate:DB2系列産品的公共錯誤碼,符合ISO/ANSI 92SQL标準。

調查sqlcode : db2

調查sqlstate: db2 ? 08004

22.創建表空間

rem 創建緩沖池空間 8K

db2 connect to gather

db2 CREATE BUFFERPOOL STMABMP IMMEDIATE SIZE 25000 PAGESIZE 8K

rem 創建表空間:STMA

rem 必須确認路徑正确

rem D:DB2ContainerStma

db2 drop tablespace stma

db2 CREATE

REGULAR TABLESPACE STMA PAGESIZE 8 K

MANAGED BY SYSTEM

USING ('D:DB2ContainerStma' ) EXTENTSIZE 8

OVERHEAD 10.5 PREFETCHSIZE 8 TRANSFERRATE 0.14 BUFFERPOOL

STMABMP

DROPPED TABLE RECOVERY OFF

db2 connect reset[1]  

23. 将暫挂的數據恢複到前滾狀态

db2 ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE NORETRIEVE

24.備份表空間

BACKUP DATABASE YNDC TABLESPACE ( USERSPACE1 )

TO "D:temp" WITH 2 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING

25.創建db2工具數據庫

db2 create tools catalog systools create new database toolsdb

26.如何進行增量/差量備份

增量:上一次完整備份至本次備份之間增加的數據部分;

差量(delta):上次備份以來(可能是完整備份、增量備份或者差量備份)至本次備份之間增加的數據部分;

27.更新所有表的統計信息

db2 -v connect to DB_NAME

db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"

db2 -v reorgchkupdate statistics on table all

db2 -v "select tbname, nleaf, nlevels, stats_timefrom sysibm.sysindexes"

db2 -v terminate

28.對一張表運行統計信息

db2 -v runstatson table TAB_NAMEand indexes all

29.查看是否對數據庫執行了RUNSTATS

db2 -v "select tbname, nleaf, nlevels,

stats_timefrom sysibm.sysindexes"

30.更改緩沖池的大小,緩沖池中,當syscat.bufferpools的npages是-1時,由數據庫的配置參數bufferpage控制緩沖池的大小。

将npages的值更改為-1的命令:

db2 -v connect to DB_NAME

db2 -v select * from syscat.bufferpools

db2 -v alter bufferpoolIBMDEFAULTBP size -1

db2 -v connect reset

db2 -v terminate

更改數據庫配置參數BufferPages的命令如下:

db2 -v update db cfgfor dbnameusing BUFFPAGE bigger_value

db2 -v terminate

31.查看數據庫監視内容列表

db2 -v get monitor switches

32.打開某個數據庫監視内容

db2 -v update monitor switches using bufferpoolon

33.獲取數據庫快照

db2 -v get snapshot for all databases > snap.out

db2 -v get snapshot for dbm>> snap.out

db2 -v get snapshot for all bufferpools>> snap.out

db2 -v terminate

34.重置數據庫快照

db2 -v reset monitor all

35.計算緩沖池命中率 理想情況下緩沖池命中率在95%以上,計算公式如下:

(1 -((buffer pool data physical reads + buffer pool index physical reads)

/(buffer pool data logical reads + pool index logical reads))) *100%

36.創建db2實例

db2icrt <實例名稱>

37.删除db2實例

db2idrop <實例名稱>

38.設置當前db2實例

set db2intance=db2

39.顯示db2擁有的實例

db2ilist

40.恢複離線增量備份數據庫的命令

DB2 RESTORE DATABASE YNDC INCREMENTAL AUTOMATIC FROM

D:backupautobakdb2 TAKEN AT

41.創建樣本數據庫

在unix平台,使用:

sqllib/bin/db2sampl 

在windows,os/2平台,使用:db2sampl e,e是可選參數,指定将創建數據庫的驅動器;

42.列出數據庫中所有的表

db2 list tables

43.列出某個表的數據結構

db2 describe table v_ro_role

44.給表增加列

ALTER TABLE STAFF

ADD COLUMN PNHONE VARCHAR(20)

45.數據遷移方法1

export腳本示例

db2 connect to testdb user test password test

db2 "export to aa1.ixf of ixf select * from table1"

db2 "export to aa2.ixf of ixf select * from table2"

db2 connect reset

import腳本示例

db2 connect to testdb user test password test

db2 "load from aa1.ixf of ixf replace into table1 COPY NO without prompting "

db2 "load from aa2.ixf of ixf replace into table2 COPY NO without prompting "

db2 connect reset

錯誤處理

DB2計算機程序一個重要的特征就是錯誤處理。SQL communications area(SQLCA)結構曾一度被專門用于DB2程序在每個SQL語句被執行後向應用程序返回錯誤信息。在SQLCA block中常見錯誤診斷被體現在SQLCODE中。

SQL返回代碼的值對應為:

· 0表示成功執行

· 正值表示成功執行但是有一個或多個警告。

例如+100表示沒有行被發現。

· 負值表示出現錯誤。例如-911表示鎖超時(或死鎖),并觸發撤消程序。

精簡版

DB2 Express-C數據庫提供全球範圍的下載,但是并不是所有地方都有寬帶網絡。因此,IBM發布了一個基于Windows的DB2 Express-C 9.7.2精簡版。較之完全版,精簡版驚人的縮減了44%。

不同于精簡版,DB2 Express-C(完全版)包括控制中心、全文檢索、配置助手以及第一步向導。同時完全版的用戶界面還支持非英語語言。但是,如果用戶不需要這些特性,則可以選擇DB2 Express-C(精簡版)進行快速下載和簡單安裝。

例如,如果在Windows服務器上設置一個用Data Studio來進行遠程管理的DB2數據庫,那麼DB2 Express-C精簡版就是一個不錯的選擇。

上一篇:J2EE

下一篇:變量

相關詞條

相關搜索

其它詞條