Oracle9i 数据库核心组成要素


1 Oracle 9i資料庫管理實務講座(四) 上一期我為大家介紹了 Oracle9i 伺服器架構,並探討 Oracle9i 執行個體之組成要素與其運作原理,本期將把重點 放在 Oracle9i 資料庫實體結構。 Oracle9i 資料庫結構 談及Oracle資料庫結構時,我們應該從兩個角度來探討:分別是資料 庫的「邏輯層面」與「實體組成」。簡單的說,「邏輯層面」是由” 資料 庫內部 ” 觀看其組成要素,包括:資料表空間(tablespaces)、區段 (segments)、延伸區塊(extents)、資料區塊(data block)、以及綱要物 件(Schema objects)(註 1)。而「實體組成」則是從 ” 作業系統 ” 角度來 看 Oracle9i 資料庫的實體構成項目,包括:資料檔(Data files)、重 置日誌檔(redo log files)、控制檔(control files)、密碼檔 (password)、起始參數檔(initialization parameter files)…等等。 如果您有心成為一個頂尖的 Oracle DBA ,那麼不僅要對以上各項如數 家珍般熟悉,還要瞭解其內部運作與相互關係才行。首先我們就先從 「邏輯層面」探訪 Oracle9i 資料庫! 資料庫之邏輯組成 無論是任何規模的企業,在管理資料庫系統時,DBA都應該依據實際系 統需求或是未來可能的管理方式,規劃出一個或多個資料儲存區域。重 點是希望將資料分門別類地妥善存放。譬如,您可能會希望將公司內會 計系統的帳務資料與產品銷售紀錄分開存放。 Oracle9i 資料庫允許 D B A 自行規劃各種用途的資料表空間 (Tablespace),以便存放不同型態的資料與資料庫物件。舉例來說,存 放Oracle系統資訊的「資料辭典」(data dictionary)可放在 SYSTEM 資 料表空間;應用系統資料可存放在 USER 資料表空間;而所有資料表的 索引(Index)則可單獨存放在 INDX 資料表空間內(註 2)。 (原文刊登於 2002 年 02 月 Linuxer 雜誌) 本文內容索引本文內容索引本文內容索引本文內容索引本文內容索引 ■ 資料庫之邏輯組成 ■ 啟動 Oracle9i 資料庫的 方式 圖文: 何致億 Rich Ho 資料庫管理實務講座 四 Oracle9i 資料庫實體結構資料庫實體結構資料庫實體結構資料庫實體結構資料庫實體結構 註1: Oracle9i 的綱要物件即為俗稱的 ” 資料庫物件 ” 。 2Oracle 9i 資料庫管理實務講座(四) 一般來說,Oracle9i資料庫至少應規劃出五個以上的資料表空間,如 下圖一所示: 圖一:Oracle9i 資料庫之資料表空間。 那麼,先從資料的最小儲存單位 — 「資料區塊」談起。 何謂何謂何謂何謂何謂「「「「「資資資資資料料料料料區區區區區塊塊塊塊塊」」」」」????? 許多初次接觸資料庫的讀者最好奇的一點是:” 資料究竟是如何存放在 資料庫呢?”。其實,Oracle9i 資料庫有幾種資料儲存體,其中最小的 儲存單元就稱為「資料區塊」(data block)。資料區塊大小是由起始參數 檔的 DB_BLOCK_SIZE 參數所決定,且在新建 Oracle9i 資料庫之前就必 須明確地定義。實際上,資料區塊大小與 ” 作業系統的磁碟讀寫區塊 ”( O.S. blocks)也有關係,所以您必須將 DB_BLOCK_SIZE 設定為 O.S. blocks的整數倍。附帶一提:Oracle9i在存取資料時是以data block為 最小讀取單位,而不是以 O.S. block 為單位。 從 Oracle9i 開始,資料庫內可以設定多種資料區塊大小。換句話說, Oracle9i 資料庫內分為「標準資料區塊」與「非標準資料區塊」;預設 情況下 SYSTEM 資料表空間就是以「標準資料區塊」建立而成。 何謂何謂何謂何謂何謂「「「「「延延延延延伸伸伸伸伸區區區區區塊塊塊塊塊」」」」」????? 除了資料區塊之外, Oracle9i 資料庫還有所謂的「延伸區塊」 (extents)。雖然資料區塊是Oracle9i最小的資料讀寫單位,但值得注意 的是:Oracle9i 在 ” 配置 ” 儲存空間時,並不是以資料區塊為單位,而 是改採「延伸區塊」的方式來配置空間。那麼,使用「延伸區塊」究竟 有何好處呢?當您執行DDL指令建立資料庫物件時(例如CREATE TABLE 指 令),Oracle9i會先配置出一連串的資料區塊;直到這些資料區塊全部存 滿資料後,下次再配置一連串的資料區塊。這些連續的資料區塊就統稱 為「延伸區塊」。 舉例來說,假定您準備在 Oracle9i 資料庫內存放 80KB 的資料, 註2: SYSTEM為Oracle資料庫預設的資料 表空間;USER 與 INDX 則是由 DBA 自 行規劃建置的。 3 Oracle 9i資料庫管理實務講座(四) Oracle9i 可以先配置一個「延伸區塊」,其大小可為資料區塊(8KB)的 5 倍;然後視實際需要再配置第二個「延伸區塊」(大小還是40KB)。如此一 來,只要兩次的空間配置動作就可以存放 80KB 的資料了!試想,如果 Oracle9i 每次只配置 8KB 的「資料區塊」讓您存放資料,總共需要10 次 空間配置動作才能放滿 80 KB 的資料,是不是比較沒有效率呢?由此可 見,「延伸區塊」的確有其存在的必要性。 何謂何謂何謂何謂何謂「「「「「區區區區區段段段段段」」」」」????? 依照不同的資料處理性質,您可能需要在資料表空間內劃分出不同區 域,以存放不同資料;我們將這些區域稱之為「區段」(segment)。例如, 存放資料的稱為「資料區段」、存放資料的稱為「索引區段」。而「區 段」其實就是由許多「延伸區塊」組合而成。除了上述兩種「區段」以 外,Oracle9i資料庫內還有另外兩種區段結構,分別是:「暫時性區段」 (temporary segment)與「退回區段」(rollback segment)。下圖二說明 了 Oracle9i 資料庫內各邏輯組成要件之間的階層關係: 圖二:Tablespace 、 Segment 、 Extent 、 Block 之間的關係。 所以,從 Oracle9i 資料庫的「邏輯層面」來看,我們知道: ■ 資料是存放在每個「資料區塊」內,資料讀寫動作也將以「資料區 塊」為單位。 ■ 空間配置的動作則是引用「延伸區塊」的概念。一個「延伸區塊」 由一連串的「資料區塊」所構成。 ■ 依實際資料量多寡,資料(或資料庫物件)由多個「延伸區塊」所組 成。 ■ 「資料表空間」內可劃分不同的「區段」;而每個「區段」內又包 含許多「延伸區塊」。 ■ 在每個 Oracle9i 資料庫內可規劃不同的「資料表空間」,用以存 放不同型態的資料。 4Oracle 9i 資料庫管理實務講座(四) 截至目前為止,無論是資料區塊、延伸區塊、區段、甚至資料表空 間,都只是邏輯上的資料儲存概念。實際上,Oracle9i資料庫是藉由數 個作業系統內實體檔案來維繫資料庫系統之正常運作。接下來我們將從 作業系統角度來探討 Oracle9i 的實體組成要素。 資料庫之實體組成 還記得上一期文章中我們曾經綜覽Oracle9i 伺服器基本架構嗎?如果 從作業系統的觀點來看,Oracle9i 資料庫的實體組成要素就是作業系統 內各式檔案,最重要的有:資料檔案、重置日誌檔、控制檔、起始參數 檔 … 等。下圖三描述了 Oracle9i 資料庫的基本架構。 圖三:Oracle9i 資料庫基本架構。 資料檔案 每個 Oracle9i 資料庫都包含為數不等的實體「資料檔案」。資料庫 內所有邏輯資料庫物件都是存放在資料檔案內,如:資料表、索引 …. 等。 一但資料檔案被建立後,系統就會在磁碟上配置出適當空間給資料檔 案;但尚未存放任何使用者資料。等到未來使用者將資料存入資料庫 時,Oracle9i 才會在資料檔案內配置出「資料區段」,以存放資料。而 這些動作都是由 Oracle9i 自動完成的。 當然了,如果資料檔案剩餘空間不足,您就必須調整資料檔案大小; 或增加新的資料檔案。所以在 Oracle9i 資料庫內,一個資料庫物件有 可能橫跨多個資料檔案 (資料檔案相關的管理與維護動作將在未來專欄 內容中詳細探討) 。 如前所述,Oracle9i 資料庫內可規劃一個以上的「資料表空間」。但 5 Oracle 9i資料庫管理實務講座(四) 如果由作業系統角度來看,「資料表空間」其實是由一個或數個實體「資 料檔案」所組成。換句話說,資料庫的所有資料就是位於作業系統的各 「資料檔案」內。 所以: ■ 一個「資料檔案」只能對應的一個「資料表空間」。 ■ 一個「資料表空間」可包含多個「資料檔案」。 如下圖四所示:SYSTEM 「資料表空間」對應到作業系統的 system01. ora 「資料檔案」(註3);USER 「資料表空間」則是包含 user01.ora 與 user02.ora 兩個「資料檔案」。 圖四:資料表空間與資料檔案之對應。 重置日誌檔 除了「資料檔案」外,最重要的Oracle9i 資料庫實體檔案就是「重置 日誌檔」(redo log files),也就是大家俗稱的「交易日誌」(transaction log)。雖然它與「資料檔案」不同,但是彼此間卻有密不可分的關係!簡 單的說, Oracle9i 重置日誌檔會負責紀錄資料庫內任何資料處理情況 (註4)。當資料被異動時,所有異動紀錄會先保留在記憶體的重置紀錄緩 衝區,並在適當時機由LGWR背景處理程序負責寫入至硬碟上重置日誌檔 (註 5)。如此一來,所有資料異動情況都會完整地保留下來。萬一您的 Oracle9i 資料庫不小心當機或是遭遇毀損,Oracle9i 將憑藉重置日誌 檔內相關紀錄將資料復原至最完整的狀態—這個動作我們又稱為『Roll Forward』。 重置日誌檔的配置方式重置日誌檔的配置方式重置日誌檔的配置方式重置日誌檔的配置方式重置日誌檔的配置方式 請注意,Oracle9i資料庫正常運作的先決條件是至少配置兩個(組)重 置日誌檔! 假定目前Oracle9i資料庫擁有兩個重置日誌檔,分別是redo01.ora與 redo02.ora。因為重置日誌檔是以循環方式使用,所以當redo01.ora寫 滿後就會輪到redo02.ora — 這個動作稱為「「「「「日日日日日誌誌誌誌誌切切切切切換換換換換」」」」」(log switch)(log switch)(log switch)(log switch)(log switch)。 理論上,當redo02.ora寫滿後應該會立刻從redo01.ora重新開始寫入動 作。但實際上並非如此 — Oracle9i 會等到 redo01.ora 內紀錄的資料 異動情況真正反應在資料檔案之後(記得我們曾經提過的 CKPT 處理程序 註3: 任何 Oracle9i 資料庫都必須要有 一個 SYSTEM 資料表空間,所以 Oracle9i 會在建立資料庫時自動將 第一個資料檔案配置給 SYSTEM 資 料表空間。 註4: 這裡的資料處理動作泛指新增、修 改、刪除;但查詢動作除外。 註5: 有關重置紀錄緩衝區與LGWR背景處 理的互動過程,請參閱我在2002年 1月Linuxer 雜誌的專欄文章。 6Oracle 9i 資料庫管理實務講座(四) 嗎?),才會覆寫 redo01.ora 的資料。在一個大型線上交易(OLTP)系統 下,如果資料交易量十分頻繁,建議您不妨配置五個以上重置日誌檔。 以免Oracle9i 進行「日誌切換」時還要等候CKPT 處理程序執行「檢查點 動作」(checkpoint),因而影響系統效能。 在執行關鍵性任務(mission-critical)的資料庫系統中,為了避免硬 體問題導致重置日誌檔毀損(例如硬碟產生壞軌),我們會考慮建置「多重 重置日誌檔」(multiplexed redo log)。所謂的「多重重置日誌檔」其 實就是在其他硬碟內同時存放多份重置日誌檔之複本。以下圖五為例: 假定原來的重置日誌檔為Redo_A01.ora與Redo_A02.ora。我在第二個磁 碟又額外規劃了兩個重置日誌檔 — Redo_B01.ora 與 Redo_B02.ora(分 別為 Redo_A01.ora 與 Redo_A02.ora 之複本)。這時候 Redo_A01.ora 與 Redo_B01.ora 就構成所謂的「重置日誌群組」(redo log group);而 Redo_A01.ora 與 Redo_B01.ora 分別為該群組之「群組成員」(member)。 一但您以「重置日誌群組」的方式規劃重置日誌檔,LGWR 會同時將異 動紀錄寫入相同群組的所有成員。也就是說, LGWR 會將資料同時寫入 Redo_A01.ora與Redo_B01.ora,等到發生「日誌切換」動作後,再同時 寫入Redo_A02.ora與Redo_B02.ora。可想而知,萬一這兩顆硬碟其中之 一不幸損毀。重置日誌檔將不受任何影響。 儘管「多重重置日誌檔」的概念已具備容錯功能,但是對於重置日誌 檔之寫入效能卻有一定程度的影響!這也是我們在規劃之初就必須考慮 的重點之一。 圖五:多重重置日誌檔的配置方式。 控制檔 每個 Oracle9i 資料庫也都會有一個「控制檔」,用以紀錄與描述資 料庫的實體結構。「控制檔」內記錄以下重要資訊: ■ Oracle9i 資料庫名稱與建立時間。 7 Oracle 9i資料庫管理實務講座(四) ■ 資料檔案與重置日誌檔之名稱,及其所在位置。 ■ 交易紀錄序列碼(log sequence number)。 每當資料庫被啟動時,Oracle9i 會在執行個體啟動後立刻讀取控制檔 內容,待所有資料庫實體組成檔案之所在資訊都收集完畢,資料庫才會 被開啟。為了避免控制檔毀損導致資料庫系統停擺,建議您比照「多重 重置日誌群組」的方式 — 至少配置兩個控制檔,並存放在不同實體硬 碟(註6)。 起始參數檔起始參數檔起始參數檔起始參數檔起始參數檔 在啟動執行個體之前,Oracle9i必須依照特定參數設定值來配置記憶 體空間,並啟動相關背景處理程序。而DBA 可以事先規劃這些參數,並 存放在作業系統內的某個檔案。往後將利用這個檔案來開啟相對應的 Oracle9i 執行個體 。這個檔案就是所謂的「起始參數檔起始參數檔起始參數檔起始參數檔起始參數檔」。 起始參數檔包含以下主要內容: ■ 系統全域區相關的組態設定 ■ 其他各起始參數之名稱與設定值 ■ 控制檔名稱與存放路徑 ■ 重置日誌檔之相關設定 您可以利用任何文字編輯器來建立或修改起始參數檔,通常起始參數 檔的名稱為 init.ora 或是 init.ora 。假定 Oracle9i 執行個體的 名稱為ora901,起始參數檔之檔名就可以定為initora901.ora。以下是 一個起始參數檔範例: # Copyright (c) 1991, 2001 by Oracle Corporation # Cache and I/O db_block_size=8192 db_cache_size=67108864 # Cursors and Library Cache open_cursors=300 # Diagnostics and Statistics background_dump_dest=/opt/oracle/admin/ora901/bdump core_dump_dest=/opt/oracle/admin/ora901/cdump timed_statistics=TRUE user_dump_dest=/opt/oracle/admin/ora901/udump # Distributed, Replication and Snapshot db_domain=uuu.com.tw remote_login_passwordfile=EXCLUSIVE (註 6) 除了資料庫啟動時需讀取控制檔以 外。進行資料庫復原動作時也必須 存取控制檔內容。 8Oracle 9i 資料庫管理實務講座(四) # File Configuration control_files=("/opt/oracle/oradata/ora901/control01.ctl", "/opt/oracle/oradata/ora901/control02.ctl", "/opt/oracle/oradata/ora901/control03.ctl") # MTS dispatchers="(PROTOCOL=TCP)(SER=MODOSE)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server. GiopServer)", "(PROTOCOL=TCP)(PRE=oracle.aurora.server. SGiopServer)" # Miscellaneous compatible=9.0.0 db_name=ora901 # Network Registration instance_name=ora901 # Pools java_pool_size=117440512 large_pool_size=1048576 shared_pool_size=117440512 # Processes and Sessions processes=150 # Redo Log and Recovery fast_start_mttr_target=300 # Resource Manager resource_manager_plan=SYSTEM_PLAN # Sort, Hash Joins, Bitmap Indexes sort_area_size=524288 # System Managed Undo and Rollback Segments undo_management=AUTO undo_tablespace=UNDOTBS 除了上述檔案之外, Oracle9i 資料庫內還包含密碼檔(password file)、重置日誌封存檔(Archived Redo log files)。有關這些檔案的 使用時機與管理方式將在未來專欄中陸續為大家深入介紹。 瞭解 Oracle9i 資料庫的實體組成後,我們就可以繼續往下探討 Oracle9i 資料庫的啟動 / 關閉方式。 9 Oracle 9i資料庫管理實務講座(四) 啟動與關閉 Oracle9i 資料庫 在啟動 Oracle9i 資料庫之前,首先您必須瞭解資料庫的各種啟動狀 態: ■ NOMOUNT ■ MOUNT ■ OPEN 下表一列出不同的啟動狀態,與其使用時機: 表一:Oracle9i 資料庫各種啟動狀態。 當您的系統內尚未建立任何資料庫之前,只能先將Oracle9i執行個體 開啟至 NOMOUNT 狀態,接著利用 CREATE DATABASE 指令建立 Oracle9i 資 料庫。待資料庫順利建立時(資料庫內相關的資訊已紀錄至控制檔),才可 以執行 ALTER DATABASE 指令將資料庫開啟至 OPEN 狀態;或是先將執行 個體關閉,再一口氣將資料庫開啟至 OPEN 狀態。 欲開啟 / 關閉 Oracle9i 資料庫時可利用以下幾種工具: ■ SQL*Plus 。 ■ Oracle Enterprise Manager 。 ■ Recovery Manager 。 一般來說,前兩種是比較常用的方式。值得注意的是:在Oracle8i之 前版本可使用Server Manager來啟動/關閉Oracle資料庫,或是執行系 統維護的相關指令。從 Oracle8i 以後,所有 Server Manager 的指令都 可以在 SQL*Plus 下執行。而 Oracle9i 已移除 Server Manager ,統一由 SQL*Plus 做為 Oracle9i 的客戶端工具。 啟動狀態 說明 ■ 啟動Oracle9i執行個體。 ■ 開啟控制檔。 ■ 掛載Oracle9i資料庫之後立刻開啟。 ■ 使用者可以存取資料庫。 NOMOUNT ■ 僅啟動Oracle9i執行個體,不會掛載 (mount)Oracle資料庫。 ■ 配置系統全域區(SGA),啟動各背景處理程 序。 ■ 資料庫尚無法使用。 ■ DBA可執行ALTER DATABASE指令將資料 庫開啟至MOUNT或是OPEN狀態。 ■ 通常使用於第一次建立資料庫,或是需重建 控制檔時。 MOUNT ■ 啟動Oracle9i執行個體。 ■ 開啟控制檔。 ■ 掛載Oracle9i資料庫,但尚未開啟之。 ■ 資料庫尚無法使用,但是DBA可以進行特 殊的管理工作(例如更改資料庫內重置日誌 檔的封存模式)。 OPEN 10Oracle 9i 資料庫管理實務講座(四) 啟動啟動啟動啟動啟動 Oracle9i 資料庫的方式資料庫的方式資料庫的方式資料庫的方式資料庫的方式 欲開啟Oracle9i資料庫之前,您必須先以SYSDBA身分登入,然後執行 STARTUP 指令。下列步驟假設您是從 SQL*Plus 啟動資料庫: 1. 啟動 SQL*Plus 。 $ sqlplus /nolog 這裡我們使用了 nolog 選項,這是假設目前 Oracle9i 資料庫尚未啟 動,當然也無法登入資料庫。所以我們僅先進入 SQL*Plus 環境。 2. 利用 SYSDBA 身分登入。 SQL> connect 使用者名稱使用者名稱使用者名稱使用者名稱使用者名稱 ///// 密碼密碼密碼密碼密碼 as sysdba 3. 執行 START 指令,其基本語法為: STARTUP PFILE = 起始參數檔名稱起始參數檔名稱起始參數檔名稱起始參數檔名稱起始參數檔名稱 啟動狀態啟動狀態啟動狀態啟動狀態啟動狀態 例如: STARTUP PFILE = initora901.ora NOMOUNT 在一般情況下,如果要將Oracle9i資料庫開啟至OPEN狀態,可以直接 執行 STARTUP 指令。 STARTUP 結果如下圖五所示: 圖五:利用 SQL*Plus 開啟 Oracle9i 資料庫至 OPEN 狀態。 由圖五可得知:啟動Oracle9i 執行個體時會先配置出系統全域區,然 11 Oracle 9i資料庫管理實務講座(四) 後是掛載資料庫,最後才會將資料庫開啟至 OPEN 狀態。 關閉關閉關閉關閉關閉 Oracle9i 資料庫的方式資料庫的方式資料庫的方式資料庫的方式資料庫的方式 關閉資料庫時,您也必須以SYSDBA登入後執行SHUTDOWN指令。SHUT- DOWN 指令共有下列四種選項: ■■■■■ Normal ■■■■■ Transactional ■■■■■ Immediate ■■■■■ Abort 下表二整理出每個選項之用途與使用時機: SHUTDOWN選項 說明 Normal ■ 其他使用者無法再登入資料庫,但現有使 用者可繼續未完成的資料處理動作。 Oracle9i會等待所有使用者離線後才關閉 資料庫。 ■ 下次開啟Oracle9i資料庫時,系統不需進 行執行個體修復動作(Instance Recovery) 。 ■ 為系統預設的關閉資料庫選項。 ■ 不允許其他使用者再登入資料庫。 ■ 正在進行的資料交易動作不會受到影響。 ■ 等到交易正常結束(不管是確認或是退回交 易) Oracle9i才結束使用者連線階段。待所 有使用者離線後才關閉資料庫。 ■ 下次開啟Oracle9i資料庫時,系統不需進 行執行個體修復動作。 Immediate ■ 不允許其他使用者再登入資料庫。 ■ 自動退回(rollback)所有未確認的交易 ■ Oracle9i自動結束所有使用者連線階段, 並關閉資料庫。 ■ 資料交易的一致性與完整性可能會受到影 響。 ■ 下次開啟Oracle9i資料庫時,系統不需進 行執行個體修復動作。 ■ 不允許其他使用者再登入資料庫。 ■ 正在進行的所有交易會立刻中斷(不會 rollback)。 ■ Oracle9i會自動中斷所有使用者連線階段 。 ■ 資料交易的一致性與完整性可能會受到影 響。 ■ 下次開啟Oracle9i資料庫時,系統會自動 進行執行個體修復動作。 Abort Transactional 表二:Oracle9i 資料庫的關閉指令選項。 12Oracle 9i 資料庫管理實務講座(四) 關閉資料庫的方式如啟動資料庫的方式類似,您可以在登入SQL*Plus 之後執行 SHUTDOWN 指令。結果如圖六所示: 圖六:關閉 Oracle9i 資料庫。 通常我們都是以 Normal 或是 Transactional 來關閉資料庫。除非必 要,否則請盡量不要使用 SHUTDOWN ABORT 去關閉 Oracle9i 資料庫,以 免影響使用者正在進行的資料處理工作。 結語 在本期內容裡,我以兩種角度探討了Oracle9i資料庫的組成要素。個 人認為這是學習Oracle最重要的工作。在我從事Oracle資料庫管理相關 教學工作以來,這部分也是上課學員普遍認為較難接受的觀念之一。但 是只要這些基本觀念搞清楚,就像練武時任督二脈已被打通一般,未來 研讀 Oracle 的相關技術將會如魚得水。最近也有讀者來信和我討論 Oracle9i資料庫的管理技巧。當然了,Oracle9i也有很棒的圖形介面管 理工具 — Oracle9i Enterprise Manager 。未來的專欄內容我必然會 為大家介紹 Oracle9i Enterprise Manager 的使用方式與技巧。有了 Enterprise Manager ,管理 Oracle9i 資料庫將如虎添翼! 13 Oracle 9i資料庫管理實務講座(四) 作者簡介 何致億何致億何致億何致億何致億 恆逸資訊系統開發部技術顧問。專長為 SQL Server 、 Oracle 等關聯 式資料庫系統管理,資料倉儲規劃建置,以及資料庫應用程式系統開 發。擁有 MCSD 、 MCDBA , Oracle OCP , RHCE , SCJP , Borland JBuilder Product Certified 等十餘項國際認證。目前正致力於 Oracle9i 應用系統開發,並負責 Oracle9i 系列書籍中文化及 Oracle Press 技術校稿工作。 曾任台灣微軟E-Developer、TechEd 2000 、Enterprise Server 2000 上市博覽會等大型研討會講師,Windows 2000雜誌、Linuxer雜誌專 欄作者,SQL Magazine國際中文版編輯顧問。他同時也是美商甲骨文 公司、昇陽公司等原廠認證講師。您可以透過rich_ho@uuu.com.tw與 他聯繫。
还剩12页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

xabc2011

贡献于2011-11-10

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf