首先,是添加資料庫執行個體:
DB2的執行個體之間是相互獨立的,執行個體可以被看作是資料庫的容器。而預設DB2裝好後會自己建一個名為DB2的執行個體。我們這裡需要建立一個,命令這樣敲:
在db2的命令列工具裡面開啟命令列,然後輸入:
複製代碼 代碼如下:
db2icrt INSTNAME
它這個執行個體名還挺噁心的,必須是小於8個字元的名字。
再用命令列建立好以後才能用那個控制中心的添加執行個體的功能來添加剛才建立的執行個體。其實這個添加只是把已有的執行個體添加到GUI的控制中心裡,而不是建立執行個體。。。。所以,必須注意的是,在這個控制中心裡,只要是添加的命令,似乎都得小心點它實際上並沒有建立東西,只是把已有的東西拿進來管理。
另外,再添加的時候,那個所謂的執行個體節點名也就僅僅是用於表示這個執行個體的一個節點的名字而已,似乎對於單台伺服器來說意義不大。貌似是一個執行個體對應的每個執行個體節點群組成一個分區執行個體的時候才有意義。
然後開始建立資料庫:
好的,建立好執行個體之後我們要在執行個體上建立資料庫。由於是Windows的環境下,你第一次建一定會遇到類似這樣的錯誤
複製代碼 代碼如下:
SQL1052N 資料庫路徑 "D:/foo/bar" 不存在。
說明:
該命令的 "<path>" 參數中指定的路徑無效。不存在該名稱的路徑,或者在
DB2_CREATE_DB_ON_PATHS 註冊表變數被禁用時,指定了路徑(僅限於 Windows)
。
按照這個說法很簡單只需要執行一下這個命令即可:
複製代碼 代碼如下:
db2set DB2_CREATE_DB_ON_PATH=YES
不過很遺憾,我還是得到了個報錯,為什麼呢?其實你使用這個命令來查看就知道了:
複製代碼 代碼如下:
C:/Program Files/IBM/SQLLIB/BIN>db2set -all
[e] DB2PATH=C:/Program Files/IBM/SQLLIB
[i] DB2PROCESSORS=0,1,2,3
[i] DB2INSTPROF=C:/Documents and Settings/All Users/Application Data/IBM/DB2/testdb2
[i] DB2COMM=TCPIP
[g] DB2_EXTSECURITY=YES
[g] DB2SYSTEM=SENDS-TV
[g] DB2PATH=C:/Program Files/IBM/SQLLIB
[g] DB2INSTDEF=DB2
[g] DB2ADMINSERVER=DB2DAS00
C:/Program Files/IBM/SQLLIB/BIN>db2set -?
-all 顯示出現的所有本地環境變數,如以下各項中所定義:
* 環境,用 [e] 表示
* 使用者級註冊表,用 [u] 表示
* 節點級註冊表,用 [n] 表示
* 執行個體級註冊表,用 [i] 表示,和
* 全域級註冊表,用 [g] 表示
看到了吧,那個所謂的DB2_CREATE_DB_ON_PATH變數知識個執行個體級註冊表,所以你直接執行上面那個命令改的是db2這個預設執行個體的東西。為了對我們建立的執行個體INSTNAME起作用,我們必須用這個命令:
複製代碼 代碼如下:
db2set -i INSTNAME DB2_CREATE_DB_ON_PATH=YES
註:此外,你可以通過DB2內建的那個配置助手來進行這些配置,GUI下的操作簡單,就不寫了。
好的,到此為止,資料庫也已經成功的建立了,接下來就是日常事務了。
現在我們來看看DB2的用戶端
IBM喜歡把它譯作客戶機。用習慣了MySQL的同學肯定會覺得有些突兀吧。DB2的用戶端也有很多個不同的版本,此外,除了IBM自己的用戶端之外,也有第三方開發商弄的用戶端,這篇入門文章,我們還是只探討IBM自己的東西。
![]()
下面是IBM自己的說法:
IBM Data Server Client
IBM Data Server Client 是可用於 IBM 資料服務器的完整安裝的客戶機。在 DB2 9.5 中,它充分支援所有受支援的 API。例如,它為 Ruby 提供了驅動程式。在 DB2 9 中,需要通過後安裝(post-installation)下載和配置步驟來添加 Ruby 支援。這個客戶機還提供了完整的圖形化工具。例如,如果安裝一個 IBM Data Server Client,您可以獲得 Configuration Assistant、IBM Add-ins for Visual Studio、語言支援,等等。
如果您計劃使用這個客戶機在一個後端 IDS 資料服務器中支援 OLE DB 應用程式,則需注意這個介面不支援這種使用。但是可以使用這個客戶機提供的 ODBC 支援彌補這類情境中的缺陷。
簡單來講,如果某個選項可以用於一個 DB2 客戶機,那麼它就是可用的。DB2 Client 是與 DB2 連通性有關的所有內容的超集。如上圖所示,如果需要任何工具支援,則必須安裝這種客戶機。
IBM Data Server Client 約為 330 MB。您可以使用前面提到的 db2iprune 公用程式自訂這個客戶機把它縮減到大約 200 MB。
IBM Data Server Runtime Client
IBM Data Server Runtime Client 是輕量級客戶機部署的最佳選擇。它要比它的 DB2 9 夥伴小一些,並且現在和 IBM Data Server Client 一樣提供了 IDS 支援。這個客戶機沒帶有任何工具 — 如前所述,它是由 DB2 8 裡前身改變而來(從 DB2 8.2 Run-Time 客戶機中刪除了 CCA。它不再是 DB2 9 Runtime Client 的一部分)。如果您希望使用 Configuration Assistant 來圖形化配置 DB2 9.5 中的串連,則無法在此找到這個工具。然而,這個客戶機卻包含了 DB2 CLP。這個客戶機包含了所有 DB2 介面,例如,Ruby 驅動程式、.NET 驅動程式等等。和 IBM Data Server Client 一樣,這個客戶機並不支援與IDS資料服務器建立OLE DB串連。IBM Data Server Runtime 客戶機在安裝後大約佔 60-70 MB 的磁碟空間。
如果您的記憶體需求非常緊迫,則不適合使用這種佔用空間較大的客戶機,但是它提供了針對任何應用程式連通性情境的充分支援。如果您支援使用各種程式設計語言構建的應用程式,並且不需要任何工具,那麼這種客戶機是最佳選擇。如果支援像 Ruby on Rails 這樣的開源應用程式並且不需要工具,該客戶機則是惟一的選擇,因為驅動程式不會為 Ruby、PHP 這樣的開源 API 包含先行編譯的二進位檔案。
IBM Data Server Driver for JDBC and SQLJ
這個驅動程式與 DB2 9 中的驅動程式非常相似,但是進行了一些技術增強和修複(在 pureQuery 環境中也會用到這個驅動程式)。和所有 IBM 資料服務器連通性選項一樣,這個驅動程式也支援 IDS 資料服務器。它通過 db2jcc.jar 的單一包的方式交付(如果需要將它串連到 DB2 for i5/OS 或 DB2 for z/OS 資料服務器,則需要一個有效 DB2 Connect 許可),並且按照 JDBC 3.0 規範進行交付。DB2 9.5 還通過一個稱為 db2jcc4.jar 的包支援 JDBC 4.0 規範。
如果您需要對基於 Java 的應用程式使用一個輕量級的、免著作權費的可重新發布的驅動程式,並且不需要任何工具,那麼這是最佳選擇,因為它支援諸如串連集中(connection concentration)、客戶機自動重路由等進階特性。由於只佔用大約 2MB 的空間,我將驅動程式使用的空間稱為一個指紋(fingerprint)。這個驅動程式的使用有多麼普遍呢?每分鐘有數十億美元的資金依靠它運作(或者其早先的版本)。
IBM Data Server Driver for ODBC, CLI, and .NET(只針對 Windows)
這個驅動程式按照 DB2 9 的方式交付,除了新添加的 .NET 支援外,還包括針對 ODBC 和 CLI 介面的支援。這是一個非常適合 .NET 應用程式的部署選項,因為您不再需要僅僅為了向 .NET 應用程式提供連通性而使用大量的記憶體。此外,添加了針對 Ruby、Perl 和 PHP 這類介面的二進位版本,因此無需親自編譯(儘管驅動程式的名稱中沒有提到),這大大降低了這些應用程式的部署時間(以及部署工作)。
IBM Data Server Driver for ODBC, CLI, and .NET 還提供了一些非常不錯的 Windows 增強。例如,附帶了一個安裝封裝器,可以顯著增強在 Windows 上的部署特性。
這個驅動程式還提供了一組合併模組,比如 DB2 Runtime Client。我推薦使用這些合併模組進行安裝,因為不論是誰開發您的應用程式的安裝範例,它都非常適合。如果您不需要 CLP 或其他任何工具,我推薦使用這個驅動程式,因為它不會產生任何執行個體管理負擔。
現在,您應該非常清楚何時適合使用這個驅動程式。然而,需要注意一點,這個驅動程式並不包含對 OLE DB 的支援。我想我需要特別指出這點,應該通常情況下 ODBC 和 OLE DB 支援是互相關聯的。如果需要支援一個 OLE DB 應用程式,則至少要安裝一個 DB2 Run-Time Client。
注意 :儘管名稱有些不符,從 IDS 的角度來看,這個驅動程式只交付面向 .NET、PHP、Perl 和 Ruby 編程介面的支援(它建議客戶機繼續使用 Informix SDK for C/C++ 應用程式)。這個驅動程式附帶了一個免著作權費的發布許可。
DB2 9.5 的新的 .NET 部署選項遠遠超越了為應用程式提供運行時環境這一功能。如果您希望部署最輕量級的 .NET 開發環境,您可以下載獨立的 IBM Add-ins for Visual Studio(大約 30 MB)和這個驅動程式(大約 10 MB),您將獲得一個專門為 .NET 整合了 IBM 資料服務器開發環境的 Visual Studio。記住,如果使用這個方法,IBM Add-ins for Visual Studio 和 IBM Data Server Driver for ODBC, CLI, and .NET必須位於相同的代碼層級。例如,如果您計劃支援 Visual Studio 2008 IDE,則必須在 Fix Pack 1 層級安裝這些組件。如果 Fix Pack 2 對任一個這些組件進行了功能性修改,那麼必須確保所有這些組件都處於 Fix Pack 2 層級。
IBM Data Server Driver for ODBC and CLI
這個驅動程式實際上提供了與 IBM Data Server Driver for ODBC, CLI, and .NET 相同的功能、特性和優點,惟一的不同是它絕對不支援 .NET 或提供以 Windows 為中心的部署增強。如果需要支援前面小節中描述的相同情境,那麼可以使用這個驅動程式,但是注意不能將它用於 .NET 應用程式。這個驅動程式可從 DB2 9 獲得,它還附帶了免著作權費用的發布許可。
IBM Data Server Add-ins for Visual Studio
IBM Data server Add-ins for Visual Studio 在過去只是為了獲得一般可用性而作為基於 Windows 的 DB2 Client 或伺服器映像附帶(換言之,我在這裡不會介紹技術內容)。在 DB2 9 中,這個外掛程式以前被稱為 IBM Database Add-ins for Visual Studio 2005。在 DB2 9.5 中,它被重新命名以反映可用於 Visual Studio 2005 或 Visual Studio 2008 的外掛程式,因此從外掛程式名稱中去掉了版本資訊。
在 DB2 9.5 中,雖然 DB2 Client 和伺服器映像仍然附帶了這個外掛程式,但是現在它可以作為獨立下載的映像使用,大概有 30 MB 的大小。
不管IBM自己怎麼說,當務之急還是下載用戶端要緊,DB2的用戶端可以從這裡去尋找:http://www-01.ibm.com/software/data/db2/ad/
為了讓客戶機可以串連伺服器,還需要設定一下執行個體的通訊設定。這裡選中執行個體以後在控制中心裡把對應的執行個體的通訊設定裡面設定成tcp/ip,並且設定好你要的連接埠即可。此外還需要設定DBM配置裡面的通訊部分的SVCENAME這個變數可以在控制中心設定,如果要用命令的話似乎是這樣的:
複製代碼 代碼如下:
UPDATE DBM CFG USING SVCENAME 50001 DEFERRED;
上面都配置好了以後就可以用用戶端串連了:
我這裡是用的runtime client,所以這裡需要使用命令列(選擇命令列工具輸入db2進入互動介面):
複製代碼 代碼如下:
db2 => catalog tcpip node MYDB2 remote 192.168.0.11 server 50000
//catalog tcpip node命令表示以tcpip串連方式建立節點
//MYDB2是節點名,可以隨便指定 remote制定遠程伺服器的
//hostname或者ip,server制定服務名稱或者連接埠號碼
DB20000I The CATALOG TCPIP NODE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is refreshed.
db2 => catalog db MYTEST as MYTESTALIAS at node MYDB2
//在你的節點下編目一個資料庫,注意這裡必須要制定一個不同的別名,否則會出現找不到伺服器的連結錯誤。
DB20000I The CATALOG DATABASE command completed successfully.
DB21056W Directory changes may not be effective until the directory cache is refreshed.
db2 => connect to MYTESTALIAS user USERNAME using PASSWORD
Database Connection Information
Database server = DB2/NT 9.7.0
SQL authorization ID = USERNAME
Local database alias = MYTESTALIAS
至於為什麼要這麼做,實際上,是因為這個用戶端也自己維護了一個編錄,你需要先建立一個本地的node來儲存一台資料庫伺服器的資訊,之後再添加一個對應的資料庫目錄才可以串連。
關於這一部分內容,可以參考這段引用:
在DB2中從Client Access Server端的資料庫時,不能直接用connect命令,而必須先建立通訊node,再在node的基礎上建立資料庫連接。在命令列的具體操作如下:
->db2 catalog tcpip node ABC remote serverName server 50000
->db2 catalog db databaseName at node ABC
->db2 connect to databaseName user Uid using Pwd
說明:
catalog tcpip node ABC 中的ABC是由你任意起的一個結點名,結點名不能跟已有的結點名重複
catalog db databaseName at node ABC 中的ABC指的是你在前面起的那個結點名
serverName 伺服器名稱(遠端資料庫)
databaseName 資料庫名稱
Uid 使用者名稱
Pwd 密碼
另外,如果用戶端已經跟同一個伺服器建立了node,那麼如果你想串連該伺服器上的另一個資料庫時,不需要再另建node,直接用同一個node即可。另外,建立node時伺服器名稱後的連接埠不一定是50000,要看DB工程師當時的設定。
相關指令:
list db directory 列出可訪問的db
list node directory 列出可訪問的結點
其他一些重要的DB2命令
1. 查看本地節點目錄
命令視窗中輸入:db2 list node directory
2. 編目一個TCP/IP節點
命令視窗:db2 catalog tcpip node <node_name> remote <hostname|ip_address> server <svcname|port_number> ostype <OS2|AIX|WIN95|NT|HPUX|SUN|MVS|OS400|VM|VSE|SCO|SGI|LINUX|DYNIX>
3. 取消節點編目
db2 uncatalog node <node_name>
4. 查看系統資料庫目錄
db2 list database directory
5. 查看本機資料庫目錄
db2 list database directory on <盤符>
在本機資料庫目錄中有而系統資料庫目錄中沒有的資料庫不能訪問,可以在控制中心中選中<資料庫>按右鍵選擇添加,然後輸入需要添加的資料庫名稱或者點擊重新整理按鈕選擇資料庫,加入資料庫後即可以訪問。
6. 編目資料庫
db2 catalog database <db_name> as <db_alias> at node <node_name>
7. 取消資料庫編目
db2 uncatalog database <db_name>
8. 測試遠端資料庫的串連
db2 connect to <db_alias> user <user_id> using <password>
接下來,一個顯然的問題就是使用者認證及其許可權
和MySQL Orancle不同,DB2對於使用者的認證是直接整合作業系統的使用者認證的,因此,db2的使用者就是作業系統的使用者。在成功的通過了使用者驗證以後,就開始驗證使用者權限了。
至於使用者權限的設定,可以直接使用控制中心對某個表、資料庫甚至執行個體進行配置。表許可權就是select等等,這些大家都清楚,而資料庫許可權要說明一下:
資料庫許可權
每個資料庫許可權都允許擁有該許可權的授權標識對整個資料庫執行某種特定類型的操作。資料庫許可權與特權不同,後者允許對特定資料庫物件(例如表或索引)執行特定操作。
這些是資料庫許可權。
ACCESSCTRL
允許擁有者授予和撤銷所有對象特權和資料庫許可權(對審計常式的特權除外)以及 ACCESSCTRL、DATAACCESS、DBADM 和 SECADM 許可權。
BINDADD
允許擁有者在資料庫中建立新包。
CONNECT
允許擁有者串連到資料庫。
CREATETAB
允許擁有者在資料庫中建立新表。
CREATE_EXTERNAL_ROUTINE
允許擁有者建立過程以供資料庫的應用程式和其他使用者使用。
CREATE_NOT_FENCED_ROUTINE
允許擁有者建立未受防護的使用者定義的函數(UDF)或過程。將把 CREATE_EXTERNAL_ROUTINE 自動授予任何已被授予 CREATE_NOT_FENCED_ROUTINE 許可權的使用者。
注意: 資料庫管理員不會阻止未受防護的 UDF 或過程訪問它的儲存空間或控制塊。因此,具有此許可權的使用者必須非常仔細地測試他們的 UDF,以使之特別嚴密,然後再將其註冊為未受防護的 UDF。
DATAACCESS
允許擁有者訪問儲存在資料庫表中的資料。
DBADM
允許擁有者充當資料庫管理員。特別是,它授予擁有者除 ACCESSCTRL、DATAACCESS 和 SECADM 之外的所有其他資料庫許可權。
EXPLAIN
允許擁有者說明查詢方案,而不要求他們擁有訪問這些查詢方案所引用的表中資料的特權。
IMPLICIT_SCHEMA
允許任何使用者隱式地建立模式(使用 CREATE 語句建立對象,並指定尚不存在的模式名)。SYSIBM 成為隱式建立的模式的所有者,並且授予 PUBLIC 在此模式中建立對象的特權。
LOAD
允許擁有者將資料裝入到表中。
QUIESCE_CONNECT
允許擁有者在資料庫處於停頓狀態時訪問該資料庫。
SECADM
允許擁有者充當資料庫的安全性系統管理員。
SQLADM
允許擁有者監視和調整 SQL 陳述式。
WLMADM
允許擁有者充當工作負載管理員。特別是,WLMADM 許可權的擁有者可以建立和刪除工作負載管理器對象、授予和撤銷工作負載管理器特權以及執行工作負載管理器常式。
只有具有 SECADM 許可權的授權標識才能授予 ACCESSCTRL、DATAACCESS、DBADM 和 SECADM 許可權。所有其他許可權都可以由具有 ACCESSCTRL 或 SECADM 許可權的授權標識授予。
要從 PUBLIC 除去任何資料庫許可權,具有 ACCESSCTRL 或 SECADM 許可權的授權標識必須顯式地撤銷該許可權。
關於許可權這一部分是一個大話題,有機會以後再寫,這一部分的內容完全可以參考這裡的文檔來配置:
http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.sec.doc/doc/c0005524.html