首先,是添加數據庫實例:
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中從客戶端訪問服務器端的數據庫時,不能直接用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