国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

利用您的Oracle9i技能來學習DB2一(組圖)

2024-08-29 13:40:36
字體:
來源:轉載
供稿:網友

  您熟悉的是 Oracle 而非 SQL Server 嗎?假如是的,就請閱讀下去。這一篇文章中,我將展示如何利用您現有的 Oracle 9i 的知識快速獲得 DB2 UDB for linux、UNIX 和 Windows Version 8 方面的技能。
  
  本文中,術語“Oracle”指的是 Oracle 9i Release 2,“DB2 UDB”指的是 DB2 UDB for Linux、UNIX 和 Windows Version 8。
  
  系統結構概述
  
  首先,我們需要理解 Oracle 所使用的體系結構以及如何將之與 DB2 UDB 相比較。圖 1 展示了 Oracle 的系統結構。圖 2 展示了 DB2 UDB 的系統結構,請將兩者做一下比較。請參照這些圖來閱讀本文以便理解。
  
  
圖 1. Linux、UNIX 和 Windows Version 9.2 上的 Oracle 系統結構
   利用您的Oracle9i技能來學習DB2一(組圖)(圖一)
點擊查看大圖

  圖 2. Linux、UNIX 和 Windows Version 8 上的 DB2 UDB 系統結構
   利用您的Oracle9i技能來學習DB2一(組圖)(圖二)
點擊查看大圖

  實例
  
  實例(instance)的概念在 Oracle 和 DB2 UDB 中是相似的。在這兩種情況下,實例都是指后臺進程與共享存儲器的組合。兩者之間最大的差別就是,Oracle 中每個實例只包含一個數據庫,而 DB2 UDB 中多個數據庫可以共享一個實例。
  
  因為數據庫和實例之間存在一對一的對應關系,所以在 Oracle 中要通過用 CREATE DATABASE 命令創建數據庫來顯式地創建實例。另外,您也可以使用 Database Configuration Assistant(數據庫配置助手)或 ORADIM 工具(Oracle 9i 中提供的新選項)在機器上創建 Oracle 實例。您還必須提供某些信息,包括系統標識符(System Identifier,SID)或服務名、實例口令、最大用戶數、啟動模式,等等。同樣,可以使用帶有 DELETE 選項的 ORADIM 工具來刪除該實例。您也需要傳遞 SID 或服務名。除非您在安裝過程中創建新的數據庫,否則新安裝 Oracle 時是不會創建默認實例的。
  
  在 DB2 UDB 中,當將產品安裝在 Windows 平臺之后,將默認地創建“DB2”實例。Linux 和 UNIX 中,其默認實例名為“db2inst1”。若要在同一臺機器上創建另一個實例,您只需執行命令 db2icrt
  
  圖 3 顯示了 DB2 UDB Control Center GUI 中默認的 DB2 UDB 實例“DB2”(Windows 中)和用 db2icrt 命令創建的其他兩個實例。
  
  
圖 3. 顯示有 DB2 UDB 實例的 DB2 UDB Control Center GUI
   利用您的Oracle9i技能來學習DB2一(組圖)(圖三)
點擊查看大圖

  要從命令行接口引用一個給定的 DB2 UDB 實例,請使用 DB2INSTANCE 環境變量。該變量讓您指定所有命令將應用到的當前的活動實例。例如,假如將 DB2INSTANCE 設置成 PROD,然后您發出 create database MYDB1 命令,那么您將創建和實例 PROD 關聯的數據庫。假如您想在實例 DB2 上創建該數據庫,則必須首先將變量 DB2INSTANCE 的值更改為 DB2。這與 ORACLE_SID(System Identifier)類似,它也是用于在實例之間進行切換。
  
  標識您想使用的實例的另一個簡單方法是使用如 圖 3 所示的 DB2 UDB Control Center GUI。您可能必須通過右擊 Instances 并選擇 Add 來將實例添加至 GUI 中,才能在該工具中看到這個新實例的條目。您可以執行命令 db2idrop 來刪除 DB2 UDB 中的實例。
  
  總而言之,在 Oracle 中,Database Configuration Assistant 可用于創建、修改、啟動、停止和刪除實例,而在 DB2 UDB 中,則可使用 Control Center GUI 來達到類似的目的。另外,Oracle 實例與數據庫只能有一對一的關系,而在 DB2 UDB 中就不是這樣的。多個數據庫可以存在于一個 DB2 UDB 實例中并且可被其同時使用。
  
  數據庫
  
  在 Oracle 中,既可以使用 CREATE DATABASE 命令手工創建數據庫,也可以使用 Database Configuration Assistant 來創建。手工創建數據庫在執行 CREATE DATABASE 命令之前,還必須執行一系列步驟,包括設置 OS 變量、預備參數文件以及創建口令文件。
  
  元數據信息由數據字典(Data Dictionary)存儲并治理,而數據字典是由基本表以及相應的視圖組成的。
基本表是在數據庫的創建過程中自動創建的,而視圖則是通過運行 catalog.sql 和 catproc.sql 腳本構造的。
  
  因而,將 Oracle 數據庫看作 3 種文件類型的集合:
  
  數據文件(Data File):包含真正的數據,即數據庫的物理實現(類似于 DB2 UDB 中的容器)。
  重做文件(Redo File):相當于 DB2 UDB 中的事務日志。
  控制文件(Control File):包含用以維護和驗證數據庫完整性的信息。
  
  正如圖 2 所示,在 DB2 UDB 中,一個實例可以容納多個數據庫。每個數據庫是真正封閉、獨立的單元。每個數據庫都有自己的目錄表空間、臨時表空間和用戶表空間,它們是隨數據庫的成功創建而被默認創建的。DB2 UDB 包含了一個稱作 系統數據庫目錄(system database Directory)的二進制文件,里面有您可以從 DB2 UDB 機器連接的所有數據庫的條目。這個目錄在實例級別保存。
  
  當創建一個實例時,默認情況下不創建數據庫。您需要使用 create database 命令顯式地創建數據庫。您也可以使用如 圖 4 和 圖 5 所示的 Control Center 來創建數據庫。
  
  
圖 4. 使用 Control Center GUI 創建 DB2 UDB 數據庫
   利用您的Oracle9i技能來學習DB2一(組圖)(圖四)
點擊查看大圖

  圖 5. 使用 Control Center GUI 創建 DB2 UDB 數據庫(續)
   利用您的Oracle9i技能來學習DB2一(組圖)(圖五)
點擊查看大圖

  在 圖 5 中,您也可以看到單擊 Show Command 時會發生什么情況。所有的 DB2 UDB Control Center GUI 屏幕都會顯示實際上在后臺執行的 SQL 語句或命令。這些命令能夠保存在腳本中以供今后執行,或者被復制并從命令行處理器(Command Line Processor,CLP)工具或 Command Center GUI 工具中執行。這兩個工具分別等同于 Oracle 的 SQL*Plus 和 iSQL *Plus。
  
  可以通過使用“DROP DATABASE”命令或者從 DB2 UDB Control Center GUI 刪除 DB2 UDB 數據庫。Oracle 中沒有這樣的命令,所以是通過刪除所有關聯的數據文件來刪除數據庫的。
  
  一個實例內的數據庫通常不會相互交互。然而,假如應用程序需要與不止一個數據庫交互,那么可以通過啟用 聯邦(federation)支持來滿足此要求。請參閱 參考資料 小節來獲取有關聯邦的一篇文章。
  
  容器、表空間、緩沖池和頁
  
  在 Oracle 中,數據實際存儲于稱作數據文件的文件中。這類似于 DB2 UDB 的 容器,它也是數據實際存儲的地方。每個 Oracle 數據庫包含一個名為 SYSTEM 的表空間,是在創建數據庫時由 Oracle 自動創建的。而用戶、臨時和索引數據的其他表空間需要在創建了數據庫之后創建,并且在使用這些表空間之前要給它們指派用戶。
  
  在 DB2 UDB 中,表空間(table space)是邏輯對象,用作邏輯表和物理容器之間的層。當創建一個表空間時,您可以將之和一個特定的緩沖池(數據庫高速緩存)關聯起來,并關聯到特定的容器。這就給了您治理性能上的靈活性。例如,假如存在一個“熱門”表,您就可以在一個單獨的表空間中定義它,而這個表空間又關聯到獨立的緩沖池。這樣有助于確保該表的數據連續高速緩存在內存中。
  
  當使用 CREATE DATABASE 命令的默認值創建數據庫時,DB2 UDB 中將自動創建三個默認的表空間。表 1 描述了默認的 DB2 UDB 表空間:
  
  
表 1. 當用默認值創建數據庫時,默認創建的 DB2 UDB 表空間
   利用您的Oracle9i技能來學習DB2一(組圖)(圖六)
點擊查看大圖

  因為 DB2 UDB 中的數據庫是獨立的單元,因此不能跨數據庫共享表空間。又因為表空間只在一個數據庫中是已知的,所以兩個不同的數據庫可以有同名的表空間。您可以在 圖 2 中看到,數據庫 MYDB1 有一個名為 MYTBLS 的表空間,而數據庫 MYDB2 也有一個同名的表空間。
  
  DB2 UDB 表空間可以被分為 SMS(系統治理空間)或 DMS(數據庫治理空間)。SMS 表空間由操作系統治理并僅可以是目錄。它們會隨著需要自動地增長,因此 SMS 提供了較好的性能且不需要太多治理。DMS 表空間由 DB2 UDB 治理,可以是文件或裸設備。該類型的表空間能獲得最佳性能,但需要一定的治理。例如,您需要提前指定希望分配給表空間的空間量,因為增長不是自動進行的。
  
  Oracle 沒有給其存儲模型提供 SMS 概念,但是它的數據文件與 DB2 UDB DMS 表空間相類似。也就是說,您可以通過給表空間添加數據文件,或者通過增大數據文件,或者通過添加新的表空間來增加數據庫的大小。
  
  下面的 表 2 顯示了 Oracle 數據庫或表空間如何與 DB2 UDB 數據庫或表空間一一對應。

  
  
表 2. Oracle 數據庫如何與 DB2 UDB 數據庫或表空間一一對應
   利用您的Oracle9i技能來學習DB2一(組圖)(圖七)
點擊查看大圖

  如前面所示,Oracle 的數據緩沖區概念相當于 DB2 UDB 的緩沖池;然而,DB2 UDB 答應存在多個緩沖池。沒有預先定義可創建的緩沖池數目,而且這些緩沖池可以擁有任意名字。
  
  Oracle 塊(block)的概念與 DB2 UDB 的頁極其相似。DB2 UDB 頁的大小可以為 4k、8k、16k 或 32k。一個表行必須僅放入一頁;與 Oracle 一樣,它不能垮越到其他頁。
  
  對象名稱
  
  Oracle 對象名稱的形式如下:
  
  [Schema_name.]object_name[@database]
  
  在 DB2 UDB 中,對象的結構也由兩部分組成:
  
  Schema_name.object_name
  
  與在 Oracle 中一樣,DB2 UDB 用于從邏輯上對對象進行分組。然而,一個重要差別就是在 DB2 UDB 中,模式名不一定和用戶 ID 相匹配。任何具有名為 IMPLICIT_SCHEMA 特權的用戶都可以使用不存在的模式創建對象。例如,假設“Peter”具有 IMPLICIT_SCHEMA 特權,并執行了以下命令:
  
  CREATE TABLE WORLD.TABLEA (lastname char(10))
  
  在這種情況下,創建了表 WORLD.TABLEA,其中 WORLD 是新創建的模式。假如 Peter 沒有顯式地指明該模式,那么表 PETER.TABLEA 也會被創建,因為默認使用了連接 ID。
  
  在 DB2 UDB 中,在發出數據庫特定的命令之前您總是連接到一個數據庫;因此在這種體系結構下,對象名稱不需要包含數據庫名。
  
  表、視圖和索引
  
  表、視圖和索引在 Oracle 和 DB2 UDB 中基本上是相同的。
  
  DB2 UDB 提供了名為 Design Advisor 的工具,可用于為特定的查詢或工作負載推薦索引。可以從 DB2 UDB Control Center 或使用 db2advis 命令從 DB2 UDB CLP 調用 Design Advisor。在 DB2 UDB 中,索引直接被綁定到表的定義中。例如,當使用 DMS 表空間時,您可以指定索引可以駐留在哪個表空間里,如下所示:
  
  CREATE TABLE mytable (col1 integer, col2 char(10)) in tbls1 index in tbls2
  
  上面的例子顯示該表的數據將存儲在表空間“tbls1”中,而索引頁則將存儲在表空間“tbls2”中。這與 Oracle 語法是不同的,Oracle 中的 CREATE INDEX 語句提供了一個選項,用以指定索引將駐留的表空間。
  
  另外,在 DB2 UDB 中一旦創建了索引,您就不能更改索引定義的任何子句。您需要通過刪除索引然后再次創建它來實現更改。
  
  與在 Oracle 中一樣,DB2 UDB 表、視圖和索引可以在不同的數據庫中擁有相同的名稱。同一數據庫中的表和視圖必須擁有不同的名稱,但是創建與現有的表或視圖同名的索引是答應的。
  
  存儲過程、觸發器和用戶定義函數(UDF)
  
  在 Oracle 環境中有許多方法創建并訪問存儲過程、觸發器和函數。PL/SQL 是 SQL 的面向對象(OO)的過程化擴展,支持數據的操縱(DML)、流程控制、變量和常量的聲明、過程和函數定義以及諸如嵌套表和變長數組(varray)的 OO 數據類型。Oracle 還在其引擎中包含了 JVM。在 Oracle 數據庫中可使用 SQLJ 將存儲過程、函數和觸發器作為類來創建、存儲和執行。Oracle 還支持 Type 1 至 4 的 JDBC 驅動程序。
  
  DB2 UDB 存儲過程可以用其預編譯器支持的所有語言來編寫,包括 java、C、C++、REXX、Fortran 和 COBOL。然而,我們推薦使用 SQL 過程化語言(SQL PL),它與 Oracle 的 PL/SQL 相當類似。因為 SQL PL 存儲過程被首先轉換為 C,所以需要一個 C 編譯器來開發這些存儲過程。存儲過程的 C 語言實現可以提供性能優勢,因為代碼只編譯一次(尤其當運行在無保護方式下);然而,它也在開發系統中增添了對 C 編譯器的需求。在 DB2 UDB 的未來發行版中,希望能在無需 C 編譯器的情況下支持 SQL PL 存儲過程。DB2 UDB 存儲過程開發還使用 Type 1 至 4 的 JDBC 驅動程序來支持 SQLJ 和 Java。
  
  觸發器和函數的開發可以使用內聯的 SQL/PL,這不需要 C 編譯器。通過該方法可以支持 SQL PL 語句的一個子集。使用 DB2 Development Center 工具可易于創建、構建、調試和部署 DB2 UDB 存儲過程和用戶定義函數。
  
  配置文件
  
  傳統上,Oracle 將所有會話和系統相關的參數存儲在一個文本文件中,該文件通常稱作 initSID.ora。然而,由于該文本文件具有非持久的本質,從 Oracle 9i 開始,Oracle 就引入了服務器參數文件(SPFILE),這是一個存儲在服務器上的二進制參數文件。
它在實例停止和啟動的過程中是持久存在的。然而當 SPFILE 不可用時,仍然使用 initSID.ora 文件。引入 SPFILE 之前,任何影響參數的 ALTER SYSTEM 和 ALTER session 命令只在那個實例或會話期間有效。每當希望回跳數據庫實例時,DBA 都必須手工修改文本文件 initSID.ora。網絡訪問配置一般存儲在用于偵聽器的 listener.ora 中和用于客戶機訪問的 tnsnames.ora 中。
  
  在 DB2 UDB 中,配置參數同樣存儲在實例級別(稱為 數據庫治理器 配置文件)和數據庫級別(稱為 數據庫 配置文件)。這些參數大多數都可以被動態更改,即在對于參數值的更改生效之前,不需要停止并重啟該實例或者強制所有連接。
  
  假如您想要從 CLP 手工更改特定的數據庫治理器參數,請使用命令 UPDATE DBM CFG USING
  
  假如您想要從 CLP 手工更改特定的數據庫參數,請使用命令 UPDATE DB CFG FOR USING
  
  這些命令相當于 Oracle 的 ALTER SYSTEM 和 ALTER SESSION。或者,您可以使用 Control Center 來查看并更改這些參數的值;假如右擊一個給定的實例并選擇 Configure Parameters,您將會看到 圖 6 所示的窗口。
  
  
圖 6. DB2 UDB 數據庫治理器配置參數(實例級別)
   利用您的Oracle9i技能來學習DB2一(組圖)(圖八)
點擊查看大圖

  在數據庫級別,右擊一個給定的數據庫并選擇 Configure Parameters,將顯示 圖 7 所示的窗口。
  
  
圖 7. 數據庫配置參數(數據庫級別)
   利用您的Oracle9i技能來學習DB2一(組圖)(圖九)
點擊查看大圖

  DB2 UDB 提供了許多可以用來配置系統的參數;然而,假如您喜歡用一種簡單的方法來自動配置系統,請使用 autoconfigure 命令(或 Configuration Advisor GUI),它根據您提供的一些信息,將數據庫治理器和數據庫配置參數設置成最佳值。圖 8 顯示了 Configuration Advisor。
  
  
圖 8. DB2 UDB Configuration Advisor
   利用您的Oracle9i技能來學習DB2一(組圖)(圖十)
點擊查看大圖

  除了配置文件之外,DB2 UDB 通常還把 DB2 注冊表變量用于特定于平臺的配置。請注重,DB2 注冊表變量與 Windows 注冊表沒有任何關系。用戶可使用 db2set 命令來查看并更改這些變量。
  
  連通性(網絡訪問)信息存儲在系統數據庫目錄、本地數據庫目錄和節點目錄中。這些都是二進制文件并且只能用 CATALOG 和 UNCATALOG 命令進行修改。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正镶白旗| 聂拉木县| 宁德市| 利辛县| 来宾市| 新丰县| 青河县| 布尔津县| 扎囊县| 芷江| 丰城市| 博爱县| 闽侯县| 镇赉县| 射洪县| 高碑店市| 武功县| 襄垣县| 垦利县| 犍为县| 大竹县| 双江| 榆中县| 墨竹工卡县| 会宁县| 射洪县| 襄城县| 右玉县| SHOW| 奉节县| 黄冈市| 永修县| 西丰县| 赞皇县| 乐安县| 黔江区| 年辖:市辖区| 宁明县| 长沙县| 合阳县| 修武县|