程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

編輯:DB2教程

簡介

我們談到了如何利用 MS SQL Server 2000 方面的技能學習 DB2。您對 Oracle 背景知識的熟悉程度更超過 SQL Server 嗎?如果是這樣,那麼請繼續閱讀。在本文中,我們將展示如何使用您現有的 Oracle 10g 知識來快速掌握 DB2 9 方面的技能。

在 2006 年 7 月 28 日,IBM 發布了 DB2 9 for Linux, UNIX, and Windows,這是一種真正的混合型數據服務器,可滿足當今苛刻的業務需求。 DB2 9 是當今惟一采用 pureXML™ 技術的數據服務器,這種技術允許以原生的形式存儲 XML,也就是說,以分層格式存儲 XML。 DB2 9 的其他特性包括行壓縮、基於標簽的訪問控制(label based Access control,LBAC)安全性以及自調優內存管理器(Self-tuning Memory Manager,STMM)等自治特性。本文首先對 DB2 與 Oracle 作一個比較,然後著重介紹 DB2 9 中的新特性。

注意:在本文後面的內容中,我們將使用術語 “Oracle” 來表示 Oracle 10g Release 2,而用 “DB2” 表示 DB2 9 for Linux, UNIX, and Windows。

系統結構概述

首先,我們需要理解 Oracle 使用的架構,並理解它與 DB2 的不同之處。圖 1 展示了 Oracle 的系統結構。將該圖與 圖 2 進行比較,後者顯示了 DB2 的系統結構。在閱讀本文的時候,為便於理解,可以參照這兩個圖。

圖 1. Oracle on Linux, UNIX, and Windows Version 10.2 的系統結構

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

圖 2. DB2 on Linux, UNIX, and Windows 系統結構

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

實例

在 Oracle 和 DB2 中,實例 的概念是類似的。在這兩者之中,實例都是指後台進程與共享內存的組合。兩者之間的主要差別在於,在 Oracle 中每個實例只能有一個數據庫,而在 DB2 中多個數據庫可以共享一個實例。

在 Oracle 中,由於數據庫與實例是一對一的關系,因此用 CREATE DATABASE 命令創建一個數據庫的同時便隱式地創建了一個實例。或者,為了在計算機上創建一個 Oracle 實例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 實用程序,後者是 Oracle 9i 通過 NEW 選項提供的。另外還必須提供某些信息,包括系統標識符(System IdentifIEr,SID)或一個服務名稱、實例密碼、最大用戶數、啟動模式等等。類似地,為了刪除實例,可以使用 ORADIM 實用程序加 DELETE 選項。這裡需要提供 SID 或服務名稱。除非在安裝過程中創建一個新的數據庫,否則在以 fresh 方式安裝 Oracle 的時候,不會創建缺省的實例。

在 DB2 中,當在 Windows 平台上安裝了該產品之後,便缺省地創建了一個實例 "DB2"。在 Linux 和 UNIX 中,缺省的實例名稱為 "db2inst1"。若要在同一台計算機上創建另一個實例,只需執行命令 db2icrt <instance name>。

圖 3 展示了缺省的 DB2 實例 “DB2”(在 Windows 中)和從 DB2 Control Center GUI 中用 db2icrt 命令創建的另外兩個實例。

圖 3. 顯示 DB2 實例的 DB2 Control Center GUI

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

若要在命令行接口中引用給定的 DB2 實例,可以使用環境變量 DB2INSTANCE。通過這個變量,可以指定當前活動實例,所有命令將應用到此實例。例如,如果 DB2INSTANCE 被設置為 PROD,然後您執行了命令 create database MYDB1,將創建一個與實例 PROD 關聯的數據庫。如果要在實例 DB2 上創建該數據庫,那麼必須首先將 DB2INSTANCE 變量的值改為 DB2。這類似於 ORACLE_SID (System IdentifIEr),當用戶想要在不同實例之間進行切換時,也是使用 Oracle_SID。

還有一種標識要使用的實例的簡單方法,那就是使用 DB2 Control Center GUI,如 圖 3 所示。要在該工具中看到對應於新實例的條目,需要通過右擊 Instances 並選擇 Add 來將該實例添加到此工具中。要刪除 DB2 中的一個實例,可以執行命令 db2idrop <instance name>。

總之,在 Oracle 中,可以使用 Database Configuration Assistant 來創建、修改、啟動、停止和刪除實例,而在 DB2 中則可以使用 Control Center GUI 做同樣的事情。而且,Oracle 實例與數據庫只能是一對一的關系,而在 DB2 中卻不是這樣。一個 DB2 實例中可以同時存在多個數據庫,並且可以並發地使用這些數據庫。

數據庫

在 Oracle 中,可以用 CREATE DATABASE 命令手動創建數據庫,也可以用 Database Configuration Assistant 創建數據庫。手動創建數據庫時,在執行 CREATE DATABASE 命令之前,需要執行一系列的步驟,包括設置 OS 變量,准備參數文件,以及創建密碼文件。

元數據信息在 Data Dictionary 中存儲和管理,由基本表和相應的視圖組成。基本表是在數據庫創建過程中自動創建的,而視圖則是通過運行 catalog.sql 和 catproc.sql 腳本構造的。

因此,Oracle 數據庫可看作包含 3 種類型的文件的一個集合:

數據文件(Data File):包含實際的數據,數據庫的物理實現。(類似於 DB2 中的容器。)

重做文件(Redo File):相當於 DB2 中的事務日志(Transaction Log)。

控制文件(Control File):包含用於維護和驗證數據庫完整性的信息。

在 DB2 中,一個實例可以包含多個數據庫,如 圖 2 所示。每個數據庫都是一個封閉的、真正獨立的單元。每個數據庫有其自己的編目表空間、臨時表空間和用戶表空間,這些表空間是在創建數據庫時缺省創建的。DB2 包含一個稱為系統數據庫目錄(system database directory) 的二進制文件,其中包含可從 DB2 機器上連接的所有數據庫的條目。這個目錄保存在實例級。

當創建一個實例時,缺省情況下不會創建數據庫,您需要使用 create database 命令顯式地創建一個數據庫。此外還可以用 Control Center 創建數據庫,如 圖 4 和 圖 5 所示。

圖 4. 使用 Control Center GUI 創建 DB2 數據庫

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

圖 5. 使用 Control Center GUI 創建 DB2 數據庫(續)

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

在 圖 5 中,您也可以看看單擊 Show Command 時會出現什麼情況。所有的 DB2 Control Center GUI 屏幕都會顯示實際上在後台執行的 SQL 語句或命令。這些命 令可以保存在一個腳本中,以便在以後執行,或者也可以將它們復制到 Command Line Processor(CLP)或 Command Center GUI 工具中,在這些工具中執行。這些工具分別相當於 Oracle 的 SQL*Plus 和 iSQL *Plus。

可以使用 'DROP DATABASE' 命令或者在 DB2 Control Center GUI 中刪除一個 DB2 數據庫。而在 Oracle 中卻不是使用這樣的命令。數據庫的刪除是通過刪除所有相關數據文件來完成的。

同一個實例中的數據庫通常不會相互進行交互。然而,如果應用程序需要與多個數據庫交互,那麼通過啟用聯邦(federation) 支持可以滿足這一需求。

容器、表空間、緩沖池和頁

在 Oracle 中,在物理上數據是存儲在被稱作數據文件(Data File)的文件中的。這類似於 DB2 的容器(container),DB2 的容器也是數據實際存儲的地方。每個 Oracle 數據庫包含一個名為 SYSTEM 的表空間,這是在創建數據庫時由 Oracle 自動創建的。其他用於用戶數據、臨時數據和索引數據的表空間則需要在創建數據庫之後另行創建,並且在使用這些表空間之前,還需要為之指定一個用戶。

在 DB2 中,表空間 是邏輯對象,作為邏輯表和物理容器之間的一層。當創建一個表空間時,可以將它與一個特定的緩沖池(數據庫緩存)關聯起來,並關聯到特定的容器。這為性能管理帶來了靈活性。例如,如果有一個 "hot" 表,那麼可以在一個單獨的表空間中定義它,而這個表空間又與一個獨立的緩沖池相關聯。這有助於確保此表中的數據連續地緩存在內存中。

在 DB2 中,使用 CREATE DATABASE 命令及其缺省值創建數據庫時,同時也會自動創建三個缺省的表空間。表 1 描述了缺省的 DB2 表空間:

表 1. 用缺省值創建數據庫時,缺省創建的 DB2 表空間 表空間名稱 描述 SYSCATSPACE 包含元數據的編目表空間 TEMPSPACE1 用於執行連接和排序等操作的系統臨時表空間。這個表空間的名稱可以更改 USERSPACE1 這個表空間是可選的,如果在創建表的時候沒有顯式地指定表空間,那麼可以用這個表空間來存儲用戶表

在 DB2 中,由於數據庫是獨立的單元,因此表空間不能跨數據庫共享。由於表空間只在一個數據庫中是可知的,因此兩個不同的數據庫可以有具有相同名稱的表空間。在 圖 2 中可以看到這一點,其中數據庫 MYDB1 有一個名為 MYTBLS 的表空間,而數據庫 MYDB2 也有一個同名的表空間。

DB2 表空間可以分為 SMS(系統管理的表空間)與 DMS(數據庫管理的表空間)兩類。SMS 表空間由操作系統管理,它們只能是目錄。SMS 表空間可根據需要自動增長,因此 SMS 可以提供很好的性能,並且需要的管理也很少。DMS 表空間由 DB2 管理,既可以是文件,也可以是原始設備。這種類型的表空間可以提供最佳性能,但是需要進行一些管理。例如,需要預先指定想要為這個表空間分配多大的空間,因為這種表空間不能自動增長。

Oracle 的存儲模型中沒有 SMS 的概念,但是它的數據文件類似於 DB2 DMS 表空間。也就是說,可以通過增加數據文件的大小,或為表空間添加數據文件,或者通過添加一個新的表空間,來增加數據庫的大小。

表 2 顯示了 Oracle 數據庫或表空間與 DB2 數據庫或表空間的對應關系。

表 2. Oracle 數據庫與 DB2 數據庫和表空間的對應關系 Oracle 數據庫或表空間 DB2 數據庫或表空間 SYSTEM 是存放編目(數據字典)信息的表空間 SYSCATSPACE(編目表空間);和在 Oracle 中一樣,僅在數據庫級保存該信息 Data Dictionary(包含表和視圖形式的元數據),駐留在 SYSTEM 表空間中 系統編目表(由 SYSIBM 模式標識),系統視圖(由 SYSCAT 或 SYSSTAT 模式標識),駐留在 SYSCATSPACE 表空間中 SCOTT 數據庫 SAMPLE 數據庫 TEMP 表空間 System Temporary 表空間(缺省情況下名為 tempspace1) UNDO 表空間 N/A USER 表空間 用戶表空間。缺省情況下,USERSPACE1 一般是在數據庫創建之後才創建的

前面已指出,Oracle 的數據緩沖區概念相當於 DB2 的緩沖池。但是,DB2 允許多個緩沖池存在。在 DB2 中不需要預先定義可創建的緩沖池的數量,緩沖池的名稱可以是任意的。

Oracle 中塊(block) 的概念與 DB2 中的頁最為相似。一個 DB2 頁的大小可以為 4k、8k、16k 或 32k。表中的一個行只能放在一個頁中,而不能像 Oracle 中那樣跨多個頁。

對象名稱

Oracle 中的對象名稱形式如下:

[Schema_name.]object_name[@database]

在 DB2 中,對象名稱也是由兩部分組成的結構:

Schema_name.object_name

和在 Oracle 中一樣,DB2 模式名稱用於在邏輯上組織對象。但是兩者之間一個重要差異是,在 DB2 中,模式名稱不一定與一個用戶 id 相匹配。任何擁有 IMPLICIT_SCHEMA 權限的用戶都可以用一個不存在的模式創建對象。例如,假設 “Peter” 具有 IMPLICIT_SCHEMA 權限,他執行以下命令:

CREATE TABLE WORLD.TABLEA (lastname char(10))

該命令創建表 WORLD.TABLEA,其中 WORLD 是新創建的模式。如果 Peter 沒有顯式地指定模式,那麼該命令就會創建表 PETER.TABLEA,因為缺省情況下是使用連接 ID。

在 DB2 中,在發出與數據庫相關的命令之前,總是要連接到數據庫。因此,在這種架構下,對象名稱不需要包括數據庫名稱。

表、視圖和索引

在 Oracle 和 DB2 中,表、視圖和索引基本上是一樣的。

DB2 提供了一個名為 Design Advisor 的實用程序,可以用它來為特定的查詢或工作負載推薦索引。Design Advisor 可以從 DB2 Control Center 中調用,也可以從 DB2 CLP 中使用 db2advis 命令來調用。在 DB2 中,索引是直接與表定義綁定的。例如,當使用 DMS 表空間時,可以用下面的語句指定索引存放在哪個表空間:

CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2

上面的例子表明,表中的數據將存儲在表空間 'tbls1' 中,而索引頁將存儲在表空間 'tbls2' 中。但在 Oracle 語法中,CREATE INDEX 語句有一個選項來指定索引存放在哪個表空間。

此外,在 DB2 中,索引一旦創建好,便不能修改索引定義中的任何子句。為了進行更改,需要刪除索引,然後重新創建索引。

和在 Oracle 中一樣,不同數據庫中的 DB2 表、視圖和索引可以有相同的名稱。相同數據庫中的表和視圖則必須使用不同的名稱,但是允許使用與已有的表或視圖相同的名稱創建索引。

存儲過程、觸發器和用戶定義函數(UDF)

在 Oracle 環境中,有很多方法來創建和訪問存儲過程、觸發器和函數。PL/SQL 是 SQL 的面向對象(OO)過程擴展,支持數據操縱(DML)、流控制、變量和常量的聲明、過程和函數定義以及 OO 數據類型,例如嵌套表和變長數組(varray)。Oracle 還將 JVM 並入到它的引擎中。在 Oracle 數據庫中,可以使用 SQLJ 將存儲過程、函數和觸發器,作為類來創建、存儲和執行。Oracle 還支持 Type 1 至 4 的 JDBC 驅動程序。

DB2 存儲過程可以用 DB2 預編譯器支持的任何語言編寫,包括 Java、C、C++、REXX、Fortran 和 COBOL。但是,我們推薦您使用 SQL Procedural Language(SQL PL),這種語言非常類似於 Oracle 的 PL/SQL。在開發 SQL PL 存儲過程時,需要一個 C 編譯器,因為這種存儲過程首先要轉換成 C。存儲過程的 C 實現可以提供性能優勢,因為代碼只需編譯一次(在 unfenced 模式下性能優點尤其明顯)。但是,在開發這種存儲過程時,開發系統上需要一個額外的 C 編譯器。在 DB2 將來的版本中,有望出現不需 C 編譯器支持的 SQL PL 存儲過程。DB2 存儲過程開發還利用 Type 1 至 4 的 JDBC 驅動程序來支持 SQLJ 和 Java。

觸發器和函數的開發可以使用內聯 SQL/PL,這種方法不需要 C 編譯器。這種方法支持 SQL PL 語句的一個子集。另外還可以使用 DB2 Development Center Tool 來簡化 DB2 存儲過程和用戶定義函數的創建、構建、調試和部署。

配置文件

傳統上,Oracle 將所有與會話和系統相關的參數存儲在一個文本文件中,這種文件通常被稱做 initSID.ora。但是,由於這種文本文件不具有持久性,從 Oracle 9i 開始,Oracle 引入了 Server Parameter File(SPFILE),這是一種存儲在服務器上的二進制參數文件。它在實例停止之後到啟動之前這個過程中是持久存在的。不過,當 SPFILE 不可用的時候,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何對參數有影響的 ALTER SYSTEM 和 ALTER SESSION 命令都只能在實例或會話活動期間持久。每當數據庫實例需要回彈(rebound)時,DBA 都必須手動修改 initSID.ora 文本文件。對於偵聽器,網絡訪問配置通常存儲在 listener.ora 中;對於客戶機訪問,網絡訪問配置通常存儲在 tnsnames.ora 中。

在 DB2 中,配置參數也是存儲在實例級和數據庫級,在實例級是數據庫管理器(database manager) 配置文件,在數據庫級是數據庫配置文件。這些參數大多數都可以動態地更改,也就是說,不需要為了使對參數值的更改生效而停止並重啟實例或者重連所有連接。

如果想在 CLP 中手動更改特定的數據庫管理器配置參數,可以使用命令 UPDATE DBM CFG USING <parameter name> <new value>。

如果想在 CLP 中手動更改特定的數據庫參數,可以使用命令 UPDATE DB CFG FOR <database name> USING <parameter name> <new value>。

這兩個命令分別相當於 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,也可以使用 Control Center 查看和修改這些參數的值。如果右鍵單擊一個給定的實例,並選擇 Configure Parameters,那麼可以看到 圖 6 中顯示的窗口。

圖 6. DB2 Database Manager 配置參數(實例級)

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

在數據庫級,右擊一個給定的數據庫,並選擇 Configure Parameters,則可以看到 圖 7 中顯示的窗口。

圖 7. 數據庫配置參數(數據庫級)

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

DB2 提供了很多用於配置系統的參數。但是,如果想通過一種容易的方法自動配置系統,那麼可以使用 autoconfigure 命令(或者 Configuration Advisor GUI),它會根據您提供的一些信息將數據庫管理器配置參數和數據庫配置參數設置成最佳值。圖 8 顯示了 Configuration Advisor。

圖 8. DB2 Configuration Advisor

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

除了配置文件外,DB2 通常還為與平台相關的配置使用 DB2 注冊表變量。注意,DB2 注冊表變量與 Windows 注冊表沒有任何關系。可以使用命令 db2set 查看和更改這些變量。

連接(網絡訪問)信息存儲在 System 數據庫目錄、本地數據庫目錄和節點目錄中。這些都是二進制文件,只能用 CATALOG 和 UNCATALOG 命令修改。

內存架構和後台進程

接下來,我們來看看內存架構和後台進程,並且比較一下 Oracle 和 DB2 中內存架構和後台進程的不同之處。

圖 9. Oracle 內存架構和後台進程

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

Oracle 中的 System Global Area(SGA)是一組共享內存塊,用於存儲與實例有關的信息。其中包括語句緩存、重做日志緩沖區和數據緩沖區緩存。Program Global Area(PGA)和 User Global Area(UGA)共享內存塊,包含用於服務器進程和用戶會話的數據和控制信息。

Oracle 支持在同一台計算機上存在多個實例,但不允許共享後台進程。例如,同一台計算機上的三個實例就需要三組後台進程。因此建議在一台計算機上包含一個數據庫、一個實例和多個模式。

圖 10. DB2 內存架構和後台進程

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

DB2 和 Oracle 都使用共享內存塊,但是 DB2 與 Oracle 內存架構的實現方式略有不同。由於 DB2 實例可以包含多個數據庫,因此存在兩個級別的配置。在前一節已經提到,實例級的配置可以在 DBM CFG 文件中完成,而數據庫級的配置則可以在 DB CFG 文件中完成。這兩個級別上的配置參數都可以進行調整,以調優內存使用情況。後文將更詳細地闡述 DB2 的內存結構和不同的後台進程。

Oracle 是在實例和數據庫啟動時將內存分配給它們的,而 DB2 則是在不同級別上分配內存。這主要是因為 DB2 實例可以包含多個數據庫。DB2 中主要有三種內存結構:

實例共享內存:這是數據庫管理器全局共享內存,是在使用 db2start 命令啟動實例時分配給實例的,並且在發出 db2stop 命令停止實例之前,一直處於已分配狀態。

數據庫共享內存:這是數據庫全局內存,是在激活數據庫或者第一次連接到數據庫時分配的。分配的內存包括緩沖池、鎖列表、數據庫堆、實用程序堆、包緩存和編目緩存。

應用程序共享內存:這是在應用程序連接到一個數據庫時分配的內存,由處理連接到數據庫的客戶機所請求的工作的代理使用。每個連接到數據庫的應用程序都會被分配內存;因此,對會影響應用程序共享內存的參數的正確配置就非常重要。

在 DB2 for Windows 中,服務器活動是以線程的形式進行的,而在 Linux 和 UNIX 環境中,這些活動是以後台進程的形式來實現的。DB2 有以下幾種級別的進程:

實例級:這些進程是在實例啟動時初始化的:

DB2 Daemon Spawner(db2gds):全局守護處理程序,每個實例都對應一個這樣的進程(僅在 UNIX 中)

DB2 System Controller(db2sysc):DB2 主進程。

DB2 Watchdog(db2wdog):所有其他進程的父進程。

DB2 Format Log(db2fmtlg):類似於 Oracle 中的 ARCn 進程,為日志路徑中的日志文件預先分配空間。

數據庫級:這些進程是在建立到數據庫的連接時初始化的:

DB2 Log Reader(db2loggr):類似於 Oracle 的 PMON 進程的一個子集。該進程在回滾、重啟恢復和前滾期間讀取日志文件。

DB2 Log Writer(db2logw):將日志從日志緩沖區刷新到磁盤上的事務日志文件中。相當於 Oracle 中的 LGWR 進程。

DB2 Page Cleaner(db2pclnr):相當於 Oracle 中的 DBWR 進程,該進程在將頁從磁盤上轉移到 BP 中之前,清理緩沖池。

DB2 Prefetcher(db2pfchr):將需要用到的頁預先從磁盤取出到緩沖池中。

DB2 Deadlock Detector(db2dlock):死鎖檢測器進程。

應用程序級:每個連接到數據庫的應用程序,都具有屬於它自己的應用程序級後台進程與之相關聯。這些進程有:

DB2 Communication Manager(db2ipccm):進程間通信進程,用於每個本地連接的客戶機。

DB2 TCP Manager(db2tcpcm):TCP 通信管理器進程,用於使用 TCP/IP 連接數據庫的遠程客戶機。

DB2 Coordinating Agent(db2agent):代表應用程序處理所有請求的進程。

DB2 Subagent(db2agnta):空閒子代理。

Active Subagent(db2agntp):在啟用了 SMP 並行的情況下使用的活動子代理,它使一個任務可以使用多個進程。

鎖機制

Oracle 中的鎖可以是手動的,也可以是自動的。Oracle Lock Manager 可以在行級隱式地鎖定表數據,此外也可以使用以下 SQL 語句在事務或會話級覆蓋缺省的鎖:

1. SET TRANSACTION ISOLATION LEVEL

2. LOCK TABLE

3. SELECT FOR UPDATE

Oracle 支持一種稱為 Multi-Version Read Consistency 的機制,這是用 undo 段中的 undo 數據實現的。

DB2 實現 ANSI 標准隔離(Isolation)級別,例如未提交讀(Uncommitted Read)、游標穩定性(Cursor stability)、讀穩定性(Read stability)和可重復讀(Repeatable Read)。除非使用未提交讀隔離級別,否則用戶只能看到已提交的數據。行鎖是根據隔離級別隱式地獲得的。可鎖定的數據庫對象有表空間、表和行,但是,只有表和表空間可以顯式鎖定。可使用 LOCK TABLE 命令來鎖定一個表,而不是使用缺省的行鎖定。

與 Oracle 不同,在 DB2 中,鎖是存儲在內存中的,而不是存儲在數據頁中。可以使用 LOCKLIST 數據庫配置參數來配置鎖可用的內存,而 MAXLOCKS 配置參數則定義用於一個特定應用程序的鎖的最大內存。

安全性

Oracle 和 DB2 都是具有基本的和高級的安全特性的安全數據庫。Oracle 中有 4 種不同的用戶身份驗證方法:

數據庫:數據庫執行對用戶的識別和身份驗證。

外部:操作系統或網絡服務執行身份驗證。

全局身份驗證和授權:由 SSL 對用戶進行全局身份驗證。

代理身份驗證和授權:中間層服務器執行身份驗證。

身份驗證方法是在使用 CREATE USER 命令創建用戶時指定的。Oracle 中有一些 Data Dictionary 視圖,其中包含了關於這些用戶的信息。

在 DB2 中,用戶不是存在於數據庫中,而是由操作系統來管理。沒有數據庫登錄信息存放在數據庫表中。任何操作系統用戶都有可能訪問 DB2;但是,除非他們被授予了給定的 DB2 權限或特權,否則他們能做的事情不多。通過 Control Center GUI 很容易授予和撤銷權限和特權。不過首先需要將可用操作系統用戶或組中的一個用戶或組添加到 Control Center。

在 DB2 中沒有 “角色(role)” 這個術語。相反,DB2 使用術語 “權限(authority)”,它類似於 Oracle 的數據庫角色,DB2 通過權限將特權授予某些組或用戶。DB2 支持的權限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。

不能使用 GRANT SQL 語句授予 SYSADM、SYSCTRL 和 SYSMAINT 權限。這些特殊的權限只能在數據庫管理器配置文件中設置。

DB2 還使用術語 “特權(privilege)”,它類似於 Oracle 的系統和模式對象特權。DB2 中有數據庫特權(連接、創建表等)和數據庫對象特權(模式、表、視圖等)。圖 11 顯示了從 Control Center GUI 獲得的 DB2 安全性信息。Change User 窗口中顯示的大部分選項卡對應了 DB2 所支持的特權。

圖 11. DB2 安全性

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

Oracle 10g 的安全性大體上沒有變化,只有部分增強。下面是 Oracle 10g 中的增強的列表:

FGA 的 DML 支持 —— 細粒度審計(fine-grained auditing,FGA)的 SQL 支持得到了增強,現在支持查詢和 UPDATE、INSERT 和 DELETE 操作這些粒度上的審計。

SASL 上的通信 —— 該特性為 Oracle Internet Directory(OID)與數據庫之間或者兩個數據庫之間的通信提供了一種安全通道。如果您的企業部署通過密碼進行身份驗證的用戶,那麼也就不再需要在公共密鑰基礎設施(PKI)方面投入資金和管理工作。SASL(Simple Authentication and Security Layer)通信提供了等價的安全通道。

統一用戶模型 —— 目錄中定義的單點登錄(single sign)用戶現在可以使用 Enterprise User Security 提供的特性。不需要為供應和憑證管理而執行附加的任務。此外,Enterprise User Security 的管理組現在可以指派一個所有者,這促進了整體上更有力的安全性。

輕松的數據庫注冊 —— 該特性消除了對 RDBMS_SERVER_DN 參數的需要,使得企業用戶的配置更為輕松。

擴展的、統一的審計跟蹤 —— 該特性以標准的、細粒度的審計表的形式,為 RDBMS 審計提供了一致的審計跟蹤,改進了安全性管理。事務和 SQL 信息也被添加到審計表中,以便進一步提高所有用戶的可問責性(accountability)。

Oracle 標簽安全性目錄集成 —— 現在可以在一個中央 OID/LDAP 儲存庫中管理 Oracle Label Security 策略和用戶標簽授權。這節約了管理成本,同時也消除了多個管理點,從而增加了安全性。

DB2 中的身份驗證不僅涉及對用戶名和密碼進行加密,還允許對客戶機與服務器之間傳輸的數據進行加密。身份驗證的位置由數據庫管理器配置參數 AUTHENTICATION 的值決定。

下面是用於啟用 DB2 的身份驗證的有效選項:

SERVER_ENCRYPT —— 這個值規定身份驗證發生在服務器上。首先加密連接期間指定的用戶 id 和密碼,然後將它們發送到服務器,在服務器上將它們與服務器端的用戶和密碼進行比較。如果匹配成功,那麼用戶就被允許訪問數據庫。

KRB_SERVER_ENCRYPT —— 規定服務器接受 KERBEROS 身份驗證或加密的 SERVER 身份驗證模式。

DATA_ENCRYPT —— 規定服務器允許 SERVER 身份驗證,並且對客戶機與服務器之間通過網絡傳輸的數據進行加密。

DATA_ENCRYPT_CMP —— 規定服務器接受加密的 SERVER 身份驗證模式和用戶數據的加密。 這種身份驗證類型能與不支持 DATA_ENCRYPT 身份驗證類型的下級產品兼容。

GSS_SERVER_ENCRYPT —— 規定服務器接受基於 GSS API 的插件身份驗證或加密的服務器身份驗證模式。

若要更新 AUTHENTICATION 實例參數,例如將它的值設置為 DATA_ENCRYPT,可以使用以下命令:

清單 1. 更新 AUTHENTICATION 實例參數

  UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT
  db2stop
  db2start

DB2 提供了基於標簽的訪問控制(Label Based Access Control,LBAC)機制,從而進一步擴展了安全性。 LBAC 特性為控制對各行和各列的讀寫訪問提供了更大的粒度。 DB2 中提供了一種新的安全管理員角色(SECADM),用於操縱 LBAC 對象。

試圖訪問一個對象的用戶必須被授予該對象的安全標簽。如果安全標簽匹配,則允許訪問;如果不匹配,則拒絕訪問。實現 DB2 中的 LBAC 安全性基本上有三個步驟:

創建安全策略。

安全策略描述用於決定誰可以訪問特定數據的憑證。任何一個表只能由一個安全策略來保護,但是不同表可以由不同的安全策略來保護。這是通過使用 CREATE SECURITY POLICY 語句來實現的。安全策略的所有管理都是通過使用 SQL 語句來完成的。

創建安全標簽。

一共有三種類型的安全標簽:

行安全標簽。與數據庫表中的一個數據行或記錄相關聯的安全標簽。

列安全標簽。與數據庫表中一個列相關聯的安全標簽。

用戶安全標簽。為數據庫用戶授予的安全標簽。

安全標簽由 SECADM 創建,作為策略的一部分。 創建好一個安全標簽之後,可以將其與表中各個列和行相關聯,以保護存放在那裡的數據。

為用戶授予安全標簽,使他們可以訪問數據。 安全管理員通過為用戶授予安全標簽來允許他們訪問受保護的數據。 當一個用戶試圖訪問受保護的數據時,DB2 將那個用戶的安全標簽與保護數據的安全標簽進行比較。

除了特權和權限外,數據庫安全性還包含其他方面。簡單地說,Oracle 與 DB2 之間既有不同點,也有相同點:

用戶身份驗證和授權

Oracle 在創建用戶之後,使用存儲在目錄中的加密密碼。DB2 支持用於用戶身份驗證的密碼,並使用底層的操作用戶進行身份驗證。Oracle 和 DB2 都支持 LDAP (Oracle Internet Directory 與 IBM Directory Server)。Oracle 和 DB2 都支持單點登錄(SSO)。

數據加密

Oracle 支持數據加密,它可以對敏感數據,例如信用卡號和一些高度敏感的商業數據進行加密。DB2 允許列級的數據加密。

網絡加密

Oracle 通過它的 Oracle Advanced Security 提供網絡加密。Oracle 使用 DES、3DES 和 RC4 業界標准加密。DB2 本身不進行網絡加密。但可以使用附帶的 Tivoli SecureWay 實現網絡加密。

審計跟蹤

Oracle 允許審計跟蹤用戶和對象。還可以使用日志挖掘程序調查和分析有疑問的查詢。DB2 也提供了類似的審計設施。在 DB2 中,可以使用 db2audit 實用程序進行審計跟蹤。

DB2 9 pureXML 特性

在本節中,我們將 Oracle 對 XML 的支持與 DB2 對 XML 的支持進行比較。 Oracle XML DB 特性隨 Oracle 9i Release 2 一起發布,借助該特性,通過定義 XMLTYPE 表和列,將它們存儲為 CLOB 或拆分(分解)到關系表中,可以實現對 XML 存儲、檢索和模式的管理。 Oracle 10g 為管理 XML 文檔提供了一些增強。例如,通過映射已有的數據,可以動態地反映模式的更改,而不必重新導入。Oracle 10g 包括一些工具包,例如:

XML-SQL Util(XSU) —— 為 PL/SQL 和 Java 提供的接口。

XML Developer's kits(XDK) —— 用於受支持的語言,例如 PL/SQL、C++ 和 Java。

Oracle 10g 仍然是一種 支持 XML 的 數據庫。它提供的所有接口、API 和包,都是為了減輕 XML 與關系表之間的相互轉換和映射所帶來的負擔、復雜性和維護。支持 XML 的數據庫,不管是使用 CLOB 還是分解方法,都不能提供良好的性能。例如,在使用 CLOB 的情況下,XML 文檔作為鏡像文件存儲在數據庫中。您可能已經知道,鏡像文件的管理是很麻煩的。分解方法在性能方面也不如人意。將一個 XML 文檔分解成小塊並存儲在多個表中之後,當需要將 XML 文檔組合成原樣時,就不得不使用一個 SQL JOIN 操作。SQL 中的 JOIN 是開銷很大的,特別是表的數量較多時這一點尤其明顯。保持數字簽名的保真度同樣也是一個挑戰。

另一方面,DB2 9 pureXML 技術則是原生存儲 XML 文檔,也就是說,在內部以樹型格式存儲 XML 文檔。它還允許同時使用 SQL 和 XML 擴展,即 Xquery 和 Xpath 來訪問關系數據和 XML 數據。原生存儲 XML 文檔是一種更好的方法,IBM 的研究表明,使用該方法在 XML 文檔的搜索和檢索方面可以取得更好的性能,並且能減少某些程序中代碼的行數。

要在數據庫中使用 pureXML 特性,在創建數據庫時要使用 UNICODE(例如使用編碼集 UTF-8)。在創建一個表之前,如果沒能創建一個 UNICODE 數據庫,則會產生如下所示的錯誤:

SQL1239N XML features can only be used in a Unicode database with a single database partition. SQLSTATE=42997

DB2 與之前版本一樣存儲關系數據。但是,XML 數據是以分層格式存儲的(作為使用 Xquery 數據模型的一棵樹)。XML 與關系服務之間是緊密集成的。為了存儲 XML 文檔,用戶需要創建一個表,並指定一個列使用一種新的數據類型,即 XML,如下面的例子所示。

清單 2. 用 XML 數據類型創建表

   create table T (i int, doc XML)

下圖展示了這兩列的顯示效果:

圖 12. DB2 存儲模型

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

由於 XML 文檔是以解析的分層格式存儲在 XQuery Data Model (XDM) 中的,因此不需要進行轉換或映射。用於存儲 XML 文檔的格式就是用於處理 XML 文檔的格式。這樣可以提供更好的性能。

備份、恢復、導入等實用程序對含 XML 列的表的作用與其他表是一樣的。可以使用 INSERT 語句或 IMPORT 實用程序(注意:DB2 LOAD 實用程序還不支持 XML)將 XML 數據插入 XML 列。在導入來自第三方的 XML 文檔之前,最好根據一個預定義的 XML 模式驗證這些文檔。為了注冊一個 XML 模式,DBA 需要執行 REGISTER XML SCHEMA 命令,並以 COMPLETE XML SCHEMA 結束,以完成注冊過程。 DB2 9 還支持在一個 XML 文檔的子集或整個文檔上創建索引。在創建索引時,需要指定 XPATH,它將指向被建索引的特定元素/屬性。

在 DB2 9 中,有四種方法來訪問關系數據和 XML 數據,如 圖 13 所示:

純 SQL(不涉及 XQuery)

SQL/XML,也就是說嵌入在 SQL 中的 XQuery

XQuery 作為獨立的語言(不涉及 SQL)

帶嵌入式 SQL 的 Xquery

圖 13. 可能的 PureXML 查詢

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

表 3 比較了 DB2 9 與 Oracle 10g 的 XML 功能。 表 3. XML 特性比較 XML 功能 Oracle 10g IBM DB2 9 for Linux, Unix and Windows 支持 XML 的存儲 √ 不適用 XML 原生存儲 × √ 大環境的易維護性 × √ 高度可伸縮性 × √ 將 XML 文檔存儲為 CLOB √ √。但是從長遠看,鼓勵使用 XML 原生存儲 分解 √ √。但是從長遠看,鼓勵使用 XML 原生存儲

表分區

DB2 的表分區(即區域分區)類似於 Oracle 的分區。它基本上允許將一個邏輯表拆分成跨一個或多個表空間的多個物理存儲對象。每個對象對應於一個 “分區”,允許每個表空間包含一定范圍的、很容易訪問的數據。

在 DB2 中,有多種方法對數據進行分區,您可以同時將這些方法應用於相同的數據。為了避免讀者感到困惑,下面簡單地解釋一下提供這種分區的各種不同方法:

DATABASE PARTITIONING —— 按照鍵散列將數據分布在數據庫的多個邏輯節點上(DPF)。

RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根據鍵區域將數據劃分到一個邏輯數據庫分區中的多個物理對象上。

MULTI DIMENSIONAL CLUSTERING(MDC) —— 根據多個鍵值組織表(或一個表中的區域)中的數據。

利用 DB2 9 中新引入的表分區特性,可以根據一個或多個表列中的特定值將表數據劃分到不同的表空間。 這些分區可以獨立地進行備份和恢復,可以提高某些查詢的性能,因為 DB2 優化器知道這些分區的存在,並且可以避免對查詢中不需要的分區進行掃描。例如,如果按一年的四個季度對表進行分區,並且查詢只需要第 4 季度的數據,那麼 DB2 將不解析前三個季度,而是直接找到第 4 個季度並解析之。這被稱作分區排除(partition elimination)。

如前所述,在 DB2 9 中,數據組織的三種方法,即數據庫分區(Database Partitioning)、表分區(Table Partitioning)和多維集群(Multi Dimensional Clustering)可同時使用。

下面的例子創建一個 customer 表,其中 l_shipdate >= '01/01/2006' 且 l_shipdate <= '03/31/2006' 的行存儲在表空間 ts1 中,l_shipdate >= '04/01/2006' 且 l_shipdate <= '06/30/2006' 的行存儲在表空間 ts2 中,依此類推。

清單 3. 將一個表按區域分區

   CREATE TABLE customer (l_shipdate, l_name CHAR(30))
   IN ts1, ts2, ts3, ts4, ts5
   PARTITION BY RANGE(l_shipdate)
    (STARTING FROM ('01/01/2006')
     ENDING AT ('12/31/2006')
   EVERY (3 MONTHS))

行壓縮特性

Oracle 提供了兩種壓縮特性:一種是索引級壓縮,另一種是表級壓縮。如果對這些特性沒有適當的規劃,就會對性能產生不良影響。

Oracle 從版本 8i 開始就引入了索引壓縮。可以壓縮的索引有 bitmap、btree 和索引組織的表。索引壓縮使用起來很簡單。例如,要用壓縮特性創建一個索引,可以使用如下代碼:

清單 4. 用壓縮特性創建索引

   CREATE INDEX ord_customer_ix_demo
   ON orders (customer_id, sales_rep_id)
   COMPRESS 1;

對於不是在內部用壓縮特性創建的索引,可以通過修改它們將它們轉換成壓縮索引。下面顯示了一個示例,這個示例展示了如何修改索引,以使其變成壓縮索引。

清單 5. 用壓縮特性修改索引

   alter index ord_customer_ix_demo rebuild compress

目前,Oracle 沒有提供任何自動化的建議者程序來指出哪些索引應該被壓縮。大多數通過索引壓縮獲得的好處,都需要擁有娴熟的 Oracle CBO 知識的資深 DBA 經過適當規劃才能獲得。

另一方面,表壓縮是在 Oracle 9i release 2 中引入的。它可以用於壓縮整個表、表分區和具體視圖。壓縮可應用於所有分區或部分分區。雖然表壓縮也可以用於未分區的表,但是在 OLTP 工作負載中將表壓縮應用於未分區的表並不可取,因為插入和更新性能會受到影響。在 Oracle 表壓縮中,數據庫塊中重復的值將被去除,信息將被存儲起來,以便在塊中重新創建未壓縮的數據。 下面的例子展示了如何用壓縮特性創建分區表。

清單 6. 用壓縮特性創建表

   CREATE TABLE costs_demo (
    prod_id NUMBER(6), time_id DATE,
    unit_cost NUMBER(10,2), unit_price NUMBER(10,2))
   PARTITION BY RANGE (time_id)
    (PARTITION costs_old
      VALUES LESS THAN (TO_DATE('01-JAN-2003', 'DD-MON-YYYY')) COMPRESS,
     PARTITION costs_q1_2003
      VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
     PARTITION costs_q2_2003
      VALUES LESS THAN (TO_DATE('01-JUN-2003', 'DD-MON-YYYY')),
     PARTITION costs_recent VALUES LESS THAN (MAXVALUE));

為了將一個表轉換成壓縮表,可以使用 alter table <table name> move compress。但是,壓縮表不允許添加或刪除列。

至於 DB2,在 DB2 9 之前就有一些壓縮方法,但是,行壓縮是在 DB2 9 中才引入的。行壓縮要求創建一個目錄,用於存儲重復模式或條目以及數字鍵。壓縮算法足夠智能,不會壓縮那些對節省磁盤空間幫助不大的行。

DB2 的行壓縮不像 Oracle 的鍵壓縮,它不需要指定鍵。

可以通過 CREATE TABLE 或 ALTER TABLE 命令在表級進行壓縮。例如:

清單 7. 用 COMPRESSION YES 創建/修改表

   CREATE TABLE Sales COMPRESS YES
   ALTER TABLE Sales COMPRESS YES

為了在 DB2 Control Center 中取得相同的效果,在列定義過程中(表創建向導中的第二步),應確保選中面板底端的復選框 Store table data in a compressed format(如下圖所示)。

圖 14. DB2 Control Center —— 以壓縮格式創建表

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

只有在執行 REORG 的時候才構建表字典,之後便可以壓縮表中的數據。在隨後的每次 REORG 操作中,表字典隨之更新。被壓縮的數據同時存放在磁盤上和內存中,DB2 還壓縮存儲在日志文件中的用戶數據,以便減少日志文件大小。

注意,分區表的每個分區可以有不同的壓縮字典,在 DPF 中的一個表的每個分區也可以有不同的壓縮字典。

除了數據行壓縮,DB2 9 提供的其他壓縮機制還包括:

NULL 值和缺省值壓縮(V8 GA):對變長列中的零長度空數據和系統缺省值進行壓縮。

多維集群(V8 GA):使用塊索引,數千個記錄共用一個索引條目,實現索引壓縮。

數據庫備份壓縮(V8 FP4):通過壓縮產生較小的備份鏡像。

XML 解析

自治特性

從 Oracle 9i 到 10g,Oracle 在調優方面作了一些改進。Oracle 將以下方面的調優進行了自動化:

Redo Logfile Sizing Advisor —— 該特性就重做日志文件的最佳大小給出建議,以避免因頻繁出現的檢查點而導致過多的磁盤 I/O。

Automatic Checkpoint Tuning —— Oracle 數據庫現在可以自調優檢查點,以取得良好的恢復速度,同時減少對正常吞吐率的影響。 這樣便不再需要設置任何與檢查點相關的參數。

Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 通過自調優算法將 System Global Area (SGA) 內存相關參數(緩沖區緩存、共享池)的配置自動化。它簡化了數據庫的配置,確保可用內存得到最有效的利用,並提高了性能。

Transaction Rollback and Recovery Monitoring —— 該特性便於估計回滾一個事務要花多少時間。還可以監控被恢復的事務的進程,並估計事務恢復的平均速度。

Oracle 還提供了一些 advisor,例如 segment advisor 和 undo advisor。segment advisor 根據對象內的空間拆分程度給出是否可以對一個對象執行新的在線壓縮操作的建議。而且,這個 advisor 還給出關於段的歷史增長趨勢的報告,特別是能為容量規劃提供有效的信息。 另一方面,Undo Advisor 則幫助管理員在調整 flashback 和非 Flashback 中的表空間的大小時作出正確的判斷。它為管理員適當地設置 UNDO_RETENTION 提供建議,以避免快照過於陳舊的問題。

DB2 9 引入了一些新的自治增強。例如,DB2 9 引入一種新的自調優內存特性(使用 self_tuning_mem 數據庫配置參數),該特性自動地設置一些內存配置參數的值,從而簡化了內存配置任務。自動調優器充當調度器的角色,它算出可用的內存資源,動態地將它們分發給數據庫的一些內存消費者。

除了自調優內存,DB2 9 還引入了下面提到的其他一些增強。這份列表並不完整,但是其中列出的都是重要的增強。

自動配置

DB2 8 引入了 Configuration Advisor,它可以檢測系統和數據庫的特征 —— CPU、內存、數據庫大小、表的數量等,並為配置參數給出建議的值。DB2 9 則更進一步 —— 它在數據庫創建之後自動運行 configuration advisor,並缺省地做出一些基本的調優決定。例如,它配置缺省緩沖池的大小、I/O 清理程序和 I/O 服務器等。 這種初始的自動調優意味著,同使用之前缺省的數據庫配置參數值創建的數據庫相比,現在的數據庫將擁有更好的性能,並且有更好的即開即用性。

自動數據統計信息收集

缺省情況下,DB2 9 還允許對某些進行中的任務進行自動化。通過該特性,DB2 確定需要哪些統計信息,以及哪些統計信息需要更新,然後自動在後台執行 RUNSTATS 實用程序。

自動存儲管理

DB2 9 擴展了在 DB2 V8.2.2 中首次引入的自動存儲特性。自動存儲自動增長跨磁盤和文件系統的數據庫的大小,由於它是自動增長數據庫大小的,因此 DBA 不需要管理存儲容器。當在 DB2 9 中創建數據庫時,自動存儲管理特性是缺省地啟用的。

自動表和索引重組增強

自動重組是從 8.2 版開始引入的。但是,DB9 對其加以增強,從而允許做以下事情:

指定具有適當頁寬的系統臨時表空間,用於離線表重組。

可限制被重組的表的大小。

指定自動索引重組應該在線運行,並且在在線維護窗口中運行。

指定在重組期間是保留還是重新構建壓縮目錄。

工具

我們來看看不同領域的一些工具,例如數據庫創建和維護、網絡、管理 GUI、性能調優、數據移動和備份恢復工具。圖 15 顯示了這些 DB2 9 GUI 工具。

圖 15. DB2 9 GUI 工具

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

讓我們看看類似的任務在 Oracle 和 DB2 9 中分別是怎樣執行的。

數據庫創建和維護

Oracle 提供了 Database Configuration Assistant(dbca)作為創建數據庫的 GUI 工具。對於數據庫維護,Oracle 提供了 Oracle Enterprise Manager。DB2 數據庫則可以通過 DB2 Control Center 創建和維護。

網絡

Oracle 提供了 Network Configuration Assistant(netca)來進行網絡配置。或者,也可以使用 Oracle Network Manager 來配置服務名、偵聽器、配置文件和 Oracle 名稱服務器。DB2 則使用 CATALOG 命令來編目節點和數據庫。此外還可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 進行編目。

管理

Oracle Enterprise Manager 提供了針對管理員日常任務的廣泛管理功能。DB2 Control Center 也提供了和 Oracle Enterprise Manager 類似的功能。除了 DB2 Control Center 外,還可以使用 DB2 命令行處理器來發出 DDL 和 DML 語句。該實用程序類似於 Oracle 的 SQLPLUS 實用程序。圖 16 顯示了 DB2 命令行處理器。

圖 16. DB2 命令行處理器

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

還可以在 Command Center 中發出命令,如 圖 17 所示。

圖 17. Command Center GUI(DB2 命令行處理器的 GUI 版本)

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

性能調優

Oracle Enterprise Manager 附帶有 Change Management Pack、Tuning Pack 和 Diagnostic Pack。DB2 則提供了 Event Analyzer、Health Center、Indoubt Transaction Manager 和 Memory Visualizer 作為性能調優任務的 GUI 工具。

數據移動

Oracle 提供了 SQL Loader(sqlldr)用於以定界文本格式裝載數據。Import(imp)和 export(exp)可用於執行邏輯導入和導出。DB2 提供了類似的導入、導出和裝載實用程序。對於跨平台的數據移動,DB2 提供了 db2move 實用程序。

備份和恢復

Oracle 提供了 Recovery Manager 作為熱備份的選項。在 DB2 中,可以使用 backup 命令或 DB2 Control Center 備份數據庫。

Oracle 10g Enteprise Manager 附帶了新的性能概要表。增強的 Oracle Enterprise Manager Html 界面為所有與數據庫性能相關的統計信息提供了一個集中的訪問點,為全面的監控和診斷提供了方便。

除了隨 DB2 UDB version 8 發布的界面外,DB2 9 還引入了一種全新的免費應用程序開發工具,這個工具叫做 DB2 Developer Workbench(DWB),它是基於 Eclipse 框架的。這個工具可以單獨下載,也可通過光盤獲得,它替代了 DB2 8 的 Development Center。 DWB 是用於創建、編輯、調試、部署和測試 DB2 存儲過程和用戶定義函數的一站式中心。此外,還可以使用 DWB 來開發 SQLJ 應用程序,以及創建、編輯和運行 SQL 語句和 XML 查詢。

DWB 有一些用於開發 DB2 業務對象的視圖,例如:

Database Explorer 視圖 —— 顯示數據庫中有什麼對象(表、存儲過程、用戶定義函數、依賴關系、遠程服務器等),並允許在這些對象上執行動作。

Data Project Explorer 視圖 —— 在該視圖中,可以通過簡單的操作,例如拖放、復制粘貼、向導、上下文敏感的完成選項等,進行過程、用戶定義函數和 SQL 語句的開發。

Data Output 視圖 —— 在該視圖中可以看到對數據庫的數據開發的報告。

除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 還包括對遷移報告、比較例程、XML 函數和使用 XQuery Builder 構建 XQuery 查詢等等的支持。

圖 18 展示了如何使用 DWB 創建存儲過程:

圖 18. DB2 Developer WorkBench

利用 Oracle 10g 技能學習 DB2 9.1 for Linux, UNIX and Windows

結束語

在本文中,我們借助您當前已有的關於 Oracle 10g Release 2 的知識,對 DB2 9 for Linux, UNIX and Windows 進行了介紹。我們簡要地描述了 DB2 9 架構、後台進程、內存模型、安全性、工具等方面。Oracle 與 DB2 9 之間有很多類似之處,我們也指出了它們之間的一些不同之處,以便您能借助已有的知識,在 DB2 9 中獲得成功。

表 3 總結了我們討論過的 Oracle 與 DB2 9 之間的相同點與不同點。

表 3 —— Oracle 與 DB2 9 概念總結 Oracle DB2 9 注解 實例 實例 一個 DB2 實例可以包含多個數據庫 數據庫 數據庫 initSID.ora 或 SPFILE DBM CFG 和 DB CFG DB2 使用兩個級別的配置:Database Manager Configuration(DBM CFG)(實例級)和 Database Configuration(DB CFG)(數據庫級)。與 Oracle 一樣,很多配置參數可以動態更改 表空間 表空間 DB2 支持 SMS 和 DMS 這兩類表空間。DMS 表空間與 Oracle 的表空間類似 數據塊 頁 DB2 支持以下幾種頁大小:4k、8k、16k 和 32k。一個行必須能夠裝入其中一種數據頁內。它不能像在 Oracle 中那樣跨多個頁 盤區 盤區 數據文件 DMS 表空間容器 用於 DMS 表空間的容器可以是原始設備,也可以是文件 重做日志文件 事務日志文件 數據緩沖區 緩沖池 DB2 沒有一組預定義的緩沖池,但是可以根據需要創建足夠多的緩沖池。在創建具有給定頁大小的表空間時,必須預先存在一個具有給定頁寬的緩沖池 SGA 數據庫管理器共享內存和數據庫共享內存 數據字典 編目 庫緩存 包緩存 大型池 實用程序堆 數據字典緩存 編目緩存 SYSTEM 表空間 SYSCATSPACE 表空間

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved