欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
利用 Oracle 10g 技能學(xué)習 DB2 9.1 for Linux, UNIX an...
 

級別: 初級

Suita Gupta (suitag@my.ibm.com), 技術(shù)顧問(wèn), IBM Malaysia
Allan Tham (thamawh@my.ibm.com), 售前服務(wù)專(zhuān)家,ASEAN Techline, IBM
Raul F. Chong (rfchong@ca.ibm.com), DB2 UDB 專(zhuān)家, IBM

2003 年 7 月 17 日  
2006 年 12 月 07 日 更新

如果您是一名有興趣培養自己 DB2? 9 技能的數據庫專(zhuān)家,那么您很可能已經(jīng)具備了其他關(guān)系數據庫產(chǎn)品的數據庫技能。近來(lái),本文依據最新版本的 DB2 和 Oracle 作了更新,將向您展示如何利用您現有的 Oracle 10g 的知識,快速掌握 IBM? DB2 9 for Linux?, UNIX?, and Windows? 方面的技能。

簡(jiǎn)介

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

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

注意:在本文后面的內容中,我們將使用術(shù)語(yǔ) “Oracle” 來(lái)表示 Oracle 10g Release 2,而用 “DB2” 表示 DB2 9 for Linux, UNIX, and Windows。







系統結構概述

首先,我們需要理解 Oracle 使用的架構,并理解它與 DB2 的不同之處。圖 1 展示了 Oracle 的系統結構。將該圖與 圖 2 進(jìn)行比較,后者顯示了 DB2 的系統結構。在閱讀本文的時(shí)候,為便于理解,可以參照這兩個(gè)圖。


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


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







實(shí)例

在 Oracle 和 DB2 中,實(shí)例 的概念是類(lèi)似的。在這兩者之中,實(shí)例都是指后臺進(jìn)程與共享內存的組合。兩者之間的主要差別在于,在 Oracle 中每個(gè)實(shí)例只能有一個(gè)數據庫,而在 DB2 中多個(gè)數據庫可以共享一個(gè)實(shí)例。

在 Oracle 中,由于數據庫與實(shí)例是一對一的關(guān)系,因此用 CREATE DATABASE 命令創(chuàng )建一個(gè)數據庫的同時(shí)便隱式地創(chuàng )建了一個(gè)實(shí)例?;蛘?,為了在計算機上創(chuàng )建一個(gè) Oracle 實(shí)例,也可以使用 Database Configuration Assistant,或者使用 ORADIM 實(shí)用程序,后者是 Oracle 9i 通過(guò) NEW 選項提供的。另外還必須提供某些信息,包括系統標識符(System Identifier,SID)或一個(gè)服務(wù)名稱(chēng)、實(shí)例密碼、最大用戶(hù)數、啟動(dòng)模式等等。類(lèi)似地,為了刪除實(shí)例,可以使用 ORADIM 實(shí)用程序加 DELETE 選項。這里需要提供 SID 或服務(wù)名稱(chēng)。除非在安裝過(guò)程中創(chuàng )建一個(gè)新的數據庫,否則在以 fresh 方式安裝 Oracle 的時(shí)候,不會(huì )創(chuàng )建缺省的實(shí)例。

在 DB2 中,當在 Windows 平臺上安裝了該產(chǎn)品之后,便缺省地創(chuàng )建了一個(gè)實(shí)例 "DB2"。在 Linux 和 UNIX 中,缺省的實(shí)例名稱(chēng)為 "db2inst1"。若要在同一臺計算機上創(chuàng )建另一個(gè)實(shí)例,只需執行命令 db2icrt <instance name>。

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


圖 3. 顯示 DB2 實(shí)例的 DB2 Control Center GUI

若要在命令行接口中引用給定的 DB2 實(shí)例,可以使用環(huán)境變量 DB2INSTANCE。通過(guò)這個(gè)變量,可以指定當前活動(dòng)實(shí)例,所有命令將應用到此實(shí)例。例如,如果 DB2INSTANCE 被設置為 PROD,然后您執行了命令 create database MYDB1,將創(chuàng )建一個(gè)與實(shí)例 PROD 關(guān)聯(lián)的數據庫。如果要在實(shí)例 DB2 上創(chuàng )建該數據庫,那么必須首先將 DB2INSTANCE 變量的值改為 DB2。這類(lèi)似于 ORACLE_SID (System Identifier),當用戶(hù)想要在不同實(shí)例之間進(jìn)行切換時(shí),也是使用 ORACLE_SID。

還有一種標識要使用的實(shí)例的簡(jiǎn)單方法,那就是使用 DB2 Control Center GUI,如 圖 3 所示。要在該工具中看到對應于新實(shí)例的條目,需要通過(guò)右擊 Instances 并選擇 Add 來(lái)將該實(shí)例添加到此工具中。要刪除 DB2 中的一個(gè)實(shí)例,可以執行命令 db2idrop <instance name>。

總之,在 Oracle 中,可以使用 Database Configuration Assistant 來(lái)創(chuàng )建、修改、啟動(dòng)、停止和刪除實(shí)例,而在 DB2 中則可以使用 Control Center GUI 做同樣的事情。而且,Oracle 實(shí)例與數據庫只能是一對一的關(guān)系,而在 DB2 中卻不是這樣。一個(gè) DB2 實(shí)例中可以同時(shí)存在多個(gè)數據庫,并且可以并發(fā)地使用這些數據庫。








數據庫

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

元數據信息在 Data Dictionary 中存儲和管理,由基本表和相應的視圖組成?;颈硎窃跀祿靹?chuàng )建過(guò)程中自動(dòng)創(chuàng )建的,而視圖則是通過(guò)運行 catalog.sql 和 catproc.sql 腳本構造的。

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

  1. 數據文件(Data File):包含實(shí)際的數據,數據庫的物理實(shí)現。(類(lèi)似于 DB2 中的容器。)
  2. 重做文件(Redo File):相當于 DB2 中的事務(wù)日志(Transaction Log)。
  3. 控制文件(Control File):包含用于維護和驗證數據庫完整性的信息。

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

當創(chuàng )建一個(gè)實(shí)例時(shí),缺省情況下不會(huì )創(chuàng )建數據庫,您需要使用 create database 命令顯式地創(chuàng )建一個(gè)數據庫。此外還可以用 Control Center 創(chuàng )建數據庫,如 圖 4圖 5 所示。


圖 4. 使用 Control Center GUI 創(chuàng )建 DB2 數據庫


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

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

可以使用 ‘DROP DATABASE‘ 命令或者在 DB2 Control Center GUI 中刪除一個(gè) DB2 數據庫。而在 Oracle 中卻不是使用這樣的命令。數據庫的刪除是通過(guò)刪除所有相關(guān)數據文件來(lái)完成的。

同一個(gè)實(shí)例中的數據庫通常不會(huì )相互進(jìn)行交互。然而,如果應用程序需要與多個(gè)數據庫交互,那么通過(guò)啟用聯(lián)邦(federation) 支持可以滿(mǎn)足這一需求。在 參考資料 小節中有一篇關(guān)于聯(lián)邦的文章。







容器、表空間、緩沖池和頁(yè)

在 Oracle 中,在物理上數據是存儲在被稱(chēng)作數據文件(Data File)的文件中的。這類(lèi)似于 DB2 的容器(container),DB2 的容器也是數據實(shí)際存儲的地方。每個(gè) Oracle 數據庫包含一個(gè)名為 SYSTEM 的表空間,這是在創(chuàng )建數據庫時(shí)由 Oracle 自動(dòng)創(chuàng )建的。其他用于用戶(hù)數據、臨時(shí)數據和索引數據的表空間則需要在創(chuàng )建數據庫之后另行創(chuàng )建,并且在使用這些表空間之前,還需要為之指定一個(gè)用戶(hù)。

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

在 DB2 中,使用 CREATE DATABASE 命令及其缺省值創(chuàng )建數據庫時(shí),同時(shí)也會(huì )自動(dòng)創(chuàng )建三個(gè)缺省的表空間。表 1 描述了缺省的 DB2 表空間:

表 1. 用缺省值創(chuàng )建數據庫時(shí),缺省創(chuàng )建的 DB2 表空間
表空間名稱(chēng) 描述
SYSCATSPACE 包含元數據的編目表空間
TEMPSPACE1 用于執行連接和排序等操作的系統臨時(shí)表空間。這個(gè)表空間的名稱(chēng)可以更改
USERSPACE1 這個(gè)表空間是可選的,如果在創(chuàng )建表的時(shí)候沒(méi)有顯式地指定表空間,那么可以用這個(gè)表空間來(lái)存儲用戶(hù)表

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

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

Oracle 的存儲模型中沒(méi)有 SMS 的概念,但是它的數據文件類(lèi)似于 DB2 DMS 表空間。也就是說(shuō),可以通過(guò)增加數據文件的大小,或為表空間添加數據文件,或者通過(guò)添加一個(gè)新的表空間,來(lái)增加數據庫的大小。

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

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

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

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






對象名稱(chēng)

Oracle 中的對象名稱(chēng)形式如下:

[Schema_name.]object_name[@database]

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

Schema_name.object_name

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

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

該命令創(chuàng )建表 WORLD.TABLEA,其中 WORLD 是新創(chuàng )建的模式。如果 Peter 沒(méi)有顯式地指定模式,那么該命令就會(huì )創(chuàng )建表 PETER.TABLEA,因為缺省情況下是使用連接 ID。

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







表、視圖和索引

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

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

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

上面的例子表明,表中的數據將存儲在表空間 ‘tbls1‘ 中,而索引頁(yè)將存儲在表空間 ‘tbls2‘ 中。但在 Oracle 語(yǔ)法中,CREATE INDEX 語(yǔ)句有一個(gè)選項來(lái)指定索引存放在哪個(gè)表空間。

此外,在 DB2 中,索引一旦創(chuàng )建好,便不能修改索引定義中的任何子句。為了進(jìn)行更改,需要刪除索引,然后重新創(chuàng )建索引。

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







存儲過(guò)程、觸發(fā)器和用戶(hù)定義函數(UDF)

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

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

觸發(fā)器和函數的開(kāi)發(fā)可以使用內聯(lián) SQL/PL,這種方法不需要 C 編譯器。這種方法支持 SQL PL 語(yǔ)句的一個(gè)子集。另外還可以使用 DB2 Development Center Tool 來(lái)簡(jiǎn)化 DB2 存儲過(guò)程和用戶(hù)定義函數的創(chuàng )建、構建、調試和部署。






配置文件

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

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

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

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

這兩個(gè)命令分別相當于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION?;蛘?,也可以使用 Control Center 查看和修改這些參數的值。如果右鍵單擊一個(gè)給定的實(shí)例,并選擇 Configure Parameters,那么可以看到 圖 6 中顯示的窗口。


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

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


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

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


圖 8. DB2 Configuration Advisor

除了配置文件外,DB2 通常還為與平臺相關(guān)的配置使用 DB2 注冊表變量。注意,DB2 注冊表變量與 Windows 注冊表沒(méi)有任何關(guān)系??梢允褂妹?db2set 查看和更改這些變量。

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







內存架構和后臺進(jìn)程

接下來(lái),我們來(lái)看看內存架構和后臺進(jìn)程,并且比較一下 Oracle 和 DB2 中內存架構和后臺進(jìn)程的不同之處。


圖 9. Oracle 內存架構和后臺進(jìn)程

Oracle 中的 System Global Area(SGA)是一組共享內存塊,用于存儲與實(shí)例有關(guān)的信息。其中包括語(yǔ)句緩存、重做日志緩沖區和數據緩沖區緩存。Program Global Area(PGA)和 User Global Area(UGA)共享內存塊,包含用于服務(wù)器進(jìn)程和用戶(hù)會(huì )話(huà)的數據和控制信息。

Oracle 支持在同一臺計算機上存在多個(gè)實(shí)例,但不允許共享后臺進(jìn)程。例如,同一臺計算機上的三個(gè)實(shí)例就需要三組后臺進(jìn)程。因此建議在一臺計算機上包含一個(gè)數據庫、一個(gè)實(shí)例和多個(gè)模式。


圖 10. DB2 內存架構和后臺進(jìn)程

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

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

  • 實(shí)例共享內存:這是數據庫管理器全局共享內存,是在使用 db2start 命令啟動(dòng)實(shí)例時(shí)分配給實(shí)例的,并且在發(fā)出 db2stop 命令停止實(shí)例之前,一直處于已分配狀態(tài)。
  • 數據庫共享內存:這是數據庫全局內存,是在激活數據庫或者第一次連接到數據庫時(shí)分配的。分配的內存包括緩沖池、鎖列表、數據庫堆、實(shí)用程序堆、包緩存和編目緩存。
  • 應用程序共享內存:這是在應用程序連接到一個(gè)數據庫時(shí)分配的內存,由處理連接到數據庫的客戶(hù)機所請求的工作的代理使用。每個(gè)連接到數據庫的應用程序都會(huì )被分配內存;因此,對會(huì )影響應用程序共享內存的參數的正確配置就非常重要。

在 DB2 for Windows 中,服務(wù)器活動(dòng)是以線(xiàn)程的形式進(jìn)行的,而在 Linux 和 UNIX 環(huán)境中,這些活動(dòng)是以后臺進(jìn)程的形式來(lái)實(shí)現的。DB2 有以下幾種級別的進(jìn)程:

  • 實(shí)例級:這些進(jìn)程是在實(shí)例啟動(dòng)時(shí)初始化的:
    1. DB2 Daemon Spawner(db2gds):全局守護處理程序,每個(gè)實(shí)例都對應一個(gè)這樣的進(jìn)程(僅在 UNIX 中)
    2. DB2 System Controller(db2sysc):DB2 主進(jìn)程。
    3. DB2 Watchdog(db2wdog):所有其他進(jìn)程的父進(jìn)程。
    4. DB2 Format Log(db2fmtlg):類(lèi)似于 Oracle 中的 ARCn 進(jìn)程,為日志路徑中的日志文件預先分配空間。

  • 數據庫級:這些進(jìn)程是在建立到數據庫的連接時(shí)初始化的:
    1. DB2 Log Reader(db2loggr):類(lèi)似于 Oracle 的 PMON 進(jìn)程的一個(gè)子集。該進(jìn)程在回滾、重啟恢復和前滾期間讀取日志文件。
    2. DB2 Log Writer(db2logw):將日志從日志緩沖區刷新到磁盤(pán)上的事務(wù)日志文件中。相當于 Oracle 中的 LGWR 進(jìn)程。
    3. DB2 Page Cleaner(db2pclnr):相當于 Oracle 中的 DBWR 進(jìn)程,該進(jìn)程在將頁(yè)從磁盤(pán)上轉移到 BP 中之前,清理緩沖池。
    4. DB2 Prefetcher(db2pfchr):將需要用到的頁(yè)預先從磁盤(pán)取出到緩沖池中。
    5. DB2 Deadlock Detector(db2dlock):死鎖檢測器進(jìn)程。

  • 應用程序級:每個(gè)連接到數據庫的應用程序,都具有屬于它自己的應用程序級后臺進(jìn)程與之相關(guān)聯(lián)。這些進(jìn)程有:
    1. DB2 Communication Manager(db2ipccm):進(jìn)程間通信進(jìn)程,用于每個(gè)本地連接的客戶(hù)機。
    2. DB2 TCP Manager(db2tcpcm):TCP 通信管理器進(jìn)程,用于使用 TCP/IP 連接數據庫的遠程客戶(hù)機。
    3. DB2 Coordinating Agent(db2agent):代表應用程序處理所有請求的進(jìn)程。
    4. DB2 Subagent(db2agnta):空閑子代理。
    5. Active Subagent(db2agntp):在啟用了 SMP 并行的情況下使用的活動(dòng)子代理,它使一個(gè)任務(wù)可以使用多個(gè)進(jìn)程。

要獲得對 DB2 進(jìn)程的完整解釋?zhuān)垍⒖嘉恼?“DB2 通用數據庫進(jìn)程全接觸”。






鎖機制

Oracle 中的鎖可以是手動(dòng)的,也可以是自動(dòng)的。Oracle Lock Manager 可以在行級隱式地鎖定表數據,此外也可以使用以下 SQL 語(yǔ)句在事務(wù)或會(huì )話(huà)級覆蓋缺省的鎖:
1. SET TRANSACTION ISOLATION LEVEL
2. LOCK TABLE
3. SELECT FOR UPDATE

Oracle 支持一種稱(chēng)為 Multi-Version Read Consistency 的機制,這是用 undo 段中的 undo 數據實(shí)現的。

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

與 Oracle 不同,在 DB2 中,鎖是存儲在內存中的,而不是存儲在數據頁(yè)中??梢允褂?LOCKLIST 數據庫配置參數來(lái)配置鎖可用的內存,而 MAXLOCKS 配置參數則定義用于一個(gè)特定應用程序的鎖的最大內存。







安全性

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

  • 數據庫:數據庫執行對用戶(hù)的識別和身份驗證。
  • 外部:操作系統或網(wǎng)絡(luò )服務(wù)執行身份驗證。
  • 全局身份驗證和授權:由 SSL 對用戶(hù)進(jìn)行全局身份驗證。
  • 代理身份驗證和授權:中間層服務(wù)器執行身份驗證。

身份驗證方法是在使用 CREATE USER 命令創(chuàng )建用戶(hù)時(shí)指定的。Oracle 中有一些 Data Dictionary 視圖,其中包含了關(guān)于這些用戶(hù)的信息。

在 DB2 中,用戶(hù)不是存在于數據庫中,而是由操作系統來(lái)管理。沒(méi)有數據庫登錄信息存放在數據庫表中。任何操作系統用戶(hù)都有可能訪(fǎng)問(wèn) DB2;但是,除非他們被授予了給定的 DB2 權限或特權,否則他們能做的事情不多。通過(guò) Control Center GUI 很容易授予和撤銷(xiāo)權限和特權。不過(guò)首先需要將可用操作系統用戶(hù)或組中的一個(gè)用戶(hù)或組添加到 Control Center。

在 DB2 中沒(méi)有 “角色(role)” 這個(gè)術(shù)語(yǔ)。相反,DB2 使用術(shù)語(yǔ) “權限(authority)”,它類(lèi)似于 Oracle 的數據庫角色,DB2 通過(guò)權限將特權授予某些組或用戶(hù)。DB2 支持的權限有:SYSADM、SYSCTRL、SYSMAINT、DBADM 和 LOAD。

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

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


圖 11. DB2 安全性

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

  • FGA 的 DML 支持 —— 細粒度審計(fine-grained auditing,FGA)的 SQL 支持得到了增強,現在支持查詢(xún)和 UPDATE、INSERT 和 DELETE 操作這些粒度上的審計。
  • SASL 上的通信 —— 該特性為 Oracle Internet Directory(OID)與數據庫之間或者兩個(gè)數據庫之間的通信提供了一種安全通道。如果您的企業(yè)部署通過(guò)密碼進(jìn)行身份驗證的用戶(hù),那么也就不再需要在公共密鑰基礎設施(PKI)方面投入資金和管理工作。SASL(Simple Authentication and Security Layer)通信提供了等價(jià)的安全通道。
  • 統一用戶(hù)模型 —— 目錄中定義的單點(diǎn)登錄(single sign)用戶(hù)現在可以使用 Enterprise User Security 提供的特性。不需要為供應和憑證管理而執行附加的任務(wù)。此外,Enterprise User Security 的管理組現在可以指派一個(gè)所有者,這促進(jìn)了整體上更有力的安全性。
  • 輕松的數據庫注冊 —— 該特性消除了對 RDBMS_SERVER_DN 參數的需要,使得企業(yè)用戶(hù)的配置更為輕松。
  • 擴展的、統一的審計跟蹤 —— 該特性以標準的、細粒度的審計表的形式,為 RDBMS 審計提供了一致的審計跟蹤,改進(jìn)了安全性管理。事務(wù)和 SQL 信息也被添加到審計表中,以便進(jìn)一步提高所有用戶(hù)的可問(wèn)責性(accountability)。
  • Oracle 標簽安全性目錄集成 —— 現在可以在一個(gè)中央 OID/LDAP 儲存庫中管理 Oracle Label Security 策略和用戶(hù)標簽授權。這節約了管理成本,同時(shí)也消除了多個(gè)管理點(diǎn),從而增加了安全性。

 

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

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

  • SERVER_ENCRYPT —— 這個(gè)值規定身份驗證發(fā)生在服務(wù)器上。首先加密連接期間指定的用戶(hù) id 和密碼,然后將它們發(fā)送到服務(wù)器,在服務(wù)器上將它們與服務(wù)器端的用戶(hù)和密碼進(jìn)行比較。如果匹配成功,那么用戶(hù)就被允許訪(fǎng)問(wèn)數據庫。
  • KRB_SERVER_ENCRYPT —— 規定服務(wù)器接受 KERBEROS 身份驗證或加密的 SERVER 身份驗證模式。
  • DATA_ENCRYPT —— 規定服務(wù)器允許 SERVER 身份驗證,并且對客戶(hù)機與服務(wù)器之間通過(guò)網(wǎng)絡(luò )傳輸的數據進(jìn)行加密。
  • DATA_ENCRYPT_CMP —— 規定服務(wù)器接受加密的 SERVER 身份驗證模式和用戶(hù)數據的加密。 這種身份驗證類(lèi)型能與不支持 DATA_ENCRYPT 身份驗證類(lèi)型的下級產(chǎn)品兼容。
  • GSS_SERVER_ENCRYPT —— 規定服務(wù)器接受基于 GSS API 的插件身份驗證或加密的服務(wù)器身份驗證模式。

 

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


清單 1. 更新 AUTHENTICATION 實(shí)例參數
                        UPDATE DBM CFG USING AUTHENTICATION DATA_ENCRYPT                        db2stop                        db2start                        

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

試圖訪(fǎng)問(wèn)一個(gè)對象的用戶(hù)必須被授予該對象的安全標簽。如果安全標簽匹配,則允許訪(fǎng)問(wèn);如果不匹配,則拒絕訪(fǎng)問(wèn)。實(shí)現 DB2 中的 LBAC 安全性基本上有三個(gè)步驟:

  • 創(chuàng )建安全策略。
    安全策略描述用于決定誰(shuí)可以訪(fǎng)問(wèn)特定數據的憑證。任何一個(gè)表只能由一個(gè)安全策略來(lái)保護,但是不同表可以由不同的安全策略來(lái)保護。這是通過(guò)使用 CREATE SECURITY POLICY 語(yǔ)句來(lái)實(shí)現的。安全策略的所有管理都是通過(guò)使用 SQL 語(yǔ)句來(lái)完成的。
  • 創(chuàng )建安全標簽。
    一共有三種類(lèi)型的安全標簽:
    • 行安全標簽。與數據庫表中的一個(gè)數據行或記錄相關(guān)聯(lián)的安全標簽。
    • 列安全標簽。與數據庫表中一個(gè)列相關(guān)聯(lián)的安全標簽。
    • 用戶(hù)安全標簽。為數據庫用戶(hù)授予的安全標簽。
    安全標簽由 SECADM 創(chuàng )建,作為策略的一部分。 創(chuàng )建好一個(gè)安全標簽之后,可以將其與表中各個(gè)列和行相關(guān)聯(lián),以保護存放在那里的數據。
  • 為用戶(hù)授予安全標簽,使他們可以訪(fǎng)問(wèn)數據。 安全管理員通過(guò)為用戶(hù)授予安全標簽來(lái)允許他們訪(fǎng)問(wèn)受保護的數據。 當一個(gè)用戶(hù)試圖訪(fǎng)問(wèn)受保護的數據時(shí),DB2 將那個(gè)用戶(hù)的安全標簽與保護數據的安全標簽進(jìn)行比較。

 

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

用戶(hù)身份驗證和授權

Oracle 在創(chuàng )建用戶(hù)之后,使用存儲在目錄中的加密密碼。DB2 支持用于用戶(hù)身份驗證的密碼,并使用底層的操作用戶(hù)進(jìn)行身份驗證。Oracle 和 DB2 都支持 LDAP (Oracle Internet Directory 與 IBM Directory Server)。Oracle 和 DB2 都支持單點(diǎn)登錄(SSO)。

數據加密

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

網(wǎng)絡(luò )加密

Oracle 通過(guò)它的 Oracle Advanced Security 提供網(wǎng)絡(luò )加密。Oracle 使用 DES、3DES 和 RC4 業(yè)界標準加密。DB2 本身不進(jìn)行網(wǎng)絡(luò )加密。但可以使用附帶的 Tivoli SecureWay 實(shí)現網(wǎng)絡(luò )加密。

審計跟蹤

Oracle 允許審計跟蹤用戶(hù)和對象。還可以使用日志挖掘程序調查和分析有疑問(wèn)的查詢(xún)。DB2 也提供了類(lèi)似的審計設施。在 DB2 中,可以使用 db2audit 實(shí)用程序進(jìn)行審計跟蹤。







DB2 9 pureXML 特性

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

  • XML-SQL Util(XSU) —— 為 PL/SQL 和 Java 提供的接口。
  • XML Developer‘s kits(XDK) —— 用于受支持的語(yǔ)言,例如 PL/SQL、C++ 和 Java。

 

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

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

要在數據庫中使用 pureXML 特性,在創(chuàng )建數據庫時(shí)要使用 UNICODE(例如使用編碼集 UTF-8)。在創(chuàng )建一個(gè)表之前,如果沒(méi)能創(chuàng )建一個(gè) UNICODE 數據庫,則會(huì )產(chǎn)生如下所示的錯誤:

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

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


清單 2. 用 XML 數據類(lèi)型創(chuàng )建表
                        create table T (i int, doc xml)                        

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


圖 12. DB2 存儲模型

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

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

在 DB2 9 中,有四種方法來(lái)訪(fǎng)問(wèn)關(guān)系數據和 XML 數據,如 圖 13 所示:

  • 純 SQL(不涉及 XQuery)
  • SQL/XML,也就是說(shuō)嵌入在 SQL 中的 XQuery
  • XQuery 作為獨立的語(yǔ)言(不涉及 SQL)
  • 帶嵌入式 SQL 的 Xquery

 


圖 13. 可能的 PureXML 查詢(xún)

表 3 比較了 DB2 9 與 Oracle 10g 的 XML 功能。

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

要看到更深入的討論,可以在 developerWorks 上找到更多關(guān)于 IBM pureXML 功能的文章,例如 使用 XQuery 查詢(xún) DB2 XML 數據使用 SQL 查詢(xún) DB2 XML 數據。






表分區

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

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

  • DATABASE PARTITIONING —— 按照鍵散列將數據分布在數據庫的多個(gè)邏輯節點(diǎn)上(DPF)。
  • RANGE/TABLE PARTITIONING(DB2 9 提供) —— 根據鍵區域將數據劃分到一個(gè)邏輯數據庫分區中的多個(gè)物理對象上。
  • MULTI DIMENSIONAL CLUSTERING(MDC) —— 根據多個(gè)鍵值組織表(或一個(gè)表中的區域)中的數據。

 

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

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

下面的例子創(chuàng )建一個(gè) customer 表,其中 l_shipdate >= ‘01/01/2006‘ 且 l_shipdate <= ‘03/31/2006‘ 的行存儲在表空間 ts1 中,l_shipdate >= ‘04/01/2006‘ 且 l_shipdate <= ‘06/30/2006‘ 的行存儲在表空間 ts2 中,依此類(lèi)推。更詳盡的解釋可以參閱 developerWorks 文章 Table partitioning in DB2 9。
清單 3. 將一個(gè)表按區域分區

                        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 提供了兩種壓縮特性:一種是索引級壓縮,另一種是表級壓縮。如果對這些特性沒(méi)有適當的規劃,就會(huì )對性能產(chǎn)生不良影響。

Oracle 從版本 8i 開(kāi)始就引入了索引壓縮??梢詨嚎s的索引有 bitmap、btree 和索引組織的表。索引壓縮使用起來(lái)很簡(jiǎn)單。例如,要用壓縮特性創(chuàng )建一個(gè)索引,可以使用如下代碼:
清單 4. 用壓縮特性創(chuàng )建索引

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

對于不是在內部用壓縮特性創(chuàng )建的索引,可以通過(guò)修改它們將它們轉換成壓縮索引。下面顯示了一個(gè)示例,這個(gè)示例展示了如何修改索引,以使其變成壓縮索引。
清單 5. 用壓縮特性修改索引
                        alter index ord_customer_ix_demo rebuild compress                        

目前,Oracle 沒(méi)有提供任何自動(dòng)化的建議者程序來(lái)指出哪些索引應該被壓縮。大多數通過(guò)索引壓縮獲得的好處,都需要擁有嫻熟的 Oracle CBO 知識的資深 DBA 經(jīng)過(guò)適當規劃才能獲得。

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

                        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));                        

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

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

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

可以通過(guò) CREATE TABLE 或 ALTER TABLE 命令在表級進(jìn)行壓縮。例如:
清單 7. 用 COMPRESSION YES 創(chuàng )建/修改表

                        CREATE TABLE Sales COMPRESS YES                        ALTER TABLE Sales COMPRESS YES                        

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


圖 14. DB2 Control Center —— 以壓縮格式創(chuàng )建表

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

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

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

  • NULL 值和缺省值壓縮(V8 GA):對變長(cháng)列中的零長(cháng)度空數據和系統缺省值進(jìn)行壓縮。
  • 多維集群(V8 GA):使用塊索引,數千個(gè)記錄共用一個(gè)索引條目,實(shí)現索引壓縮。
  • 數據庫備份壓縮(V8 FP4):通過(guò)壓縮產(chǎn)生較小的備份鏡像。
  • XML 解析

 







自治特性

從 Oracle 9i 到 10g,Oracle 在調優(yōu)方面作了一些改進(jìn)。Oracle 將以下方面的調優(yōu)進(jìn)行了自動(dòng)化:

  • Redo Logfile Sizing Advisor —— 該特性就重做日志文件的最佳大小給出建議,以避免因頻繁出現的檢查點(diǎn)而導致過(guò)多的磁盤(pán) I/O。
  • Automatic Checkpoint Tuning —— Oracle 數據庫現在可以自調優(yōu)檢查點(diǎn),以取得良好的恢復速度,同時(shí)減少對正常吞吐率的影響。 這樣便不再需要設置任何與檢查點(diǎn)相關(guān)的參數。
  • Automatic Shared Memory Tuning —— Automatic Shared Memory Tuning 通過(guò)自調優(yōu)算法將 System Global Area (SGA) 內存相關(guān)參數(緩沖區緩存、共享池)的配置自動(dòng)化。它簡(jiǎn)化了數據庫的配置,確??捎脙却娴玫阶钣行У睦?,并提高了性能。
  • Transaction Rollback and Recovery Monitoring —— 該特性便于估計回滾一個(gè)事務(wù)要花多少時(shí)間。還可以監控被恢復的事務(wù)的進(jìn)程,并估計事務(wù)恢復的平均速度。

 

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

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

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

自動(dòng)配置

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

自動(dòng)數據統計信息收集

缺省情況下,DB2 9 還允許對某些進(jìn)行中的任務(wù)進(jìn)行自動(dòng)化。通過(guò)該特性,DB2 確定需要哪些統計信息,以及哪些統計信息需要更新,然后自動(dòng)在后臺執行 RUNSTATS 實(shí)用程序。

自動(dòng)存儲管理

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

自動(dòng)表和索引重組增強

自動(dòng)重組是從 8.2 版開(kāi)始引入的。但是,DB9 對其加以增強,從而允許做以下事情:

  • 指定具有適當頁(yè)寬的系統臨時(shí)表空間,用于離線(xiàn)表重組。
  • 可限制被重組的表的大小。
  • 指定自動(dòng)索引重組應該在線(xiàn)運行,并且在在線(xiàn)維護窗口中運行。
  • 指定在重組期間是保留還是重新構建壓縮目錄。

 







工具

我們來(lái)看看不同領(lǐng)域的一些工具,例如數據庫創(chuàng )建和維護、網(wǎng)絡(luò )、管理 GUI、性能調優(yōu)、數據移動(dòng)和備份恢復工具。圖 15 顯示了這些 DB2 9 GUI 工具。


圖 15. DB2 9 GUI 工具

讓我們看看類(lèi)似的任務(wù)在 Oracle 和 DB2 9 中分別是怎樣執行的。

數據庫創(chuàng )建和維護

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

網(wǎng)絡(luò )

Oracle 提供了 Network Configuration Assistant(netca)來(lái)進(jìn)行網(wǎng)絡(luò )配置?;蛘?,也可以使用 Oracle Network Manager 來(lái)配置服務(wù)名、偵聽(tīng)器、配置文件和 Oracle 名稱(chēng)服務(wù)器。DB2 則使用 CATALOG 命令來(lái)編目節點(diǎn)和數據庫。此外還可以使用 DB2 命令行或 DB2 Configuration Assistant GUI 進(jìn)行編目。

管理

Oracle Enterprise Manager 提供了針對管理員日常任務(wù)的廣泛管理功能。DB2 Control Center 也提供了和 Oracle Enterprise Manager 類(lèi)似的功能。除了 DB2 Control Center 外,還可以使用 DB2 命令行處理器來(lái)發(fā)出 DDL 和 DML 語(yǔ)句。該實(shí)用程序類(lèi)似于 Oracle 的 SQLPLUS 實(shí)用程序。圖 16 顯示了 DB2 命令行處理器。


圖 16. DB2 命令行處理器

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


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

性能調優(yōu)

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

數據移動(dòng)

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

備份和恢復

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

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

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

DWB 有一些用于開(kāi)發(fā) DB2 業(yè)務(wù)對象的視圖,例如:

  • Database Explorer 視圖 —— 顯示數據庫中有什么對象(表、存儲過(guò)程、用戶(hù)定義函數、依賴(lài)關(guān)系、遠程服務(wù)器等),并允許在這些對象上執行動(dòng)作。
  • Data Project Explorer 視圖 —— 在該視圖中,可以通過(guò)簡(jiǎn)單的操作,例如拖放、復制粘貼、向導、上下文敏感的完成選項等,進(jìn)行過(guò)程、用戶(hù)定義函數和 SQL 語(yǔ)句的開(kāi)發(fā)。
  • Data Output 視圖 —— 在該視圖中可以看到對數據庫的數據開(kāi)發(fā)的報告。

 

除了 DB2 8 的 Development Center 的功能外,新的 Developer Workbench 還包括對遷移報告、比較例程、XML 函數和使用 XQuery Builder 構建 XQuery 查詢(xún)等等的支持?,F在可以從網(wǎng)站下載DB2 Developer Workbench 。

要了解關(guān)于 DB2 Developer Workbench 的更詳細的信息,請閱讀 developerWorks 中的這篇 教程。要得到更詳盡的示例和特性,請參考 developerWorks 中的文章 DB2 9 入門(mén): 應用程序開(kāi)發(fā)方面的增強。

圖 18 展示了如何使用 DWB 創(chuàng )建存儲過(guò)程:


圖 18. DB2 Developer WorkBench







結束語(yǔ)

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

表 3 總結了我們討論過(guò)的 Oracle 與 DB2 9 之間的相同點(diǎn)與不同點(diǎn)。

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


參考資料

學(xué)習
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
DB2和Oracle區別
分布式數據庫組件——Database Link
Oracle的體系結構之基本概念(一)
Oracle數據庫的啟動(dòng)
Oracle基礎知識
第十二章 數據庫和實(shí)例啟動(dòng)和關(guān)閉
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久