DB2和Oracle區別____Oracle

來源:互聯網
上載者:User
今天客戶來訪(日本人),問我DB2和Oracle區別。因為不是DBA(勉強的理由),我還真沒有認真總結過。但我的第一感覺:一個是instance,一個是Database。建Ora庫和DB2的庫是不一樣的。實在是はずかしい。

系統結構概述

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


圖 2. DB2 on 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"。若要在同一台電腦上建立另一個執行個體,只需執行命令 de>db2icrt <instance name>de>。

圖 3 展示了預設的 DB2 執行個體 “DB2”(在 Windows 中)和從 DB2 Control Center GUI 中用 db2icrt 命令建立的另外兩個執行個體。
圖 3. 顯示 DB2 執行個體的 DB2 Control Center GUI

若要在命令列介面中引用給定的 DB2 執行個體,可以使用環境變數 DB2INSTANCE。通過這個變數,可以指定當前活動執行個體,所有命令將應用到此執行個體。例如,如果 DB2INSTANCE 被設定為 PROD,然後您執行了命令 de>create database MYDB1de>,將建立一個與執行個體 PROD 關聯的資料庫。如果要在執行個體 DB2 上建立該資料庫,那麼必須首先將 DB2INSTANCE 變數的值改為 DB2。這類似於 ORACLE_SID (System Identifier),當使用者想要在不同執行個體之間進行切換時,也是使用 ORACLE_SID。

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

總之,在 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 資料庫


圖 5. 使用 Control Center GUI 建立 DB2 資料庫(續)

在 圖 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 中的對象名稱形式如下:

de>[Schema_name.]object_name[@database]de>

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

de>Schema_name.object_namede>

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

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

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

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



回頁首


表、視圖和索引

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

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

de>CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2de>

上面的例子表明,表中的資料將儲存在資料表空間 '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 中手動更改特定的資料庫管理員配置參數,可以使用命令 de>UPDATE DBM CFG USING <parameter name> <new value>de>。

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

這兩個命令分別相當於 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,也可以使用 Control Center 查看和修改這些參數的值。如果按右鍵一個給定的執行個體,並選擇 Configure Parameters,那麼可以看到 圖 6 中顯示的視窗。
圖 6. DB2 Database Manager 配置參數(執行個體級)

在資料庫級,右擊一個給定的資料庫,並選擇 Configure Parameters,則可以看到 圖 7 中顯示的視窗。
圖 7. 資料庫配置參數(資料庫級)

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

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

串連(網路訪問)資訊儲存在 System 資料庫目錄、本機資料庫目錄和節點目錄中。這些都是二進位檔案,只能用 CATALOG 和 UNCATALOG 命令修改。



回頁首


記憶體架構和後台進程

接下來,我們來看看記憶體架構和後台進程,並且比較一下 Oracle 和 DB2 中記憶體架構和後台進程的不同之處。
圖 9. Oracle 記憶體架構和後台進程

Oracle 中的 System Global Area(SGA)是一組共用記憶體塊,用於儲存與執行個體有關的資訊。其中包括語句緩衝、重做日誌緩衝區和資料緩衝區緩衝。Program Global Area(PGA)和 User Global Area(UGA)共用記憶體塊,包含用於伺服器處理序和使用者會話的資料和控制資訊。

Oracle 支援在同一台電腦上存在多個執行個體,但不允許共用後台進程。例如,同一台電腦上的三個執行個體就需要三組後台進程。因此建議在一台電腦上包含一個資料庫、一個執行個體和多個模式。
圖 10. DB2 記憶體架構和後台進程

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

Oracle 是在執行個體和資料庫啟動時將記憶體配置給它們的,而 DB2 則是在不同層級上分配記憶體。這主要是因為 DB2 執行個體可以包含多個資料庫。DB2 中主要有三種記憶體結構: 執行個體共用記憶體:這是資料庫管理員全域共用記憶體,是在使用 de>db2startde> 命令啟動執行個體時分配給執行個體的,並且在發出 de>db2stopde> 命令停止執行個體之前,一直處於已指派狀態。 資料庫共用記憶體:這是資料庫全域記憶體,是在啟用資料庫或者第一次串連到資料庫時分配的。分配的記憶體包括緩衝池、鎖列表、資料庫堆、公用程式堆、包緩衝和編目緩衝。 應用程式共用記憶體:這是在應用程式串連到一個資料庫時分配的記憶體,由處理串連到資料庫的客戶機所請求的工作的代理使用。每個串連到資料庫的應用程式都會被分配記憶體;因此,對會影響應用程式共用記憶體的參數的正確配置就非常重要。

在 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 中的 DBW

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.