前言
前提和假設
如非特別說明,本規範敘述的產品特性、操作命令、用戶界面均基於Oracle
10G,可能有不適用於其它版本的情況。
預期讀者
項目基礎設施可行性研究、設計和實施人員,應用系統設計人員,相關運行維護技術人員。
數據庫規劃部署
數據庫類型特點分析
在創建和規劃一個Oracle數據庫之前,首要任務應確定將來投產的數據庫屬於何種業務類型。目前的應用業務有以下類型:
OLTP(Online Transaction Processing)
OLAP(Online Analytiacl Processing)
BATCH
DSS(Decision Support System)
Hybrid
OLTP(聯機事務處理)
OLTP系統是一個包含繁重及頻繁執行的DML應用,其面向事務的活動主要包括更新,同時也包括一些插入和刪除。經典的例子是預定系統或在線實時交易系統,例如網上銀行和ATM自動取款機系統。OLTP系統可以允許有很高的併發性(在這種情況下,高併發性通常表示許多用戶可以同時使用一個數據庫系統)。
OLAP(聯機分析處理)
OLAP系統可提供分析服務。這意味着數學、統計學、集合以及大量的計算,一個OLAP系統並不永遠適合OLTP或DSS模型,有時它是兩者之間的交叉。另外,也可以把OLAP看作是在OLTP系統或DSS之上的一個擴展或一個附加的功能層次。例如,地理信息系統或有關空間的數據庫和OLAP數據庫相集成,提供圖表的映射能力。用於社會統計的人口統計數據庫也是一個很好的例子。
BATCH(批處理系統)
批作業處理系統是作用於數據庫的非交互性的自動應用。它通常含有繁忙DML語句並有較低的併發性(在這種情況下,較低的併發性通常表示少數幾個用戶能夠同時使用一個數據庫系統),該業務系統會在某一時段,大批量數據(少則幾萬,多則幾十萬,幾百萬條數據)更新/插入/刪除該數據庫。事務查詢的比率決定了如何物理地設計它,經典的例子是與DW有關的成品數據庫和可操作數據庫,如:操作型數據存儲系統(ODS)。
DSS(決策支持系統)
DSS系統通常是一個大型的、包含歷史性內容的只讀數據庫,通常用於簡單的固定查詢或特別查詢。DSS常常按某種方式變成一個VLDB(Very
Large Database)或DW(Data
Warehouse)。VLDB的例子如:企業資源管理財務系統(ERP)數據庫,該數據庫是一個長期存儲數據庫的歷史數據庫;DW的例子如:整個集團的工資和人事數據庫。
Hybrid(混合類型系統)
同時數據庫系統的應用類型可能是OLTP、OLAP、BATCH等的混合體。也意味着同時擁有上述業務類型特徵,這就要求數據庫管理員、應用系統分析員、操作系統管理員整體統籌考慮各種業務性能需求及功能需求,對這個系統制定出滿足各種業務類型需求的規劃,如:企業客戶信息整合(ECIF)系統。
數據庫高可用模式
在Oracle 10g 第 1 版,Oracle 的集羣件產品可用於所有操作系統,成爲了 Oracle RAC
所需的集羣技術。隨着 Oracle 數據庫 10g 第 2 版 (10.2) 的發佈,Cluster Ready
Services 被重命名爲 Oracle Clusterware。如果使用 Oracle 10g 或更高版本,Oracle
Clusterware 是大多數運行 Oracle RAC 的平臺所需的唯一集羣件(不包括 Tru
集羣,在這種情況下,您需要供應商集羣件)。我們仍然可以使用其他供應商的集羣件(如果該集羣件通過了認證),但是請記住,**Oracle
RAC 仍然需要 Oracle Clusterware**,因爲它與數據庫軟件完全集成。
由於Oracle
RAC已經是成熟產品,安裝時都應選擇RAC模式,除非有特殊情況,可以採用HA模式。
安裝必要條件
參見文檔《169706.1》
網絡規劃原則
物理網卡需求
管理網絡:1個網卡
業務網絡:每個服務器2個網卡。需要爲業務網絡配置2*節點數量。業務網絡建議採用BONDING技術。每個業務網絡適配器**必須支持
TCP/IP**。
心跳網絡:每個服務器2個網卡。心跳網絡建議經過交換機互聯,不建議使用交叉線互聯。**對於心跳網絡應採用BONDING技術,互連必須支持用戶數據報協議
(UDP),**使用支持
TCP/IP的高速網絡適配器和交換機。UDP被用來RAC之間的通信,TCP被用來CLUSTER之間的通信。心跳網絡建議使用10G網絡,最小配置爲1G網絡。
每個網絡中網絡適配器的相關業務接口名稱在所有節點上都應相同,網絡適配器的相關心跳接口名稱在所有節點上都應相同。
所有的IP地址都應該是靜態配置,不應該是DHCP方式獲取。
**如果使用網卡綁定技術,不要使用模式3和
6,模式3會造成通信性能的下降,模式6會造成虛擬IP漂移時出現網絡問題。**
所用的網卡名稱不可以包含“.”;
在10g及其之前,我們必須使用IPv4協議。
主機名命名規則
RAC機器需要在/etc/hosts中配置各節點IP的別名,命名規則如下**(主機名中包含”_”是不被建議和支持的)**:
Public IP:如無特殊需求,建議使用dbxx的格式,其中xx爲主機序列號;
Private IP: 如無特殊需求,建議使用dbxx-pri的格式,其中xx爲主機序列號。
Virtual IP:如無特殊需求,建議使用dbxx-vip的格式,其中xx爲主機序列號。
監聽端口選擇
網絡監聽建議不要使用默認端口,該規範建議使用同一端口1815.
磁盤佈局原則
存儲類型選擇
建議選擇SAN存儲網絡,作爲共享存儲。
由於ORACLE數據庫需要確認對數據文件的寫操作已經完全寫入的磁盤,因此不建議使用NFS文件系統,除非NFS存儲廠商已經通過ORACLE認證(如REDHAT,NETAPP)。如果使用NFS,rsize和wsize至少爲16384,ORACLE
的建議指爲32768.
集羣設備不支持directnfs。
磁盤IO調度算法
對於數據庫系統建議使用Deadline調度算法。
Deadline調度算法對一個請求的多方面特性進行權衡來進行調度,以期即能滿足塊設備扇區的順尋訪問又兼顧到一個請求不會在隊列中等待太久導致餓死。Deadline調度算法爲了兼顧這兩個方面,引入了四個隊列,這四個隊列可分爲兩類,每一類都由讀和寫兩種隊列組成。一類隊列用來對請求按起始扇區序號進行排序,通過紅黑樹來組織,稱爲sort_list;另一類對請求按它們的生成時間進行排序,由鏈表來組織,稱爲fifo_list。
如果數據庫安裝在虛擬化環境下,建議使用noop調度算法,該算法利用少量的CPU資源進行基礎排序和整合操作。在虛擬化環境下,分爲主機系統和客戶機系統,應該使磁盤調度算法儘量在主機層面完成,因此我們建議在虛擬客戶機內使用noop調度算法。
RAID級別規劃
在數據庫服務器磁盤空間充分冗餘的條件下,Raid
(1+0)+HotSpare作爲優先第一配置選項;如果磁盤空間不是很充足,Raid
5作爲第二配置選項。
說明:
★越多表示在本組(Disk*N)範圍內推薦級別越高
Raid\磁盤 | Disk*2 | Disk*3 | Disk*4 | Disk*5 | Disk*6 | Disk*7 | Disk*8 | Disk*9 |
---|---|---|---|---|---|---|---|---|
Raid 1 | ★ | |||||||
Raid 1+HotSpare | ★★ | |||||||
Raid 5 | ★ | ★ | ★ | ★ | ★ | ★ | ★ | |
Raid 5+HotSpare | ★★ | ★★ | ★★ | ★★ | ★★ | ★★ | ||
Raid (1+0) | ★★★ | ★★★ | ★★★ | |||||
Raid (1+0)+HotSpare | ★★★ | ★★★ | ★★★ | |||||
Raid磁盤組往往會在多個物理磁盤之間對數據進行條帶化處理,例如,一般情況下條帶大小爲64K。當磁盤分區和條帶化大小可以對齊時,可以改善磁盤性能,尤其是在開啓了DIRECTIO特性數據庫系統下。
基於磁盤容量和條帶化對齊的考慮,我們建議使用parted工具進行磁盤分區。因爲fdisk工具默認情況下會分配前63個sector用於保存磁盤元數據分分區表數據,緊隨其後是分區數據,顯然此時分區不是從64k開始的,因爲每個sector的大小默認爲512字節。通過使用parted可以手工指定分區開始位置,因此我們建議使用如下方式進行分區
/sbin/parted /dev/mapper/asm1 mklabel msdos unit s mkpart primary “128 -1”
本地磁盤規劃
爲保證軟件安裝過程順利進行,需要保證本地磁盤具有足夠的存儲空間。具體要求如下:
本地磁盤空間需求 | |||
---|---|---|---|
序號 | 用途 | 目錄 | 大小 |
1 | CRS_HOME | /u01/app/ oracle/product/10.2.0/crs_1 | /u01 不小於10G,建議 > 50G 建議爲/u01創建單獨分區,不要使用LVM |
2 | ORACLE_HOME | /u01/app/ oracle/product/10.2.0/db_1 | |
3 | SOFTWARE_DIR | /u01/software | |
4 | 臨時目錄 | /tmp | 最小1G,建議10G |
共享磁盤規劃
Oracle
10g中引入了ASM技術,相對於裸設備ASM帶來了不少的管理便利性。如果安裝最新版本的ORACLE10GR2,建議可以使用ASM,如果是較早版本,可能會存在bug較多的情況。本文以ORACLE10GR2最新版本爲基礎,因此使用ASM作爲存儲文件系統。
雖然Oracle
10GR2支持使用O_DIRECT訪問塊設備,但是在安裝過程中使用塊設備OUI會報錯,需要使用RAW設備進行安裝,安裝完成後可以通過命令替換爲塊設備,詳細參加文檔《401132.1》。因此,我們建議:在10G中,表決盤等磁盤仍然使用裸設備,數據文件等使用ASM。使用ASM時,建議不要使用過多的磁盤組,通常爲數據文件創建磁盤組DATA1,爲閃回恢復期創建磁盤組FRA1。建議閃回區大小爲數據區大小的兩倍
不管採用何種技術,強烈建議對使用到的磁盤先分區在使用。
裸設備磁盤空間規劃
存儲組件 | 裸設備 | 建議大小 | 最小大小 | 存儲內容 | |
---|---|---|---|---|---|
VOTE1 | /dev/raw/raw1 | 300M | 280M | VOTEDISK | |
VOTE2 | /dev/raw/raw2 | 300M | 280M | VOTEDISK | |
VOTE3 | /dev/raw/raw3 | 300M | 280M | VOTEDISK | |
OCR1 | /dev/raw/raw4 | 300M | 280M | OCR | |
COR2 | /dev/raw/raw5 | 300M | 280M | OCR | |
ASM磁盤空間規劃 | |||||
存儲組件 | ASM卷組 | 卷大小 | 冗餘級別 | AU SIZE | 存儲內容 |
數據庫文件 | +DATA1 | EXTERNAL | DATAFILE LOG CONTROL OCR | ||
快速恢復區 | +FRA1 | EXTERNAL | ARCHIVELOG CONTROL OCR | ||
磁盤命名規劃 | |||||
存儲組件 | ASM卷組 | ASM_磁盤名 | DM多路徑 | UDEV設備 | ASMLIB設備 |
VOTE1 | RACVOTE1 | ORADISK/RACVOTE1 | RACVOTE1 | ||
VOTE2 | RACVOTE2 | ORADISK/RACVOTE2 | RACVOTE2 | ||
VOTE3 | RACVOTE3 | ORADISK/RACVOTE3 | RACVOTE3 | ||
OCR1 | RACOCR1 | ORADISK/RACOCR1 | RACOCR1 | ||
COR2 | RACOCR2 | ORADISK/RACOCR1 | RACOCR2 | ||
數據庫文件 | +DATA1 | DATA1P1 | RACDATA1 | ORADISK/RACDATA1 | RACDATA1 |
快速恢復區 | +FRA1 | DATA2P1 | RACDATA2 | ORADISK/RACDATA2 | RACDATA2 |
內存使用原則
ASM內存分配原則
由於ASM實例業務簡單,內存參數的設置值大於其所需內存空間的和,提供一定的備用內存,通常建議內存總大小爲256M。
該參數的設置需要考慮冗餘性配置和可用磁盤空間。
DB內存分配原則
ORACLE數據庫專用主機中內存使用包括:
SGA,共享內存全局區:數據庫一啓動就ORACLE就申請佔用,可以通過ipcs
-a查看其大小。查看SGA_MAX_SIZE參數可以得到其設置值。這部分內存在數據庫實例運行期間不會改變;PGA,進程全局區:查看PGA_AGGREGATE_TARGET可以得到其設置值。這部分內存並非一啓動就分配,而是隨着應用的使用變化而變化,有排序、並行、HASH
JOIN時會增大,甚至會突破設置值,而長時間不使用時又會返回給操作系統;連接到數據庫的每個TCP連接本身會佔用~左右內存。對於使用中間件共享連接池的應用,連接數基本固定,內存佔用也就固定;對於直接連接數據庫的應用,這部分內存佔用隨着數據庫session數的增減而增減;
操作系統自身內存的佔用,包括常用軟件的內存佔用。這部分佔用無法給出固定值,簡單計算可以按30%物理內存計算。
新系統性能測試時初始計劃內存分配辦法:總物理內存扣除連接數佔用的內存及操作系統、常用軟件佔用的內存之後,剩餘的內存按3:1的比例分配給數據庫的SGA、PGA,
也即SGA佔其中的3/4,PGA佔1/4。SGA中SHARED POOL分1/4(且不大於,不小於),DB
BUFFER和其他內存池共用其餘的1/2。
注意:
RAC系統中需要考慮節點故障時,單節點接過所有負載連接的情況,因此每節點內存需求量都按最大全部連接數考慮。
此處連接數佔用內存的估計都是按照上限值進行的估算,因此比較保守,也預留了日後擴展的需求。實際可連接數比上述數值要大。
交換空間分配原則
根據ORACLE官方文檔(Doc ID 225451.1),建議配置linux下SWAP空間遵循如下原則。
RHEL5 | ||
---|---|---|
Amount of RAM in the System | Recommended Amount of Swap Space | |
4GB of RAM or less | a minimum of 2GB of swap space | |
4GB to 16GB of RAM | a minimum of 4GB of swap space | |
16GB to 64GB of RAM | a minimum of 8GB of swap space | |
64GB to 256GB of RAM | a minimum of 16GB of swap space | |
256GB to 512GB of RAM | a minimum of 32GB of swap space | |
RHEL6 | ||
Amount of RAM in the System | Recommended swap space | Recommended swap space if allowing for hibernation |
⩽ 2GB | 2 times the amount of RAM | 3 times the amount of RAM |
> 2GB – 8GB | Equal to the amount of RAM | 2 times the amount of RAM |
> 8GB – 64GB | 0.5 times the amount of RAM | 1.5 times the amount of RAM |
> 64GB | 4GB of swap space | No extra space needed |
Hugepage使用原則
在 Linux 環境中實施 HugePage
能夠極大地提高內核性能。對於內存較大的系統,效果尤其明顯。一般而言,**所有 RAM
大於 12GB或者SGA空間超過8G的系統都適合使用 Hugepage**。系統中的 RAM
越大,系統啓用 Hugepage
後獲得的好處也越大。這是因爲內核爲映射和維護內存頁表所要做的工作量會隨着系統內存的增大而增加。啓用
Hugepage
能夠顯著地降低內核要管理的頁面數,而且能提高系統的效率。經驗表明,如果未啓用
Hugepage,內核擠佔關鍵的 Oracle Clusterware 或 Real Application Clusters
守護進程的情況會很常見,而這會導致實例或節點驅逐出現。
對於ASM實例可以不使用Hugepage技術。
Linux信號量設置
可以將Semaphores理解爲計數器,該計數器用於進程或者線程之間對共享資源的訪問同步。根據ORACLE文檔《184821.1》,對ORACLE數據庫系統的信號量設置,遵循如下計算方法:
信號量設置 | ||
---|---|---|
SEMMNI | 128 | Maximum number of semaphore sets in the entire system. |
SEMMSL | 250 | Minimum recommended value. SEMMSL should be 10 plus the largest PROCESSES parameter of any Oracle database on the system. |
SEMMNS | 32000 | Maximum semaphores on the system. This setting is a minimum recommended value. SEMMNS should be set to the sum of the PROCESSES parameter for each Oracle database, add the largest one twice, plus add an additional 10 for each database. This value shoud be equal (SEMMSL*SEMMNI) |
SEMOPM | 100 | Maximum number of operations per semop call.SEMOPM should be equal SEMMSL |
數據庫選項規劃
隨着Oracle數據庫版本的不斷升級,Oracle的功能也越來越多,因此安全檢查點也越來越多。因此最好根據需求只安裝所需內容。如:不需要web
功能,就不要安裝相應組件。
在安裝數據庫軟件時,定製安裝並僅選擇如下組件:
Oracle Database
Enterprise Edition options
Oracle partitioning
Oracle Net Services
Oracle Net Listeners
Oracle Call Interface(OCI)
對如下組件,除非開發中心有特殊需求,否則不安裝:
Advanced Security
OLAP
Spatial
Oracle Enterprise Manager Console DB
Programmer
XML Development
利用dbca創建數據庫時,在advance
component選項頁中,點擊解除對其中所有選項的選中,包括JVM、SPATIAL、XDB,除非開發中心有特殊需求
數據庫物理結構規劃
數據庫實例的命名規則
普通使用模式的Oracle數據庫的服務名和實例名(SID)是相同的;RAC模式下的Oracle數據庫的服務名與實例名不同。
數據庫服務名的命名格式爲:XXXXYY{m},不得超過8個字符
數據庫的SID的命名格式爲:XXXXYY{m}{n}
說明:
其中XXXX表示長度爲4個字符的應用項目縮寫;
YY:代表數據庫用途,pd代表生產庫,hi代表歷史庫,rp代表報表庫,cf代表配置庫,st代表Standby災備庫,其他可自行定義,不得超過2個字符;
m表示數據庫序號,從0-9,根據項目的數據庫數量進行編號;
n表示RAC節點實例序號1,2,3……。用以區分多節點的RAC數據庫的不同實例。對於普通模式的數據庫,該位不指定。
表空間設計
生產數據庫不得有如TOOLS、XDB、EXAMPLE等oracle默認安裝表空間。本文推薦使用ASM,不得使用文件系統和裸設備。
數據文件使用固定大小,不得設置爲自動擴展,自動擴展語句會造成數據文件的自動增長,在使用ASM的情況下可能造成ASM系統無空閒空間。
數據庫管理員必須使用本地管理中的自動分配(Autoallocate)的方式創建表空間,Segment的管理使用ASSM方式。默認Storage設置Minextents爲1M。
OLTP系統:每個數據文件最大不超過(Oracle理論上限:BLOCK_SIZE爲8K時,數據文件最大,16K爲,32K爲),超過的表空間擴容需要新增數據文件,不足的表空間擴容可以直接resize增大數據文件大小。
OLAP系統:由於數據量大,空間需求多,單個數據文件的大小允許設置爲。如果單個表空間預期大小超過2T,可以直接使用BigFile表空間。此時該表空間只能有一個文件,需要增加表空間大小時,直接resize文件大小即可,該文件的最大大小可達到32T(8k
Blocks)、64T(16k Blocks)、128T(32k Blocks)。
Undo/temp表空間的估算
Undo設置原則:oracle9i以後的版本,推薦使用UNDO
TABLESPACE,讓系統自動管理回滾段。須考慮以下幾個問題:
系統併發事務數有多少?
系統是否存在大查詢或者大是事務?頻繁與否?
能提供給系統的回滾段表空間的磁盤空間是多少?
UNDO表空間初始設置不小於,SGA_MAX_SIZE大於的,至少爲SGA_MAX_SIZE*1.2。
Temp設置原則:可創建缺省臨時表空間TEMP,取數據庫的缺省參數。業務用戶默認使用的TEMP表空間初始設置爲總空間的5%,且不小於,通常不大於。
控制文件設計
每個數據庫實例應至少有兩個控制文件,且每個文件存儲在獨立的物理磁盤上。如果有一個磁盤失效而導致控制文件不可用,與其相關的數據庫實例必須關閉。一旦失效的磁盤得到修復,可以把保存在另一磁盤上的控制文件複製到該盤上。這樣數據庫實例可重新啓動。並通過非介質恢復操作使數據庫得到恢復。
爲了使整個系統的高可靠地運行,要求至少設置3個控制文件。
日誌文件設計
重做日誌文件的尺寸會對數據庫的性能產生重要影響,因爲它的尺寸大小決定着數據庫的寫進程(DBWn)和日誌歸檔進程(ARCn)。一般情況下,較大的日誌文件提供較好的數據庫性能,較小的重做日誌文件會增加覈查點(checkpoint)的活動,從而導致性能的降低。當然爲了防止I/O爭用,還應把各個重做日誌文件分佈到不同的物理磁盤上。
不可能爲重做日誌文件提供特定大小的建議,重做日誌文件在幾百兆字節到幾GB字節都被認爲是合理的。欲確定數據庫重做日誌文件的大小,應根據該系統產生重做日誌的數量,並依據每二十分鐘發生一次日誌切換這個大致原則來決定,業務高峯時段,日誌切換頻率不高於五分鐘一次。在系統運行後,我們從alert文件獲取日誌的切換時間,並根據切換的間隔來調整重組日誌的大小。
歸檔日誌
Oracle可以將聯機日誌文件保存到多個不同的位置,將聯機日誌轉換爲歸檔日誌的過程稱之爲歸檔,相應的日誌被稱爲歸檔日誌。歸檔日誌(archivelog
)文件存儲方法:
放在ASM單獨的磁盤組+FRA1,獨立於+DATA1磁盤組。對RAC系統來說,各自實例使用相同的ASM磁盤組,方便RMAN進行歸檔日誌備份。
要求歸檔日誌的ARCH磁盤組大小可以保證容納2天產生的歸檔日誌。
安裝先決條件準備
檢查操作系統兼容性
ORACLE 10g操作系統認證列表 |
---|
./media/image1.png |
如果使用EL4系列的操作系統,建議升級到4.7之後,以避免如下bug:6116137、6125546、5041764、5136660等。
檢查集羣軟件兼容性
ORACLE 10g RAC 認證列表 |
---|
./media/image2.png |
用戶及組
執行以下過程,驗證在安裝節點上存在用戶
nobody,nobody用戶會用於執行oracle的某些任務:
[root\@localhost \~]# id nobody
uid=99(nobody) gid=99(nobody) 組=99(nobody)
如果該命令顯示了 nobody 用戶的信息。如果用戶 nobody
不存在,則輸入以下命令進行創建:[root\@localhost \~]# useradd -M -u 99 -g nobody -s /sbin/nologin nobody
創建Oracle用戶,命令如下:
groupadd -g 1000 oinstall
groupadd -g 1300 dba
groupadd -g 1301 oper
useradd -m -u 1100 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash
oracle
設置 Oracle 帳戶的口令:
echo oracle | passwd –stdin oracle
配置HugePage
配置/etc/security/limits.conf,設置memlock值(KB),該值可略小於物理內存。重啓系統後配置生效。
cat > /tmp/limits.sh \< \< EOF
#!/bin/bash
memtotal_kb=`grep ‘MemTotal’ /proc/meminfo | awk ‘{print \$2 }’`
#the total amount of memory pages that can be used system wide,in pages
memlock=\$(( \$memtotal_kb * 4 / 5 ))
softml=\`grep -v “\^#” /etc/security/limits.conf | grep “memlock” |
grep “soft” | wc -c\`hardml=\`grep -v “\^#” /etc/security/limits.conf | grep “memlock” |
grep “hard” | wc -c\`if [ \$softml != 0 ]
then
sed -i “s/.*soft.*memlock.*/\* soft memlock \$memlock/”
/etc/security/limits.confelse
echo “* soft memlock \$memlock” > > /etc/security/limits.conf
fi
if [ \$hardml != 0 ]
then
sed -i “s/.*hard.*memlock.*/\* hard memlock \$memlock/”
/etc/security/limits.confelse
echo “* hard memlock \$memlock” > > /etc/security/limits.conf
fi
EOF
使用oracle用戶通過如下命令查看,配置是否生效。
ulimit –l
配置/etc/sysctl.conf,修改vm.nr_hugepages參數值爲SGA/hugepagesize+4。hugepagesize在linux下默認爲2M。
在kernel2.4下,需要使用參數vm.hugetlb_pool。
查看transparent_hugepage是否啓用,如果目錄不存在或者返回結果爲never,則表示transparent_hugepage沒有啓用,否則我們需要禁用transparent_hugepage。
cat /sys/kernel/mm/transparent_hugepage/enabled
修改/etc/grub.conf在kenel後添加如下選項transparent_hugepage=never,以禁用transparent_hugepage。
對於RHEL7如果上述方法行不通,可以在/usr/lib/tuned/throughput-performance/tuned.conf文件中添加如下選項來禁用transparent_hugepage.
[vm]
transparent_hugepage=never
配置臨時目錄/TMP
Oracle的安裝要求/tmp目錄至少有400MB以上的空餘空間,安裝RAC時,臨時目錄不可以使用共享目錄。可以用以下語句檢查/tmp目錄的空間:
# df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda2 113836004 40094512 67958896 38% /
如果沒發現/tmp目錄沒有足夠的空間了,可以在另外創建一個目錄,並修改ORACLE的環境變量,方法如下:
su - root
mkdir /u01/tmp
chown root.root /u01/tmp
chmod 777 /u01/tmp
export TEMP=/u01/tmp # used by Oracle
export TMPDIR=/u01/tmp # used by Linux programs like the linker “ld”
當完成了Oracle安裝後,可以先關閉Oracle服務器,然後移除剛纔創建的目錄,並復位相關環境變量。
su - root
rmdir /u01/tmp
unset TEMP
unset TMPDIR
配置SWAP
根據交換空間分配原則,檢查當前系統的SWAP空間分配是否合理。
檢查系統內存:
# grep MemTotal /proc/meminfo
MemTotal: 511940 kB (1034688 kB=1G)
檢查系統交換區:
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 256584 -1
如果發現交換空間太小,可以有兩種方式增加交換區,一種是採用文件方式,一種是採用新建分區的方式。
使用文件增加交換區:
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 256584 -1
# dd if=/dev/zero of=tmpswap bs=1k count=524288
524288+0 records in
524288+0 records out
# chmod 600 tmpswap
# mkswap tmpswap
Setting up swapspace version 1, size = 536866 kB
# swapon tmpswap
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 263628 -1
/tmpswap file 524280 0 -2
# 刪除交換區:
# swapoff tmpswap
# rm -f tmpswap
# cat /proc/swaps
Filename Type Size Used Priority
/dev/hda3 partition 1044216 263624 -1
配置內核參數
cat > /tmp/sysctl.sh \< \< EOF
#!/bin/bash
function setSysCtl(){
echo “set sysctl variable: ” \$1,”to: ” \$2
ccnt=\`grep -v “\^#” /etc/sysctl.conf | grep “\$1” | wc -c\`
if [ \$ccnt != 0 ]
then
sed -i “s/[\^#]*\$1.*/\$1=\$2/” /etc/sysctl.conf
else
echo “\$1=\$2” > > /etc/sysctl.conf
fi
}
pagesize=\`getconf PAGE_SIZE\`
memtotal_kb=\`grep ‘MemTotal’ /proc/meminfo | awk ‘{print \$2 }’\`
memtotal=\$(( 1024 * \$memtotal_kb ))
shmmni=4096
#the total amount of memory pages that can be used system wide,in pages
shmall=\$(( \$memtotal * 3 / 5 / \$pagesize ))
if [ \$shmall -lt 2097152 ]
then
shmall=2097152
fi
#the maximum shared memory segment allowed by the kernel,in bytes
shmmax=\$(( \$shmall * \$pagesize ))
setSysCtl “kernel.shmmax” “\$shmmax”
setSysCtl “kernel.shmall” “\$shmall”
setSysCtl “kernel.shmmni” “\$shmmni”
echo “Please input the processes count:”
read process
SEMMNI=142
SEMMSL=\$(( \$process + 10 ))
if [ \$SEMMSL -lt 250 ]
then
SEMMSL=250
fi
SEMMNS=\$(( \$SEMMNI * \$SEMMSL ))
SEMOPM=\$SEMMSL
setSysCtl “kernel.sem” “\$SEMMSL \$SEMMNS \$SEMOPM \$SEMMNI”
setSysCtl “fs.aio-max-nr” “1048576”
setSysCtl “fs.file-max” “6815744”
setSysCtl “net.core.wmem_max” “1048576”
setSysCtl “net.core.wmem_default” “262144”
setSysCtl “net.core.rmem_max” “2097152”
setSysCtl “net.core.rmem_default” “262144”
setSysCtl “net.ipv4.tcp_rmem” “4096 262144 4194304”
setSysCtl “net.ipv4.tcp_wmem” “4096 262144 262144”
setSysCtl “net.ipv4.tcp_keepalive_time” “30”
setSysCtl “net.ipv4.tcp_keepalive_intvl” “60”
setSysCtl “net.ipv4.tcp_keepalive_probes” “9”
setSysCtl “net.ipv4.tcp_retries2” “3”
setSysCtl “net.ipv4.tcp_syn_retries” “2”
setSysCtl “net.ipv4.ip_local_port_range” “9000 65500”
setSysCtl “net.ipv4.conf.default.rp_filter” “2”
setSysCtl “kernel.randomize_va_space” “0”
setSysCtl “kernel.exec-shield” “0”
setSysCtl “vm.min_free_kbytes” “524288”
setSysCtl “fs.suid_dumpable” “1”
setSysCtl “kernel.core_uses_pid” “1”
setSysCtl “net.ipv4.icmp_echo_ignore_broadcasts” “0”
setSysCtl “vm.swappiness” “0”
setSysCtl “vm.dirty_background_ratio” “3”
setSysCtl “vm.dirty_ratio” “15”
setSysCtl “vm.dirty_expire_centisecs” “500”
setSysCtl “vm.dirty_writeback_centisecs” “100”
setSysCtl “vm.hugetlb_shm_group” “1000”
EOF
配置Core File Creation
修改/etc/profile文件添加如下內容
cat > > /etc/profile \< \< EOF
if [ \$USER = “oracle” ]; then
ulimit -S -c unlimited > /dev/null 2 > &1
fi
EOF
配置PAM
修改/etc/pam.d/login 文件中添加或編輯下面一行內容(如果不存在此行):
cat > > /etc/pam.d/login \< \< EOF
session required pam_limits.so
EOF
如果是64爲系統,則
cat > > /etc/pam.d/login \< \< EOF
session required /lib64/security/pam_limits.so
EOF
修改SELINUX
sed -i ‘s#=enforcing#=disabled#g’ /etc/selinux/config
安裝軟件包
將操作系統的安裝鏡像文件上傳到服務器的/mnt目錄下,修改鏡像文件名稱爲linux.iso。在/mnt目錄下創建文件夾linux,並掛載linux.iso至linux目錄
mv *.iso linux.iso
mkdir /mnt/linux
mount -t iso9660 /mnt/linux.iso /mnt/linux -o loop
修改yum配置文件,進入如下目錄/etc/yum.repos.d,在該目錄創建文件夾bak,將所有的.repo文件移動到bak文件夾下。
cd /etc/yum.repos.d
mkdir bak
mv *.repo ./bak/
創建local.repo文件。
cd /etc/yum.repos.d
touch local.repo
cat > > /etc/yum.repos.d/local.repo \< \< EOF
[local]
name=local
baseurl=file:///mnt/linux
enable=1
gpgcheck=0
EOF
使用如下命令安裝所需的軟件包,glibc必須要2.5-24版本或以上
yum install autoconf -y
yum install binutils.x86_64 -y
yum install compat-db.x86_64 -y
yum install compat-gcc-34-c++ -y
yum install compat-gcc-34.x86_64 -y
yum install compat-libstdc++-296.i386 -y
yum install compat-libstdc++-33.i386 -y
yum install compat-libstdc++-33.x86_64 -y
yum install elfutils-libelf-devel.x86_64 -y
yum install elfutils-libelf.x86_64 -y
yum install gcc-c++.x86_64 -y
yum install gcc.x86_64 -y
yum install gdb -y
yum install gdbm -y
yum install glibc-common.x86_64 -y
yum install glibc-devel.i386 -y
yum install glibc-devel.x86_64 -y
yum install glibc-headers.x86_64 -y
yum install glibc.x86_64 -y
yum install glibc.i686 -y
yum install libaio-devel.x86_64 -y
yum install libaio.x86_64 -y
yum install libaio.i386 -y
yum install libgcc.x86_64 -y
yum install libgcc.i386 -y
yum install libgomp.x86_64 -y
yum install libstdc++.x86_64 -y
yum install libstdc++-devel.x86_64 -y
yum install libXp.x86_64 -y
yum install libXp.i386 -y
yum install libXtst.i386 -y
yum install make -y
yum install libgnome.x86_64 -y
yum install libgnomeui.x86_64 -y
yum install openmotif -y
yum install openssl.i686 -y
yum install openssh-clients -y
yum install openssh -y
yum install pdksh -y
yum install screen -y
yum install setarch -y
yum install sysstat.x86_64 -y
yum install unixODBC -y
yum install unixODBC-devel -y
yum install unixODBC.i386 -y
yum install unixODBC-devel.i386 -y
yum install unzip -y
yum install util-linux.x86_64 -y
yum install vim-enhanced -y
yum install xdpyinfo -y
yum install xorg-x11-server-Xorg -y
yum install xorg-x11-xinit -y
以下爲圖形界面,視情況進行安裝
yum install vnc -y
yum install vnc-server -y
yum groupinstall “X Window System” -y
yum groupinstall “GNOME Desktop Environment” -y
關閉相關服務
service iptables stop
service ip6tables stop
service NetworkManager stop
service atd stop
service lvm2-monitor stop
service cups stop
service mdmonitor stop
service autofs stop
service cpuspeed stop
service kdump stop
service nfs stop
service nfslock stop
service netfs stop
service bluetooth stop
service iscsi stop
service iscsid stop
service libvirt-guests stop
service libvirtd stop
service rpcbind stop
service acpid stop
chkconfig anacron off
chkconfig apmd off
chkconfig atd off
chkconfig autofs off
chkconfig bluetooth off
chkconfig cpuspeed off
chkconfig cups-config-daemon off
chkconfig cups off
chkconfig gpm off
chkconfig haldaemon off
chkconfig iiim off
chkconfig ip6tables off
chkconfig iptables off
chkconfig iscsi off
chkconfig iscsid off
chkconfig isdn off
chkconfig kdump off
chkconfig libvirt-guests off
chkconfig libvirtd off
chkconfig lvm2-monitor off
chkconfig mdmonitor off
chkconfig netfs off
chkconfig NetworkManager off
chkconfig nfs off
chkconfig nfslock off
chkconfig pcmcia off
chkconfig portmap off
chkconfig readahead off
chkconfig readahead_early off
chkconfig rhnsd off
chkconfig rpcbind off
chkconfig rpcgssd off
chkconfig rpcidmapd off
chkconfig smartd off
chkconfig avahi-daemon off
修改運行級別
sed -i ‘s#id:5:initdefault#id:3:initdefault#g’ /etc/inittab
HangCheck模塊
Oracle9202以前,都是使用watchdog來檢查系統是否掛起。從9202以後,oracle使用hangcheck-timer模塊。hangcheck-timer模塊被加載到內核中,能夠定時檢查系統是否掛起。
使用如下命令檢查該模塊是否存在:
find /lib/modules -name “hangcheck-timer.ko”
使用相應的參數加載該模塊:
/sbin/insmod hangcheck-timer hangcheck_tick=1 hangcheck_margin=10
hangcheck_reboot=1
兩個參數的含義:
hangcheck_tick:該參數定義了模塊啓動的間隔時段。其默認值爲60秒。Oracle建議將其設置爲1秒。
hangcheck_margin:該參數定義了多少時間以後系統沒響應就認爲是掛起。以秒爲單位。其默認值爲180秒。Oracle建議將其設置爲10秒。
hangcheck_reboot:該參數定義hangcheck模塊是否會重啓操作系統,建議設置爲1,即可以重啓操作系統。
檢查該模塊是否被成功加載:
grep Hangcheck /var/log/messages
爲了在linux重啓以後,自動加載該模塊,可以將加載模塊的命令添加到/etc/modules.conf中
cat > > /etc/rc.local \< \< EOF
/sbin/modprobe hangcheck-timer hangcheck_tick=1 hangcheck_margin=10
hangcheck_reboot=1EOF
配置用戶shell limits
cat > > /etc/security/limits.conf \< \< EOF
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
EOF
對於 Bourne、Bash 或 Korn shell,將以下行添加到 /etc/profile 文件:
cat > > /etc/profile \< \< EOF
if [ \$USER = “oracle” ]; then
if [ \$SHELL = “/bin/ksh” ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
EOF
對於 C shell(csh 或 tcsh),將以下行添加到 /etc/csh.login 文件:
if($USER==”oracle”) then
limit maxproc 16384
limit descriptors 65536
endif
配置Oracle Profile
cat > /home/oracle/.bash_profile \< \< EOF
# .bash_profile
# Get the aliases and functions
if [ -f \~/.bashrc ]; then
. \~/.bashrc
fi
alias ls=”ls -FA”
ORACLE_SID=ORCL1; export ORACLE_SID
ORACLE_UNQNAME=ORCL; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=\$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
# do not use ORA_CRS_HOME,some error will happed!!!
CRS_HOME=\$ORACLE_BASE/product/10.2.0/crs_1; export CRS_HOME
ORACLE_PATH=/u01/app/common/oracle/sql; export ORACLE_PATH
ORACLE_TERM=xterm; export ORACLE_TERM
NLS_DATE_FORMAT=”YYYY-MM-DD HH24:MI:SS”; export NLS_DATE_FORMAT
TNS_ADMIN=\$ORACLE_HOME/network/admin; export TNS_ADMIN
PATH=\$ORACLE_HOME/bin:\$CRS_HOME/bin:\${PATH}
PATH=\${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=\${PATH}:/u01/app/common/oracle/bin
export PATH
export TEMP=/tmp
export TMPDIR=/tmp
umask 022
# User specific environment and startup programs
EOF
在Oracle RAC 軟件的安裝過程中,OUI 使用 SSH
運行命令並將文件複製到其他節點。在安裝過程中,系統中的隱藏文件(例如 .bashrc 或
.cshrc)如果包含 stty 命令,則會導致生成文件錯誤和其他安裝錯誤。
要避免該問題,必須在每個 Oracle 安裝所有者的用戶主目錄中修改這些文件以取消所有
STDERR 輸出,如下所示:
cat > > /home/oracle/.bash_profile \< \< EOF
if [ -t 0 ]; then
stty intr \^C
fi
EOF
FOR C SHELL
test -t 0
if ($status == 0) then
stty intr \^C
endif
配置JUMBO FRAMES
如果主機和交換機支持jumbo frames,我們建議開啓jumbo
frames,這樣可以改善網絡負載並降低cpu利用率。如果需要開啓網卡的jumbo
frame,修改網卡的配置文件如/etc/sysconfig/network-scripts/ifcfg-eth0,增添如下配置參數
MTU=9000
配置ETH1000網卡
在2.6內核下,REDHAT4\REHDAT5系統中,Eth1000網卡默認沒有開啓FLOW
CONTROL。當RAC環境下的網絡負載較高時,容易造成INTERCONNECTS丟包。開啓FLOW
CONTROL的方法如下。
修改/etc/modprobe.conf添加如下內容:
options e1000 FlowControl=1,1
配置網絡IP
配置IP地址,修改每個節點上的/etc/hosts文件,確保 /etc/hosts
文件的環回地址中不包含節點名。如果 RAC 節點名出現在環回地址中,您在 RAC
安裝期間將收到以下錯誤消息:
ORA-00603: ORACLE server session terminated by fatal error
或者
ORA-29702: error occurred in Cluster Group Service operation
127.0.0.1 localhost.localdomain localhost
10.255.254.121 db01
10.255.254.122 db02
10.255.254.123 db01-vip
10.255.254.124 db02-vip
192.168.1.121 db01-pri
192.168.1.122 db02-pri
修改主機名:
hostname db01
sed -i ‘s#HOSTNAME=.*#HOSTNAME=db01#g’ /etc/sysconfig/network
echo “NOZEROCONF=YES” > > /etc/sysconfig/network
hostname db02
sed -i ‘s#HOSTNAME=.*#HOSTNAME=db03#g’ /etc/sysconfig/network
echo “NOZEROCONF=YES” > > /etc/sysconfig/network
配置SSH對等性
使用如下語句配置SSH對等性,注意要逐行拷貝,不要一次性拷貝。配置完成後要進行測試。
su - oracle
/usr/bin/ssh-keygen -t dsa
cat \~/.ssh/id_dsa.pub > \~/.ssh/authorized_keys
ssh oracle\@db01 cat \~/.ssh/id_dsa.pub > > \~/.ssh/authorized_keys
chmod 644 \~/.ssh/authorized_keys
/usr/bin/ssh-keygen -t dsa
cat \~/.ssh/id_dsa.pub > \~/.ssh/authorized_keys
ssh oracle\@db02 cat \~/.ssh/id_dsa.pub > > \~/.ssh/authorized_keys
chmod 644 \~/.ssh/authorized_keys
要確保未啓用 X11 forwarding, 如果看到類似這樣的消息:“Warning:No xauth
data; using fake authentication data for X11
forwarding.”,這意味着您的授權密鑰文件配置正確,但是,您的SSH 配置啓用了 X11
forwarding。
確保 ForwardX11 屬性設爲 no。例如,將以下內容插入 \~/.ssh/config 文件:
Host *
ForwardX11 no
如果我們在配置SSH對等性的過程中輸入了密碼,則可以通過如下方式配置無密碼登陸。
# exec /usr/bin/ssh-agent $SHELL
# ssh-add
Enter passphrase for /home/crs/.ssh/id_rsa
Identity added: /home/crs/.ssh/id_rsa (/home/crs/.ssh/id_rsa)
配置DNS
當需要使用DNS 服務器時,在/etc/resolv.conf添加DNS服務器的信息。
[root\@localhost \~]# cat /etc/resolv.conf
nameserver 114.114.114.114
options timeout:1
options attempts:2
配置NTP服務
安裝ntp軟件包,並配置服務自啓動。
yum install ntp
chkconfig ntpd on
編輯首節點的ntp.conf文件,使其從外部獲取系統時間.
vi /etc/ntp.conf
#New ntp server added by Robinson
server 1.cn.pool.ntp.org prefer # 添加首選的時鐘服務器
#只允許192.168.7.*網段的客戶機進行時間同步
restrict 192.168.7.0 mask 255.255.255.255 nomodify notrap
broadcastdelay 0.008
編輯其他節點的ntp.conf文件,使其從首節點獲取系統時間.
vi /etc/ntp.conf
#New ntp server added by Robinson
server 10.201.5.201 prefer
broadcastdelay 0.008
編輯節點的/etc/sysconfig/ntpd文件,配置參數如下,在其中設置 -x
標誌,這樣可避免向後調整時間。
#The following item added by Robinson
#Set to ‘yes’ to sycn hw clock after successful ntpdate
SYNC_HWCLOCK=yes #此選項用於自動校準系統時鐘與硬件時鐘
OPTIONS=”-x -u ntp:ntp -p /var/run/ntpd.pid”
節點間必須具有至少一個相同ntp ip,否則PRVF-5416,但是我們可以忽略該錯誤。
在首節點配置rc.local腳本,使其在啓動時使用ntpdate更新時間,通過ntpd獲取時間信息,有時會有延時。
創建軟件目錄
Grid的home目錄不能在base目錄下,oracle的home必須在base目錄下,否則會報INS-32018錯誤。
mkdir -p /u01/backup
mkdir -p /u01/software
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oracle/admin
mkdir -p /u01/app/oracle/product/10.2.0/db_1
mkdir -p /u01/app/oracle/product/10.2.0/crs_1
chown -R oracle:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chmod -R 755 /u01/
chmod -R 775 /u01/software/
虛擬化環下中斷設置
默認情況下,在rhel4和rhel5中,時鐘中斷頻率爲1000HZ,在虛擬化環境下,該頻率可能過高,因此,我們建議將其調低,設置方法如下:
在32位系統下,修改grub.conf,添加如下內核設置
divider=10 clocksource=acpi_ppm iommu=soft
在64位系統下,修改grub.conf,添加如下內核設置
divider=10 notsc iommu=soft
設置完成後,時間中斷頻率爲1000/10,即100Hz。
配置磁盤調度算法
Deadline磁盤調度算法比較適合於ORACLE\RAC
MYSQL等數據庫類應用。配置Deadline爲linux默認磁盤調度算法,需要修改grud.conf文件,添加內核參數如下:
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/sda2 elevator=deadline
initrd /initrd-2.6.18-8.el5.img
在虛擬化環境下,配置noop爲linux默認磁盤調度算法,需要修改grud.conf文件,添加內核參數如下:
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/sda2 elevator=noop
initrd /initrd-2.6.18-8.el5.img
配置ISCSI存儲
在集羣中的各個節點上配置 iSCSI 啓動器。而創建分區只應在 RAC
集羣的一個節點上執行。 Linux 包括 Open-iSCSI iSCSI 軟件啓動器,該軟件啓動器位於
iscsi-initiator-utils RPM 中。
安裝 iSCSI(啓動器)服務
查看iscsi-initiator-utils是否安裝。
rpm -qa –queryformat “%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n”| grep
iscsi-initiator-utils
如果沒裝安裝,則在系統盤中,找到軟件包並安裝。
rpm -Uvh iscsi-initiator-utils-*
配置 iSCSI(啓動器)服務
驗證 iscsi-initiator-utils 程序包已經安裝到Oracle RAC 節點之後,啓動 iscsid
服務,並使其在系統引導時自動啓動並自動登錄到所需的 iSCSI 目標。
service iscsid start
chkconfig iscsid on
chkconfig iscsi on
使用 iscsiadm 命令行接口發現網絡存儲服務器上的所有可用目標。這應該在所有Oracle
RAC 節點上執行:
[root\@danode1 \~]#iscsiadm -m discovery -t sendtargets -p 192.168.1.199
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data
172.16.1.241:3260,0 iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra
手動登錄到 iSCSI 目標,這需要在所有Oracle RAC 節點上運行。
[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs -p 172.16.1.241 -l[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data -p 172.16.1.241 -l[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra -p 172.16.1.241 -l
配置自動登錄,在所有 Oracle RAC 節點上執行以下命令:
[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-crs -p 172.16.1.241 –op update
-n node.startup -v automatic[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-data -p 172.16.1.241 –op update
-n node.startup -v automatic[root\@danode1 \~]# iscsiadm -m node -T
iqn.2000-03.com.h3c-.YZBackup-1-SCU1.darac-fra -p 172.16.1.241 –op update
-n node.startup -v automatic
如果在ISCSI
SERVER上啓用Failover的話,注意要在rac節點中修改幾個參數。設置超時時間,編輯/etc/iscsi.conf文件,在添加DiscoveryAddress之前添加如下2行:
IdleTimeout=20
ConnFailTimeout=300
DiscoveryAddress=172.16.1.241
配置scsi_id.config
查看/etc/scsi_id.config文件,確保文件中至少包含如下內容,以便scsi_id命令按照預期結果執行。
[root\@localhost \~]# grep -v \^# /etc/scsi_id.config
vendor=”ATA”,options=-p 0x80
options= -g
配置MULTIPATH多路徑
通過yum功能安裝一下軟件包:
yum -y install device-mapper device-mapper-multipath
通過命令:lsmod | grep dm_multipath 檢查是否正常安裝成功。
使用如下命令加載驅動模塊
modprobe dm-multipath
modprobe dm-round-robin
multipath –v2
通過vi命令創建一個Multipath的配置文件路徑是/etc/multipath.conf
,在配置文件中添加multipath正常工作的最簡配置如下(RHEL5下,通過multipath.conf可以直接配置多路徑權限,需要重啓操作系統):
devices {
device {
vendor “(LSI|NETAPP)”
product “INF-01-00”
path_grouping_policy group_by_prio
detect_prio yes
prio rdac
path_checker rdac
hardware_handler “1 rdac”
failback manual
features “2 pg_init_retries 50”
no_path_retry fail
retain_attached_hw_handler yes
}
}
blacklist {
devnode “\^(ram|raw|loop|fd|md|dm-|sr|sr|scd|st)[0-9]*”
devnode “\^hd[a-z]”
devnode “\^asm/*”
devnode “ofsctl”
}
multipaths {
multipath {
wwid 360080e500032a3680000051e58b64b6a
alias RACOCR1
gid 1000
uid 0
mode 644
}
}
磁盤分區
/sbin/parted /dev/mapper/RACDATA1 mklabel gtk unit s mkpart primary “128 -1”
裸設備配置
在RHEL5U4之前,linux不建議使用裸設備,因此需要我們手工在rc.local中配置裸設備和其權限。在RHEL5U4之後,LINUX可以支持使用RAWSERVICE服務配置裸設備。可以使用如下腳本配置裸設備:
cat > > /etc/sysconfig/rawdevices \< \< EOF
/dev/raw/raw1 /dev/mapper/RACVOTE1p1
/dev/raw/raw2 /dev/mapper/RACVOTE2p1
/dev/raw/raw3 /dev/mapper/RACVOTE3p1
/dev/raw/raw4 /dev/mapper/RACOCR1p1
/dev/raw/raw5 /dev/mapper/RACOCR2p1
EOF
chkconfig rawdevices on
service rawdevices restart
配置UDEV
不同版本的操作系統,UDEV的配置方式會略有差異,本文建議使用RHEL5系列的操作系統,如果使用RHEL4系列操作系統,可以參照ORACLE
9I中關於udev的配置。
建議使用udev+asm來配置oracle rac的存儲,首先確定安裝了udev軟件包:
rpm -qa | grep udev
udev-095-14.32.el5
使用scsi_id命令查看磁盤屬性
[root\@db201 \~]# scsi_id -g -u /dev/sdb
360080e500032a3400000051b58b74174
DM設備
如果已經使用了DM多路徑軟件,並且配置了alias,則不需要再使用udev配置磁盤永久名稱,。
可以通過如下UDEV規則設置磁盤所屬組和權限。設置完成後重啓Multipathd服務,即可。
cat > /etc/udev/rules.d/30-oradmowner.rules \< \< EOF
SUBSYSTEM!=”block”, GOTO=”quickexit”
KERNEL!=”dm-*”, GOTO=”quickexit”
PROGRAM==”/sbin/dmsetup info -c –noheadings -o name -m %m -j %M”
RESULT==”*RACOCR*”, OWNER=”root”, GROUP=”oinstall”, MODE=”0640”
RESULT==”*RACVOTE*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
RESULT==”*RACDATA*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
RESULT==”*RACFRA*”, OWNER=”oracle”, GROUP=”oinstall”, MODE=”0660”
LABEL=”quickexit”
EOF
裸設備
可以使用如下方式,設置裸設備的權限(RHEL5不再支持單獨的權限配置文件/etc/udev/permissions.d/50-udev.permissions)。
cat > /etc/udev/rules.d/99-orarawowner.rules \< \< EOF
KERNEL==”raw1”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw2”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw3”, OWNER=”oracle” GROUP=”oinstall”, MODE=”0660”
KERNEL==”raw4”, OWNER=”root” GROUP=”oinstall”, MODE=”0640”
KERNEL==”raw5”, OWNER=”root” GROUP=”oinstall”, MODE=”0640”
EOF
其他設備
在其他情況下(如單路徑設備),如果需要udev配置磁盤永久名稱,可以參考如下方式**(注意:記住將OCR的權限配置爲root:oinstall
640,其他磁盤爲oracle:oinstall 660)**:
cat > /etc/udev/rules.d/60-oradisk.rules \< \< EOF
ACTION==”add”, KERNEL==”sd*1”, BUS==”scsi”, PROGRAM==”/sbin/scsi_id -g -s
/block/$parent”, RESULT==”36589cfc00000044e4c79d3e197d154a4”
SYMLINK+=”ORADISK/RACVOTE1”, OWNER=”oracle”, GROUP=”dba”, MODE=”0660”EOF
安裝並配置ASMLIB(不建議)
如果通過前面的設置已經可以固定磁盤名稱和磁盤權限,則可以不需要配置ASMLIB。
安裝並配置ASMLib 2.0,根據自己的內核版本選擇相應的軟件包:
oracleasm–194.el5-2.0.5-1.el5.x86_64.rpm
oracleasmlib–1.el5.x86_64.rpm
oracleasm-support-2.1.3-1.el5.x86_64.rpm
配置ASM:
現在,您已安裝了用於 Linux 的 ASMLib 程序包,接下來您需要配置並加載 ASM
內核模塊。需要在兩個 Oracle RAC 節點上作爲 root 用戶帳戶執行該任務。
注:oracleasm 命令的默認路徑爲 /usr/sbin。以前版本中使用的 /etc/init.d
路徑並未被棄用,但該路徑下的 oracleasm 二進制文件現在一般用於內部命令
[root\@server01 sbin]# oracleasm configure –i
該腳本完成以下任務:
創建 /etc/sysconfig/oracleasm 配置文件
創建 /dev/oracleasm 掛載點
掛載 ASMLib 驅動程序文件系統
注:ASMLib
驅動程序文件系統並非常規的文件系統。它只用於自動存儲管理庫與自動存儲管理驅動程序的通訊。
輸入以下命令以加載 oracleasm 內核模塊:
[root\@server01 sbin]# oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module “oracleasm”: oracleasm
Mounting ASMlib driver filesystem: /dev/oracleasm
創建 ASM 磁盤只需在 RAC 集羣中的一個節點上以 root
用戶帳戶執行。該操作完成後,應在兩個 Oracle RAC 節點上運行 oracleasm listdisks
命令以驗證是否創建了所有 ASM 磁盤以及它們是否可用。
oracleasm createdisk CRSV1
/dev/disk/by-id/scsi0b800050cfa2000008af4d38e5e8-part1
注:這裏是通過磁盤陣列的ID進行連接,這是因爲這個ID是唯一不變的,如果通過硬盤名稱如sdc1、sdd1時,如果系統因增加或減少硬件時,名稱會發生變化。
在其他節點上掃描磁盤:
oracleasm scandisks
oracleasm listdisks
如果使用了MULTIPATHD多路徑,則應該修改/etc/sysconfig/oracleasm如下(否則安裝過程執行root.sh會報錯):
Oracleasm_scanorder=”dm”
Oracleasm_scanexclude=”sd”
X Windows配置(不建議)
Oracle Universal Installer 是一個 GUI 接口,要求使用 X
服務器。在啓用了用戶等效性的終端會話中(您將從其中執行 Oracle
安裝的節點),需要將環境變量 DISPLAY 設置爲有效的 X 窗口顯示:
[oracle\@racnode1 \~]$ DISPLAY= \< Any X-Windows Host > :0
[oracle\@racnode1 \~]$ export DISPLAY
將 DISPLAY 變量設置爲有效的 X 窗口顯示後,要確保未啓用 X11 forwarding,
如果看到類似這樣的消息:“Warning:No xauth data; using fake authentication data
for X11 forwarding.”,這意味着您的授權密鑰文件配置正確,但是,您的 SSH
配置啓用了 X11 forwarding。例如:
使用文本編輯器,編輯或創建 \~/.ssh/config 文件
確保 ForwardX11 屬性設爲 no。例如,將以下內容插入 \~/.ssh/config 文件:
Host *
ForwardX11 no
因爲通過silent方式安裝,速度較快,且不易出錯,因此建議不要使用圖形化安裝。
修改/etc/redhat-release
cp /etc/redhat-release /etc/redhat-release.bak
echo “Red Hat Enterprise Linux Server release 4” > /etc/redhat-release
數據庫軟件包
需要下載軟件列表 | ||
---|---|---|
序號 | 名稱 | MD5校驗碼 |
1 | 10201_clusterware_linux_x86_64.cpio.gz | bb6ba01c9f1f50612ba0fee0d245237c |
2 | 10201_database_linux_x86_64.cpio.gz | 8f092c0b21081444fd1938c51664b1f0 |
3 | p8202632_10205_Linux-x86-64.zip | dda60b6319d2242a90ed4a325dbc2d33 |
4 | p6880880_102000_Linux-x86-64.zip | ae36d7e1cf4205620ed5626e43af377a |
5 | p20299014_10205_Linux-x86-64.zip | 7f365b92baaf4e6851062b1164473d33 |
6 | cvupack_Linux_x86_64.zip | 8231fe7cefbda60b0b09245fe1df8db3 |
7 | p4679769_10201_Linux-x86-64.zip | 7e944daf8fae68e1052a47534fbe9919 |
在進行軟件安裝之前,通過MD5校驗碼驗證軟件文件是否正確。
在確認軟件包正確無誤後,使用如下命令解壓縮軟件包。建議將軟件包下載到/u01/software目錄下,並直接解壓到該文件夾下。
mkdir -p /u01/software
cd /u01/software/
zcat 10201_clusterware_linux_x86_64.cpio.gz | cpio -idmv
zcat 10201_database_linux_x86_64.cpio.gz | cpio -idmv
unzip p8202632_10205_Linux-x86-64.zip
unzip p6880880_102000_Linux-x86-64.zip
unzip p20299014_10205_Linux-x86-64.zip
unzip cvupack_Linux_x86_64.zip -d ./cvupack
unzip p4679769_10201_Linux-x86-64.zip
chmod -R 755 p8202632_10205_Linux-x86-64
chmod -R 755 database
chmod -R 755 clusterware
軟件安裝
Cluster安裝檢測
安裝配置CVUQDISK
在Oracle RAC
節點上安裝操作系統程序包CVUQDISK。如果沒有CVUQDISK,集羣驗證實用程序就無法發現共享磁盤,當運行(手動運行或在
Oracle Cluster Infrastructure
安裝結束時自動運行)集羣驗證實用程序時,您會收到這樣的錯誤消息:“Package
cvuqdisk not installed”。
CVUQDISK RPM 包含在 Oracle CRS 安裝介質上的 rpm
目錄中。以root用戶在所有節點上執行如下命令安裝CVUQDISK。
cd /u01/software/clusterware/rpm
CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
rpm -ivh cvuqdisk-1.0.1-1.rpm
檢查先決條件
以ORACLE用戶,使用 CVU 驗證硬件和操作系統設置:
export LANG=en_US
cd /u01/software/clusterware
./cluvfy/runcluvfy.sh stage -post hwos -n db01,db02 –verbose
因爲BUG4437727(在10.2.0.3中解決),我們建議使用最新版的cvupack,來執行驗證工作。因此在進行安裝驗證之前,我們建議將PUBLIC
IP進行修改,以使驗證過程可以順利進行。
export LANG=en_US
cd /u01/software/cvupack/bin
./cluvfy stage -pre crsinst -n db01,db02 -r 10gR2 –verbose
查看 CVU
報告。CVU
執行的所有其他檢查的結果報告應該爲“passed”,之後才能繼續進行 Oracle Cluster
的安裝。
Cluster安裝
首先配置cluster.rsp文件,文件內容如下,將該文件保存爲/tmp/cluster.rsp
cat > /tmp/cluster.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=”oinstall”
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/crs_1”
ORACLE_HOME_NAME=”OraClusterware10ghome1”
TOPLEVEL_COMPONENT={“oracle.crs”,”10.2.0.1.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_NODE_SELECTION_PAGE=false
SHOW_SUMMARY_PAGE=false
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=true
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
SHOW_END_OF_INSTALL_MSGS=true
COMPONENT_LANGUAGES={“en”,”zh_CN”}
s_clustername=”crs10g”
sl_tableList={“db01:db01-pri:db01-vip:N:Y”,”db02:db02-pri:db02-vip:N:Y”}
ret_PrivIntrList={“eth0:10.255.254.0:1”,”eth1:192.168.1.0:2”}
n_storageTypeOCR=1
s_ocrpartitionlocation=”/dev/raw/raw4”
s_ocrMirrorLocation=”/dev/raw/raw5”
n_storageTypeVDSK=1
s_votingdisklocation=”/dev/raw/raw1”
s_OcrVdskMirror1RetVal=”/dev/raw/raw2”
s_VdskMirror2RetVal=”/dev/raw/raw3”
EOF
調用如下命令進行安裝CLUSTER
export LANG=en_US
cd /u01/software/clusterware
./runInstaller -silent -responseFile /tmp/cluster.rsp -ignoreSysPrereqs
安裝的最後階段,根據提示應該運行相應腳本,在運行這些腳本前,請按照如下步驟修複相關bug。
如果安裝環境是10.2.0.4之前和RHEL5。在所有節點修改VIPCA和SRVCTL命令,
sed -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/crs_1/bin/vipcased -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/crs_1/bin/srvctl
因爲BUG 4679769,在執行root.sh腳本之前,請打上補丁p4679769_10201_Linux-x86-64。
cd /u01/software
unzip /u01/software/p4679769_10201_Linux-x86-64.zip
cd /u01/app/oracle/product/10.2.0/crs_1/bin
cp clsfmt.bin clsfmt.bin.bak.`date +%F%T`
rm -rf ./clsfmt.bin
cp /u01/software/4679769/clsfmt.bin ./clsfmt.bin
chmod 755 ./clsfmt.bin
chown oracle:oinstall ./clsfmt.bin
安裝系統提示,在各個節點使用root運行如下腳本:
/u01/app/oracle/product/10.2.0/crs_1/root.sh
當在最後一個節點執行root.sh腳本時,如果發現如下錯誤:
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]
根據文檔 414163.1,首先以ORACLE運行腳本
/u01/app/oracle/product/10.2.0/crs_1/cfgtoollogs/configToolAllCommands
然後以root用戶執行如下內容
cd /u01/app/oracle/product/10.2.0/crs_1/bin
./vipca -silent -nodelist db01,db02 -nodevips db01/db01-vip,db02/db02-vip
最後再次執行如下腳本
/u01/app/oracle/product/10.2.0/crs_1/cfgtoollogs/configToolAllCommands
驗證集羣安裝
crs_stat –t
Database安裝檢測
安裝前驗證:
export LANG=en_US
cd /u01/software/cvupack/bin
./cluvfy stage -pre dbinst -fixup -n db01,db02 -osdba dba –verbose
安裝DATABASE SOFTWARE
首先配置dbinstall.rsp文件,文件內容如下,將該文件保存爲/u01/software/database/dbsoft.rsp
cat > /u01/software/database/dbsoft.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/db_1”
ORACLE_HOME_NAME=”OraDbHome1”
TOPLEVEL_COMPONENT={“oracle.server”,”10.2.0.1.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_NODE_SELECTION_PAGE=false
SHOW_SUMMARY_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=true
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
RESTART_SYSTEM=false
RESTART_REMOTE_SYSTEM=false
SHOW_END_OF_INSTALL_MSGS=true
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
INSTALL_TYPE=”Custom”
oracle.server:DEPENDENCY_LIST={“oracle.rdbms:10.2.0.1.0”,”oracle.options:10.2.0.1.0”,”oracle.network:10.2.0.1.0”,”oracle.sysman.console.db:10.2.0.1.0”,”oracle.rdbms.oci:10.2.0.1.0”,”oracle.precomp:10.2.0.1.0”,”oracle.xdk:10.2.0.1.0”,”oracle.sqlplus.isqlplus:10.2.0.1.0”,”oracle.odbc:10.2.0.1.0”}
oracle.options:DEPENDENCY_LIST={“oracle.network.aso:10.2.0.1.0”,”oracle.rdbms.partitioning:10.2.0.1.0”,”oracle.sdo:10.2.0.1.0”,”oracle.oraolap:10.2.0.1.0”}
oracle.network:DEPENDENCY_LIST={“oracle.network.listener:10.2.0.1.0”}
s_nameForDBAGrp=dba
s_nameForOPERGrp=oper
varSelect=3
EOF
調用如下命令進行安裝DATABASE SOFTWARE
export LANG=en_US
cd /u01/software/database
./runInstaller -silent -responseFile /u01/software/database/dbsoft.rsp
-ignoreSysPrereqs
安裝完成後,安裝系統提示,在各個節點使用root運行如下腳本:
/u01/app/oracle/product/10.2.0/db_1/root.sh
如果安裝環境是10.2.0.4之前和RHEL5。在所有節點修改SRVCTL命令:
sed -i “s#LD_ASSUME_KERNEL#XX_ASSUME_KERNEL#g”
/u01/app/oracle/product/10.2.0/db_1/bin/srvctl
打補丁
解壓補丁包
oracle用戶分別在第一個節點運行如下內容:
cd /u01/software/
unzip /u01/software/p8202632_10205_Linux-x86-64.zip
PS補丁(CRS)
注意:下面的操作,僅僅需要在第一個節點執行。
首先生成響應文件,安裝補丁時需要。
cat > /tmp/patchcrs.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/crs_1”
ORACLE_HOME_NAME=”OraClusterware10ghome1”
TOPLEVEL_COMPONENT={“oracle.patchset.db”,”10.2.0.5.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_COMPONENT_LOCATIONS_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_SUMMARY_PAGE=true
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_REQUIRED_CONFIG_TOOL_PAGE=true
SHOW_OPTIONAL_CONFIG_TOOL_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_RELEASE_NOTES=false
SHOW_END_OF_INSTALL_MSGS=true
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
ACCEPT_LICENSE_AGREEMENT=true
RESTART_SYSTEM=false
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=false
COLLECTOR_UPGRADE=false
COLLECTOR_IGNORE_CONFIGURATION=true
EOF
在所有節點,用root用戶關閉集羣服務
crsctl stop crs
以ORACLE用戶進行補丁升級
cd /u01/software/p8202632_10205_Linux-x86-64/Disk1/
export LANG=en_US
./runInstaller -silent -responseFile /tmp/patchcrs.rsp -ignoreSysPrereqs
在所有節點,用root執行如下腳本
/u01/app/oracle/product/10.2.0/crs_1/install/root102.sh
升級完成後建議重啓操作系統。
PS補丁(DB)
注意:下面的操作,僅僅需要在第一個節點執行。
首先生成響應文件,安裝補丁時需要。
cat > /tmp/patchdb.rsp \< \< EOF
RESPONSEFILE_VERSION=2.2.1.0.0
UNIX_GROUP_NAME=oinstall
FROM_LOCATION=”../stage/products.xml”
ORACLE_HOME=”/u01/app/oracle/product/10.2.0/db_1”
ORACLE_HOME_NAME=”OraDbHome1”
TOPLEVEL_COMPONENT={“oracle.patchset.db”,”10.2.0.5.0”}
SHOW_SPLASH_SCREEN=false
SHOW_WELCOME_PAGE=false
SHOW_COMPONENT_LOCATIONS_PAGE=false
SHOW_CUSTOM_TREE_PAGE=false
SHOW_SUMMARY_PAGE=true
SHOW_INSTALL_PROGRESS_PAGE=true
SHOW_REQUIRED_CONFIG_TOOL_PAGE=true
SHOW_OPTIONAL_CONFIG_TOOL_PAGE=true
SHOW_CONFIG_TOOL_PAGE=true
SHOW_XML_PREREQ_PAGE=false
SHOW_RELEASE_NOTES=false
SHOW_END_OF_INSTALL_MSGS=true
SHOW_ROOTSH_CONFIRMATION=true
SHOW_END_SESSION_PAGE=false
SHOW_EXIT_CONFIRMATION=true
NEXT_SESSION=false
NEXT_SESSION_ON_FAIL=false
SHOW_DEINSTALL_CONFIRMATION=false
SHOW_DEINSTALL_PROGRESS=false
ACCEPT_LICENSE_AGREEMENT=true
RESTART_SYSTEM=false
CLUSTER_NODES={“db01”,”db02”}
COMPONENT_LANGUAGES={“en”,”zh_CN”}
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=false
COLLECTOR_UPGRADE=false
COLLECTOR_IGNORE_CONFIGURATION=true
EOF
在所有節點,關閉相關服務
srvctl stop asm -n db01
srvctl stop asm -n db02
srvctl stop database -n db01
srvctl stop database -n db02
srvctl stop listener -n db01
srvctl stop listener -n db02
以ORACLE用戶進行補丁升級
cd /u01/software/p8202632_10205_Linux-x86-64/Disk1/
export LANG=en_US
./runInstaller -silent -responseFile /tmp/patchdb.rsp -ignoreSysPrereqs
–force
在所有節點,用root執行如下腳本,升級完成後建議重啓操作系統。
/u01/app/oracle/product/10.2.0/db_1/root.sh
更新patch工具
以ORACLE用戶解壓補丁更新工具到指定目錄
export LANG=en_US
cd /u01/software/
unzip -o p6880880_102000_Linux-x86-64.zip -d $ORACLE_HOME
PSU升級
查詢是否存在衝突補丁:
cd $ORACLE_HOME/OPatch
./opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir
/u01/software/20299014
RAC環境下,查詢是否可以滾動升級(結果:可以滾動升級)
cd $ORACLE_HOME/OPatch
./opatch query -all /u01/software/20299014 | grep rolling
關閉節點1的數據庫實例和asm實例
srvctl stop instance -d ORCL -i ORCL1
srvctl stop asm -n db01 -o asm1
srvctl stop listener -n db01 -l LISTENER_DB01
應用補丁
cd /u01/software/20299014
$ORACLE_HOME/OPatch/opatch apply
根據提示關閉節點2的相關實例
srvctl stop instance -d ORCL -i ORCL2
srvctl stop asm -n db02 -o asm2
srvctl stop listener -n db02 -l LISTENER_DB02
升級程序會遠程對節點2進行補丁升級。升級成功後開啓所有節點
srvctl start listener -n db01 -l LISTENER_DB01
srvctl start asm -n db01 -o asm1
srvctl start instance -d ORCL -i ORCL1
srvctl start listener -n db02 -l LISTENER_DB02
srvctl start asm -n db02 -o asm2
srvctl start instance -d ORCL -i ORCL2
僅僅在節點1運行如下腳本
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL > \@catbundle.sql psu apply
SQL > – Execute the next statement only if this is the first PSU applied
for 10.2.0.5 or this is the first PSU applied since 10.2.0.5.3.SQL > \@utlrp.sql
執行如下腳本查看補丁情況
select * from dba_registry_history;
修改diagwait
爲了避免不必要的節點重啓(如系統調度延遲等),ORACLE建議將diagwait配置爲13。詳細信息可以參見文檔《559365.1》。
配置過程如下:注意,需要在所有節點關閉CRS服務,參數修改可以只在一個節點進行。
# \< CRS_HOME > /bin/crsctl stop crs
# \< CRS_HOME > /bin/oprocd stop
# ps -ef |egrep “crsd.bin|ocssd.bin|evmd.bin|oprocd”
# \< CRS_HOME > /bin/crsctl set css diagwait 13 -force
# \< CRS_HOME > /bin/crsctl start crs
# \< CRS_HOME > /bin/crsctl get css diagwait
DBCA創建數據庫
添加ASM RAC實例
在創建數據庫之前,首選配置ASM實例,作爲RAC集羣,首先要將ASM實例註冊到ocr。
su - oracle
srvctl add asm -n db01 -i +ASM1 -o /u01/app/oracle/product/10.2.0/db_1
srvctl add asm -n db02 -i +ASM2 -o /u01/app/oracle/product/10.2.0/db_1
配置ASM實例
cat > /tmp/asmca.rsp \< \< EOF
[GENERAL]
RESPONSEFILE_VERSION = “10.0.0”
OPERATION_TYPE = “configureASM”
[CONFIGUREASM]
NODELIST=”db01,db02”
DISKSTRING=”/dev/mapper/*”
ASM_SYS_PASSWORD=”1qaz2WSX”
EOF
調用如下命令
export LANG=en_US
dbca -silent -responseFile /tmp/asmca.rsp
創建磁盤組
CREATE DISKGROUP DATA1 EXTERNAL REDUNDANCY
disk
‘/dev/mapper/RACDATA1p1’ NAME DATA1P1;
CREATE DISKGROUP FRA1 EXTERNAL REDUNDANCY
disk
‘/dev/mapper/RACDATA2p1’ NAME DATA2P1;
alter diskgroup data1 mount;
alter diskgroup fra1 mount;
創建數據庫
dbca是ORACLE提供的圖形化數據庫創建工具,使用該工具可以方便的完成數據庫創建工作,由於腳本中不完全包括dbca工具中的動作,因此要求必須使用dbca來創建。
在使用DBCA的過程中,會自動創建ASM實例,但是我們還是建議先配置好ASM實例,再建庫。
首選生成數據庫定製化模板,模板內如如下:
cat >
/u01/app/oracle/product/10.2.0/db_1/assistants/dbca/templates/INST.dbt \< \<
EOF\< DatabaseTemplate name=”INST” description=”” version=”10.2.0.5.0” >
\< CommonAttributes >
\< option name=”ISEARCH” value=”false”/ >
\< option name=”OMS” value=”false”/ >
\< option name=”JSERVER” value=”false”/ >
\< option name=”SPATIAL” value=”false”/ >
\< option name=”ODM” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”IMEDIA” value=”false”/ >
\< option name=”XDB_PROTOCOLS” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”ORACLE_TEXT” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”SAMPLE_SCHEMA” value=”false”/ >
\< option name=”CWMLITE” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”EM_REPOSITORY” value=”false” >
\< tablespace id=”SYSAUX”/ >
\< /option >
\< option name=”HTMLDB” value=”false”/ >
\< /CommonAttributes >
\< Variables/ >
\< CustomScripts Execute=”false”/ >
\< InitParamAttributes >
\< InitParams >
\< initParam name=”pga_aggregate_target” value=”256” unit=”MB”/ >
\< initParam name=”log_archive_dest_1” value=“‘LOCATION=+DATA1/’”/ >
\< initParam name=”processes” value=”150”/ >
\< initParam name=”db_recovery_file_dest_size” value=”2048” unit=”MB”/ >
\< initParam name=”sga_target” value=”512” unit=”MB”/ >
\< initParam name=”compatible” value=”10.2.0.5.0”/ >
\< initParam name=”db_create_file_dest” value=”+DATA1”/ >
\< initParam name=”background_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/bdump”/ >\< initParam name=”job_queue_processes” value=”10”/ >
\< initParam name=”db_name” value=”“/ >
\< initParam name=”user_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/udump”/ >\< initParam name=”dispatchers” value=”(PROTOCOL=TCP) (SERVICE={SID}XDB)”/
>\< initParam name=”audit_file_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump”/ >\< initParam name=”db_domain” value=”“/ >
\< initParam name=”open_cursors” value=”300”/ >
\< initParam name=”db_block_size” value=”8” unit=”KB”/ >
\< initParam name=”db_recovery_file_dest” value=”+FRA1”/ >
\< initParam name=”log_archive_format” value=”%t_%s_%r.dbf”/ >
\< initParam name=”core_dump_dest”
value=”{ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/cdump”/ >\< initParam name=”remote_login_passwordfile” value=”exclusive”/ >
\< initParam name=”undo_management” value=”AUTO”/ >
\< initParam name=”db_file_multiblock_read_count” value=”16”/ >
\< initParam name=”undo_tablespace” value=”UNDOTBS2”/ >
\< /InitParams >
\< MiscParams >
\< databaseType > MULTIPURPOSE \< /databaseType >
\< maxUserConn > 200 \< /maxUserConn >
\< percentageMemTOSGA > 40 \< /percentageMemTOSGA >
\< customSGA > true \< /customSGA >
\< characterSet > AL32UTF8 \< /characterSet >
\< nationalCharacterSet > AL16UTF16 \< /nationalCharacterSet >
\< archiveLogMode > true \< /archiveLogMode >
\< initParamFileName > {ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/pfile/init.ora
\< /initParamFileName >\< /MiscParams >
\< SPfile useSPFile=”true” > +DATA1/{DB_UNIQUE_NAME}/spfile{SID}.ora \<
/SPfile >\< /InitParamAttributes >
\< StorageAttributes >
\< ControlfileAttributes id=”Controlfile” >
\< maxDatafiles > 1024 \< /maxDatafiles >
\< maxLogfiles > 192 \< /maxLogfiles >
\< maxLogMembers > 3 \< /maxLogMembers >
\< maxLogHistory > 1 \< /maxLogHistory >
\< maxInstances > 32 \< /maxInstances >
\< image name=”\<OMF_CONTROL_0 > ” filepath=”+DATA1/{DB_UNIQUE_NAME}/”/
>\< image name=”\<OMF_CONTROL_1 > ” filepath=”+DRA1/{DB_UNIQUE_NAME}/”/
>\< /ControlfileAttributes >
\< DatafileAttributes id=”\<OMF_SYSAUX_DATAFILE_0 > ” >
\< tablespace > SYSAUX \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 120 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 10240 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\<OMF_SYSTEM_DATAFILE_0 > ” >
\< tablespace > SYSTEM \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 300 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 10240 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\<OMF_TEMP_DATAFILE_0 > ” >
\< tablespace > TEMP \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 20 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 640 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\<OMF_UNDOTBS1_DATAFILE_0 > ” >
\< tablespace > UNDOTBS1 \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 200 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 5120 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\<OMF_UNDOTBS2_DATAFILE_0 > ” >
\< tablespace > UNDOTBS2 \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 200 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 5120 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< DatafileAttributes id=”\<OMF_USERS_DATAFILE_0 > ” >
\< tablespace > USERS \< /tablespace >
\< temporary > false \< /temporary >
\< online > true \< /online >
\< status > 0 \< /status >
\< size unit=”MB” > 5 \< /size >
\< reuse > false \< /reuse >
\< autoExtend > true \< /autoExtend >
\< increment unit=”KB” > 1280 \< /increment >
\< maxSize unit=”MB” > -1 \< /maxSize >
\< /DatafileAttributes >
\< TablespaceAttributes id=”SYSAUX” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_SYSAUX_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”SYSTEM” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 3 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > -1 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_SYSTEM_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”TEMP” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > true \< /temporary >
\< defaultTemp > true \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 64 \< /initSize >
\< increment unit=”KB” > 64 \< /increment >
\< incrementPercent > 0 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 0 \< /maxExtends >
\< minExtendsSize unit=”KB” > 64 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_TEMP_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”UNDOTBS1” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > true \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 512 \< /initSize >
\< increment unit=”KB” > 512 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 8 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 512 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_UNDOTBS1_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”UNDOTBS2” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > true \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 512 \< /initSize >
\< increment unit=”KB” > 512 \< /increment >
\< incrementPercent > 50 \< /incrementPercent >
\< minExtends > 8 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 512 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_UNDOTBS2_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< TablespaceAttributes id=”USERS” >
\< online > true \< /online >
\< offlineMode > 1 \< /offlineMode >
\< readOnly > false \< /readOnly >
\< temporary > false \< /temporary >
\< defaultTemp > false \< /defaultTemp >
\< undo > false \< /undo >
\< local > true \< /local >
\< blockSize > -1 \< /blockSize >
\< allocation > 1 \< /allocation >
\< uniAllocSize unit=”KB” > -1 \< /uniAllocSize >
\< initSize unit=”KB” > 128 \< /initSize >
\< increment unit=”KB” > 128 \< /increment >
\< incrementPercent > 0 \< /incrementPercent >
\< minExtends > 1 \< /minExtends >
\< maxExtends > 4096 \< /maxExtends >
\< minExtendsSize unit=”KB” > 128 \< /minExtendsSize >
\< logging > true \< /logging >
\< recoverable > false \< /recoverable >
\< maxFreeSpace > 0 \< /maxFreeSpace >
\< autoSegmentMgmt > true \< /autoSegmentMgmt >
\< bigfile > false \< /bigfile >
\< datafilesList >
\< TablespaceDatafileAttributes id=”\<OMF_USERS_DATAFILE_0 > ” >
\< id > -1 \< /id >
\< /TablespaceDatafileAttributes >
\< /datafilesList >
\< /TablespaceAttributes >
\< RedoLogGroupAttributes id=”1” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_01_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”2” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_02_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”3” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_03_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”4” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_04_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”5” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 1 \< /Thread >
\< member ordinal=”0” memberName=”redo_01_05_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< RedoLogGroupAttributes id=”6” >
\< reuse > false \< /reuse >
\< fileSize unit=”KB” > 51200 \< /fileSize >
\< Thread > 2 \< /Thread >
\< member ordinal=”0” memberName=”redo_02_06_01”
filepath=”+DATA1/{DB_UNIQUE_NAME}/”/ >\< /RedoLogGroupAttributes >
\< /StorageAttributes >
\< /DatabaseTemplate >
EOF
首先配置dbca.rsp文件,文件內容如下,將該文件保存爲/tmp/dbca.rsp
cat > /tmp/dbca.rsp \< \< EOF
[GENERAL]
RESPONSEFILE_VERSION = “10.0.0”
OPERATION_TYPE = “createDatabase”
[CREATEDATABASE]
GDBNAME = “ORCL”
SID = “ORCL”
NODELIST=”db01,db02”
TEMPLATENAME = “INST.dbt”
SYSPASSWORD = “1qaz2WSX”
SYSTEMPASSWORD = “1qaz2WSX”
EMCONFIGURATION = “NONE”
SYSMANPASSWORD = “1qaz2WSX”
DBSNMPPASSWORD = “1qaz2WSX”
STORAGETYPE=ASM
DISKGROUPNAME=DATA1
RECOVERYGROUPNAME=FRA1
CHARACTERSET = “AL32UTF8”
EOF
調用如下命令進行安裝DATABASE SOFTWARE
export LANG=en_US
dbca -silent -responseFile /tmp/dbca.rsp
更新數據庫
注意:如下操作僅在一個節點進行即可。
cd $ORACLE_HOME/rdbms/admin
sqlplus /nolog
SQL > CONNECT / AS SYSDBA
SQL > STARTUP
SQL > select * from dba_registry_history;
SQL > \@catbundle.sql psu apply
SQL > select * from dba_registry_history;
SQL > \@utlrp.sql
SQL > QUIT
檢查如下文件,查看是否有報錯信息
$ORACLE_BASE/cfgtoollogs/catbundle/catbundle_PSU_ \< database SID >
APPLY \< TIMESTAMP > .log$ORACLE_BASE/cfgtoollogs/catbundle/catbundle_PSU_ \< database SID >
GENERATE \< TIMESTAMP > .log