SlideShare une entreprise Scribd logo
1  sur  52
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
第五章 使用 SQL 敘述句建立資料庫
前言
建立資料庫是資料庫管理者的基本能力之一,雖然已經有圖型化界面(DBCA)
可以幫忙資料庫管理者處理建立資料庫的相關設定。但是使用 SQL 敘述句
建立資料庫,卻是讓資料庫管理者徹底了解 Oracle 資料庫的不二法門。因此
本章將探討如何使用 SQL 敘述句一步一步地建立一個新的資料庫,並且設
定資料庫控制。
4.1 事前的規劃
建立一個新的資料庫並不難,尤其是當資料庫管理者可以使用圖型化界面
(DBCA)時。不過要建立一個有良好的效能,高擴充性與高可靠性且容易管
理的資料庫,並不是件容易的事。因此資料庫管理者必須在建立資料庫之前,
先進行仔細的事前規劃,如此才能讓新建立的資料庫一開始就能滿足使用者
的需求。而不用在建立資料庫後,費時、費事的調整資料庫設定。而且有時
候還需要請資料庫使用者暫時離線,因為某些修改需要在資料庫關閉的狀態
才能進行。因此事前的規劃才是建立資料庫的重點。
4.1.1 弄清楚資料庫的屬性
在建立一個新的資料庫之前,先要回答下列的問題,用來找到最正確的資料
庫屬性。
這個資料庫的用途與型態?
用途:可分成正式環境(Production)與測試環境(Testing)。
1.正式環境的資料庫表示這個資料庫必須同時考慮可用性與可靠性,所以這
個資料庫應該設定為存檔模式。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
2.測試環境的資料庫則可以用最簡單的方式建立資料庫,因為這個資料庫的
主要用途,是用來測試資料庫功能或應用軟體的功能。所以可以暫時不需要
考慮太多的可用性與可靠性,因此通常設定為無存檔模式即可。
型態:可大致分成線上交易處理與資料倉儲。
1.線上交易處理(OnLine Transaction Processing - OLTP)型態的資料庫。
這種型態的資料庫通常在同時間有許多的交易同時發生,但是每個交易的執
行時間都很短。而且交易的型態多為資料異動操作,但每個交易所使用到的
資料量通常不多,大約是幾筆資料列(row)或幾百個位元組(byte)。所以用來
儲存資料列的資料區塊(Data Block)不需要太大,資料庫管理者可以選擇較
小的區塊大小(Block Size 可以是 2K、4K、8K、16K、32K),當做此資料
庫的標準資料區塊大小(Standard Block Size)。這樣可以減少 I/O 的浪費,
因為 Oracle 資料庫每次 I/O 的單位至少為一個資料區塊。Oracle Database
11g 的預設資料區塊大小為 8K,已經足以因應線上交易處理與資料倉儲的
使用。
2.資料倉儲(Data Warehouse - DW)型態的資料庫。這種型態的資料庫通常
同時執行的交易個數不多,但是每個交易所需的執行時間卻很久。大多數交
易的型態為長時間的查詢操作(Query),資料異動操作反而比較少。而且每個
交易所使用到的資料量通常很多,有時可達到幾百萬筆資料列或幾百萬位元
組(Mega Bytes)的資料量。這時資料庫管理者便可以選擇較大的資料區塊,
這樣可以減少 I/O 的總次數,因為 Oracle 資料庫最多一次可讀入的資料區塊
個數是有限制(DB_FILE_MULTIBLOCK_READ_COUNT)。
由上述的說明,可以得知線上交易處理與資料倉儲的交易型態有著極大的差
異。因此資料庫管理者需要使用不同的執行處理設定,才能讓資料庫發揮其
最佳效能。所以資料庫管理者在建立資料庫之前,就必須先了解未來存取此
資料庫的應用程式型態。才能在建立新的資料庫時,就事先設定合適的參數,
以免事後需要花費更多的成本與時間,才能調整資料庫相關設定。
4.1.2 資料庫所需的資源
一個 Oracle 伺服器(Server)是執行處理(Instance)與資料庫(Database)所組
成,而執行處理將佔用一些記憶體空間給 SGA 使用,同時也會增加一些
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
CPU 的負載用來執行背景處理作業(Background Processes)。同時資料庫
也需要一些儲存空間用來放置資料庫檔案。所以每當建立一個新 Oracle 伺服
器,資料庫管理者就必須對現有的電腦伺服器的資源進行新的配置規劃。
1.實體記憶體(Physical Memory):作業系統的可用記憶體是由實體記憶體與
虛擬記憶體(Virtual Memory)的加總。因此當作業系統中所有正在運行的應
用程式所使用的記憶體總和,超過實體記憶體的大小時。作業系統便會使用
置換空間(Swap Space)或分頁檔(Paging File)的技術,將磁碟機空間模擬成
記憶體,再將這些記憶體提供給作業系統使用。若發生置換或分頁時,原本
存在實體記憶體的分頁(Page)就會被置換到置換空間或分頁檔暫存,將實體
記憶體的空間讓給其他的應用程式使用。若當某個應用程式執行時,發現其
所需要的分頁不存在於實體記憶體。這時作業系統自動將那些分頁或置換空
間或分頁檔讀回實體記憶體,不過必須先等待這些分頁被讀入實體記憶體後,
才能繼續執行應用程式。
因此電腦伺服器的實體記憶體不足,將導致執行處理的 SGA 經常被置換或
分頁到硬碟。如此便失去當初設計執行處理的初衷,希望利用到記憶體的存
取速度遠快於硬碟機的存取速度,藉此增加 Oracle 伺服器的效能。
所以當一個新的執行處理啓動時,資料庫管理者必須確認多出來的記憶體需
求,不會造成整個作業系統的實體記憶體不足,進而發生置換或分頁的情況,
而造成電腦伺服器的效能大幅下滑。不過資料庫管理者可以藉由
LOCK_SGA 參數,要求即使在作業系統發生需要置換或分頁的情況時,也
不會置換或分頁執行處理所使用的記憶體空間。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
2.硬碟機空間:資料庫是由資料檔(Datafile)、控制檔(Controlfile)、線上重
做日誌檔(Online redo Logfile)所組成,這些檔案不管放在檔案系統(File
System)、原始裝置(Raw Device)或自動儲存體管理(Automatic Storage
Management-ASM),都是佔用硬碟機的空間。尤其是資料檔的大小與成長
速度,更直接與資料庫的 DML 敘述句的數量與型態有關。所以資料庫管理
者必須在建立資料庫之前,就能預估資料庫空間所需要的空間,與資料庫空
間的成長速度。這樣才能事先準備好足夠的硬碟空間,避免突然出現硬碟空
間不足,但臨時找不到或買不到硬碟的窘境發生。
4.1.3 I/O 分散與容錯
在現在的 Oracle 伺服器架構下,當資料庫運行的過程中,發生 I/O(伺服器處
理作業將資料區塊讀到緩衝區快取、DBWR 將髒緩衝寫回資料檔與 LGWR
將重做項目寫入線上重作日誌檔)則是難以避免。身為一個稱職的資料庫管理
者,要能夠使用最少的 I/O 次數,完成資料庫的操作。其次是讓整體 I/O 的
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
成本降到最小(也就是邏輯讀取次數佔整體讀取次數的比率越高越好)。所以
資料庫管理者要先確認這個電腦伺服器到底有幾個硬碟或者是否有硬體的磁
碟陣列系統(Redundant Array of Independent Disks-RAID)?這樣資料庫
管理者才能決定如何放置相關的資料庫檔案,以達到 I/O 最佳化。
磁碟陣列(RAID)
磁碟陣列(RAID)早期剛出現的時候被稱為 Redundant Array of Inexpensive
Disks,不過現在大多數的人都稱它為 Redundant Array of Independent
Disks。它的主要功能是將多個實體的磁碟機使用硬體或軟體的方法,將它們
整合為一個大的虛擬磁碟機,藉此提供更好 I/O 效能與容錯能力,而不是備
份的功能。資料庫的備份還是有其特定的方法與步驟以及必要性,而不是採
用磁碟陣列後,就不需要備份了。其中以 RAID 0、RAID 1、RAID 0+1、
RAID 1+0、RAID 3、RAID 5 最常見。
RAID 0(分割 Striped):在資料寫入時,將資料分割為ㄧ小塊塊的 Stripe(通
常為 2n
K,n 為正整數,最大值要看 RAID 控制卡的設定。一般都能到
128K 或 256K),分別存到不同的磁碟中,因此可以提升寫入的速度。而且
當讀取資料時,可以由不同的磁碟中,同時讀取所需的資料,這樣的讀取速
度也可以大幅提升。 Stripe Set 的大小跟資料庫的型態也有關係,OLTP 適
用小一點的 Stripe Size,而 DW 適用大一點的 Stripe Size,而且 DW 環境
下 Stripe Size 最好等於
DB_BLOCK_SIZE*DB_FILE_MUTLIBLOCK_READ_COUNT 的值,這樣
在進行 Full Table Scan(全表格掃描)時,可以達到 I/O 的最佳化。不過由於
資料分散在不同的磁碟中,如果其中一個磁碟發生媒體毀損(Media Failure),
這時整個磁碟陣列中的所有資料,都將全部無法讀取,對 I/O 子系統來說
RAID 0 根本是毫無容錯能力可言。這種架構至少要有 2 個磁碟機才能組成,
可用空間為磁碟機總容量。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
RAID 1(鏡射 Mirrored):在資料寫入時,將資料同時寫到兩個不同的磁碟機
上,如此當其中一個硬碟機發生媒體毀損時,不至於導致所有資料遺失的慘
劇,因為至少還有一份相同內容的資料存在於另一個硬碟之上。不過這種架
構下,寫入的速度並沒有提升,但讀取資料時,可以由兩個磁碟中讀取資料,
所以讀取的效能還是有提升。這種架構至少需要 2 個磁碟機組成,不過可用
的空間只有磁碟機總容量的 50%。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
RAID 0+1 或 RAID 1+0:這種架構是 RAID 0 與 RAID 1 的組合型,0+1
與 1+0 的差別在於先 Striped 還是先 Mirrored 罷了,但是讀寫的效能是相
同的,只要不是同一組的 Mirrored 磁碟機同時發生 Media Failure,資料都
不會有遺失的問題。不過以重新建構 RAID 的成本來說,RAID 1+0 的重建
速度比 RAID 0+1 更快,而且在重建 RAID 的過程中,RAID 1+0 受影響的
I/O 效能比較少。這種架構至少需要 4 個或以上偶數倍的磁碟機,可用的空
間為磁碟機總容量的 50%。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
RAID 2:由 RAID 0 演進而來,只是資料切割的單位,不是 Stripe 而是 Bit。
同時 RAID 2 加上資料錯誤檢查的機制,在資料寫入磁碟機後,還需要計算
錯誤修正碼(Error Correction Code) ,並用漢明碼(Hamming Code)進行編
碼存到額外的磁碟機上,這樣才能保護當某個磁碟機發生 Media Failure 時,
可以將毀損磁碟上的資料救回。
RAID 3、4:與 RAID 2 相同都是由 RAID 0 所演化而來的,在寫入資料到
磁碟機之前,都會先將資料切割為更小的單位,不同的是所使用的切割單位,
以及 RAID 3、4 所使用的錯誤檢查演算法與 RAID 2 不同。RAID 3、4 都
至少需要 3 個磁碟機或以上,採用的是同位元檢查資料(Parity check data)
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
的演算法,利用其中一個磁碟來儲存運算出來的同位元檢查碼。當其中一個
磁碟機發生 Media Failure 時(不能是存放 Parity check data 的那個磁碟機),
管理者只要換上新的磁碟機後,磁碟陣列就可以利用同位元檢查資料,重新
產生出原來資料。因為同位元檢查資料是將資料切割成一塊塊的單位,再利
用 X-OR 演算法計算出同位元檢查資料。如果是以 Byte 為單位,稱為 RAID
3。如果是以 Block 為單位時,則稱為 RAID 4。所以 RAID 3 在整體讀寫效
能會比 RAID 0+1 來的差,不過在磁碟成本上會比 RAID 0+1 低一點,因為
可用空間為 N-1 顆磁碟機的總和。切割單位越大,理論上讀寫效能越好,所
以存取效能 RAID 0>RAID 4>RAID 3>RAID 2。
RAID 5:由 RAID 2、3、4 所改進而來,RAID 5 先將資料與同位元檢查資
料組合在一起後,再以 Bit 為單位寫到各個磁碟機中,因此不需要一個專屬
的磁碟機用來存放同位元檢查資料。可是整體的可用空間還是與 RAID 3、4
一樣為 N-1e 個磁碟機的總和容量,因為雖然不需要一個專屬的磁碟機,但
是同位元檢查資料依然存在,只是散佈在所有的磁碟機中而已。不過就 I/O
效能而言,RAID 5 比 RAID 3、4 來的快,因為 I/O 會分散在所有的磁碟機
上。同時 RAID 5 架構下的可用的空間也比 RAID 1(50%)來的多。所以市面
上普遍採用的 RAID 架構,大多是此種(RAID 5)。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
如果在經費許可的情形下,筆者建議可以採用 RAID1+0 的技術,這樣可以
得到最好的保護及最佳的效能,然 RAID5 也是不錯的選擇。
OFA 架構
如果有硬體 RAID 時,管理者可以將大部份的 I/O 分散與容錯的工作交由硬
體來做,管理者只需要針對資料庫的邏輯儲存結構即可,可以大大地減少資
料庫管理者的工作負擔。不過不是每個人都有擁有這類的硬體可以使用,而
且某些儲存的問題也不是硬體 RAID 就可以解決的,所以管理者還是需要仔
細的規劃資料庫的相關檔案位置,才能做到真正的 I/O 分散與容錯。在
1990 年時 Oracle 公司依據多年來所得到的規劃、管理、效能調整各方面的
經驗與眾多的使用者回饋,發展出在規劃 Oracle 資料庫各種相關檔案的位置
與命名的建議,稱做 Optimal Flexible Architecture(OFA) 。Oracle 公司希
望能透過 OFA 幫助資料庫管理者在規劃 Oracle 資料庫時:決定 Oracle 軟體
的安裝位置,與 Oracle 資料庫的相關檔案的位置與名字。如此可以達到簡化
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
管理工作、提升整體 I/O 效能與簡單地在不同的資料庫軟體版本或資料庫之
間切換等功能。
簡化管理成本:藉由適當的檔案系統與目錄結構的規劃,可以在新增磁碟機、
新增資料庫或新增資料檔到現存的資料庫時,簡化所需的管理工作及減少影
響資料庫的時間。以及建議將不同用途、重要性、甚至備份的頻率的區段
(Segment)放在不同的表格空間(Tablespace)中,這樣可以分隔不同的區塊,
對管理者來說,也可以減低相關的管理成本。
提升 I/O 效能:OFA 建議將資料庫的相關檔案分散到所有的磁碟機上,這樣
可以分散 I/O,減少出現 I/O 瓶頸的可能性。並且藉由適度的多路傳輸
(Multiplex)將資料庫的控制檔(Controlfile)與線上重做日誌(Online Redo
logfile)放到多個不同的磁碟機上,可以提高資料庫的可靠性與可用性。
簡單切換版本與資料庫:OFA 建議將 Oracle 軟體與 Oracle 資料庫的相關檔
案,存放在不同的目錄結構與不同的磁碟機中。所以管理者可以由不同的目
錄位置,便可以得知目前所管理的資料庫軟體的版本與資料庫為何?當管理
者想要切換資料庫版本時,可以藉由作業系統的環境變數 ORACLE_HOME
的設定值,就可以輕易地切換到另一個資料庫版本。當管理者要進行一些資
料庫襠案的搬移或更改名字時,可以檢查相關檔案的目錄,即可確認是否為
正確的資料庫。
掛戴點(Mount Point)
OFA 架構下,至少需要 2 個掛載點,一個用來放 Oracle 軟體的相關檔案之
用,一個用來放 Oracle 資料庫檔案之用。如果要實作完整的 OFA 架構,則
需要至少 4 個掛載點,一個用來放 Oracle 軟體的相關檔案,其餘 3 個用來
放 Oracle 資料庫的相關檔案。每個掛載點對應到一個實體的磁碟機或磁碟分
割區(Partition)。
OFA 架構下的掛載點有一定的建議格式:/pm。p 是一個字串常數,可以為
任何長度的字串,只要有意義即可。m 為獨一固定長度(2 個數字)的數字,
用來區別掛載點之用。常見的掛載點如:/u01、/u02、/ora01、/ora02 等
等,不管是否與範例一致,只要格式正確即可。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Oracle 基本目錄(Oracle Base Directory)掛載點:/pm/s/u。用來表示作業
系統上 Oracle 軟體的本位目錄的位置。s 是所謂的標準目錄名稱通常為 app。
u 則是這個 Oracle 軟體在 OS 上是誰所擁有的。如果 ora11g 這個使用者擁
有 Oracle 軟體,則 Oracle 基本目錄應該為/u01/app/ora11g。
Oracle 本位目錄(Oracle Home Directory)的掛載點:
/pm/h/u/product/v/type_n。h 是所謂的標準目錄名稱通常為 app。u 則是
這個 Oracle 軟體在 OS 上是誰所擁有的。Product 是固定的字串,用來表示
所安裝的產品名字。v 則是 Oracle 軟體的版本。最後是 typ 表示所安裝的種
類:db 為資料庫,client 為客戶端軟體,crs 為叢集軟體。n 表示所安裝的
次數。因此如果這是第一次安裝,並且由 OS 中的 ora11g 這個使用者安裝
Oracle 11g 的資料庫軟體,則相關的軟體安裝目錄應該是
/u01/app/ora11g/11.1.0/db_1 才對。
這裡的 h 與 Oracle 基本目錄中的 s 應該是同一個意義,只是 Oracle11g 之
前都使用 h,在 Oracle11g 之後,Oracle 基本目錄的格式改為/pm/s/u,但
在 Oracle 本位目錄格式中卻沒有一起修改為 s,依然保持為 h。
資料庫檔案的掛載點:/pm/q/dm。q 是用來表示此掛載點所存放的是
Oracle 資料庫的相關檔案,通常會用 oradata 或 oracledata 等字串。dm 則
為放在此目錄下的檔案為那一個資料庫,即使用的是資料庫名字。所以
/u02/oradata/orcl 此掛載點表示的是 orcl 這個資料庫的相關檔案都放在此
目錄下。如果有/u02/oradata/orcl 與/u03/oradata/orcl 同時出現,則表
示 orcl 這個資料庫的檔案分散 I/O 到/u02 與/u03 的兩個磁碟機上。
同時 OFA 對資料庫檔案的名字也有建議,例如:控制檔都是 control 為前綴
字,然後加上固定長度的數字字串用來區分,最後再加上 ctl 為副檔名,所
以控制檔的名字,通常為 control01.ctl。資料檔則是以 t 為前綴字,t 是
TABLESPACE 的縮寫(不過筆者建議可以直接使用 TABLESPACE 的名字
也可以,例如表格空間的名字叫做 USERS,則資料檔可以叫做
users01.dbf,這樣更有意義。),之後加上固定長度的數字字串為區分,最
後副檔名為 dbf,所以常見的資料檔名字為 t01.dbf。線上重做日誌檔的格
式為 redo 開頭,後面接著日誌群組號碼,副檔名為 log,所以常見的重做日
誌檔的名字為 redo01.log,可是一個日誌群組中最多可能有多達 5 個的成員,
所以筆者建議可在 redo01 後,再加上 abcde 的字母用來區分成員,因此如
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
果是日誌群組 1 中的第一個成員,它的名字應該為 redo01a.log,若為第二
個成員,日誌檔的名字就可以稱為 redo01b.log。
資料庫管理檔案的掛載點:/h/admin/d/a。h 在這裡表示的是 Oracle 基本
目錄。admin 表示以下是管理資料庫相關的檔案。d 則是資料庫的名字。最
後的 a 為子目錄的名字:adhoc、arch、adump、bdump、cdump、create、
exp、logbook、pfile、udump 等。
adhoc:執行 ad hoc 查詢的 SQL 指令檔。
adump:資料庫的稽核資料。
arch:存檔日誌(Archived Logfile)。
bdump:背景程序的追蹤檔(Background Process Tracefile)與資料庫警示
檔(Alert Logfile)。11g 不需要
cdump:Oracle 核心的傾倒檔。11g 不需要
create:建立資料庫所要用的指令檔。
exp:export 指令所產生的傾倒檔。
logbook:資料庫的狀態紀錄檔。
pfile:Oracle Instance 的參數檔。
udump:使用者要求產生的傾倒檔(User Tracefile)。11g 不需要
例如 orcl 這個資料庫的存檔日誌可以放在
/u01/app/ora11g/admin/orcl/alert 下。
由 Oracle11g 開始,採用 ADR(Automatic Diagnostic Repository 自動診
斷儲存體)取代 bdump、cdump、udump。ADR 的 OFA 格式為
/h/diag/rdbms/d/i。h 為 Oracle 基本目錄。diag 為固定字串用來表示以下
目錄中所存放的是有關資料庫問題診斷所需要的檔案。rdbms 也是固定字串,
用來表示為關連式資料庫。d 是資料庫的名字。i 為執行處理的名字。其下有
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
三個子目錄分為 trace、alert、incident,分別放置不同用途的檔案。 trace:
User Tracefile 與 Background Process Tracefile。
alert:Alert Logfile。
incident:特定事件相關的傾倒檔。
所以 Oracle11g 的資料庫 orcl,它的警示檔會放在
/u01/app/ora11g/diag/rdbms/orcl/orcl/alert 下。
4.1.4 檔案系統、原始裝置與自動儲存管理
Oracle 資料庫支援將資料庫檔案放在檔案系統(File System)、原始裝置
(Raw Device)與自動儲存管理(Automatic Storage Management)上。資料
庫管理者必須了解這些儲存結構的優缺點,並依據資料庫本身的需求,選擇
最適合的儲存結構。
檔案系統(File System)
檔案系統是最常見的儲存結構,這種儲存結構有著管理容易的優點,但同時
也有著效能不好的缺點。因為一般作業系統的檔案系統(例如
Windows:FAT32/NTFS、LINUX:EXT2/EXT3)並不是專門為資料庫操作
而設計的,所以這些檔案系統都有效能不好的問題。這些效能上的問題主要
來自於下列幾個原因︰
1.檔案系統的讀寫鎖定競爭︰
當作業系統(OS)聽從 DBWR 指示開始準備進行讀取或寫入操作時,首先 OS
必須先取得相對檔案的 inode Exclusive Lock,避免有多個 inode 的異動發
生在同一個 inode 上,造成 inode 毀損。因此如果同時有多個讀取或寫入的
操作發生在同一個檔案上時,就會產生 inode 的競爭出現,當然 I/O 的效能
就會受到影響,尤其是在有大量的寫入操作時,有更加明顯的效能延遲。這
時資料庫管理者可以建立多而小的資料檔來分散 inode 的競爭,或藉由掛載
檔案系統時將造成 inode 異動的情況減少(例如取消檔案最後存取時間
[Access time]的記錄)。
2.同步(Synchronous)I/O︰
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
在早期的檔案系統通常不支援非同步(Asynchronous)I/O,導致整體的 I/O
效能下降。不過在現今的商用作業系統中所使用的檔案系統,大多數的檔案
系統都已經開始支援 AIO,只是大部份的檔案系統還是需要人為的方式,開
啟非同步 I/O 的功能。
同步 I/O︰當 DBWR 要求作業系統進行 I/O 時,OS 未完成此次 I/O 操作前,
DBWR 不能進行任何的操作,即使下一個 DBWR 的操作與此次 I/O 無關也
不能提早執行,一直要等到 OS 完成此次 I/O 操作後,DBWR 才能繼續後面
的操作。
非同步 I/O︰當 DBWR 要求作業系統進行 I/O 時,在 DBWR 將相關資訊告
知作業系統後,當 OS 進行 I/O 操作的同時。 DBWR 還可以繼續自己後續的
工作,等 OS 完成此次 I/O 操作後,通知 DBWR 即可。如此對 DBWR 而言,
不會浪費時間等待 I/O 的完成,便可以繼續自己的工作,因此整體的 I/O 效
能當然比較好。
3.緩衝 I/O(Buffered I/O)︰
在一般的檔案系統進行 I/O 時,為加快 I/O 的速度,會利用一部份的記憶體
當作檔案系統緩衝(File System buffer)。也就是將資料區塊(Data Block)寫
到檔案系統的快取中,就回報 I/O 已經完成,之後再找機會將檔案系統快取
中的區塊真正寫到磁碟機中,這個機制在一般的應用程式中有很大的 I/O 效
能提昇。不過在 Oracle Server 的架構下,卻是多此一舉,因為 Oracle
Instance 中的緩衝區暫存(Buffer Cache)就是扮演快取的角色,如果再加上
檔案系統的緩衝快取,便有雙重緩衝快取的情況發生。而且當 Oracle
Server 收到 I/O 已經完成的訊息後,便真的以為資料區塊已經寫到磁碟機,
但是實際上資料區塊卻還只存在 OS 記憶體中,尚未真的寫到磁碟機中。如
果這時整個作業系統發生當機事件,這樣便有可能造成資料遺失。資料庫管
理者可以在掛載檔案系統時,要求採用 Direct IO 的方式掛載及使用日誌式
的檔案系統(Journal Filesystem),這樣便可以解決雙重快取所造成的記憶體
浪費及資料可能遺失的風險。
4.存取單位為區塊(Block)︰
即使檔案系統已經採用 Direct IO 來避免雙重緩衝的問題,但是由於檔案系
統中最小的 I/O 單位是區塊。所以如果資料檔存放在檔案系統上,當 Oracle
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Server 需要讀取一筆資料列(Row)時,但因為 Oracle Server 的最小 I/O 單
位是資料區塊(Data Block),所以 Oracle Server 會要求作業系統讀取這個
資料區塊的內容,並將其放置到緩衝區暫存(Buffer Cache)中。而這個 I/O
要求會被作業系統轉化為對檔案系統的 I/O 要求。
如果資料區塊大於檔案系統區塊,Oracle Server 的一個資料區塊的 I/O 要求,
便要轉換為對多個檔案系統區塊的 I/O 要求。
但如果資料區塊小於檔案系統區塊,當 Oracle Server 要求將某個資料區塊
寫回資料檔中時,因為 Oracle Server 的要求未達到檔案系統的一次 I/O 所
需的資料量。
1.作業系統會先將資料檔中此舊版本的資料區塊與其周圍的資料區塊,
先讀到作業系統的記憶體中,將這些資料區塊用來填滿一個檔案系統區塊。
2.將欲寫回的資料區塊內容取代剛剛讀到的舊版本資料區塊內容。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
3.將整個檔案系統區塊整個寫回資料檔中。
這些多餘的 I/O,會影響到整體資料庫的運行效能。所以當使用檔案系統時,
資料庫管理者必須先找出所使用的檔案系統的區塊大小,再將資料庫的資料
區塊大小設定為此大小,這樣的設定可以讓整體的 I/O 達到最佳。如果無法
讓資料區塊等於檔案系統區塊,至少也要大於檔案系統區塊,這樣可以避免
不必要的 I/O 發生,進而減少 I/O 所造成的效能瓶頸。
原始裝置(Raw Device)
原始裝置又名字元裝置(Character Device),因為原始裝置上的 I/O 操作是
以字元(Character)為單位。至於稱為原始裝置的原因,是因為在磁碟機上建
立原始裝置,只需要建立實體卷冊(Physical Volume),也就是建立一個磁碟
分區(Partition)。之後這個實體卷冊便可以被當作資料檔、控制檔或線上日
誌檔使用。不過因為實體卷冊實際上就是一個磁碟分割,所以它不能隨意地、
簡單地更改大小,也就是說在其中的資料庫檔案也不能動態的更改大小。同
時使用原始裝置當作資料庫檔案時,這個原始裝置必須先被建立。
不過因為原始裝置少了檔案系統的介入,所以在進行 I/O 時,不需要經過檔
案系統緩衝。而且 I/O 的最小單位為字元,可以避免多餘的 I/O。因此原始
裝置的 I/O 效能比檔案系統更有效率。但以管理方面來說,原始裝置的管理
的確比檔案系統更加複雜與困難,不過在資料庫管理者可以藉由邏輯卷冊管
理者(Logical Volume Manager[LVM])來提供簡單、方便的管理界面。
可是隨著資訊科技的不斷進步,檔案系統的設計有著長足的進步,如直接
I/O(Direct I/O)、非同步 I/O(Asynchronous I/O)的功能,使得檔案系統的
效能也逐漸趕上原始裝置。而且檔案系統在管理方面有著絕對的優勢,所以
在種種的比較下,原始裝置的重要性逐漸的縮小。因此資料庫管理者在選擇
的時候,也可以大方地選擇檔案系統,而不用擔心效能上的問題了。
自動儲存體管理(Automatic Storage Management)
Oracle 資料庫發展自動儲存管理的用途,是希望一方面擁有如原始裝置般的
效能優勢,另一方面又有檔案系統的管理優勢。此外也希望能達到如硬體磁
碟陣列的功能:分割(Stripe)與鏡射(Mirror)。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
因此 Oracle Database 10g 提供 ASM 的功能,幫助資料庫管理者以最少的
成本達到最佳的效能。使用自動儲存管理前,需要先啟動 ASM 執行處理
(ASM Instance)及建立至少一個 ASM 磁碟群組(ASM Disk Group),每個
ASM 磁碟群組至少要由一個 ASM 磁碟組成,然後將 ASM 磁碟的空間切割
為多個配置單元。之後資料庫管理者便可以將資料庫檔案放在 ASM 磁碟群
組中,這些資料庫檔案會以 ASM 檔案(ASM File)的型態存在。這些 ASM 檔
案會依照所在的磁碟群組所設定的冗餘(Redundancy)型態決定其鏡射(Mirror)
的數量,以及根據所設定的配置單元(Allocation Unit)大小,決定每個分割
(Stripe)的大小。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
4.2 決定重要的資料庫參數
在建立一個新的資料庫之前,資料庫管理者必須對那些在建立資料庫後,不
能改變或需要複雜步驟與執行處理須重新啟動才能改變的參數,如全域資料
庫名稱(Global Database Name)、標準資料區塊(Standard Block Size)的大
小與資料庫的字元集等。應該在尚未建立資料庫之前,就根據相關的需求,
決定符合的設定值,而不是在事後大費周章的調整。
4.2.1 全域資料庫名稱
在同一台電腦伺服器中,資料庫的名字彼此之間不能重複。而資料庫的名字
是在建立資料庫當時,藉由設定 DB_NAME 參數所決定的,這個參數值的長
度不能超過 8 個 Bytes。如果在建立資料庫後想要改變資料庫的名字,可以
透過 DBNEWID(nid)這個從 Oracle Database 9i 開始提供的工具程式來改變
資料庫的名字,不過資料庫更名的動作必須在 NOMOUNT 下進行。所以在
進行資料庫更名的過程中,資料庫使用者無法連線到資料庫進行操作。
雖然在同一台電腦伺服器之上的資料庫不能有相同的名字,可是在不同的電
腦伺服器,則有可能出現兩個甚至於多個資料庫有相同的名字。而這種情況
在這些資料庫彼此之間要進行分散式操作時,便會造成問題。因此 Oracle 對
每個資料庫除了有資料庫的名字之外,還有一個全域資料庫(Global
Database Name)名字,用來區分不同電腦伺服器之上的相同名字的資料庫。
全域資料庫的名字是由 DB_NAME 與 DB_DOMAIN 這兩個參數以句點(.)連
結而成的,例如 DB_NAME 的設定值為 orcl,而 DB_DOMAIN 的值
為”abc.com“,則全域資料庫名字為 orcl.abc.com。
4.2.2 選擇適當的資料區塊大小
資料庫中的資料,依資料庫的邏輯結構而言是放在資料區塊(Data Block)中,
但依實體結構來說,則是放在資料檔中的區塊(Block)中。然而資料庫的資料
區塊大小在建立資料庫後,便不能改變,此即所謂的標準的資料區塊
(Standard Block) ,主要是用在 SYSTEM 表格空間與內容屬性為
TEMPORARY 的表格空間中,還有在建立其他的表格空間時,未指定資料
區塊大小時,當做預設值使用。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
在 Oracle Database 9i 之前,一個資料庫中只允許ㄧ種資料區塊的設定值,
就是只有標準資料區塊而已。不過從 Oracle Database 9i 開始,資料庫允許
每個資料庫最多可以有 5 種不同大小的資料區塊,即標準資料庫區塊加上最
多 4 種不同大小的非標準資料區塊(Non-Standard Block) ,不過每個表格空
間中仍然只能使用一種資料區塊,這些資料區塊的大小可以是
2K/4K/8K/16K/32K。如果在建立資料庫時沒有事先設定
DB_BLOCK_SIZE 這個參數,將使用 8192 Bytes 為預設值,這個預設值對
一般的資料庫是相當合適的。
那麼要如何選擇正確的資料區塊大小?
如果是較偏向 OLTP 型態的資料庫,建議選擇較小的資料庫區塊。因為
OLTP 資料庫的交易一般來說,都是存取資料量較小,通常是一筆或數筆資
料列而已。不過存取資料的單位是以資料區塊為一個最小單位,因此不管讀
幾筆資料列,伺服器處理作業都會將包含這些資料列的資料區塊讀到緩衝區
快取。即使只需要這個資料區塊的其中一筆資料列,也是如此。因此如果資
料區塊越小,所需要讀取的資料量也就越小。
但如果是偏向 DW 型態的資料庫,則建議使用較大的資料區塊。因為 DW 資
料庫的交易型態,通常是需要存取大量的資料列,然後加以計算或處理。所
以使用大的資料區塊可以在相同的資料量下,需要存取的資料區塊數量可以
減少。因為資料區塊越大,則可存放的資料列也越多。所以大的資料取塊可
以減少存取的次數,進而減少 I/O 的成本。不過一次可存取的資料區塊個數,
可由 DB_FILE_MULTI_BLOCK_READ_COUNT 設定。
不過在 Oracle Database 9i R2 之後,由於可以另外設定非標準的資料區塊
大小,所以如果一開始設定不當,還可以透過非標準的資料區塊的技巧解決
資料區塊大小設定不當所造成的問題。
4.2.3 選擇正確的資料庫字元集
其實不管是文字、數字或日期型態的資料,存放在資料庫時,皆先轉換成數
字型態後,才存放在資料區塊中。
數字型態(Number)的資料會先轉換成使用類似科學符號表示法的格式,例如:
1001 會轉換為 1.001*100^2,然後才存入資料區塊中。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
SQL> create table t_number(a number);
SQL> insert into test values(1001);
SQL> commit;
SQL> select a,dump(a) physical_storage_data from t_number;
A PHYSICAL_STORAGE_DATA
----------- --------------------------------------------------
1001 Typ=2 Len=3: 194,11,2
正數值:194-193=1為指數(Exponent)
(11-1)*100^1+(2-1)*100^(1-1)=10*100+1*100^0=1000+1=1001
以上是以10進位格式為範例,真正存在資料區塊中的格式為16進位
日期型態(Date Type)的資料則會先轉換為 Julian Day(儒略日)格式,而國際
天文學上所使用的儒略日計數實際上是由西元前 4713 年 1 月 1 日起始,然
而 Oracle 所使用的儒略日計數則是以西元前 4712 年 1 月 1 日為起點。將
西元前 4712 年 1 月 1 日的儒略日計數值設為 1,之後每經過一天則加 1。
例如西元 2008 年 3 月 22 日的儒略日計數值即為 2454548,表示從西元
前 4712 年 1 月 1 日後,經過了 2454548 天。再將儒略日計數轉為世紀、
年、月、日、時、分、秒的格式存在資料區塊中。
SQL> select to_char(to_date('2008-03-22','YYYY-MM-DD'),'J') JULIAN_D
AY from dual;
JULIAN_DAY
-----------------
2454548
SQL> select to_char(to_date(2454548,'J'),'YYYY-MM-DD:HH24:MI:SS') G
REGORIAN_DAY from dual;
GREGORIAN_DAY
---------------------------
2008-03-22:00:00:00
SQL> create table t_date(a date);
SQL> insert into t_date values(to_date('2008-03-22','YYYY-MM-DD'));
SQL> commit;
SQL> select to_char(a,’YYYY-MM-DD:HH24:MI:SS’) a,dump(a) physical_
storage_data from t_date;
A PHYSICAL_STORAGE_DATA
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
--------------------------- --------------------------------------------------
2008-03-22:00:00:00 Typ=12 Len=7: 120,108,3,22,1,1,1
世紀:120-100=20
年:108-100=08
月:3
日:22
時:1-1=0
分:1-1=0
秒:1-1=0
以上是以10進位格式為範例,真正存在資料區塊中的格式為16進位
SQL> alter session set nls_date_format='DD-MON-YYYY BC';
SQL> select to_char(to_date('01-JAN-4713 BC'), 'J') from dual;
select to_char(to_date('01-JAN-4713 BC'), 'J') from dual
*
ERROR at line 1:
ORA-01841: (full) year must be between -4713 and +9999, and not be 0
與國際天文學上常用的以西元前4713年1月1日為起點的格式不同
SQL> select to_char(to_date('01-JAN-4712 BC'), 'J') JULIAN_DAY from d
ual;
JULIAN_DAY
-----------------
0000001
SQL> select to_date(1,'J') GREGORIAN_DAY from dual;
GREGORIAN_DAY
-------------------------
01-JAN-4712 BC
SQL> select to_date(10,'J') GREGORIAN_DAY from dual;
GREGORIAN_DAY
-------------------------
10-JAN-4712 BC
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
關於數字與日期格式的詳細說明,將會在介紹資料型態的章節中繼續說明,
這裡不再深入說明。
文字型態的資料同樣也會轉成數字後才存到資料區塊中,不過因為 Oracle 的
全球語言支援(Globalization Language Support)技術,資料庫中可以存放
以不同國家的語言格式的資料。所以在存放文字資料前,須先經過事先決定
的資料庫字元集(Database Characterset)與本國字元集(National
Characterset)的轉換,找到對應的文字碼,之後才將這些文字對應碼存到資
料區塊中。不過在 Oracle8i 之前,每個資料庫只被允許有一種資料庫字元集
存在,而且事後想要修改字元集,除了少數的例外情況,不然是不被允許的,
所以選擇正確的資料庫字元集便成為相當重要的事前準備工作。不過從
Oracle8i 開始,每個資料庫除了設定資料庫字元集外,還可以選擇另一種字
元集當做本國字符集。
資料庫字元集是用在儲存一般的文字型態的資料,如:CHAR、VARCHAR2、
CLOB、LONG。此外資料辭典(Data Dictionary)中綱要物件(Schema
Object)的物件名字、欄位名字與 PL/SQL 變數也都需要使用到資料庫字符
集轉換。還有資料庫中的 SQL 與 PL/SQL 的原始碼,也是透過資料庫字符
集轉換後,才存在資料辭典中。如果要存放繁體中文資料時,建議選擇
ZHT16MSWIN950 或 AL32UTF8 兩種,在存放中文資料時,每個中文字
ZHT16MSWIN950 只佔 2Bytes 的空間,反觀 AL32UTF8 則需要 3Bytes
的空間。
本國字符集則用在儲存 NCHAR、NVARCHAR2 與 NCLOB 這三種文字型態
的資料時使用。從 Oracle9i 開始,本國字元集只能由兩種萬國碼(Unicode)
中:UTF8 或 AL16UTF16 擇一,建議選擇 AL16UTF16,因為它在儲存
東亞語系的資料時,每個字僅需要 2Bytes 而已。
目前這個資料庫的資料庫字符集為AL32UTF8
SQL> select parameter,value from nls_database_parameters where para
meter like '%CHARACTERSET';
PARAMETER VALUE
------------------------------------------------------ --------------------------------------
NLS_CHARACTERSET AL32UTF8
NLS_NCHAR_CHARACTERSET AL16UTF16
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
SQL> create table t_char(a varchar2(10),b nvarchar2(10));
SQL> insert into t_char values('申建忠','申建忠');
SQL> commit;
SQL> select * from t_char;
A B
-------------------- --------------------
申建忠 申建忠
SQL> select a,dump(a) dump_a,b,dump(b) dump_b from t_char;
A DUMP_A
------------------- ---------------------------------------------------------------------
B DUMP_B
------------------- ---------------------------------------------------------------------
申建忠 Typ=1 Len=9: 231,148,179,229,187,186,229,191,160
申建忠 Typ=1 Len=6: 117,51,94,250,95,224
另一個資料庫,資料庫字符集為ZHT16MSWIN950
SQL> select parameter,value from nls_database_parameters where para
meter like '%CHARACTERSET';
PARAMETER VALUE
------------------------------------------------------ ---------------------------------------
NLS_CHARACTERSET ZHT16MSWIN950
NLS_NCHAR_CHARACTERSET AL16UTF16
SQL> create table t_char(a varchar2(10),b nvarchar2(10));
SQL> insert into t_char values('申建忠','申建忠');
SQL> commit;
SQL> select a,dump(a) dump_a,b,dump(b) dump_b from t_char;
A DUMP_A
------------------- ------------------------------------------------------------
B DUMP_B
------------------- ------------------------------------------------------------
申建忠 Typ=1 Len=6: 165,211,171,216,169,190
申建忠 Typ=1 Len=6: 117,51,94,250,95,224
根據上面的範例,可以發現不同的字符集對相同的字,轉換後的字符碼也不
相同,例如同樣的”申建忠”三個字在 AL32UTF8 的編碼下,佔 9 個
bytes(每個中文字佔 3 個 bytes),以及編碼為”
231,148,179,229,187,186,229,191,160”。而在 ZHT16MSWIN950
的字符集中,所佔的空間只需 6 個 bytes(每個中文字只佔 2 個 bytes),編
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
碼則是”165,211,171,216,169,190”。所以如果使用資料檔搬移的方式
來搬移資料到另一個資料庫時,來源資料庫的字符集與目的端資料庫的字符
集必須一致,或者是要先進行字符碼轉換,不然搬移後的資料檔的內容,就
無法正確地呈現字符所代表的真正意義。
3.3 作業系統的環境設定
在同一個作業系統上,可以同時安裝多個不同版本的 Oracle 資料庫軟體。所
以在建立一個新的 Oracle 資料庫前,必須先將相關的環境變數設定正確,以
免建立的資料庫版本不正確。同時建立資料庫後,將會有許多的檔案產生,
所以這些檔案在檔案系統中的目錄與權限也必須事先準備好。
4.3.1 環境變數
在眾多的環境變數中,有幾個是在建立資料庫前必須先設定的,如
ORACLE_SID 與 ORACLE_HOME。這些環境變數的設定方式,依照不同的
作業系統與所使用的 Shell 有著些許的不同。不過共同的地方就是環境變數
的名字一定都是大寫的英文字母。
UNIX/LINUX平台
Bourne,Bash,Korn Shell:$export ORACLE_SID=ora11g
C Shell:$set ORACLE_SID=ora11g
Windows平台
C:>set ORACLE_SID=ora11g
ORACLE_HOME:用來設定所使用的 Oracle 資料庫軟體的版本。
$export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
$echo $ORACLE_HOME
/u01/app/oracle/product/11.1.0/db_1
ORACLE_SID:用來決定使用作業系統驗證時,所想要啟動的 Oracle 執行
處理的名字。這個環境變數的長度不能超過 12 個字元,而且 ORACLE_SID
僅能由英文字母與數字組成,並且一定要由英文字母開頭。在某些作業系統
上,有字母大小寫的區分,如 UNIX/LINUX 作業系統。
$export ORACLE_SID=ora11g
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
$echo $ORACLE_SID
ora11g
PATH:這個環境變數用在呼叫執行檔時,作業系統如何搜尋相關執行檔的
順序。建議加上$ORACLE_HOME/bin 在環境變數 PATH 中,不然在執行
Oracle 的執行檔時,就必須使用絕對路徑的方式。
$export PATH=$ORACLE_HOME/bin:$PATH
$echo $PATH
/u01/app/oracle/product/11.1.0/db_1/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/loc
al/bin:/bin:/usr/bin:/home/ora11g/bin
這些環境變數建議直接寫到.profile 中,這樣往後就可以直接使用,如果有
需要改變再加以修改即可。
4.3.2 建立相關的檔案目錄
當一個資料庫建立完成後,不光只有資料庫檔案:控制檔、資料檔與日誌檔
被建立,同時還有許多相關的檔案一同產生,如備份檔案、存檔日誌、警示
檔與追蹤檔等等。可是在產生這些檔案前,檔案系統中必須先將相管的目錄
建好,不然在建立資料庫的過程中,將會因此而發生錯誤。
--預計將資料庫檔案放在/u02/oradata/ora11g的目錄下
#mkdir /u02/oradata/ora11g –p
--預計將備份、復原相關的檔案放在/u03/flash_recovery_area的目錄下
#mkdir /u03/flash_recovery_area –p
--預計將警示檔、追蹤檔放在/u03/diag的目錄下
#mkdir /u03/diag –p
--在UNIX/LINUX平台上,檔案權限必須正確授與
#chown -R ora11g:dba /u02/oradata/ora11g
#chown -R ora11g:dba /u03/flash_recovery_area
# chown -R ora11g:dba /u03/diag
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
4.4 準備參數檔
建立一個新的資料庫,必須先將 Oracle Instance 開啟到未掛載(NOMOUNT)
的狀態。所以資料庫管理者在建立一個新的資料庫之前,必須先準備好適當
的參數檔,才能繼續進行建立資料庫的工作。
4.4.1 基本參數說明
雖然參數檔中有多達 289 個參數可供設定,可是因為每個參數都有預設值,
而這些預設值可能是依照 Oracle 軟體的版本、依照其參數的值或依照所在的
作業系統決定的。所以資料庫管理者只需要將參數值不是預設值的參數寫到
參數檔中即可,其他的參數就使用預設值,直到未來需要特別設定這些參數
時,在進行設定即可。而且從 Oracle Datbase 10g 開始,將參數分為基本
(Basic:32)與進階(Advanced:257)兩類,一般的執行處理只需要設定基
本的參數即可,如有特殊的需求,才需要設定進階的參數。
以下僅針對某些常常被設定的參數進行一些說明,其餘的參數說明可以由
Oracle 的官方參考文件(Oracle Database Reference 11g Release 1)中得到
仔細的說明。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
COMPATIBLE︰這個參數的值為版本號碼,例如:COMPATIBLE=11.0.0,
這時表示此 Oracle 執行處理可以使用到 Oracle Database 11g 的功能。但
如果 COMPATIBLE=10.0.0,即使是 Oracle11g 的執行處理,但此執行處
理只能使用到 Oracle Database 10g 的功能而已。這樣可以讓新版本的執行
處理,向前模擬舊版本的執行處理。所以即便在應用程式尚未測試新版本的
Oracle 軟體時,也可以先將資料庫版本昇級,但又不會影響到應用程式的運
作,因為對現在執行處理來說,它把自己的功能加以限制,只能使用到
COMPATIBLE 所指定版本的功能。
CONTROL_FILES:這個參數的值為控制檔的名字,最多可以同時寫上 8 個
控制檔的名字,控制檔之間用逗點分隔彼此即可。例如︰
CONTROL_FILES=/u02/oradata/orcl/control01.ctl,/u03/oradata/orcl
/control02.ctl。當 Oracle 執行處理掛載 Oracle 資料庫時,Oracle 執行處
理會同時開啟 CONTROL_FILES 所指定的所有控制檔。如果有任一控制檔
無法開啟或內容不一致,此時執行處理將無法成功地掛載 Oracle 資料庫。同
時在 Oracle 執行處理掛載控制檔後,在需要記錄相關資料到控制檔時,會同
步更新所有的控制檔內容,以達到多路傳輸(Multiplex)的功能,若任一控制
檔發生媒體毀損導致無法完成同步寫入操作,此時 Oracle 執行處理將會崩潰
(Crash)。Oracle 公司建議當採用控制檔多路傳輸的功能時,每個控制檔應
該位在不同磁碟控制卡所控制的不同磁碟機上,以避免發生單一點錯誤。
DB_BLOCK_SIZE:這個參數用來決定標準資料區塊的大小,而且一旦建立
資料庫後,此參數值就不能夠再被更改,參數值的合法範圍為
2048|4096|8192|16384|32768,但根據作業系統的不同,可能的區間會
更窄,預設值為 8192。範例:DB_BLOCK_SIZE=8192。
DB_DOMAIN:這個參數用來設定資料庫所在的網域名字,但這個網域名字
不需要跟 TCP/IP 所使用的網域有關連,僅僅只是用在整個 Oracle 網路環境
中,可以使用這個參數來搭配 DB_NAME,得到一個獨一的全域資料庫名字
(GLOBAL DB NAME)=資料庫名字.資料庫網域名字。例如:DB_NAME 為
ora11g,而 DB_DOMAIN 為 frankhome.com.tw,則全域資料庫名字為
ora11g.frankhome.com.tw。範例:DB_DOMAIN=frankhome.com.tw。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
DB_NAME:這個參數用來指定 Oracle 執行處理所要掛載、開啟的資料庫名
字,在每台主機中,不能有兩個相同名字的資料庫被同時掛載。這個參數值
最多不能超過 8 個 Bytes。範例:DB_NAME=ora11g。
DIAGNOSTIC_DEST:這個參數是 Oracle11g 開始採用 Automatic
Diagnostic Repository 功能時,用來設定相關的警示檔、追蹤檔的所在目錄。
如果沒有明確指定,會依照相關的環境變數來自行產生。如果有設定環境變
數 ORACLE_BASE,則預設值為$ORACLE_BASE/diag。如果沒有設定環
境變數 ORACLE_BASE,但是有設定 ORACLE_HOME 這個環境變數,則
預設值為$ORACLE_HOME/log。範例:DIAGNOSTIC_DEST=/u03/diag。
DB_RECOVERY_FILE_DEST:這個參數用來設定瞬間復原區域(Flash
Recovery Area)的位置,這個位置是此資料庫所有備份相關檔案的預設位置。
瞬間復原區域可用來放下列的檔案:控制檔、重做日誌檔、存檔日誌檔、倒
溯記錄日誌與使用 RMAN 所備份的備份檔。這個參數不能獨立設定,必須搭
配著 DB_RECOVERY_FILE_DEST_SIZE 一起使用,預設值為
$ORACLE_BASE/flash_recovery_area。範例:
DB_RECOVERY_FILE_DEST=/u03/flash_recovery_area。
DB_RECOVERY_FILE_DEST_SIZE:這個參數用來限制這個資料庫所能使
用的空間大小,如果資料庫放在瞬間復原區域的復原(Recovery)相關的檔案
總和大於 DB_RECOVERY_FILE_DEST_SIZE 所設定的限制時。Oracle 執
行處理將依照 RMAN 保留政策(Retention Policy)的設定,自動刪除過期的
復原相關檔案,保證不會讓此資料庫的復原相關檔案超過此參數的限制。範
例:DB_RECOVERY_FILE_DEST_SIZE=2G。
INSTANCE_NAME:這個參數是設定 Oracle 執行處理的名字。通常會設定
的與 DB_NAME 相同,不過不能與其他的執行處理相同名字。但如果特殊考
量如 RAC 架構下,也可以不同於 DB_NAME。
LOG_BUFFER:這個參數用來決定此 Oracle 執行處理的重做日誌緩衝區的
大小,這邊需要提醒的是 LOG_BUFFER 的大小必須是檔案系統的區塊(通常
為 512/1024bytes)的倍數。此參數的預設值為 512K 或
(128K*CPU_COUNT)兩者中較大的值,可是參數值不能加上 K 或 M 這些
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
代名詞,必須以數字呈現,即多少個 bytes。範例:
LOG_BUFFER=5008384,表示為 5008384 bytes。
PGA_AGGREGATE_TARGET:這個參數用來限制所有伺服器處理作業
(Server Process)的 PGA(Program Global Area)總和不能超過此值。這個參
數的合法範圍可由 10M 到(4096G-1),預設值為 10M 或(10%*系統整體區
域(SGA))兩者中較大的那一個。如果這個參數值大於 0,則
WORKAREA_SIZE_POLICY 這個參數會自動設為 AUTO。表示在執行
SQL 指令時,指令中如有排序操作(order by/group by/hash join/create
bitmap index/bitmap index merge)時,每個排序操作所能使用的 PGA 空
間大小由 Oracle 執行處理決定,而且一個會談(Session)用來進行記憶體排
序(Memory Sort)的 PGA 空間最大也只能到 5%的
PGA_AGGREGATE_TARGET,如果這樣的 PGA 空間還不夠這次排序操作
使用,這時就必須使用到暫存區段(Temporary Segment),進行磁碟排序
(Disk Sort)。同時當 SQL 指令執行完畢後,配置給該會談的 PGA 空間也會
自動被收回。範例:PGA_AGGREGATE_TARGET=100M。
PROCESSES:這個參數用來限制有多少個處理作業(Process)可以同時連到
此 Oracle 執行處理。這裡所稱的處理作業包含背景處理作業(Background
Process)與伺服器處理作業(Server Process)。這參數的預設值為 100,合
法的範圍最小值為 6,最大值依不同作業系統而有所差異。範例:
PROCESSES=100。
REMOTE_LOGIN_PASSWORDFILE:這個參數用來決定是否需要密碼檔,
用來驗證遠端的使用者,當他們要求以 sysdba 或 sysoper 身分登入時。合
法的餐數值有:NONE|EXCLUSIVE|SHARE。範例:
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。
SESSIONS:這個參數用來限制最多同時建立的會談(Session)總數,這個參
數的預設值是由 PROCESSES 所衍生而來的,預設值為
(1.1*PROCESSES)+5,此參數的合法範圍由 1 到 2^31。範例:
SESSIONS=115。
SGA_TARGET:這個參數用來啟動或關閉自動管理共享記憶體(Automatic
Share Memory Management)功能,當 SGA_TARGET 的值設為 0 時,表
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
示關閉 ASMM 功能,而 DB_CACHE_SIZE、SHARE_POOL_SIZE、
LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZE 等
參數必須由資料庫管理者自行設定與調整其大小。若此參數的值大於 0,則
表示開啟 ASMM 功能,DB_CACHE_SIZE、SHARE_POOL_SIZE、
LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZE 等
參數交由 Oracle 執行處理依系統狀況自動調整這些參數值。此參數的合法範
圍最小為 64M,最大值依作業系統不同而有所差易。範例:
SGA_TARGET=300M。
UNDO_MANAGEMENT:這個參數的用途在於設定是否要將還原區段(Undo
Segment)的管理交由 Oracle 執行處理管理。如果參數值為 MANUAL,則
資料庫管理者要自行建立與管理倒回區段(Rollback Segment)。當此參數值
設為 AUTO 時,資料庫管理者只需建立正確型態的表格空間(Tablespace),
並將表格空間的名字當作 UNDO_TABLESPACE 的參數值即可,其餘的還
原區段的建立與管理就交由 Oracle 執行處理負責。範例:
UNDO_MANAGEMENT=AUTO。
UNDO_TABLESPACE:這個參數用來決定還原區段所在的表格空間名字。
要用來放還原區段的表格空間必須滿足一個要求,就是此表格空間的類型必
須是 UNDO 才可以用來當作還原區段的表格空間。
[ora11g@elinux5 ~]$ cat $ORACLE_HOME/dbs/initora11g.ora
compatible=11.1.0
control_files=/u02/oradata/ora11g/control01.ctl,/u02/oradata/ora11g/contr
ol02.ctl
db_block_size=8192
db_domain=test.com
db_name=ora11g
db_recovery_file_dest=/u03/flash_recovery_area
db_recovery_file_dest_size=4G
diagnostic_dest=/u03/diag
instance_name=ora11g
log_buffer=5008384
pga_aggregate_target=200M
workarea_size_policy=auto
processes=200
remote_login_passwordfile=exclusive
sessions=300
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
sga_target=300M
undo_management=auto
undo_tablespace=undotbs
4.4.2 選擇適當的參數檔型態
參數檔的型態有兩種:PFILE 與 SPILE。自從 Oracle Database 9i 開始,
Oracle 伺服器預設值為 SPFILE,而且許多新的資料庫功能必須搭配著
SPFILE 才能使用或發揮全部的功能。建議資料庫管理者使用 SPFILE,而
PFILE 的功能只剩下:向前相容、SPFILE 的備份及初次建立 SPFILE 時使
用。不過因為 SPFILE 是 Binary(2 進位)格式,不能使用一般的文字編輯器
來編輯其內容,必須在執行處理(Instance)啟動後,使用 SQL 指令(Alter
System Set)來修改其內容。但是若沒有參數檔的話,Oracle 執行處理也不
能啟動。所以必須利用內建的範例 PFILE($ORACLE_HOME/dbs/init.ora)
來修改成所需的參數檔的內容。然後再利用新建立的 PFILE 當做新的
SPFILE 來源,產生一個 SPFILE。
[oracle@ELinux ~]$ ls $ORACLE_HOME/dbs/init.ora
/u01/app/oracle/product/11.1.0/db_1/dbs/init.ora
#假設新的Instance叫做ora11g
[oracle@ELinux ~]$
cp $ORACLE_HOME/dbs/init.ora $ORACLE_HOME/dbs/initora11g.ora
#使用任何習慣的文字編輯器來修改initora11g.ora,讓它的內容符合新Instanc
e的要求
[oracle@ELinux ~]$ vi $ORACLE_HOME/dbs/initora11g.ora
#利用initorcl.ora建立一個新的spfile(spfileora11g.ora)
[oracle@ELinux ~]$ set ORACLE_SID=ora11g
[oracle@ELinux ~]$ sqlplus / as sysdba
Connected to an idle instance.
#不管現在Instance的狀態,只要擁有sysdba權限,便可以執行下面的指令
SQL> create spfile from pfile;
#此時使用pfile:$ORACLE_HOME/dbs/initora11g.ora建立一個spfile:$ORAC
LE_HOME/dbs/spfileora11g.ora
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
4.4.3 建立系統服務(Windows 平台)
在 Windows 平台上,每個需要在背景執行的程序,都必須以服務的方式撰
寫。因此每個 Windows 平台上的 Oracle 執行處理,都必須對應到一個服務,
這個服務可以使用 ORADIM 這個工具建立。
--使用文字格式的參數檔
C:>oradim –NEW –SID ora11g –STARTMODE auto –PFILE c:appAdmin
istratorproduct11.1.0databaseinitora11g.ora
--使用2進位格式的參數檔
C:>oradim –NEW –SID ora11g –STARTMODE auto –SPFILE c:appAdmi
nistratorproduct11.1.0databasespfileora11g.ora
-NEW:新增一個服務
-SID:指定Oracle執行處理的名字
-STARTMODE:設定此服務的啟動模式為自動
-PFILE:指定啟動此Oracle執行服務的文字格式參數檔
-SPFILE:指定啟動此Oracle執行處理的2進位格式參數檔
4.5 準備密碼檔
建立一個新的資料庫必須先取得 sysdba 的權限,這個權限的取得方法有兩
種:作業系統驗證或密碼檔驗證。如果
REMOTE_LOGIN_PASSWORDFILE 的參數值為 EXCULSIVE 或 SHARE
時,表示此 Oracle 執行處理要使用密碼檔來驗證遠端使用者的要求。所以必
須在建立資料庫前,先建立所需要的密碼檔。如果 Oracle 執行處理所要求的
密碼檔不存在,Oracle9i 的執行處理將會自動關閉,因此導致建立資料庫的
動作失敗。但是在 Oracle10g 之後,如果密碼檔不存在,建立資料庫的動作
不會因此失敗,最多不能使用密碼檔來驗證遠端使用者的 sysdba 或
sysoper 的要求罷了。
此外建立密碼檔之前還需要確認一件事,就是執行 orapwd 這個指令的作業
系統使用者必須是安裝 Oracle 軟體的作業系統使用者。
[frank@ELinux ~]$ id
uid=501(frank) gid=500(oinstall) groups=500(oinstall),501(dba)
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
#frank是oinstall與dba群組的一份子
[frank@ELinux ~]$ orapwd file=$ORACLE_HOME/dbs/orapwora11g pass
word=admin123 entries=10
OPW-00001: Unable to open password-file
#因為frank不是安裝這個oracle軟體的作業系統使用者
假設 Oracle 執行處理的名字為 orcl,所以資料庫管理者必須將密碼檔建立在
$ORACLE_HOME/dbs 下,而且密碼檔的名字必須為 orapworcl。
[oracle@ELinux ~]$ id
uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(ope
r)
#oracle這個作業系統中的使用者,是之前用來安裝Oracle軟體的使用者
[oracle@ELinux ~]$ orapwd file=$ORACLE_HOME/dbs/orapwora11g pass
word=admin123 entries=10
4.6 建立資料庫
現在開始建立一個新的資料庫,首先使用之前準備好的參數檔將 Oracle 執行
處理啟動至未掛載(Nomunt)狀態。然後執行適當的 Create Database 的指
令。當 Create Database 指令執行完畢後,控制檔、資料檔與重做日誌檔都
會被建立,而且 Oracle 執行處理也會達到開啟(Open)的狀態。
4.6.1 啟動 Oracle 執行處理
首先將 Oracle 執行處理開啟到未掛載(NOMOUNT)的模式。
[oracle@ELinux ~]$ export ORACLE_SID=ora11g
[oracle@ELinux ~]$ sqlplus / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 313860096 bytes
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Fixed Size 1299624 bytes
Variable Size 96471896 bytes
Database Buffers 209715200 bytes
Redo Buffers 6373376 bytes
SQL>
4.6.2 CREATE DATABASE 指令說明
CREATE DATABASE 指令是由許多的子句所組合而成的,同時子句之間不
需要任何分隔符號,只要留一個空白即可,而且子句之間沒有特別的順序。
以下針對常用與必要的子句加以說明:
USER 子句:這個 USER 子句可以讓資料庫建立時,就將 SYS 與 SYSTEM
這兩個使用者帳戶的密碼直接設定,避免使用之前廣為流傳的預設密碼
change_on_install(SYS)與 manager(SYSTEM)。範例:USER SYS
IDENTIFIED BY abc123。
CONTROLFILE REUSE:這個子句會將目前 CONTROL_FILES 或 Oracle
管理檔案所指定的控制檔內容重新格式化,填入新的控制檔內容。通常這個
子句是用在重建資料庫時,不適合用在新建資料庫時使用,以免不小心地將
現有資料庫的控制檔毀壞。
MAXDATAFILES:在早期的 Oracle 版本中,這個子句用來設定此資料庫最
多可容納的資料檔個數。但自從 Oracle8i 開始,資料庫的最多資料檔個數由
參數檔中的 DB_FILES 參數直接設定,現在 MAXDATAFILES 只是用來決
定控制檔的初始大小的其中一個參數。
MAXINSTANCES:這個子句用來限制此資料庫最多可被幾個 Oracle 執行
處理同時掛載與開啟。最小值為 1,而最大值可達 1055。這個子句的值也
是用來決定控制檔初始大小的一份子。
MAXLOGHISTORY:這個子句只有在資料庫為 RAC(Real Application
Cluster)架構與存檔日誌模式(Archivelog Mode)時,用來規定記錄多少個存
檔日誌的名字在控制檔中,這樣在 RAC 架構下時,當資料庫發生媒體毀損
時,由控制檔中得知所需要的存檔日誌名字,因此可以自動進行媒體復原。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
一般在非 RAC 架構的資料庫中,MAXLOGHISTORY 通常設定為 0。這個
子句的值也是用來決定控制檔初始大小的一份子。
MAXLOGFILES:這個子句用來決定此資料庫中最多可建立幾個日誌群組。
這個子句的值也是用來決定控制檔初始大小的一份子。
MAXLOGMEMBERS:這個子句用來決定此資料庫的每個日誌群組中,最多
可允許的日誌成員個數。這個子句的值也是用來決定控制檔初始大小的一份
子。
NOARCHIVELOG/ARCHIVELOG :用來設定資料庫是否為存檔模式。
FORCE LOGGING:這個子句會將資料庫中,除了暫存表格空間中的暫存區
塊外,所有的資料異動都會產生異動日誌,即便是使用者在執行 SQL 指令
時已經自行加上 NOLOGGING 選項,也會產生相關的異動日誌。這個功能
通常用在有設置備援資料庫(Standby Database)或串流(Streams)的環境。
CHARACTER SET:設定資料庫字元集。
NATIONAL CHARACTER SET:設定本國字元集。
SET TIME_ZONE:這個字句決定資料庫所在的時區,可以用數字表示與
UTC(Coordinated Universal Time,以前稱為格林威治時間)時間的差距,
格式為 hh:mm,合法的範圍由-12:00 到+14:00,台灣的時區為+08:00。
當然也可以使用時區名字如:ASIA/TAIPEI。範例:SET
TIME_ZONE=’+08:00’。
LOGFILE:這個子句用來設定這個資料庫一開始有幾個日誌群組及每個群組
中有幾個日誌成員。Oracle 規定每個資料庫至少要有 2 個日誌群組,而每個
日誌群組中又至少要有 1 個日誌成員。範例:LOGFILE GROUP 1
(`/u02/oradata/ora11g/redo01a.log’,’/u02/oradata/ora11g/redo0
1b.log’) SIZE 100M,GROUP 2
(`/u02/oradata/ora11g/redo02a.log’,’/u02/oradata/ora11g/redo0
2b.log’) SIZE 100M
SET DEFAULT TABLESPACE:這個子句用來設定預設的表格空間的格式
為 SMALLFILE 或 BIGFILE。SMALLFILE 格式的表格空間可以由多達
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
1022 個資料檔組成,但每個資料檔最多可以有 400 萬個資料區塊組成。而
BIGFILE 格式的表格空間只能由一個資料檔組成,可是這個資料檔可由 40
億個資料區塊組成。不過不管是 SMALLFILE 或 BIGFILE 的格式,如果整
個表格空間來看,整體的空間大小並沒有差異,只是檔案個數與檔案大小的
不同罷了。
EXTENT MANAGEMENT:這個子句用來設定 SYSTEM 表格空間中擴充區
段的管理方式為 LOCAL(本機管理)或是 DICTIONARY(說明管理)。如果不
設定此子句,SYSTEM 表格空間的區段管理將會是說明管理,不過這是在早
期(Oracle8i 之前)的管理方式,說明管理在管理上與效能上都不如本機管理
來得好,所以建議將其設定為本機管理比較好。在使用本機管理的時候,必
須同時設定擴充區塊的大小,有下列兩種:統一配置(UNIFORM SIZE)與自
動配置(AUTOALLOCATE)。UNIFORM SIZE n{K|M}:表示每個擴充區塊的
大小固定為 n{K|M}。AUTOALLOCATE:表示每個擴充區塊的大小由
Oracle 決定。除了少數的特殊表格空間外,一般來說建議採用自動配置。範
例 1:EXTENT MANAGEMENT LOCAL AUTOALLOCATE。範例 2:
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K。範例 3:
EXTENT MANAGEMENT DICTIONARY。
DATAFILE:這個子句必須接在 EXTENT MANAGEMENT 子句後面,因為
EXTENT MANAGEMENT 用來設定 SYSTEM 表格空間的擴充區塊管理方式,
而 DATAFILE 子句用來表示 SYSTEM 表格空間的資料檔的名字與大小。範
例:DATAFILE `/u02/oradata/ora11g/system01.dbf’ SIZE 500M。
SYSAUX TABLESPACE:從 Oracle10g 開始,每個資料庫除了 SYSTEM
表格空間外,還必須要有 SYSAUX 表格空間。SYSTEM 表格空間中主要用
來儲存資料辭典(Data Dictionary),其他不屬於資料辭典但卻是 Oracle 系統
所需要的表格,就會放在 SYSAUX 表格空間中。範例:SYSAUX
TABLESPACE DATAFILE `/u02/oradata/ora11g/sysaux01.dbf’
SIZE 500M。
UNDO TABLESPACE:這個子句用來建立存放還原區段(UNDO SEGMENT)
的表格空間。如果在參數檔中 UNDO_MANAGEMENT 設為 AUTO,則這個
資料庫中必須有一個還原表格空間。而表格空間的名字則以參數檔中的
UNDO_TABLESPACE 所指定的一樣。範例:假設
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
UNDO_TABLESPACE=UNDOTBS,則此子句應該為 UNDO
TABLESPACE undotbs DATAFILE `
/u02/oradata/ora11g/undotbs01.dbf’ SIZE 200M。
DEFAULT TEMPORARY TABLESPACE:這個子句用來建立一個系統預
設的暫存表格空間。暫存區塊用在當使用者要求進行排序操作(SORT
OPERATION)時,使用者會談中的 PGA 空間不足以進行記憶體排序
(MEMEORY SORT),必須將部份資料先暫時存放在暫存區塊中,等待後續
的排序操作,這種排序就稱作磁碟排序(DISK SORT)。範例:DEFAULT
TEMPORARY TABLESPACE temp TEMPFILE
`/u02/oradata/ora11g/temp01.dbf’SIZE 100M。
DEFAULT TABLESPACE:這個子句用來設定系統的預設使用者表格空間,
用來當作使用者建立表格時,並未指定該表格所在的表格空間時,當作預設
的表格空間。範例:DEFAULT TABLESPACE users DATAFILE
`/u02/oradata/ora11g/users01.dbf’ SIZE 100M。
以上是大部份的子句,只要將這些子句組合起來,就可以完成 CREATE
DATABASE 的 SQL 指令。
[oracle@ELinux ~]$ export ORACLE_SID=ora11g
[oracle@ELinux ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.1.0.6.0 - Production on Fri Mar 28 14:13:45 2008
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 313860096 bytes
Fixed Size 1299624 bytes
Variable Size 96471896 bytes
Database Buffers 209715200 bytes
Redo Buffers 6373376 bytes
SQL> CREATE DATABASE ora11g
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
2> USER SYS IDENTIFIED BY abc123
3> USER SYSTEM IDENTIFIED BY abc123
4> MAXLOGFILES 5
5> MAXLOGMEMBERS 5
6> MAXLOGHISTORY 1
7> MAXDATAFILES 100
8> LOGFILE GROUP 1 ('/u02/oradata/ora11g/redo01a.log','/u02/orada
ta/ora11g/redo01b.log') SIZE 50M,GROUP 2 ('/u02/oradata/ora11g/redo0
2a.log','/u02/oradata/ora11g/redo02b.log') SIZE 50M
9> CHARACTER SET ZHT16MSWIN950
10> NATIONAL CHARACTER SET AL16UTF16
11> EXTENT MANAGEMENT LOCAL
12> DATAFILE '/u02/oradata/ora11g/system01.dbf' SIZE 325M
13> SYSAUX DATAFILE '/u02/oradata/ora11g/sysaux01.dbf' SIZE 325
M
14> DEFAULT TABLESPACE users
15> DATAFILE '/u02/oradata/ora11g/users01.dbf' SIZE 500M AUTOEX
TEND ON MAXSIZE UNLIMITED
16> DEFAULT TEMPORARY TABLESPACE tempts1
17> TEMPFILE '/u02/oradata/ora11g/temp01.dbf' SIZE 200M
18> UNDO TABLESPACE undotbs DATAFILE '/u02/oradata/ora11g/und
otbs01.dbf' SIZE 200M AUTOEXTEND ON MAXSIZE UNLIMITED
19> SET TIME_ZONE = '+08:00';
Database created.
SQL> select status from v$instance;
STATUS
------------
OPEN --建立資料庫後,Oracle執行處理的狀態已經是開啟
SQL> select name from v$datafile; --目前存在的資料檔
NAME
--------------------------------------------------------------------------------
/u02/oradata/ora11g/system01.dbf
/u02/oradata/ora11g/sysaux01.dbf
/u02/oradata/ora11g/undotbs01.dbf
/u02/oradata/ora11g/users01.dbf
SQL> select name from v$tempfile; --目前存在的暫存檔
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
NAME
--------------------------------------------------------------------------------
/u02/oradata/ora11g/temp01.dbf
SQL> select name from v$controlfile; --控制檔
NAME
--------------------------------------------------------------------------------
/u02/oradata/ora11g/control01.ctl
/u02/oradata/ora11g/control02.ctl
SQL> select member from v$logfile; --重作日誌檔
MEMBER
--------------------------------------------------------------------------------
/u02/oradata/ora11g/redo01a.log
/u02/oradata/ora11g/redo01b.log
/u02/oradata/ora11g/redo02a.log
/u02/oradata/ora11g/redo02b.log
當資料庫成功地建立後,資料庫中已經建好一些表格空間: SYSTEM、
SYSAUX、UNDOTBS、USERS、TEMP 等,以及系統管理的使用者帳戶:
SYS 與 SYSTEM,一些預設的角色:DBA、CONNECT、RESOURCE、
EXP_CATALOG_ROLE、IMP_CATALOG_ROLE 等,最重要的是資料辭
典也已經建立完成。這些工作都是 Oracle 執行處理在開啟 Oracle 資料庫後,
自動執行 SQL.BSQ(放在$ORACLE_HOME/rdbms/admin 下)這個指令稿
所產生的結果。
SQL> select name from v$tablespace; --表格空間
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS
TEMPTS1
USERS
SQL> select name from sys.user$ where type#=1; --使用者
NAME
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
------------------------------
SYS
SYSTEM
OUTLN
SQL> select name from sys.user$ where type#=0; --角色
NAME
------------------------------
_NEXT_USER
PUBLIC
CONNECT
RESOURCE
DBA
SELECT_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
10 rows selected.
4.7 建立資料庫後的後續動作
當資料庫建立完成後,目前已經可以進行使用者帳戶的建立、表格空間的建
立、表格或索引等區段的建立。不過此時資料庫還需要執行一些 SQL 指令
稿來建立一些輔助用的資料庫物件,這些物件可以讓資料庫管理者,更方便、
更清楚地了解資料庫結構。同時也可提供一些 Oracle 資料庫事先準備好的程
式套件,讓資料庫管理者直接使用這些套件,就可以完成相關的資料庫管理
工作,而不需要自己撰寫這些困難的程式功能。
4.7.1 建立資料辭典視圖(Data Dictionary View)
可是當資料庫管理者需要查詢資料辭典時,將會發現資料辭典本身的表格名
稱,往往都比較讓人難懂與記憶。同時資料辭典中的表格欄位,通常都是使
用數字形態,這些資料所代表的意義對資料庫管理者來說,可能不太容易一
眼看出來。這時資料庫管理者可以藉由執行
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
$ORACLE_HOME/rdbms/admin/catalog.sql,將資料辭典視圖建立,這樣
便可以將難懂的資料辭典內容用一些文字敘述來取代數字內容,讓資料庫管
理者可以輕鬆的了解資料庫目前的結構。
SQL> show user
USER is “SYS”
SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql
4.7.2 建立內建套件(Build-in Package)
此外為了讓後續的資料庫管理與程式撰寫可以簡單地使用一些資料庫的功能,
Oracle 資料庫中也可以藉由執行
$ORACLE_HOME/rdbms/admin/catproc.sql,將一些 Oracle 資料庫內建
的套件產生,這樣不管是資料庫管理者或資料庫程式設計人員便可以利用這
些套件所提供的功能,讓管理資料庫或程式設計方面更加輕鬆,而不需要自
己撰寫相關的程式。這裡要提醒讀者,執行 catalog.sql 與 catproc.sql 時,
資料庫使用者必須以 sysdba 身份登入資料庫。
SQL> show user
USER is “SYS”
SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql
4.7.3 建立 SQL*PLUS 所需要的表格
$ORACLE_HOME/sqlplus/admin/pupbld.sql:這個 SQL 指令稿是用在當
有非 SYS 或 SYSTEM 這兩個使用者帳戶,利用 SQL*PLUS 這個工具登入
Oracle 資料庫時,Oracle 資料庫會檢查一些 SQL*PLUS 專用的表格,決定
登入者所能執行的指令。這個 SQL 指令稿的執行者不是 SYS 而是
SYSTEM。
$ sqlplus frank/oracle --假設已經建立一個使用者frank
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
SQL> connect system/abc123
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
SQL> show user
USER is “SYSTEM”
SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql
4.7.4 新增其他的資料庫功能
當使用 CREATE DATABASE 指令建立資料庫時,所建立的資料庫並沒有如
使用 DBCA(DataBase Configuration Assistant)一般已經安裝好 Oracle
JVM、Oracle Text 等功能。所以如果有這些需求的話,資料庫管理人員需
要自己執行相關的 SQL 指令稿,來安裝所需要的功能。當然也可以利用
DBCA 來新增這些功能,在這裡就不多加敘述。
以下是自行安裝 JVM 與 Oracle Text 的範例
Oracle JVM:
SQL> CONNECT sys/abc123 AS SYSDBA
SQL> @/u01/app/oracle/product/11.1.0/db_1/javavm/install/initjvm.sql;
SQL> @/u01/app/oracle/product/11.1.0/db_1/xdk/admin/initxml.sql;
SQL> @/u01/app/oracle/product/11.1.0/db_1/xdk/admin/xmlja.sql;
SQL> @/u01/app/oracle/product/11.1.0/db_1/rdbms/admin/catjava.sql;
SQL> @/u01/app/oracle/product/11.1.0/db_1/rdbms/admin/catexf.sql;
Oracle Text
SQL> CONNECT sys/abc123 AS SYSDBA
SQL> @/u01/app/oracle/product/11.1.0/db_1/ctx/admin/catctx oracle SYS
AUX TEMP NOLOCK;
SQL> CONNECT CTXSYS/oracle
SQL> @/u01/app/oracle/product/11.1.0/db_1/ctx/admin/defaults/dr0defin.
sql "AMERICAN";
新增資料庫控制(Configure Database Control)
當手動建立資料庫後,如果資料庫管理人員想使用資料庫控制(Database
Control)管理這個資料庫,則必須使用手動執行 EMCA(Enterprise Manager
Configure Assistant)設定資料庫控制,或使用 DBCA(DataBase Configure
Assistant)設定資料庫控制也可以。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
[oracle@ELinux ~]$ emca -config dbcontrol db -repos create
Enter the following information:
Database SID: ora11g
Database Control is already configured for the database ora11g
You have chosen to configure Database Control for managing the databa
se ora11g
This will remove the existing configuration and the default settings and pe
rform a fresh configuration
Do you wish to continue? [yes(Y)/no(N)]: y
Listener port number: 1521
Password for SYS user: oracle
Password for DBSNMP user: oracle
Password for SYSMAN user: oracle
Password for SYSMAN user: oracle
Email address for notifications (optional): frank_shen@uuu.com.tw
Outgoing Mail (SMTP) server for notifications (optional): mail.uuu.com.tw
-----------------------------------------------------------------
You have specified the following settings
Database ORACLE_HOME .............. /u01/app/oracle/product/11.1.0/db_1
Local hostname ................ elinux
Listener port number ................ 1521
Database SID ................ ora11g
Email address for notifications ............... frank_shen@uuu.com.tw
Outgoing Mail (SMTP) server for notifications ............... mail.uuu.com.tw
-----------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: y
--接著等待整個動作完成即可
……………………………………………………………….
The Database Control URL is https://elinux:5500/em --EM的URL
***********************************************************
Enterprise Manager configuration completed successfully
使用網頁瀏覽器連到 https://elinux:5500/em 開始使用 Enterprise
Manager 管理 ora11g 這個資料庫。目前可以登入資料庫控制的帳號只有
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
SYS、SYSTEM 與 SYSMAN。不過當使用 SYS 登入資料庫控制時,連線
身份一定要選擇為 SYSDBA,不然會出現錯誤訊息。
啟動/關閉資料庫控制
$ export ORACLE_SID=orcl11g --指定執行處理
--Windows平台使用 set ORACLE_SID=orcl11g
$ emctl start dbconsole --啟動資料庫控制
$ emctl status dbconsole --顯示資料庫控制的狀況
$ emctl stop dbconsole --關閉資料庫控制
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
移除資料庫控制
如果有需要將現有的資料庫控制移除,只能使用 emca 將資料庫控制移除。
[oracle@ELinux ~]$ export ORACLE_SID=orcl11g --指定執行處理
[oracle@ELinux ~]$ emctl stop dbconsole
Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
https://elinux:5501/em/console/aboutApplication
Stopping Oracle Enterprise Manager 11g Database Control ...
... Stopped.
[oracle@ELinux ~]$ emca -deconfig dbcontrol db -repos drop
STARTED EMCA at Mar 31, 2009 4:25:14 PM
EM Configuration Assistant, Version 11.1.0.5.0 Production
Copyright (c) 2003, 2005, Oracle. All rights reserved.
Enter the following information:
Database SID: orcl11g
Listener port number: 1521
Password for SYS user:
Password for SYSMAN user:
Do you wish to continue? [yes(Y)/no(N)]: y
Mar 31, 2009 4:25:26 PM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /u01/app/oracle/cfgtoollogs/emca/
orcl11g/emca_2009_03_31_16_25_14.log.
Mar 31, 2009 4:25:27 PM oracle.sysman.emcp.util.DBControlUtil stopOM
S
INFO: Stopping Database Control (this may take a while) ...
Mar 31, 2009 4:25:31 PM oracle.sysman.emcp.EMReposConfig invoke
INFO: Dropping the EM repository (this may take a while) ...
Mar 31, 2009 4:29:17 PM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully dropped
Enterprise Manager configuration completed successfully
FINISHED EMCA at Mar 31, 2009 4:29:25 PM
[oracle@ELinux ~]$ emca -config dbcontrol db -repos create
Enter the following information:
Database SID: ora11g
Database Control is already configured for the database ora11g
You have chosen to configure Database Control for managing the databa
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
se ora11g
This will remove the existing configuration and the default settings and pe
rform a fresh configuration
Do you wish to continue? [yes(Y)/no(N)]: y
Listener port number: 1521
Password for SYS user: oracle
Password for DBSNMP user: oracle
Password for SYSMAN user: oracle
Password for SYSMAN user: oracle
Email address for notifications (optional): frank_shen@uuu.com.tw
Outgoing Mail (SMTP) server for notifications (optional): mail.uuu.com.tw
-----------------------------------------------------------------
You have specified the following settings
Database ORACLE_HOME .............. /u01/app/oracle/product/11.1.0/db_1
Local hostname ................ elinux
Listener port number ................ 1521
Database SID ................ ora11g
Email address for notifications ............... frank_shen@uuu.com.tw
Outgoing Mail (SMTP) server for notifications ............... mail.uuu.com.tw
-----------------------------------------------------------------
Do you wish to continue? [yes(Y)/no(N)]: y
--接著等待整個動作完成即可
……………………………………………………………….
The Database Control URL is https://elinux:5500/em --EM的URL
***********************************************************
Enterprise Manager configuration completed successfully
4.7.5 使用資料庫建立輔助(DBCA)建立資料庫控制
DBCA 可以用來新增資料庫控制,只要選擇設定”Configure Database
Options”即可。DBCA 自動會偵測資料庫中是否有資料庫控制存在,若沒
有資料庫控制存在,則會出現”Configure Enterprise Manager”的畫面,
按畫面說明一步一步設定即可完成資料庫控制新增操作。
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
Chapter 5 Manual Create Database
Oracle Database 11g Management Best Practice
結論
經過本章節的介紹,相信讀者對如何規劃、準備、建立資料庫,應該有著初
步的認識,接下來的章節將接續本章的內容,繼續為這個新建的資料庫添加
其他的儲存結構及綱要物件,如表格空間、使用者、表格、索引等,讓這個
資料庫更能符合應用程式的需求。

Contenu connexe

Tendances

Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Aaron Shilo
 

Tendances (20)

Oracle Database Management - Backup/Recovery
Oracle Database Management - Backup/RecoveryOracle Database Management - Backup/Recovery
Oracle Database Management - Backup/Recovery
 
Oracle SQL 1 Day Tutorial
Oracle SQL 1 Day TutorialOracle SQL 1 Day Tutorial
Oracle SQL 1 Day Tutorial
 
Oracle Database SQL Tuning Concept
Oracle Database SQL Tuning ConceptOracle Database SQL Tuning Concept
Oracle Database SQL Tuning Concept
 
Oracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret InternalsOracle RAC 19c: Best Practices and Secret Internals
Oracle RAC 19c: Best Practices and Secret Internals
 
Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]
Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]
Oracle RAC 12c Practical Performance Management and Tuning OOW13 [CON8825]
 
A deep dive about VIP,HAIP, and SCAN
A deep dive about VIP,HAIP, and SCAN A deep dive about VIP,HAIP, and SCAN
A deep dive about VIP,HAIP, and SCAN
 
Oracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLONOracle RAC 19c and Later - Best Practices #OOWLON
Oracle RAC 19c and Later - Best Practices #OOWLON
 
Oracle Database Management Basic 1
Oracle Database Management Basic 1Oracle Database Management Basic 1
Oracle Database Management Basic 1
 
Understanding index
Understanding indexUnderstanding index
Understanding index
 
Oracle MAA (Maximum Availability Architecture) 18c - An Overview
Oracle MAA (Maximum Availability Architecture) 18c - An OverviewOracle MAA (Maximum Availability Architecture) 18c - An Overview
Oracle MAA (Maximum Availability Architecture) 18c - An Overview
 
Oracle Database Performance Tuning Concept
Oracle Database Performance Tuning ConceptOracle Database Performance Tuning Concept
Oracle Database Performance Tuning Concept
 
Oracle EBS R12.2 - Deployment and System Administration
Oracle EBS R12.2 - Deployment and System AdministrationOracle EBS R12.2 - Deployment and System Administration
Oracle EBS R12.2 - Deployment and System Administration
 
Understanding oracle rac internals part 2 - slides
Understanding oracle rac internals   part 2 - slidesUnderstanding oracle rac internals   part 2 - slides
Understanding oracle rac internals part 2 - slides
 
What to Expect From Oracle database 19c
What to Expect From Oracle database 19cWhat to Expect From Oracle database 19c
What to Expect From Oracle database 19c
 
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
しばちょう先生が語る!オラクルデータベースの進化の歴史と最新技術動向#3
 
All of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL DeveloperAll of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL Developer
 
Understanding oracle rac internals part 1 - slides
Understanding oracle rac internals   part 1 - slidesUnderstanding oracle rac internals   part 1 - slides
Understanding oracle rac internals part 1 - slides
 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
 
Make Your Application “Oracle RAC Ready” & Test For It
Make Your Application “Oracle RAC Ready” & Test For ItMake Your Application “Oracle RAC Ready” & Test For It
Make Your Application “Oracle RAC Ready” & Test For It
 
[Oracle DBA & Developer Day 2014] しばちょう先生による特別講義! RMANの運用と高速化チューニング
[Oracle DBA & Developer Day 2014] しばちょう先生による特別講義! RMANの運用と高速化チューニング[Oracle DBA & Developer Day 2014] しばちょう先生による特別講義! RMANの運用と高速化チューニング
[Oracle DBA & Developer Day 2014] しばちょう先生による特別講義! RMANの運用と高速化チューニング
 

Similaire à Oracle 資料庫建立

Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
yiditushe
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作
maclean liu
 
Basic oracle for developer&beginner
Basic oracle for developer&beginnerBasic oracle for developer&beginner
Basic oracle for developer&beginner
maclean liu
 
第4章 数据库管理
第4章 数据库管理第4章 数据库管理
第4章 数据库管理
zhang shuren
 
MySQL5.6新功能
MySQL5.6新功能MySQL5.6新功能
MySQL5.6新功能
郁萍 王
 
Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)
yiditushe
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
 
了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance
maclean liu
 
诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识
maclean liu
 
如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统
melity78
 

Similaire à Oracle 資料庫建立 (20)

Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作Oracle数据库升级前必要的准备工作
Oracle数据库升级前必要的准备工作
 
SQL Server 資料庫版本控管
SQL Server 資料庫版本控管SQL Server 資料庫版本控管
SQL Server 資料庫版本控管
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
 
Oracle雲端服務介紹 taiwan
Oracle雲端服務介紹   taiwanOracle雲端服務介紹   taiwan
Oracle雲端服務介紹 taiwan
 
Oracle sql developer支持第三方数据库
Oracle  sql developer支持第三方数据库Oracle  sql developer支持第三方数据库
Oracle sql developer支持第三方数据库
 
Basic oracle for developer&beginner
Basic oracle for developer&beginnerBasic oracle for developer&beginner
Basic oracle for developer&beginner
 
第4章 数据库管理
第4章 数据库管理第4章 数据库管理
第4章 数据库管理
 
MySQL5.6新功能
MySQL5.6新功能MySQL5.6新功能
MySQL5.6新功能
 
使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後
 
Raising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi LuRaising The MySQL Bar-Manyi Lu
Raising The MySQL Bar-Manyi Lu
 
Oracle 全方位云解决方案概要
Oracle 全方位云解决方案概要Oracle 全方位云解决方案概要
Oracle 全方位云解决方案概要
 
Itpub电子杂志(第五期)
Itpub电子杂志(第五期)Itpub电子杂志(第五期)
Itpub电子杂志(第五期)
 
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
開放原始碼 Ch2.4   app - oss - db (ver 1.0)開放原始碼 Ch2.4   app - oss - db (ver 1.0)
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance了解真实的Oracle unbreakable database appliance
了解真实的Oracle unbreakable database appliance
 
诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识诗檀软件 Oracle数据块损坏知识
诗檀软件 Oracle数据块损坏知识
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统如何架构和开发高性能,高伸缩性Web 应用系统
如何架构和开发高性能,高伸缩性Web 应用系统
 

Plus de Chien Chung Shen (7)

Databases on AWS
Databases on AWSDatabases on AWS
Databases on AWS
 
Awsomeday ntc
Awsomeday ntcAwsomeday ntc
Awsomeday ntc
 
MySQL SQL Tutorial
MySQL SQL TutorialMySQL SQL Tutorial
MySQL SQL Tutorial
 
Oracle 12cR1 In-Memory Column Store
Oracle 12cR1 In-Memory Column StoreOracle 12cR1 In-Memory Column Store
Oracle 12cR1 In-Memory Column Store
 
Mssql to oracle
Mssql to oracleMssql to oracle
Mssql to oracle
 
Oracle Database Undo Segment Operation Concept
Oracle Database Undo Segment Operation ConceptOracle Database Undo Segment Operation Concept
Oracle Database Undo Segment Operation Concept
 
Hadoop Essential for Oracle Professionals
Hadoop Essential for Oracle ProfessionalsHadoop Essential for Oracle Professionals
Hadoop Essential for Oracle Professionals
 

Oracle 資料庫建立

  • 1. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 第五章 使用 SQL 敘述句建立資料庫 前言 建立資料庫是資料庫管理者的基本能力之一,雖然已經有圖型化界面(DBCA) 可以幫忙資料庫管理者處理建立資料庫的相關設定。但是使用 SQL 敘述句 建立資料庫,卻是讓資料庫管理者徹底了解 Oracle 資料庫的不二法門。因此 本章將探討如何使用 SQL 敘述句一步一步地建立一個新的資料庫,並且設 定資料庫控制。 4.1 事前的規劃 建立一個新的資料庫並不難,尤其是當資料庫管理者可以使用圖型化界面 (DBCA)時。不過要建立一個有良好的效能,高擴充性與高可靠性且容易管 理的資料庫,並不是件容易的事。因此資料庫管理者必須在建立資料庫之前, 先進行仔細的事前規劃,如此才能讓新建立的資料庫一開始就能滿足使用者 的需求。而不用在建立資料庫後,費時、費事的調整資料庫設定。而且有時 候還需要請資料庫使用者暫時離線,因為某些修改需要在資料庫關閉的狀態 才能進行。因此事前的規劃才是建立資料庫的重點。 4.1.1 弄清楚資料庫的屬性 在建立一個新的資料庫之前,先要回答下列的問題,用來找到最正確的資料 庫屬性。 這個資料庫的用途與型態? 用途:可分成正式環境(Production)與測試環境(Testing)。 1.正式環境的資料庫表示這個資料庫必須同時考慮可用性與可靠性,所以這 個資料庫應該設定為存檔模式。
  • 2. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 2.測試環境的資料庫則可以用最簡單的方式建立資料庫,因為這個資料庫的 主要用途,是用來測試資料庫功能或應用軟體的功能。所以可以暫時不需要 考慮太多的可用性與可靠性,因此通常設定為無存檔模式即可。 型態:可大致分成線上交易處理與資料倉儲。 1.線上交易處理(OnLine Transaction Processing - OLTP)型態的資料庫。 這種型態的資料庫通常在同時間有許多的交易同時發生,但是每個交易的執 行時間都很短。而且交易的型態多為資料異動操作,但每個交易所使用到的 資料量通常不多,大約是幾筆資料列(row)或幾百個位元組(byte)。所以用來 儲存資料列的資料區塊(Data Block)不需要太大,資料庫管理者可以選擇較 小的區塊大小(Block Size 可以是 2K、4K、8K、16K、32K),當做此資料 庫的標準資料區塊大小(Standard Block Size)。這樣可以減少 I/O 的浪費, 因為 Oracle 資料庫每次 I/O 的單位至少為一個資料區塊。Oracle Database 11g 的預設資料區塊大小為 8K,已經足以因應線上交易處理與資料倉儲的 使用。 2.資料倉儲(Data Warehouse - DW)型態的資料庫。這種型態的資料庫通常 同時執行的交易個數不多,但是每個交易所需的執行時間卻很久。大多數交 易的型態為長時間的查詢操作(Query),資料異動操作反而比較少。而且每個 交易所使用到的資料量通常很多,有時可達到幾百萬筆資料列或幾百萬位元 組(Mega Bytes)的資料量。這時資料庫管理者便可以選擇較大的資料區塊, 這樣可以減少 I/O 的總次數,因為 Oracle 資料庫最多一次可讀入的資料區塊 個數是有限制(DB_FILE_MULTIBLOCK_READ_COUNT)。 由上述的說明,可以得知線上交易處理與資料倉儲的交易型態有著極大的差 異。因此資料庫管理者需要使用不同的執行處理設定,才能讓資料庫發揮其 最佳效能。所以資料庫管理者在建立資料庫之前,就必須先了解未來存取此 資料庫的應用程式型態。才能在建立新的資料庫時,就事先設定合適的參數, 以免事後需要花費更多的成本與時間,才能調整資料庫相關設定。 4.1.2 資料庫所需的資源 一個 Oracle 伺服器(Server)是執行處理(Instance)與資料庫(Database)所組 成,而執行處理將佔用一些記憶體空間給 SGA 使用,同時也會增加一些
  • 3. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice CPU 的負載用來執行背景處理作業(Background Processes)。同時資料庫 也需要一些儲存空間用來放置資料庫檔案。所以每當建立一個新 Oracle 伺服 器,資料庫管理者就必須對現有的電腦伺服器的資源進行新的配置規劃。 1.實體記憶體(Physical Memory):作業系統的可用記憶體是由實體記憶體與 虛擬記憶體(Virtual Memory)的加總。因此當作業系統中所有正在運行的應 用程式所使用的記憶體總和,超過實體記憶體的大小時。作業系統便會使用 置換空間(Swap Space)或分頁檔(Paging File)的技術,將磁碟機空間模擬成 記憶體,再將這些記憶體提供給作業系統使用。若發生置換或分頁時,原本 存在實體記憶體的分頁(Page)就會被置換到置換空間或分頁檔暫存,將實體 記憶體的空間讓給其他的應用程式使用。若當某個應用程式執行時,發現其 所需要的分頁不存在於實體記憶體。這時作業系統自動將那些分頁或置換空 間或分頁檔讀回實體記憶體,不過必須先等待這些分頁被讀入實體記憶體後, 才能繼續執行應用程式。 因此電腦伺服器的實體記憶體不足,將導致執行處理的 SGA 經常被置換或 分頁到硬碟。如此便失去當初設計執行處理的初衷,希望利用到記憶體的存 取速度遠快於硬碟機的存取速度,藉此增加 Oracle 伺服器的效能。 所以當一個新的執行處理啓動時,資料庫管理者必須確認多出來的記憶體需 求,不會造成整個作業系統的實體記憶體不足,進而發生置換或分頁的情況, 而造成電腦伺服器的效能大幅下滑。不過資料庫管理者可以藉由 LOCK_SGA 參數,要求即使在作業系統發生需要置換或分頁的情況時,也 不會置換或分頁執行處理所使用的記憶體空間。
  • 4. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 2.硬碟機空間:資料庫是由資料檔(Datafile)、控制檔(Controlfile)、線上重 做日誌檔(Online redo Logfile)所組成,這些檔案不管放在檔案系統(File System)、原始裝置(Raw Device)或自動儲存體管理(Automatic Storage Management-ASM),都是佔用硬碟機的空間。尤其是資料檔的大小與成長 速度,更直接與資料庫的 DML 敘述句的數量與型態有關。所以資料庫管理 者必須在建立資料庫之前,就能預估資料庫空間所需要的空間,與資料庫空 間的成長速度。這樣才能事先準備好足夠的硬碟空間,避免突然出現硬碟空 間不足,但臨時找不到或買不到硬碟的窘境發生。 4.1.3 I/O 分散與容錯 在現在的 Oracle 伺服器架構下,當資料庫運行的過程中,發生 I/O(伺服器處 理作業將資料區塊讀到緩衝區快取、DBWR 將髒緩衝寫回資料檔與 LGWR 將重做項目寫入線上重作日誌檔)則是難以避免。身為一個稱職的資料庫管理 者,要能夠使用最少的 I/O 次數,完成資料庫的操作。其次是讓整體 I/O 的
  • 5. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 成本降到最小(也就是邏輯讀取次數佔整體讀取次數的比率越高越好)。所以 資料庫管理者要先確認這個電腦伺服器到底有幾個硬碟或者是否有硬體的磁 碟陣列系統(Redundant Array of Independent Disks-RAID)?這樣資料庫 管理者才能決定如何放置相關的資料庫檔案,以達到 I/O 最佳化。 磁碟陣列(RAID) 磁碟陣列(RAID)早期剛出現的時候被稱為 Redundant Array of Inexpensive Disks,不過現在大多數的人都稱它為 Redundant Array of Independent Disks。它的主要功能是將多個實體的磁碟機使用硬體或軟體的方法,將它們 整合為一個大的虛擬磁碟機,藉此提供更好 I/O 效能與容錯能力,而不是備 份的功能。資料庫的備份還是有其特定的方法與步驟以及必要性,而不是採 用磁碟陣列後,就不需要備份了。其中以 RAID 0、RAID 1、RAID 0+1、 RAID 1+0、RAID 3、RAID 5 最常見。 RAID 0(分割 Striped):在資料寫入時,將資料分割為ㄧ小塊塊的 Stripe(通 常為 2n K,n 為正整數,最大值要看 RAID 控制卡的設定。一般都能到 128K 或 256K),分別存到不同的磁碟中,因此可以提升寫入的速度。而且 當讀取資料時,可以由不同的磁碟中,同時讀取所需的資料,這樣的讀取速 度也可以大幅提升。 Stripe Set 的大小跟資料庫的型態也有關係,OLTP 適 用小一點的 Stripe Size,而 DW 適用大一點的 Stripe Size,而且 DW 環境 下 Stripe Size 最好等於 DB_BLOCK_SIZE*DB_FILE_MUTLIBLOCK_READ_COUNT 的值,這樣 在進行 Full Table Scan(全表格掃描)時,可以達到 I/O 的最佳化。不過由於 資料分散在不同的磁碟中,如果其中一個磁碟發生媒體毀損(Media Failure), 這時整個磁碟陣列中的所有資料,都將全部無法讀取,對 I/O 子系統來說 RAID 0 根本是毫無容錯能力可言。這種架構至少要有 2 個磁碟機才能組成, 可用空間為磁碟機總容量。
  • 6. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice RAID 1(鏡射 Mirrored):在資料寫入時,將資料同時寫到兩個不同的磁碟機 上,如此當其中一個硬碟機發生媒體毀損時,不至於導致所有資料遺失的慘 劇,因為至少還有一份相同內容的資料存在於另一個硬碟之上。不過這種架 構下,寫入的速度並沒有提升,但讀取資料時,可以由兩個磁碟中讀取資料, 所以讀取的效能還是有提升。這種架構至少需要 2 個磁碟機組成,不過可用 的空間只有磁碟機總容量的 50%。
  • 7. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice RAID 0+1 或 RAID 1+0:這種架構是 RAID 0 與 RAID 1 的組合型,0+1 與 1+0 的差別在於先 Striped 還是先 Mirrored 罷了,但是讀寫的效能是相 同的,只要不是同一組的 Mirrored 磁碟機同時發生 Media Failure,資料都 不會有遺失的問題。不過以重新建構 RAID 的成本來說,RAID 1+0 的重建 速度比 RAID 0+1 更快,而且在重建 RAID 的過程中,RAID 1+0 受影響的 I/O 效能比較少。這種架構至少需要 4 個或以上偶數倍的磁碟機,可用的空 間為磁碟機總容量的 50%。
  • 8. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice
  • 9. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice RAID 2:由 RAID 0 演進而來,只是資料切割的單位,不是 Stripe 而是 Bit。 同時 RAID 2 加上資料錯誤檢查的機制,在資料寫入磁碟機後,還需要計算 錯誤修正碼(Error Correction Code) ,並用漢明碼(Hamming Code)進行編 碼存到額外的磁碟機上,這樣才能保護當某個磁碟機發生 Media Failure 時, 可以將毀損磁碟上的資料救回。 RAID 3、4:與 RAID 2 相同都是由 RAID 0 所演化而來的,在寫入資料到 磁碟機之前,都會先將資料切割為更小的單位,不同的是所使用的切割單位, 以及 RAID 3、4 所使用的錯誤檢查演算法與 RAID 2 不同。RAID 3、4 都 至少需要 3 個磁碟機或以上,採用的是同位元檢查資料(Parity check data)
  • 10. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 的演算法,利用其中一個磁碟來儲存運算出來的同位元檢查碼。當其中一個 磁碟機發生 Media Failure 時(不能是存放 Parity check data 的那個磁碟機), 管理者只要換上新的磁碟機後,磁碟陣列就可以利用同位元檢查資料,重新 產生出原來資料。因為同位元檢查資料是將資料切割成一塊塊的單位,再利 用 X-OR 演算法計算出同位元檢查資料。如果是以 Byte 為單位,稱為 RAID 3。如果是以 Block 為單位時,則稱為 RAID 4。所以 RAID 3 在整體讀寫效 能會比 RAID 0+1 來的差,不過在磁碟成本上會比 RAID 0+1 低一點,因為 可用空間為 N-1 顆磁碟機的總和。切割單位越大,理論上讀寫效能越好,所 以存取效能 RAID 0>RAID 4>RAID 3>RAID 2。 RAID 5:由 RAID 2、3、4 所改進而來,RAID 5 先將資料與同位元檢查資 料組合在一起後,再以 Bit 為單位寫到各個磁碟機中,因此不需要一個專屬 的磁碟機用來存放同位元檢查資料。可是整體的可用空間還是與 RAID 3、4 一樣為 N-1e 個磁碟機的總和容量,因為雖然不需要一個專屬的磁碟機,但 是同位元檢查資料依然存在,只是散佈在所有的磁碟機中而已。不過就 I/O 效能而言,RAID 5 比 RAID 3、4 來的快,因為 I/O 會分散在所有的磁碟機 上。同時 RAID 5 架構下的可用的空間也比 RAID 1(50%)來的多。所以市面 上普遍採用的 RAID 架構,大多是此種(RAID 5)。
  • 11. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 如果在經費許可的情形下,筆者建議可以採用 RAID1+0 的技術,這樣可以 得到最好的保護及最佳的效能,然 RAID5 也是不錯的選擇。 OFA 架構 如果有硬體 RAID 時,管理者可以將大部份的 I/O 分散與容錯的工作交由硬 體來做,管理者只需要針對資料庫的邏輯儲存結構即可,可以大大地減少資 料庫管理者的工作負擔。不過不是每個人都有擁有這類的硬體可以使用,而 且某些儲存的問題也不是硬體 RAID 就可以解決的,所以管理者還是需要仔 細的規劃資料庫的相關檔案位置,才能做到真正的 I/O 分散與容錯。在 1990 年時 Oracle 公司依據多年來所得到的規劃、管理、效能調整各方面的 經驗與眾多的使用者回饋,發展出在規劃 Oracle 資料庫各種相關檔案的位置 與命名的建議,稱做 Optimal Flexible Architecture(OFA) 。Oracle 公司希 望能透過 OFA 幫助資料庫管理者在規劃 Oracle 資料庫時:決定 Oracle 軟體 的安裝位置,與 Oracle 資料庫的相關檔案的位置與名字。如此可以達到簡化
  • 12. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 管理工作、提升整體 I/O 效能與簡單地在不同的資料庫軟體版本或資料庫之 間切換等功能。 簡化管理成本:藉由適當的檔案系統與目錄結構的規劃,可以在新增磁碟機、 新增資料庫或新增資料檔到現存的資料庫時,簡化所需的管理工作及減少影 響資料庫的時間。以及建議將不同用途、重要性、甚至備份的頻率的區段 (Segment)放在不同的表格空間(Tablespace)中,這樣可以分隔不同的區塊, 對管理者來說,也可以減低相關的管理成本。 提升 I/O 效能:OFA 建議將資料庫的相關檔案分散到所有的磁碟機上,這樣 可以分散 I/O,減少出現 I/O 瓶頸的可能性。並且藉由適度的多路傳輸 (Multiplex)將資料庫的控制檔(Controlfile)與線上重做日誌(Online Redo logfile)放到多個不同的磁碟機上,可以提高資料庫的可靠性與可用性。 簡單切換版本與資料庫:OFA 建議將 Oracle 軟體與 Oracle 資料庫的相關檔 案,存放在不同的目錄結構與不同的磁碟機中。所以管理者可以由不同的目 錄位置,便可以得知目前所管理的資料庫軟體的版本與資料庫為何?當管理 者想要切換資料庫版本時,可以藉由作業系統的環境變數 ORACLE_HOME 的設定值,就可以輕易地切換到另一個資料庫版本。當管理者要進行一些資 料庫襠案的搬移或更改名字時,可以檢查相關檔案的目錄,即可確認是否為 正確的資料庫。 掛戴點(Mount Point) OFA 架構下,至少需要 2 個掛載點,一個用來放 Oracle 軟體的相關檔案之 用,一個用來放 Oracle 資料庫檔案之用。如果要實作完整的 OFA 架構,則 需要至少 4 個掛載點,一個用來放 Oracle 軟體的相關檔案,其餘 3 個用來 放 Oracle 資料庫的相關檔案。每個掛載點對應到一個實體的磁碟機或磁碟分 割區(Partition)。 OFA 架構下的掛載點有一定的建議格式:/pm。p 是一個字串常數,可以為 任何長度的字串,只要有意義即可。m 為獨一固定長度(2 個數字)的數字, 用來區別掛載點之用。常見的掛載點如:/u01、/u02、/ora01、/ora02 等 等,不管是否與範例一致,只要格式正確即可。
  • 13. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice Oracle 基本目錄(Oracle Base Directory)掛載點:/pm/s/u。用來表示作業 系統上 Oracle 軟體的本位目錄的位置。s 是所謂的標準目錄名稱通常為 app。 u 則是這個 Oracle 軟體在 OS 上是誰所擁有的。如果 ora11g 這個使用者擁 有 Oracle 軟體,則 Oracle 基本目錄應該為/u01/app/ora11g。 Oracle 本位目錄(Oracle Home Directory)的掛載點: /pm/h/u/product/v/type_n。h 是所謂的標準目錄名稱通常為 app。u 則是 這個 Oracle 軟體在 OS 上是誰所擁有的。Product 是固定的字串,用來表示 所安裝的產品名字。v 則是 Oracle 軟體的版本。最後是 typ 表示所安裝的種 類:db 為資料庫,client 為客戶端軟體,crs 為叢集軟體。n 表示所安裝的 次數。因此如果這是第一次安裝,並且由 OS 中的 ora11g 這個使用者安裝 Oracle 11g 的資料庫軟體,則相關的軟體安裝目錄應該是 /u01/app/ora11g/11.1.0/db_1 才對。 這裡的 h 與 Oracle 基本目錄中的 s 應該是同一個意義,只是 Oracle11g 之 前都使用 h,在 Oracle11g 之後,Oracle 基本目錄的格式改為/pm/s/u,但 在 Oracle 本位目錄格式中卻沒有一起修改為 s,依然保持為 h。 資料庫檔案的掛載點:/pm/q/dm。q 是用來表示此掛載點所存放的是 Oracle 資料庫的相關檔案,通常會用 oradata 或 oracledata 等字串。dm 則 為放在此目錄下的檔案為那一個資料庫,即使用的是資料庫名字。所以 /u02/oradata/orcl 此掛載點表示的是 orcl 這個資料庫的相關檔案都放在此 目錄下。如果有/u02/oradata/orcl 與/u03/oradata/orcl 同時出現,則表 示 orcl 這個資料庫的檔案分散 I/O 到/u02 與/u03 的兩個磁碟機上。 同時 OFA 對資料庫檔案的名字也有建議,例如:控制檔都是 control 為前綴 字,然後加上固定長度的數字字串用來區分,最後再加上 ctl 為副檔名,所 以控制檔的名字,通常為 control01.ctl。資料檔則是以 t 為前綴字,t 是 TABLESPACE 的縮寫(不過筆者建議可以直接使用 TABLESPACE 的名字 也可以,例如表格空間的名字叫做 USERS,則資料檔可以叫做 users01.dbf,這樣更有意義。),之後加上固定長度的數字字串為區分,最 後副檔名為 dbf,所以常見的資料檔名字為 t01.dbf。線上重做日誌檔的格 式為 redo 開頭,後面接著日誌群組號碼,副檔名為 log,所以常見的重做日 誌檔的名字為 redo01.log,可是一個日誌群組中最多可能有多達 5 個的成員, 所以筆者建議可在 redo01 後,再加上 abcde 的字母用來區分成員,因此如
  • 14. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 果是日誌群組 1 中的第一個成員,它的名字應該為 redo01a.log,若為第二 個成員,日誌檔的名字就可以稱為 redo01b.log。 資料庫管理檔案的掛載點:/h/admin/d/a。h 在這裡表示的是 Oracle 基本 目錄。admin 表示以下是管理資料庫相關的檔案。d 則是資料庫的名字。最 後的 a 為子目錄的名字:adhoc、arch、adump、bdump、cdump、create、 exp、logbook、pfile、udump 等。 adhoc:執行 ad hoc 查詢的 SQL 指令檔。 adump:資料庫的稽核資料。 arch:存檔日誌(Archived Logfile)。 bdump:背景程序的追蹤檔(Background Process Tracefile)與資料庫警示 檔(Alert Logfile)。11g 不需要 cdump:Oracle 核心的傾倒檔。11g 不需要 create:建立資料庫所要用的指令檔。 exp:export 指令所產生的傾倒檔。 logbook:資料庫的狀態紀錄檔。 pfile:Oracle Instance 的參數檔。 udump:使用者要求產生的傾倒檔(User Tracefile)。11g 不需要 例如 orcl 這個資料庫的存檔日誌可以放在 /u01/app/ora11g/admin/orcl/alert 下。 由 Oracle11g 開始,採用 ADR(Automatic Diagnostic Repository 自動診 斷儲存體)取代 bdump、cdump、udump。ADR 的 OFA 格式為 /h/diag/rdbms/d/i。h 為 Oracle 基本目錄。diag 為固定字串用來表示以下 目錄中所存放的是有關資料庫問題診斷所需要的檔案。rdbms 也是固定字串, 用來表示為關連式資料庫。d 是資料庫的名字。i 為執行處理的名字。其下有
  • 15. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 三個子目錄分為 trace、alert、incident,分別放置不同用途的檔案。 trace: User Tracefile 與 Background Process Tracefile。 alert:Alert Logfile。 incident:特定事件相關的傾倒檔。 所以 Oracle11g 的資料庫 orcl,它的警示檔會放在 /u01/app/ora11g/diag/rdbms/orcl/orcl/alert 下。 4.1.4 檔案系統、原始裝置與自動儲存管理 Oracle 資料庫支援將資料庫檔案放在檔案系統(File System)、原始裝置 (Raw Device)與自動儲存管理(Automatic Storage Management)上。資料 庫管理者必須了解這些儲存結構的優缺點,並依據資料庫本身的需求,選擇 最適合的儲存結構。 檔案系統(File System) 檔案系統是最常見的儲存結構,這種儲存結構有著管理容易的優點,但同時 也有著效能不好的缺點。因為一般作業系統的檔案系統(例如 Windows:FAT32/NTFS、LINUX:EXT2/EXT3)並不是專門為資料庫操作 而設計的,所以這些檔案系統都有效能不好的問題。這些效能上的問題主要 來自於下列幾個原因︰ 1.檔案系統的讀寫鎖定競爭︰ 當作業系統(OS)聽從 DBWR 指示開始準備進行讀取或寫入操作時,首先 OS 必須先取得相對檔案的 inode Exclusive Lock,避免有多個 inode 的異動發 生在同一個 inode 上,造成 inode 毀損。因此如果同時有多個讀取或寫入的 操作發生在同一個檔案上時,就會產生 inode 的競爭出現,當然 I/O 的效能 就會受到影響,尤其是在有大量的寫入操作時,有更加明顯的效能延遲。這 時資料庫管理者可以建立多而小的資料檔來分散 inode 的競爭,或藉由掛載 檔案系統時將造成 inode 異動的情況減少(例如取消檔案最後存取時間 [Access time]的記錄)。 2.同步(Synchronous)I/O︰
  • 16. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 在早期的檔案系統通常不支援非同步(Asynchronous)I/O,導致整體的 I/O 效能下降。不過在現今的商用作業系統中所使用的檔案系統,大多數的檔案 系統都已經開始支援 AIO,只是大部份的檔案系統還是需要人為的方式,開 啟非同步 I/O 的功能。 同步 I/O︰當 DBWR 要求作業系統進行 I/O 時,OS 未完成此次 I/O 操作前, DBWR 不能進行任何的操作,即使下一個 DBWR 的操作與此次 I/O 無關也 不能提早執行,一直要等到 OS 完成此次 I/O 操作後,DBWR 才能繼續後面 的操作。 非同步 I/O︰當 DBWR 要求作業系統進行 I/O 時,在 DBWR 將相關資訊告 知作業系統後,當 OS 進行 I/O 操作的同時。 DBWR 還可以繼續自己後續的 工作,等 OS 完成此次 I/O 操作後,通知 DBWR 即可。如此對 DBWR 而言, 不會浪費時間等待 I/O 的完成,便可以繼續自己的工作,因此整體的 I/O 效 能當然比較好。 3.緩衝 I/O(Buffered I/O)︰ 在一般的檔案系統進行 I/O 時,為加快 I/O 的速度,會利用一部份的記憶體 當作檔案系統緩衝(File System buffer)。也就是將資料區塊(Data Block)寫 到檔案系統的快取中,就回報 I/O 已經完成,之後再找機會將檔案系統快取 中的區塊真正寫到磁碟機中,這個機制在一般的應用程式中有很大的 I/O 效 能提昇。不過在 Oracle Server 的架構下,卻是多此一舉,因為 Oracle Instance 中的緩衝區暫存(Buffer Cache)就是扮演快取的角色,如果再加上 檔案系統的緩衝快取,便有雙重緩衝快取的情況發生。而且當 Oracle Server 收到 I/O 已經完成的訊息後,便真的以為資料區塊已經寫到磁碟機, 但是實際上資料區塊卻還只存在 OS 記憶體中,尚未真的寫到磁碟機中。如 果這時整個作業系統發生當機事件,這樣便有可能造成資料遺失。資料庫管 理者可以在掛載檔案系統時,要求採用 Direct IO 的方式掛載及使用日誌式 的檔案系統(Journal Filesystem),這樣便可以解決雙重快取所造成的記憶體 浪費及資料可能遺失的風險。 4.存取單位為區塊(Block)︰ 即使檔案系統已經採用 Direct IO 來避免雙重緩衝的問題,但是由於檔案系 統中最小的 I/O 單位是區塊。所以如果資料檔存放在檔案系統上,當 Oracle
  • 17. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice Server 需要讀取一筆資料列(Row)時,但因為 Oracle Server 的最小 I/O 單 位是資料區塊(Data Block),所以 Oracle Server 會要求作業系統讀取這個 資料區塊的內容,並將其放置到緩衝區暫存(Buffer Cache)中。而這個 I/O 要求會被作業系統轉化為對檔案系統的 I/O 要求。 如果資料區塊大於檔案系統區塊,Oracle Server 的一個資料區塊的 I/O 要求, 便要轉換為對多個檔案系統區塊的 I/O 要求。 但如果資料區塊小於檔案系統區塊,當 Oracle Server 要求將某個資料區塊 寫回資料檔中時,因為 Oracle Server 的要求未達到檔案系統的一次 I/O 所 需的資料量。 1.作業系統會先將資料檔中此舊版本的資料區塊與其周圍的資料區塊, 先讀到作業系統的記憶體中,將這些資料區塊用來填滿一個檔案系統區塊。 2.將欲寫回的資料區塊內容取代剛剛讀到的舊版本資料區塊內容。
  • 18. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 3.將整個檔案系統區塊整個寫回資料檔中。 這些多餘的 I/O,會影響到整體資料庫的運行效能。所以當使用檔案系統時, 資料庫管理者必須先找出所使用的檔案系統的區塊大小,再將資料庫的資料 區塊大小設定為此大小,這樣的設定可以讓整體的 I/O 達到最佳。如果無法 讓資料區塊等於檔案系統區塊,至少也要大於檔案系統區塊,這樣可以避免 不必要的 I/O 發生,進而減少 I/O 所造成的效能瓶頸。 原始裝置(Raw Device) 原始裝置又名字元裝置(Character Device),因為原始裝置上的 I/O 操作是 以字元(Character)為單位。至於稱為原始裝置的原因,是因為在磁碟機上建 立原始裝置,只需要建立實體卷冊(Physical Volume),也就是建立一個磁碟 分區(Partition)。之後這個實體卷冊便可以被當作資料檔、控制檔或線上日 誌檔使用。不過因為實體卷冊實際上就是一個磁碟分割,所以它不能隨意地、 簡單地更改大小,也就是說在其中的資料庫檔案也不能動態的更改大小。同 時使用原始裝置當作資料庫檔案時,這個原始裝置必須先被建立。 不過因為原始裝置少了檔案系統的介入,所以在進行 I/O 時,不需要經過檔 案系統緩衝。而且 I/O 的最小單位為字元,可以避免多餘的 I/O。因此原始 裝置的 I/O 效能比檔案系統更有效率。但以管理方面來說,原始裝置的管理 的確比檔案系統更加複雜與困難,不過在資料庫管理者可以藉由邏輯卷冊管 理者(Logical Volume Manager[LVM])來提供簡單、方便的管理界面。 可是隨著資訊科技的不斷進步,檔案系統的設計有著長足的進步,如直接 I/O(Direct I/O)、非同步 I/O(Asynchronous I/O)的功能,使得檔案系統的 效能也逐漸趕上原始裝置。而且檔案系統在管理方面有著絕對的優勢,所以 在種種的比較下,原始裝置的重要性逐漸的縮小。因此資料庫管理者在選擇 的時候,也可以大方地選擇檔案系統,而不用擔心效能上的問題了。 自動儲存體管理(Automatic Storage Management) Oracle 資料庫發展自動儲存管理的用途,是希望一方面擁有如原始裝置般的 效能優勢,另一方面又有檔案系統的管理優勢。此外也希望能達到如硬體磁 碟陣列的功能:分割(Stripe)與鏡射(Mirror)。
  • 19. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 因此 Oracle Database 10g 提供 ASM 的功能,幫助資料庫管理者以最少的 成本達到最佳的效能。使用自動儲存管理前,需要先啟動 ASM 執行處理 (ASM Instance)及建立至少一個 ASM 磁碟群組(ASM Disk Group),每個 ASM 磁碟群組至少要由一個 ASM 磁碟組成,然後將 ASM 磁碟的空間切割 為多個配置單元。之後資料庫管理者便可以將資料庫檔案放在 ASM 磁碟群 組中,這些資料庫檔案會以 ASM 檔案(ASM File)的型態存在。這些 ASM 檔 案會依照所在的磁碟群組所設定的冗餘(Redundancy)型態決定其鏡射(Mirror) 的數量,以及根據所設定的配置單元(Allocation Unit)大小,決定每個分割 (Stripe)的大小。
  • 20. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 4.2 決定重要的資料庫參數 在建立一個新的資料庫之前,資料庫管理者必須對那些在建立資料庫後,不 能改變或需要複雜步驟與執行處理須重新啟動才能改變的參數,如全域資料 庫名稱(Global Database Name)、標準資料區塊(Standard Block Size)的大 小與資料庫的字元集等。應該在尚未建立資料庫之前,就根據相關的需求, 決定符合的設定值,而不是在事後大費周章的調整。 4.2.1 全域資料庫名稱 在同一台電腦伺服器中,資料庫的名字彼此之間不能重複。而資料庫的名字 是在建立資料庫當時,藉由設定 DB_NAME 參數所決定的,這個參數值的長 度不能超過 8 個 Bytes。如果在建立資料庫後想要改變資料庫的名字,可以 透過 DBNEWID(nid)這個從 Oracle Database 9i 開始提供的工具程式來改變 資料庫的名字,不過資料庫更名的動作必須在 NOMOUNT 下進行。所以在 進行資料庫更名的過程中,資料庫使用者無法連線到資料庫進行操作。 雖然在同一台電腦伺服器之上的資料庫不能有相同的名字,可是在不同的電 腦伺服器,則有可能出現兩個甚至於多個資料庫有相同的名字。而這種情況 在這些資料庫彼此之間要進行分散式操作時,便會造成問題。因此 Oracle 對 每個資料庫除了有資料庫的名字之外,還有一個全域資料庫(Global Database Name)名字,用來區分不同電腦伺服器之上的相同名字的資料庫。 全域資料庫的名字是由 DB_NAME 與 DB_DOMAIN 這兩個參數以句點(.)連 結而成的,例如 DB_NAME 的設定值為 orcl,而 DB_DOMAIN 的值 為”abc.com“,則全域資料庫名字為 orcl.abc.com。 4.2.2 選擇適當的資料區塊大小 資料庫中的資料,依資料庫的邏輯結構而言是放在資料區塊(Data Block)中, 但依實體結構來說,則是放在資料檔中的區塊(Block)中。然而資料庫的資料 區塊大小在建立資料庫後,便不能改變,此即所謂的標準的資料區塊 (Standard Block) ,主要是用在 SYSTEM 表格空間與內容屬性為 TEMPORARY 的表格空間中,還有在建立其他的表格空間時,未指定資料 區塊大小時,當做預設值使用。
  • 21. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 在 Oracle Database 9i 之前,一個資料庫中只允許ㄧ種資料區塊的設定值, 就是只有標準資料區塊而已。不過從 Oracle Database 9i 開始,資料庫允許 每個資料庫最多可以有 5 種不同大小的資料區塊,即標準資料庫區塊加上最 多 4 種不同大小的非標準資料區塊(Non-Standard Block) ,不過每個表格空 間中仍然只能使用一種資料區塊,這些資料區塊的大小可以是 2K/4K/8K/16K/32K。如果在建立資料庫時沒有事先設定 DB_BLOCK_SIZE 這個參數,將使用 8192 Bytes 為預設值,這個預設值對 一般的資料庫是相當合適的。 那麼要如何選擇正確的資料區塊大小? 如果是較偏向 OLTP 型態的資料庫,建議選擇較小的資料庫區塊。因為 OLTP 資料庫的交易一般來說,都是存取資料量較小,通常是一筆或數筆資 料列而已。不過存取資料的單位是以資料區塊為一個最小單位,因此不管讀 幾筆資料列,伺服器處理作業都會將包含這些資料列的資料區塊讀到緩衝區 快取。即使只需要這個資料區塊的其中一筆資料列,也是如此。因此如果資 料區塊越小,所需要讀取的資料量也就越小。 但如果是偏向 DW 型態的資料庫,則建議使用較大的資料區塊。因為 DW 資 料庫的交易型態,通常是需要存取大量的資料列,然後加以計算或處理。所 以使用大的資料區塊可以在相同的資料量下,需要存取的資料區塊數量可以 減少。因為資料區塊越大,則可存放的資料列也越多。所以大的資料取塊可 以減少存取的次數,進而減少 I/O 的成本。不過一次可存取的資料區塊個數, 可由 DB_FILE_MULTI_BLOCK_READ_COUNT 設定。 不過在 Oracle Database 9i R2 之後,由於可以另外設定非標準的資料區塊 大小,所以如果一開始設定不當,還可以透過非標準的資料區塊的技巧解決 資料區塊大小設定不當所造成的問題。 4.2.3 選擇正確的資料庫字元集 其實不管是文字、數字或日期型態的資料,存放在資料庫時,皆先轉換成數 字型態後,才存放在資料區塊中。 數字型態(Number)的資料會先轉換成使用類似科學符號表示法的格式,例如: 1001 會轉換為 1.001*100^2,然後才存入資料區塊中。
  • 22. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice SQL> create table t_number(a number); SQL> insert into test values(1001); SQL> commit; SQL> select a,dump(a) physical_storage_data from t_number; A PHYSICAL_STORAGE_DATA ----------- -------------------------------------------------- 1001 Typ=2 Len=3: 194,11,2 正數值:194-193=1為指數(Exponent) (11-1)*100^1+(2-1)*100^(1-1)=10*100+1*100^0=1000+1=1001 以上是以10進位格式為範例,真正存在資料區塊中的格式為16進位 日期型態(Date Type)的資料則會先轉換為 Julian Day(儒略日)格式,而國際 天文學上所使用的儒略日計數實際上是由西元前 4713 年 1 月 1 日起始,然 而 Oracle 所使用的儒略日計數則是以西元前 4712 年 1 月 1 日為起點。將 西元前 4712 年 1 月 1 日的儒略日計數值設為 1,之後每經過一天則加 1。 例如西元 2008 年 3 月 22 日的儒略日計數值即為 2454548,表示從西元 前 4712 年 1 月 1 日後,經過了 2454548 天。再將儒略日計數轉為世紀、 年、月、日、時、分、秒的格式存在資料區塊中。 SQL> select to_char(to_date('2008-03-22','YYYY-MM-DD'),'J') JULIAN_D AY from dual; JULIAN_DAY ----------------- 2454548 SQL> select to_char(to_date(2454548,'J'),'YYYY-MM-DD:HH24:MI:SS') G REGORIAN_DAY from dual; GREGORIAN_DAY --------------------------- 2008-03-22:00:00:00 SQL> create table t_date(a date); SQL> insert into t_date values(to_date('2008-03-22','YYYY-MM-DD')); SQL> commit; SQL> select to_char(a,’YYYY-MM-DD:HH24:MI:SS’) a,dump(a) physical_ storage_data from t_date; A PHYSICAL_STORAGE_DATA
  • 23. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice --------------------------- -------------------------------------------------- 2008-03-22:00:00:00 Typ=12 Len=7: 120,108,3,22,1,1,1 世紀:120-100=20 年:108-100=08 月:3 日:22 時:1-1=0 分:1-1=0 秒:1-1=0 以上是以10進位格式為範例,真正存在資料區塊中的格式為16進位 SQL> alter session set nls_date_format='DD-MON-YYYY BC'; SQL> select to_char(to_date('01-JAN-4713 BC'), 'J') from dual; select to_char(to_date('01-JAN-4713 BC'), 'J') from dual * ERROR at line 1: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 與國際天文學上常用的以西元前4713年1月1日為起點的格式不同 SQL> select to_char(to_date('01-JAN-4712 BC'), 'J') JULIAN_DAY from d ual; JULIAN_DAY ----------------- 0000001 SQL> select to_date(1,'J') GREGORIAN_DAY from dual; GREGORIAN_DAY ------------------------- 01-JAN-4712 BC SQL> select to_date(10,'J') GREGORIAN_DAY from dual; GREGORIAN_DAY ------------------------- 10-JAN-4712 BC
  • 24. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 關於數字與日期格式的詳細說明,將會在介紹資料型態的章節中繼續說明, 這裡不再深入說明。 文字型態的資料同樣也會轉成數字後才存到資料區塊中,不過因為 Oracle 的 全球語言支援(Globalization Language Support)技術,資料庫中可以存放 以不同國家的語言格式的資料。所以在存放文字資料前,須先經過事先決定 的資料庫字元集(Database Characterset)與本國字元集(National Characterset)的轉換,找到對應的文字碼,之後才將這些文字對應碼存到資 料區塊中。不過在 Oracle8i 之前,每個資料庫只被允許有一種資料庫字元集 存在,而且事後想要修改字元集,除了少數的例外情況,不然是不被允許的, 所以選擇正確的資料庫字元集便成為相當重要的事前準備工作。不過從 Oracle8i 開始,每個資料庫除了設定資料庫字元集外,還可以選擇另一種字 元集當做本國字符集。 資料庫字元集是用在儲存一般的文字型態的資料,如:CHAR、VARCHAR2、 CLOB、LONG。此外資料辭典(Data Dictionary)中綱要物件(Schema Object)的物件名字、欄位名字與 PL/SQL 變數也都需要使用到資料庫字符 集轉換。還有資料庫中的 SQL 與 PL/SQL 的原始碼,也是透過資料庫字符 集轉換後,才存在資料辭典中。如果要存放繁體中文資料時,建議選擇 ZHT16MSWIN950 或 AL32UTF8 兩種,在存放中文資料時,每個中文字 ZHT16MSWIN950 只佔 2Bytes 的空間,反觀 AL32UTF8 則需要 3Bytes 的空間。 本國字符集則用在儲存 NCHAR、NVARCHAR2 與 NCLOB 這三種文字型態 的資料時使用。從 Oracle9i 開始,本國字元集只能由兩種萬國碼(Unicode) 中:UTF8 或 AL16UTF16 擇一,建議選擇 AL16UTF16,因為它在儲存 東亞語系的資料時,每個字僅需要 2Bytes 而已。 目前這個資料庫的資料庫字符集為AL32UTF8 SQL> select parameter,value from nls_database_parameters where para meter like '%CHARACTERSET'; PARAMETER VALUE ------------------------------------------------------ -------------------------------------- NLS_CHARACTERSET AL32UTF8 NLS_NCHAR_CHARACTERSET AL16UTF16
  • 25. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice SQL> create table t_char(a varchar2(10),b nvarchar2(10)); SQL> insert into t_char values('申建忠','申建忠'); SQL> commit; SQL> select * from t_char; A B -------------------- -------------------- 申建忠 申建忠 SQL> select a,dump(a) dump_a,b,dump(b) dump_b from t_char; A DUMP_A ------------------- --------------------------------------------------------------------- B DUMP_B ------------------- --------------------------------------------------------------------- 申建忠 Typ=1 Len=9: 231,148,179,229,187,186,229,191,160 申建忠 Typ=1 Len=6: 117,51,94,250,95,224 另一個資料庫,資料庫字符集為ZHT16MSWIN950 SQL> select parameter,value from nls_database_parameters where para meter like '%CHARACTERSET'; PARAMETER VALUE ------------------------------------------------------ --------------------------------------- NLS_CHARACTERSET ZHT16MSWIN950 NLS_NCHAR_CHARACTERSET AL16UTF16 SQL> create table t_char(a varchar2(10),b nvarchar2(10)); SQL> insert into t_char values('申建忠','申建忠'); SQL> commit; SQL> select a,dump(a) dump_a,b,dump(b) dump_b from t_char; A DUMP_A ------------------- ------------------------------------------------------------ B DUMP_B ------------------- ------------------------------------------------------------ 申建忠 Typ=1 Len=6: 165,211,171,216,169,190 申建忠 Typ=1 Len=6: 117,51,94,250,95,224 根據上面的範例,可以發現不同的字符集對相同的字,轉換後的字符碼也不 相同,例如同樣的”申建忠”三個字在 AL32UTF8 的編碼下,佔 9 個 bytes(每個中文字佔 3 個 bytes),以及編碼為” 231,148,179,229,187,186,229,191,160”。而在 ZHT16MSWIN950 的字符集中,所佔的空間只需 6 個 bytes(每個中文字只佔 2 個 bytes),編
  • 26. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 碼則是”165,211,171,216,169,190”。所以如果使用資料檔搬移的方式 來搬移資料到另一個資料庫時,來源資料庫的字符集與目的端資料庫的字符 集必須一致,或者是要先進行字符碼轉換,不然搬移後的資料檔的內容,就 無法正確地呈現字符所代表的真正意義。 3.3 作業系統的環境設定 在同一個作業系統上,可以同時安裝多個不同版本的 Oracle 資料庫軟體。所 以在建立一個新的 Oracle 資料庫前,必須先將相關的環境變數設定正確,以 免建立的資料庫版本不正確。同時建立資料庫後,將會有許多的檔案產生, 所以這些檔案在檔案系統中的目錄與權限也必須事先準備好。 4.3.1 環境變數 在眾多的環境變數中,有幾個是在建立資料庫前必須先設定的,如 ORACLE_SID 與 ORACLE_HOME。這些環境變數的設定方式,依照不同的 作業系統與所使用的 Shell 有著些許的不同。不過共同的地方就是環境變數 的名字一定都是大寫的英文字母。 UNIX/LINUX平台 Bourne,Bash,Korn Shell:$export ORACLE_SID=ora11g C Shell:$set ORACLE_SID=ora11g Windows平台 C:>set ORACLE_SID=ora11g ORACLE_HOME:用來設定所使用的 Oracle 資料庫軟體的版本。 $export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 $echo $ORACLE_HOME /u01/app/oracle/product/11.1.0/db_1 ORACLE_SID:用來決定使用作業系統驗證時,所想要啟動的 Oracle 執行 處理的名字。這個環境變數的長度不能超過 12 個字元,而且 ORACLE_SID 僅能由英文字母與數字組成,並且一定要由英文字母開頭。在某些作業系統 上,有字母大小寫的區分,如 UNIX/LINUX 作業系統。 $export ORACLE_SID=ora11g
  • 27. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice $echo $ORACLE_SID ora11g PATH:這個環境變數用在呼叫執行檔時,作業系統如何搜尋相關執行檔的 順序。建議加上$ORACLE_HOME/bin 在環境變數 PATH 中,不然在執行 Oracle 的執行檔時,就必須使用絕對路徑的方式。 $export PATH=$ORACLE_HOME/bin:$PATH $echo $PATH /u01/app/oracle/product/11.1.0/db_1/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/loc al/bin:/bin:/usr/bin:/home/ora11g/bin 這些環境變數建議直接寫到.profile 中,這樣往後就可以直接使用,如果有 需要改變再加以修改即可。 4.3.2 建立相關的檔案目錄 當一個資料庫建立完成後,不光只有資料庫檔案:控制檔、資料檔與日誌檔 被建立,同時還有許多相關的檔案一同產生,如備份檔案、存檔日誌、警示 檔與追蹤檔等等。可是在產生這些檔案前,檔案系統中必須先將相管的目錄 建好,不然在建立資料庫的過程中,將會因此而發生錯誤。 --預計將資料庫檔案放在/u02/oradata/ora11g的目錄下 #mkdir /u02/oradata/ora11g –p --預計將備份、復原相關的檔案放在/u03/flash_recovery_area的目錄下 #mkdir /u03/flash_recovery_area –p --預計將警示檔、追蹤檔放在/u03/diag的目錄下 #mkdir /u03/diag –p --在UNIX/LINUX平台上,檔案權限必須正確授與 #chown -R ora11g:dba /u02/oradata/ora11g #chown -R ora11g:dba /u03/flash_recovery_area # chown -R ora11g:dba /u03/diag
  • 28. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 4.4 準備參數檔 建立一個新的資料庫,必須先將 Oracle Instance 開啟到未掛載(NOMOUNT) 的狀態。所以資料庫管理者在建立一個新的資料庫之前,必須先準備好適當 的參數檔,才能繼續進行建立資料庫的工作。 4.4.1 基本參數說明 雖然參數檔中有多達 289 個參數可供設定,可是因為每個參數都有預設值, 而這些預設值可能是依照 Oracle 軟體的版本、依照其參數的值或依照所在的 作業系統決定的。所以資料庫管理者只需要將參數值不是預設值的參數寫到 參數檔中即可,其他的參數就使用預設值,直到未來需要特別設定這些參數 時,在進行設定即可。而且從 Oracle Datbase 10g 開始,將參數分為基本 (Basic:32)與進階(Advanced:257)兩類,一般的執行處理只需要設定基 本的參數即可,如有特殊的需求,才需要設定進階的參數。 以下僅針對某些常常被設定的參數進行一些說明,其餘的參數說明可以由 Oracle 的官方參考文件(Oracle Database Reference 11g Release 1)中得到 仔細的說明。
  • 29. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice COMPATIBLE︰這個參數的值為版本號碼,例如:COMPATIBLE=11.0.0, 這時表示此 Oracle 執行處理可以使用到 Oracle Database 11g 的功能。但 如果 COMPATIBLE=10.0.0,即使是 Oracle11g 的執行處理,但此執行處 理只能使用到 Oracle Database 10g 的功能而已。這樣可以讓新版本的執行 處理,向前模擬舊版本的執行處理。所以即便在應用程式尚未測試新版本的 Oracle 軟體時,也可以先將資料庫版本昇級,但又不會影響到應用程式的運 作,因為對現在執行處理來說,它把自己的功能加以限制,只能使用到 COMPATIBLE 所指定版本的功能。 CONTROL_FILES:這個參數的值為控制檔的名字,最多可以同時寫上 8 個 控制檔的名字,控制檔之間用逗點分隔彼此即可。例如︰ CONTROL_FILES=/u02/oradata/orcl/control01.ctl,/u03/oradata/orcl /control02.ctl。當 Oracle 執行處理掛載 Oracle 資料庫時,Oracle 執行處 理會同時開啟 CONTROL_FILES 所指定的所有控制檔。如果有任一控制檔 無法開啟或內容不一致,此時執行處理將無法成功地掛載 Oracle 資料庫。同 時在 Oracle 執行處理掛載控制檔後,在需要記錄相關資料到控制檔時,會同 步更新所有的控制檔內容,以達到多路傳輸(Multiplex)的功能,若任一控制 檔發生媒體毀損導致無法完成同步寫入操作,此時 Oracle 執行處理將會崩潰 (Crash)。Oracle 公司建議當採用控制檔多路傳輸的功能時,每個控制檔應 該位在不同磁碟控制卡所控制的不同磁碟機上,以避免發生單一點錯誤。 DB_BLOCK_SIZE:這個參數用來決定標準資料區塊的大小,而且一旦建立 資料庫後,此參數值就不能夠再被更改,參數值的合法範圍為 2048|4096|8192|16384|32768,但根據作業系統的不同,可能的區間會 更窄,預設值為 8192。範例:DB_BLOCK_SIZE=8192。 DB_DOMAIN:這個參數用來設定資料庫所在的網域名字,但這個網域名字 不需要跟 TCP/IP 所使用的網域有關連,僅僅只是用在整個 Oracle 網路環境 中,可以使用這個參數來搭配 DB_NAME,得到一個獨一的全域資料庫名字 (GLOBAL DB NAME)=資料庫名字.資料庫網域名字。例如:DB_NAME 為 ora11g,而 DB_DOMAIN 為 frankhome.com.tw,則全域資料庫名字為 ora11g.frankhome.com.tw。範例:DB_DOMAIN=frankhome.com.tw。
  • 30. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice DB_NAME:這個參數用來指定 Oracle 執行處理所要掛載、開啟的資料庫名 字,在每台主機中,不能有兩個相同名字的資料庫被同時掛載。這個參數值 最多不能超過 8 個 Bytes。範例:DB_NAME=ora11g。 DIAGNOSTIC_DEST:這個參數是 Oracle11g 開始採用 Automatic Diagnostic Repository 功能時,用來設定相關的警示檔、追蹤檔的所在目錄。 如果沒有明確指定,會依照相關的環境變數來自行產生。如果有設定環境變 數 ORACLE_BASE,則預設值為$ORACLE_BASE/diag。如果沒有設定環 境變數 ORACLE_BASE,但是有設定 ORACLE_HOME 這個環境變數,則 預設值為$ORACLE_HOME/log。範例:DIAGNOSTIC_DEST=/u03/diag。 DB_RECOVERY_FILE_DEST:這個參數用來設定瞬間復原區域(Flash Recovery Area)的位置,這個位置是此資料庫所有備份相關檔案的預設位置。 瞬間復原區域可用來放下列的檔案:控制檔、重做日誌檔、存檔日誌檔、倒 溯記錄日誌與使用 RMAN 所備份的備份檔。這個參數不能獨立設定,必須搭 配著 DB_RECOVERY_FILE_DEST_SIZE 一起使用,預設值為 $ORACLE_BASE/flash_recovery_area。範例: DB_RECOVERY_FILE_DEST=/u03/flash_recovery_area。 DB_RECOVERY_FILE_DEST_SIZE:這個參數用來限制這個資料庫所能使 用的空間大小,如果資料庫放在瞬間復原區域的復原(Recovery)相關的檔案 總和大於 DB_RECOVERY_FILE_DEST_SIZE 所設定的限制時。Oracle 執 行處理將依照 RMAN 保留政策(Retention Policy)的設定,自動刪除過期的 復原相關檔案,保證不會讓此資料庫的復原相關檔案超過此參數的限制。範 例:DB_RECOVERY_FILE_DEST_SIZE=2G。 INSTANCE_NAME:這個參數是設定 Oracle 執行處理的名字。通常會設定 的與 DB_NAME 相同,不過不能與其他的執行處理相同名字。但如果特殊考 量如 RAC 架構下,也可以不同於 DB_NAME。 LOG_BUFFER:這個參數用來決定此 Oracle 執行處理的重做日誌緩衝區的 大小,這邊需要提醒的是 LOG_BUFFER 的大小必須是檔案系統的區塊(通常 為 512/1024bytes)的倍數。此參數的預設值為 512K 或 (128K*CPU_COUNT)兩者中較大的值,可是參數值不能加上 K 或 M 這些
  • 31. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 代名詞,必須以數字呈現,即多少個 bytes。範例: LOG_BUFFER=5008384,表示為 5008384 bytes。 PGA_AGGREGATE_TARGET:這個參數用來限制所有伺服器處理作業 (Server Process)的 PGA(Program Global Area)總和不能超過此值。這個參 數的合法範圍可由 10M 到(4096G-1),預設值為 10M 或(10%*系統整體區 域(SGA))兩者中較大的那一個。如果這個參數值大於 0,則 WORKAREA_SIZE_POLICY 這個參數會自動設為 AUTO。表示在執行 SQL 指令時,指令中如有排序操作(order by/group by/hash join/create bitmap index/bitmap index merge)時,每個排序操作所能使用的 PGA 空 間大小由 Oracle 執行處理決定,而且一個會談(Session)用來進行記憶體排 序(Memory Sort)的 PGA 空間最大也只能到 5%的 PGA_AGGREGATE_TARGET,如果這樣的 PGA 空間還不夠這次排序操作 使用,這時就必須使用到暫存區段(Temporary Segment),進行磁碟排序 (Disk Sort)。同時當 SQL 指令執行完畢後,配置給該會談的 PGA 空間也會 自動被收回。範例:PGA_AGGREGATE_TARGET=100M。 PROCESSES:這個參數用來限制有多少個處理作業(Process)可以同時連到 此 Oracle 執行處理。這裡所稱的處理作業包含背景處理作業(Background Process)與伺服器處理作業(Server Process)。這參數的預設值為 100,合 法的範圍最小值為 6,最大值依不同作業系統而有所差異。範例: PROCESSES=100。 REMOTE_LOGIN_PASSWORDFILE:這個參數用來決定是否需要密碼檔, 用來驗證遠端的使用者,當他們要求以 sysdba 或 sysoper 身分登入時。合 法的餐數值有:NONE|EXCLUSIVE|SHARE。範例: REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE。 SESSIONS:這個參數用來限制最多同時建立的會談(Session)總數,這個參 數的預設值是由 PROCESSES 所衍生而來的,預設值為 (1.1*PROCESSES)+5,此參數的合法範圍由 1 到 2^31。範例: SESSIONS=115。 SGA_TARGET:這個參數用來啟動或關閉自動管理共享記憶體(Automatic Share Memory Management)功能,當 SGA_TARGET 的值設為 0 時,表
  • 32. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 示關閉 ASMM 功能,而 DB_CACHE_SIZE、SHARE_POOL_SIZE、 LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZE 等 參數必須由資料庫管理者自行設定與調整其大小。若此參數的值大於 0,則 表示開啟 ASMM 功能,DB_CACHE_SIZE、SHARE_POOL_SIZE、 LARGE_POOL_SIZE、JAVA_POOL_SIZE、STREAMS_POOL_SIZE 等 參數交由 Oracle 執行處理依系統狀況自動調整這些參數值。此參數的合法範 圍最小為 64M,最大值依作業系統不同而有所差易。範例: SGA_TARGET=300M。 UNDO_MANAGEMENT:這個參數的用途在於設定是否要將還原區段(Undo Segment)的管理交由 Oracle 執行處理管理。如果參數值為 MANUAL,則 資料庫管理者要自行建立與管理倒回區段(Rollback Segment)。當此參數值 設為 AUTO 時,資料庫管理者只需建立正確型態的表格空間(Tablespace), 並將表格空間的名字當作 UNDO_TABLESPACE 的參數值即可,其餘的還 原區段的建立與管理就交由 Oracle 執行處理負責。範例: UNDO_MANAGEMENT=AUTO。 UNDO_TABLESPACE:這個參數用來決定還原區段所在的表格空間名字。 要用來放還原區段的表格空間必須滿足一個要求,就是此表格空間的類型必 須是 UNDO 才可以用來當作還原區段的表格空間。 [ora11g@elinux5 ~]$ cat $ORACLE_HOME/dbs/initora11g.ora compatible=11.1.0 control_files=/u02/oradata/ora11g/control01.ctl,/u02/oradata/ora11g/contr ol02.ctl db_block_size=8192 db_domain=test.com db_name=ora11g db_recovery_file_dest=/u03/flash_recovery_area db_recovery_file_dest_size=4G diagnostic_dest=/u03/diag instance_name=ora11g log_buffer=5008384 pga_aggregate_target=200M workarea_size_policy=auto processes=200 remote_login_passwordfile=exclusive sessions=300
  • 33. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice sga_target=300M undo_management=auto undo_tablespace=undotbs 4.4.2 選擇適當的參數檔型態 參數檔的型態有兩種:PFILE 與 SPILE。自從 Oracle Database 9i 開始, Oracle 伺服器預設值為 SPFILE,而且許多新的資料庫功能必須搭配著 SPFILE 才能使用或發揮全部的功能。建議資料庫管理者使用 SPFILE,而 PFILE 的功能只剩下:向前相容、SPFILE 的備份及初次建立 SPFILE 時使 用。不過因為 SPFILE 是 Binary(2 進位)格式,不能使用一般的文字編輯器 來編輯其內容,必須在執行處理(Instance)啟動後,使用 SQL 指令(Alter System Set)來修改其內容。但是若沒有參數檔的話,Oracle 執行處理也不 能啟動。所以必須利用內建的範例 PFILE($ORACLE_HOME/dbs/init.ora) 來修改成所需的參數檔的內容。然後再利用新建立的 PFILE 當做新的 SPFILE 來源,產生一個 SPFILE。 [oracle@ELinux ~]$ ls $ORACLE_HOME/dbs/init.ora /u01/app/oracle/product/11.1.0/db_1/dbs/init.ora #假設新的Instance叫做ora11g [oracle@ELinux ~]$ cp $ORACLE_HOME/dbs/init.ora $ORACLE_HOME/dbs/initora11g.ora #使用任何習慣的文字編輯器來修改initora11g.ora,讓它的內容符合新Instanc e的要求 [oracle@ELinux ~]$ vi $ORACLE_HOME/dbs/initora11g.ora #利用initorcl.ora建立一個新的spfile(spfileora11g.ora) [oracle@ELinux ~]$ set ORACLE_SID=ora11g [oracle@ELinux ~]$ sqlplus / as sysdba Connected to an idle instance. #不管現在Instance的狀態,只要擁有sysdba權限,便可以執行下面的指令 SQL> create spfile from pfile; #此時使用pfile:$ORACLE_HOME/dbs/initora11g.ora建立一個spfile:$ORAC LE_HOME/dbs/spfileora11g.ora
  • 34. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 4.4.3 建立系統服務(Windows 平台) 在 Windows 平台上,每個需要在背景執行的程序,都必須以服務的方式撰 寫。因此每個 Windows 平台上的 Oracle 執行處理,都必須對應到一個服務, 這個服務可以使用 ORADIM 這個工具建立。 --使用文字格式的參數檔 C:>oradim –NEW –SID ora11g –STARTMODE auto –PFILE c:appAdmin istratorproduct11.1.0databaseinitora11g.ora --使用2進位格式的參數檔 C:>oradim –NEW –SID ora11g –STARTMODE auto –SPFILE c:appAdmi nistratorproduct11.1.0databasespfileora11g.ora -NEW:新增一個服務 -SID:指定Oracle執行處理的名字 -STARTMODE:設定此服務的啟動模式為自動 -PFILE:指定啟動此Oracle執行服務的文字格式參數檔 -SPFILE:指定啟動此Oracle執行處理的2進位格式參數檔 4.5 準備密碼檔 建立一個新的資料庫必須先取得 sysdba 的權限,這個權限的取得方法有兩 種:作業系統驗證或密碼檔驗證。如果 REMOTE_LOGIN_PASSWORDFILE 的參數值為 EXCULSIVE 或 SHARE 時,表示此 Oracle 執行處理要使用密碼檔來驗證遠端使用者的要求。所以必 須在建立資料庫前,先建立所需要的密碼檔。如果 Oracle 執行處理所要求的 密碼檔不存在,Oracle9i 的執行處理將會自動關閉,因此導致建立資料庫的 動作失敗。但是在 Oracle10g 之後,如果密碼檔不存在,建立資料庫的動作 不會因此失敗,最多不能使用密碼檔來驗證遠端使用者的 sysdba 或 sysoper 的要求罷了。 此外建立密碼檔之前還需要確認一件事,就是執行 orapwd 這個指令的作業 系統使用者必須是安裝 Oracle 軟體的作業系統使用者。 [frank@ELinux ~]$ id uid=501(frank) gid=500(oinstall) groups=500(oinstall),501(dba)
  • 35. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice #frank是oinstall與dba群組的一份子 [frank@ELinux ~]$ orapwd file=$ORACLE_HOME/dbs/orapwora11g pass word=admin123 entries=10 OPW-00001: Unable to open password-file #因為frank不是安裝這個oracle軟體的作業系統使用者 假設 Oracle 執行處理的名字為 orcl,所以資料庫管理者必須將密碼檔建立在 $ORACLE_HOME/dbs 下,而且密碼檔的名字必須為 orapworcl。 [oracle@ELinux ~]$ id uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(ope r) #oracle這個作業系統中的使用者,是之前用來安裝Oracle軟體的使用者 [oracle@ELinux ~]$ orapwd file=$ORACLE_HOME/dbs/orapwora11g pass word=admin123 entries=10 4.6 建立資料庫 現在開始建立一個新的資料庫,首先使用之前準備好的參數檔將 Oracle 執行 處理啟動至未掛載(Nomunt)狀態。然後執行適當的 Create Database 的指 令。當 Create Database 指令執行完畢後,控制檔、資料檔與重做日誌檔都 會被建立,而且 Oracle 執行處理也會達到開啟(Open)的狀態。 4.6.1 啟動 Oracle 執行處理 首先將 Oracle 執行處理開啟到未掛載(NOMOUNT)的模式。 [oracle@ELinux ~]$ export ORACLE_SID=ora11g [oracle@ELinux ~]$ sqlplus / as sysdba Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 313860096 bytes
  • 36. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice Fixed Size 1299624 bytes Variable Size 96471896 bytes Database Buffers 209715200 bytes Redo Buffers 6373376 bytes SQL> 4.6.2 CREATE DATABASE 指令說明 CREATE DATABASE 指令是由許多的子句所組合而成的,同時子句之間不 需要任何分隔符號,只要留一個空白即可,而且子句之間沒有特別的順序。 以下針對常用與必要的子句加以說明: USER 子句:這個 USER 子句可以讓資料庫建立時,就將 SYS 與 SYSTEM 這兩個使用者帳戶的密碼直接設定,避免使用之前廣為流傳的預設密碼 change_on_install(SYS)與 manager(SYSTEM)。範例:USER SYS IDENTIFIED BY abc123。 CONTROLFILE REUSE:這個子句會將目前 CONTROL_FILES 或 Oracle 管理檔案所指定的控制檔內容重新格式化,填入新的控制檔內容。通常這個 子句是用在重建資料庫時,不適合用在新建資料庫時使用,以免不小心地將 現有資料庫的控制檔毀壞。 MAXDATAFILES:在早期的 Oracle 版本中,這個子句用來設定此資料庫最 多可容納的資料檔個數。但自從 Oracle8i 開始,資料庫的最多資料檔個數由 參數檔中的 DB_FILES 參數直接設定,現在 MAXDATAFILES 只是用來決 定控制檔的初始大小的其中一個參數。 MAXINSTANCES:這個子句用來限制此資料庫最多可被幾個 Oracle 執行 處理同時掛載與開啟。最小值為 1,而最大值可達 1055。這個子句的值也 是用來決定控制檔初始大小的一份子。 MAXLOGHISTORY:這個子句只有在資料庫為 RAC(Real Application Cluster)架構與存檔日誌模式(Archivelog Mode)時,用來規定記錄多少個存 檔日誌的名字在控制檔中,這樣在 RAC 架構下時,當資料庫發生媒體毀損 時,由控制檔中得知所需要的存檔日誌名字,因此可以自動進行媒體復原。
  • 37. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 一般在非 RAC 架構的資料庫中,MAXLOGHISTORY 通常設定為 0。這個 子句的值也是用來決定控制檔初始大小的一份子。 MAXLOGFILES:這個子句用來決定此資料庫中最多可建立幾個日誌群組。 這個子句的值也是用來決定控制檔初始大小的一份子。 MAXLOGMEMBERS:這個子句用來決定此資料庫的每個日誌群組中,最多 可允許的日誌成員個數。這個子句的值也是用來決定控制檔初始大小的一份 子。 NOARCHIVELOG/ARCHIVELOG :用來設定資料庫是否為存檔模式。 FORCE LOGGING:這個子句會將資料庫中,除了暫存表格空間中的暫存區 塊外,所有的資料異動都會產生異動日誌,即便是使用者在執行 SQL 指令 時已經自行加上 NOLOGGING 選項,也會產生相關的異動日誌。這個功能 通常用在有設置備援資料庫(Standby Database)或串流(Streams)的環境。 CHARACTER SET:設定資料庫字元集。 NATIONAL CHARACTER SET:設定本國字元集。 SET TIME_ZONE:這個字句決定資料庫所在的時區,可以用數字表示與 UTC(Coordinated Universal Time,以前稱為格林威治時間)時間的差距, 格式為 hh:mm,合法的範圍由-12:00 到+14:00,台灣的時區為+08:00。 當然也可以使用時區名字如:ASIA/TAIPEI。範例:SET TIME_ZONE=’+08:00’。 LOGFILE:這個子句用來設定這個資料庫一開始有幾個日誌群組及每個群組 中有幾個日誌成員。Oracle 規定每個資料庫至少要有 2 個日誌群組,而每個 日誌群組中又至少要有 1 個日誌成員。範例:LOGFILE GROUP 1 (`/u02/oradata/ora11g/redo01a.log’,’/u02/oradata/ora11g/redo0 1b.log’) SIZE 100M,GROUP 2 (`/u02/oradata/ora11g/redo02a.log’,’/u02/oradata/ora11g/redo0 2b.log’) SIZE 100M SET DEFAULT TABLESPACE:這個子句用來設定預設的表格空間的格式 為 SMALLFILE 或 BIGFILE。SMALLFILE 格式的表格空間可以由多達
  • 38. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 1022 個資料檔組成,但每個資料檔最多可以有 400 萬個資料區塊組成。而 BIGFILE 格式的表格空間只能由一個資料檔組成,可是這個資料檔可由 40 億個資料區塊組成。不過不管是 SMALLFILE 或 BIGFILE 的格式,如果整 個表格空間來看,整體的空間大小並沒有差異,只是檔案個數與檔案大小的 不同罷了。 EXTENT MANAGEMENT:這個子句用來設定 SYSTEM 表格空間中擴充區 段的管理方式為 LOCAL(本機管理)或是 DICTIONARY(說明管理)。如果不 設定此子句,SYSTEM 表格空間的區段管理將會是說明管理,不過這是在早 期(Oracle8i 之前)的管理方式,說明管理在管理上與效能上都不如本機管理 來得好,所以建議將其設定為本機管理比較好。在使用本機管理的時候,必 須同時設定擴充區塊的大小,有下列兩種:統一配置(UNIFORM SIZE)與自 動配置(AUTOALLOCATE)。UNIFORM SIZE n{K|M}:表示每個擴充區塊的 大小固定為 n{K|M}。AUTOALLOCATE:表示每個擴充區塊的大小由 Oracle 決定。除了少數的特殊表格空間外,一般來說建議採用自動配置。範 例 1:EXTENT MANAGEMENT LOCAL AUTOALLOCATE。範例 2: EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K。範例 3: EXTENT MANAGEMENT DICTIONARY。 DATAFILE:這個子句必須接在 EXTENT MANAGEMENT 子句後面,因為 EXTENT MANAGEMENT 用來設定 SYSTEM 表格空間的擴充區塊管理方式, 而 DATAFILE 子句用來表示 SYSTEM 表格空間的資料檔的名字與大小。範 例:DATAFILE `/u02/oradata/ora11g/system01.dbf’ SIZE 500M。 SYSAUX TABLESPACE:從 Oracle10g 開始,每個資料庫除了 SYSTEM 表格空間外,還必須要有 SYSAUX 表格空間。SYSTEM 表格空間中主要用 來儲存資料辭典(Data Dictionary),其他不屬於資料辭典但卻是 Oracle 系統 所需要的表格,就會放在 SYSAUX 表格空間中。範例:SYSAUX TABLESPACE DATAFILE `/u02/oradata/ora11g/sysaux01.dbf’ SIZE 500M。 UNDO TABLESPACE:這個子句用來建立存放還原區段(UNDO SEGMENT) 的表格空間。如果在參數檔中 UNDO_MANAGEMENT 設為 AUTO,則這個 資料庫中必須有一個還原表格空間。而表格空間的名字則以參數檔中的 UNDO_TABLESPACE 所指定的一樣。範例:假設
  • 39. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice UNDO_TABLESPACE=UNDOTBS,則此子句應該為 UNDO TABLESPACE undotbs DATAFILE ` /u02/oradata/ora11g/undotbs01.dbf’ SIZE 200M。 DEFAULT TEMPORARY TABLESPACE:這個子句用來建立一個系統預 設的暫存表格空間。暫存區塊用在當使用者要求進行排序操作(SORT OPERATION)時,使用者會談中的 PGA 空間不足以進行記憶體排序 (MEMEORY SORT),必須將部份資料先暫時存放在暫存區塊中,等待後續 的排序操作,這種排序就稱作磁碟排序(DISK SORT)。範例:DEFAULT TEMPORARY TABLESPACE temp TEMPFILE `/u02/oradata/ora11g/temp01.dbf’SIZE 100M。 DEFAULT TABLESPACE:這個子句用來設定系統的預設使用者表格空間, 用來當作使用者建立表格時,並未指定該表格所在的表格空間時,當作預設 的表格空間。範例:DEFAULT TABLESPACE users DATAFILE `/u02/oradata/ora11g/users01.dbf’ SIZE 100M。 以上是大部份的子句,只要將這些子句組合起來,就可以完成 CREATE DATABASE 的 SQL 指令。 [oracle@ELinux ~]$ export ORACLE_SID=ora11g [oracle@ELinux ~]$ sqlplus / as sysdba SQL*Plus: Release 11.1.0.6.0 - Production on Fri Mar 28 14:13:45 2008 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount ORACLE instance started. Total System Global Area 313860096 bytes Fixed Size 1299624 bytes Variable Size 96471896 bytes Database Buffers 209715200 bytes Redo Buffers 6373376 bytes SQL> CREATE DATABASE ora11g
  • 40. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 2> USER SYS IDENTIFIED BY abc123 3> USER SYSTEM IDENTIFIED BY abc123 4> MAXLOGFILES 5 5> MAXLOGMEMBERS 5 6> MAXLOGHISTORY 1 7> MAXDATAFILES 100 8> LOGFILE GROUP 1 ('/u02/oradata/ora11g/redo01a.log','/u02/orada ta/ora11g/redo01b.log') SIZE 50M,GROUP 2 ('/u02/oradata/ora11g/redo0 2a.log','/u02/oradata/ora11g/redo02b.log') SIZE 50M 9> CHARACTER SET ZHT16MSWIN950 10> NATIONAL CHARACTER SET AL16UTF16 11> EXTENT MANAGEMENT LOCAL 12> DATAFILE '/u02/oradata/ora11g/system01.dbf' SIZE 325M 13> SYSAUX DATAFILE '/u02/oradata/ora11g/sysaux01.dbf' SIZE 325 M 14> DEFAULT TABLESPACE users 15> DATAFILE '/u02/oradata/ora11g/users01.dbf' SIZE 500M AUTOEX TEND ON MAXSIZE UNLIMITED 16> DEFAULT TEMPORARY TABLESPACE tempts1 17> TEMPFILE '/u02/oradata/ora11g/temp01.dbf' SIZE 200M 18> UNDO TABLESPACE undotbs DATAFILE '/u02/oradata/ora11g/und otbs01.dbf' SIZE 200M AUTOEXTEND ON MAXSIZE UNLIMITED 19> SET TIME_ZONE = '+08:00'; Database created. SQL> select status from v$instance; STATUS ------------ OPEN --建立資料庫後,Oracle執行處理的狀態已經是開啟 SQL> select name from v$datafile; --目前存在的資料檔 NAME -------------------------------------------------------------------------------- /u02/oradata/ora11g/system01.dbf /u02/oradata/ora11g/sysaux01.dbf /u02/oradata/ora11g/undotbs01.dbf /u02/oradata/ora11g/users01.dbf SQL> select name from v$tempfile; --目前存在的暫存檔
  • 41. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice NAME -------------------------------------------------------------------------------- /u02/oradata/ora11g/temp01.dbf SQL> select name from v$controlfile; --控制檔 NAME -------------------------------------------------------------------------------- /u02/oradata/ora11g/control01.ctl /u02/oradata/ora11g/control02.ctl SQL> select member from v$logfile; --重作日誌檔 MEMBER -------------------------------------------------------------------------------- /u02/oradata/ora11g/redo01a.log /u02/oradata/ora11g/redo01b.log /u02/oradata/ora11g/redo02a.log /u02/oradata/ora11g/redo02b.log 當資料庫成功地建立後,資料庫中已經建好一些表格空間: SYSTEM、 SYSAUX、UNDOTBS、USERS、TEMP 等,以及系統管理的使用者帳戶: SYS 與 SYSTEM,一些預設的角色:DBA、CONNECT、RESOURCE、 EXP_CATALOG_ROLE、IMP_CATALOG_ROLE 等,最重要的是資料辭 典也已經建立完成。這些工作都是 Oracle 執行處理在開啟 Oracle 資料庫後, 自動執行 SQL.BSQ(放在$ORACLE_HOME/rdbms/admin 下)這個指令稿 所產生的結果。 SQL> select name from v$tablespace; --表格空間 NAME ------------------------------ SYSTEM SYSAUX UNDOTBS TEMPTS1 USERS SQL> select name from sys.user$ where type#=1; --使用者 NAME
  • 42. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice ------------------------------ SYS SYSTEM OUTLN SQL> select name from sys.user$ where type#=0; --角色 NAME ------------------------------ _NEXT_USER PUBLIC CONNECT RESOURCE DBA SELECT_CATALOG_ROLE EXECUTE_CATALOG_ROLE DELETE_CATALOG_ROLE EXP_FULL_DATABASE IMP_FULL_DATABASE 10 rows selected. 4.7 建立資料庫後的後續動作 當資料庫建立完成後,目前已經可以進行使用者帳戶的建立、表格空間的建 立、表格或索引等區段的建立。不過此時資料庫還需要執行一些 SQL 指令 稿來建立一些輔助用的資料庫物件,這些物件可以讓資料庫管理者,更方便、 更清楚地了解資料庫結構。同時也可提供一些 Oracle 資料庫事先準備好的程 式套件,讓資料庫管理者直接使用這些套件,就可以完成相關的資料庫管理 工作,而不需要自己撰寫這些困難的程式功能。 4.7.1 建立資料辭典視圖(Data Dictionary View) 可是當資料庫管理者需要查詢資料辭典時,將會發現資料辭典本身的表格名 稱,往往都比較讓人難懂與記憶。同時資料辭典中的表格欄位,通常都是使 用數字形態,這些資料所代表的意義對資料庫管理者來說,可能不太容易一 眼看出來。這時資料庫管理者可以藉由執行
  • 43. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice $ORACLE_HOME/rdbms/admin/catalog.sql,將資料辭典視圖建立,這樣 便可以將難懂的資料辭典內容用一些文字敘述來取代數字內容,讓資料庫管 理者可以輕鬆的了解資料庫目前的結構。 SQL> show user USER is “SYS” SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql 4.7.2 建立內建套件(Build-in Package) 此外為了讓後續的資料庫管理與程式撰寫可以簡單地使用一些資料庫的功能, Oracle 資料庫中也可以藉由執行 $ORACLE_HOME/rdbms/admin/catproc.sql,將一些 Oracle 資料庫內建 的套件產生,這樣不管是資料庫管理者或資料庫程式設計人員便可以利用這 些套件所提供的功能,讓管理資料庫或程式設計方面更加輕鬆,而不需要自 己撰寫相關的程式。這裡要提醒讀者,執行 catalog.sql 與 catproc.sql 時, 資料庫使用者必須以 sysdba 身份登入資料庫。 SQL> show user USER is “SYS” SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql 4.7.3 建立 SQL*PLUS 所需要的表格 $ORACLE_HOME/sqlplus/admin/pupbld.sql:這個 SQL 指令稿是用在當 有非 SYS 或 SYSTEM 這兩個使用者帳戶,利用 SQL*PLUS 這個工具登入 Oracle 資料庫時,Oracle 資料庫會檢查一些 SQL*PLUS 專用的表格,決定 登入者所能執行的指令。這個 SQL 指令稿的執行者不是 SYS 而是 SYSTEM。 $ sqlplus frank/oracle --假設已經建立一個使用者frank Error accessing PRODUCT_USER_PROFILE Warning: Product user profile information not loaded! You may need to run PUPBLD.SQL as SYSTEM SQL> connect system/abc123
  • 44. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice SQL> show user USER is “SYSTEM” SQL> @$ORACLE_HOME/sqlplus/admin/pupbld.sql 4.7.4 新增其他的資料庫功能 當使用 CREATE DATABASE 指令建立資料庫時,所建立的資料庫並沒有如 使用 DBCA(DataBase Configuration Assistant)一般已經安裝好 Oracle JVM、Oracle Text 等功能。所以如果有這些需求的話,資料庫管理人員需 要自己執行相關的 SQL 指令稿,來安裝所需要的功能。當然也可以利用 DBCA 來新增這些功能,在這裡就不多加敘述。 以下是自行安裝 JVM 與 Oracle Text 的範例 Oracle JVM: SQL> CONNECT sys/abc123 AS SYSDBA SQL> @/u01/app/oracle/product/11.1.0/db_1/javavm/install/initjvm.sql; SQL> @/u01/app/oracle/product/11.1.0/db_1/xdk/admin/initxml.sql; SQL> @/u01/app/oracle/product/11.1.0/db_1/xdk/admin/xmlja.sql; SQL> @/u01/app/oracle/product/11.1.0/db_1/rdbms/admin/catjava.sql; SQL> @/u01/app/oracle/product/11.1.0/db_1/rdbms/admin/catexf.sql; Oracle Text SQL> CONNECT sys/abc123 AS SYSDBA SQL> @/u01/app/oracle/product/11.1.0/db_1/ctx/admin/catctx oracle SYS AUX TEMP NOLOCK; SQL> CONNECT CTXSYS/oracle SQL> @/u01/app/oracle/product/11.1.0/db_1/ctx/admin/defaults/dr0defin. sql "AMERICAN"; 新增資料庫控制(Configure Database Control) 當手動建立資料庫後,如果資料庫管理人員想使用資料庫控制(Database Control)管理這個資料庫,則必須使用手動執行 EMCA(Enterprise Manager Configure Assistant)設定資料庫控制,或使用 DBCA(DataBase Configure Assistant)設定資料庫控制也可以。
  • 45. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice [oracle@ELinux ~]$ emca -config dbcontrol db -repos create Enter the following information: Database SID: ora11g Database Control is already configured for the database ora11g You have chosen to configure Database Control for managing the databa se ora11g This will remove the existing configuration and the default settings and pe rform a fresh configuration Do you wish to continue? [yes(Y)/no(N)]: y Listener port number: 1521 Password for SYS user: oracle Password for DBSNMP user: oracle Password for SYSMAN user: oracle Password for SYSMAN user: oracle Email address for notifications (optional): frank_shen@uuu.com.tw Outgoing Mail (SMTP) server for notifications (optional): mail.uuu.com.tw ----------------------------------------------------------------- You have specified the following settings Database ORACLE_HOME .............. /u01/app/oracle/product/11.1.0/db_1 Local hostname ................ elinux Listener port number ................ 1521 Database SID ................ ora11g Email address for notifications ............... frank_shen@uuu.com.tw Outgoing Mail (SMTP) server for notifications ............... mail.uuu.com.tw ----------------------------------------------------------------- Do you wish to continue? [yes(Y)/no(N)]: y --接著等待整個動作完成即可 ………………………………………………………………. The Database Control URL is https://elinux:5500/em --EM的URL *********************************************************** Enterprise Manager configuration completed successfully 使用網頁瀏覽器連到 https://elinux:5500/em 開始使用 Enterprise Manager 管理 ora11g 這個資料庫。目前可以登入資料庫控制的帳號只有
  • 46. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice SYS、SYSTEM 與 SYSMAN。不過當使用 SYS 登入資料庫控制時,連線 身份一定要選擇為 SYSDBA,不然會出現錯誤訊息。 啟動/關閉資料庫控制 $ export ORACLE_SID=orcl11g --指定執行處理 --Windows平台使用 set ORACLE_SID=orcl11g $ emctl start dbconsole --啟動資料庫控制 $ emctl status dbconsole --顯示資料庫控制的狀況 $ emctl stop dbconsole --關閉資料庫控制
  • 47. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 移除資料庫控制 如果有需要將現有的資料庫控制移除,只能使用 emca 將資料庫控制移除。 [oracle@ELinux ~]$ export ORACLE_SID=orcl11g --指定執行處理 [oracle@ELinux ~]$ emctl stop dbconsole Oracle Enterprise Manager 11g Database Control Release 11.1.0.6.0 Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved. https://elinux:5501/em/console/aboutApplication Stopping Oracle Enterprise Manager 11g Database Control ... ... Stopped. [oracle@ELinux ~]$ emca -deconfig dbcontrol db -repos drop STARTED EMCA at Mar 31, 2009 4:25:14 PM EM Configuration Assistant, Version 11.1.0.5.0 Production Copyright (c) 2003, 2005, Oracle. All rights reserved. Enter the following information: Database SID: orcl11g Listener port number: 1521 Password for SYS user: Password for SYSMAN user: Do you wish to continue? [yes(Y)/no(N)]: y Mar 31, 2009 4:25:26 PM oracle.sysman.emcp.EMConfig perform INFO: This operation is being logged at /u01/app/oracle/cfgtoollogs/emca/ orcl11g/emca_2009_03_31_16_25_14.log. Mar 31, 2009 4:25:27 PM oracle.sysman.emcp.util.DBControlUtil stopOM S INFO: Stopping Database Control (this may take a while) ... Mar 31, 2009 4:25:31 PM oracle.sysman.emcp.EMReposConfig invoke INFO: Dropping the EM repository (this may take a while) ... Mar 31, 2009 4:29:17 PM oracle.sysman.emcp.EMReposConfig invoke INFO: Repository successfully dropped Enterprise Manager configuration completed successfully FINISHED EMCA at Mar 31, 2009 4:29:25 PM [oracle@ELinux ~]$ emca -config dbcontrol db -repos create Enter the following information: Database SID: ora11g Database Control is already configured for the database ora11g You have chosen to configure Database Control for managing the databa
  • 48. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice se ora11g This will remove the existing configuration and the default settings and pe rform a fresh configuration Do you wish to continue? [yes(Y)/no(N)]: y Listener port number: 1521 Password for SYS user: oracle Password for DBSNMP user: oracle Password for SYSMAN user: oracle Password for SYSMAN user: oracle Email address for notifications (optional): frank_shen@uuu.com.tw Outgoing Mail (SMTP) server for notifications (optional): mail.uuu.com.tw ----------------------------------------------------------------- You have specified the following settings Database ORACLE_HOME .............. /u01/app/oracle/product/11.1.0/db_1 Local hostname ................ elinux Listener port number ................ 1521 Database SID ................ ora11g Email address for notifications ............... frank_shen@uuu.com.tw Outgoing Mail (SMTP) server for notifications ............... mail.uuu.com.tw ----------------------------------------------------------------- Do you wish to continue? [yes(Y)/no(N)]: y --接著等待整個動作完成即可 ………………………………………………………………. The Database Control URL is https://elinux:5500/em --EM的URL *********************************************************** Enterprise Manager configuration completed successfully 4.7.5 使用資料庫建立輔助(DBCA)建立資料庫控制 DBCA 可以用來新增資料庫控制,只要選擇設定”Configure Database Options”即可。DBCA 自動會偵測資料庫中是否有資料庫控制存在,若沒 有資料庫控制存在,則會出現”Configure Enterprise Manager”的畫面, 按畫面說明一步一步設定即可完成資料庫控制新增操作。
  • 49. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice
  • 50. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice
  • 51. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice
  • 52. Chapter 5 Manual Create Database Oracle Database 11g Management Best Practice 結論 經過本章節的介紹,相信讀者對如何規劃、準備、建立資料庫,應該有著初 步的認識,接下來的章節將接續本章的內容,繼續為這個新建的資料庫添加 其他的儲存結構及綱要物件,如表格空間、使用者、表格、索引等,讓這個 資料庫更能符合應用程式的需求。