2010年11月23日 星期二

PostgreSQL-Pgdump && Pgdumpall

這次介紹Pgdump 與Pgdumpall 這兩個指令都是PostgreSQL的備份指令
相關的備份指令我就不多講了~~底下兩個教學文件有很詳細的介紹~~
Pgdump :http://twpug.net/docs/postgresql-doc-8.0-zh_TW/app-pgdump.html
Pgdumpall :http://twpug.net/docs/postgresql-doc-8.0-zh_TW/app-pg-dumpall.html

這次主要是講Pgdump 與 Pgdumpall差異!!!
顧名思義Pgdumpall是一次備份全資料庫~Pgdump 是一次備份單一資料庫~~
Pgdumpall可以把目前資料庫用戶和組,以及適用於整個資料庫的訪問權限備份出來(Pgdump 不行)!!
Pgdump 可以對"大對像"做備份(Pgdumpall不行)!!!
關於"大對像":
因為PostgreSQL 允許表的大小大於您的系統允許的最大文件大小, 可能把表轉儲到一個文件會有問題,因為生成的文件很可能比您的系統允許的最大文件大。 因為pg_dump 輸出到標準輸出,您可以用標準的Unix 工具繞開這個問題:
使用壓縮的轉儲. 使用您熟悉的壓縮程序,比如說gzip, split

根據上面的官方說法:
我的PostgreSQL是安裝於FreeBSD上面~~查了一下他用的UFS filesystem ~~單一檔案最大SIZE已經超過TB了~~所以我不用使用Pgdump 的"大對像"功能!!!改成使用Pgdumpall ~~他又能備資料~~又能備份使用者加權限~~非常符合我需求!!!

2010年11月12日 星期五

Microsoft 分散式交易協調員

MS DTC 是 Windows 2000 元件服務的一部份。(MS DTC 這個觀念在 SQL Server 7 就已經存在。)元件服務也包含 COM+。COM+ 是用於有非交易式通訊需求時,而 MS DTC 則用於有交易式訊息通訊需求時。 MS DTC 主要用來處理分散式交易。所謂 分散式交易 ,就是跨越兩個或多個資料庫的單一 SQL Server 內部的交易,這些資料庫可以放在相同或分別放在不同的電腦系統內。而在同一個資料庫內不同資料表間的交易,則不能稱作分散式交易。在同一個系統上,資料庫與資料庫間的前端交易可利用一般(非分散式)處理;但是 SQL 在執行時仍會以分散式交易處理。
MS DTC 概觀
 

當一筆交易包含許多不同來源的資料時,就必須協調這些提供資料的應用程式。協調的重要性在於確保交易必須是不可部份完成。換句話說,資料的修改不是全部執行,就是全部不執行。如果一筆交易部份完成,部份失敗,就會造成交易邏輯沒有一致性,還可能使資料流失。MS DTC 執行 兩階段交易認可(Two-Phase Commit) 確認交易邏輯。
兩階段交易認可近年來在技術上有很大的改革,這並不是新的技術,也非 SQL Server 獨有。事實上,因 SQL Server 和 Oracle 兩種資料庫皆支援兩階段交易認可的模式及 ODBC,因此兩種資料庫間還可利用兩階段交易認可進行分散式交易。
兩階段交易認可的兩個階段分別為:準備階段與認可階段。在應用程式中以 COMMIT 指令初始化 MS DTC 執行兩階段交易認可。一台 SQL Server 上的 MS DTC,與另一個系統上的 MS DTC 協調處理一筆分散式交易。MS DTC 中處理兩段交易認可的元件稱作 資源管理員 
當您執行了認可(COMMIT)指令,MS DTC 通知資源管理員開始 準備階段 。第一階段(也就是準備階段),會執行所有認可所需要的動作,包括排清緩衝區和寫入交易記錄檔等動作。這個階段所執行的步驟和一般的標準認可步驟類似,唯一不同的是在這裡,SQL Server 不會真的認可交易,也不會對交易所用到的資源解除鎖定。當所有認可交易的前置動作都完成時,資源管理員便傳送準備成功的訊號給交易管理員。在所有的資源管理員都傳出成功的訊號時,就進入認可階段。
 認可階段 在分散式系統中進行。在這個階段,如果所有的資源管理員都傳出成功訊號,應用程式端就會接受到認可成功的訊息;如果其中有一個資源管理員傳出失敗訊號,就會傳送 復原(rollback) 指令給每位資源管理員,這時應用程式端就會收到認可失敗的訊息。當系統交易時間過長,也會執行復原指令。當一個系統內的認可失敗,分散式交易中所有其他相關系統也會執行復原指令。

備註:
兩階段交易認可:
對於分散式資料庫系統來說,因為資料庫的資料是分散儲存在各地的資料庫伺服器,當交易需要執行交付時,如果馬上執行,若任何一個資料庫伺服器沒有完成交付,就有可能造成整個分散式資料庫的資料不一致。
分散式資料庫系統是將交付分為兩個階段來執行,稱為「二階段交付」(Two-phase Commit, 2PC),如下所示:
1. 協調者(Coordinator)送出SECURE訊息給各資料庫伺服器,此時各資料庫伺服器交付分散儲存各處的資料庫伺服器可以執行交付,否則將放棄此交易。
2. 當各資料庫伺服器都回覆可執行交付後,協調者才送出交付訊息,讓各資料庫伺服器執行交付交易,並且回覆是否成功,如果有任何一個資料庫伺服器回覆錯誤,協調者就會送出復原訊息取消交易。
參考資料:

2010年11月8日 星期一

PostgreSQL 跨資料庫查詢!!!!

什麼是跨資料庫查詢呢~?!
例如:有A,B這兩個Databaes,
         隨便下一個Join SQL: select * from A.table inner join B.table on a.id=b.id;
這就是跨資料庫查詢了!我記得Oracle,SQL SERVER,MySQL都能支援這種跨資料庫查詢的功能!
可是當PostgreSQL 要做這總功能時會產生下列
Error Code:ERROR:  cross-database references are not implemented
到GOOGLE查了一下原來PostgreSQL 不支援跨資料庫查詢~~如果要達到這種功能要用DBLINK~~~看起來挺麻煩的!!接下來來介紹怎麼去用PostgreSQL的DBLINK!!!

1.安裝postgresql-contrib
   #cd /root/postgresql-8.4.4/contrib/
   #make && make install
2.安裝dblink
   #cd /root/postgresql-8.4.4/contrib/dblink
   #psql -Upgsql -p6789 dbname -f dblink.sql
   (這裡的dbname 是指你要在哪個DB上安裝dblink.sql,如果全部的DB都要裝那應該要多裝幾次
   如果是剛新裝的DB那就裝在template1裡面~~之後開新DB時就可以用template1當模板~這樣     dblink就不用一直重覆裝了)
   裝完後會看到很多DDlink的Function!!

3.使用dblink
    SELECT *
    FROM dblink('host=IP port=6789 dbname=dbname user=user password=pw', 'select proname, prosrc from pg_proc')
      AS t1(proname name, prosrc text)
    WHERE proname LIKE 'bytea%';


   這樣就達成PostgreSQL的跨資料庫查詢了~~還真麻煩!!!
   感覺SQL很長看了很刺目~~如果想變短一點可以把他寫成View~~

參考資料:
http://www.postgresql.org/docs/current/static/contrib-dblink.html
http://zh-tw.w3support.net/index.php?db=so&id=46324
http://space.itpub.net/7351491/viewspace-615645

2010年11月2日 星期二

在SQL SERVER 2005 建立Linked Server To PostgreSQL

今天在SQL SERVER 2005 建立Linked Server To PostgreSQL有發生奇妙的錯誤!!
我建立的方式是OLE DB Provider for ODBC+psqlodbc_09_00_0200~~
當SQL SERVER 2005都還沒做SP升級前OLE DB Provider for ODBC+psqlodbc_09_00_0200這樣openquery是可以正常執行的!!
可是當我SQL SERVER 2005升級到SP3時執行openquery就會發生錯誤!!!
Error code:
訊息 7399,層級 16,狀態 1,行 1
連結伺服器 "XXX" 的 OLE DB 提供者 "MSDASQL" 報告了錯誤。提供者報告了未預期的重大錯誤。
訊息 7350,層級 16,狀態 2,行 1
無法從連結伺服器 "XXX" 的 OLE DB 提供者 "MSDASQL" 取得資料行資訊。

去GOOGLE找了一下也沒發現這個問題的解決方式~~之後有發現解決方法在來補上!!
============================================================

所以我換了連結方式為PostgreSQL Native Provider (PGNP)~~
當把這個東東裝完後會在SSMS>伺服器物件>連結的伺服器>提供者裡面有多一個PGNP的~~這樣就代表裝完可以用了~~!!

PGNP如何建立Linked Server 底下有手冊可以參考!!!!!!
補充:後來發現PGNP是要錢的~~試用版每次傳回筆數只能是100行!!
所以後來改用psqlodbc~~不然PGNP真是好物一個~~速度比PGNP快好多!!!
First commercial PostgreSQL OLEDB provider:
http://www.postgresql.org/about/news.895
PGNP-1.3.0.2190.exe:
http://www.pgoledb.com/index.php?option=com_filecabinet&task=download&cid[0]=10&Itemid=68
使用手冊(第14頁有介紹Linked Server 及相關使用方法):
http://www.pgoledb.com/downloads/Developer%20Manual.pdf

============================================================
補上解決方法:
方法1:
原來我找的psqlodbc_09_00_0200這個版本與我的PostgreSQL版本(8.4.4)不同~~
所以我重新安裝 psqlodbc_08_04_0200~~這樣就不會再跑ERROR出來了!
psqlodbc下載網址:
http://www.postgresql.org/ftp/odbc/versions/msi/

方法2:
allow in process這個選項有關~~這個控制項如果啟用, 就會把Access的process包在SQL process裡一起跑. 不啟用就是讓他分開跑.這樣access端有錯誤就不會丟回SQL Server. 我想您access端雖然有問題但是不影響執行, 因此只要讓它不丟回SQL Server就好了.
關於兩者效能的差別, 官方的部落格有提到如果不選allow in process可能效能會差一些.
這個選項主要是給一些third party的provider, 例如 Oracle, 在做linked server的時候不能跟SQL Server分開跑, 因此必須設定這個選項.  在正常情況下, 勾或不勾都是可以執行的.
http://blog.csdn.net/haipingma/archive/2010/04/27/5535147.aspx

============================================================

2010年10月18日 星期一

SQL Server 中處理 Unicode 字串

ACCESS是用UNICODE來存儲內容的,因此往裡面存放各種UNICODE 字符都不會出問題。 而如果向MSSQL 中存放的話有可能變成???難道MSSQL不支持UNICODE ,並非如此。而如果向SQL Server 有支援Unicode字。必須符合以下兩個條件。
1. 使用支援Unicode字元的資料型別來儲存資料。
在Microsoft SQL Server 中 ,以下資料型別支援Unicode資料:在Microsoft SQL Server 中 ,以下資料型別支援Unicode資料:
nchar nchar
nvarchar nvarchar
ntext ntext
2. 您在SQL Server 中處理Unicode字串常數時,必須在所有Unicode字串之前加上大寫字母N。
請參考以下文件:請參考以下文件: 
參考資料:http://support.microsoft.com/kb/239530/zh-tw

INF:SQL Server 中的Unicode字串常數需要N 前置詞 INF:SQL Server 中的Unicode字串常數需要N前置詞
當您在SQL Server 中處理Unicode字串常數時,必須在所有Unicode字串之前加上大寫字母N。 「N」這個前置詞代表的是SQL-92 標準中的「國際語言」(National Language),並且必須為大寫。 如果您沒有在Unicode字串常數前面加上N 作為前置詞,則SQL Server 會在使用字串之前將它轉換成SQL Server 所安裝的字碼頁。同時您不能使用無法傳遞Unicode的程式來Insert Unicode字串 . 另外您的Server也必須有該相關的codepage, 否則無法顯示字串 。

About MDF與LDF的blocks

有人跟我講SQL SERVER 放MDF File的磁碟格式化時最好用64K下去分割~~~
LDF File的磁碟格式化用預設4K就可以~~
那為什麼會這樣子呢??我有去幾個論壇及GOOGLE大神上找一下答案!!
答案應該如下:

SQL Server 一個 page 是 8Kb~~所以 1Mb 的資料相當於有 128 個 pages!!
NTFS 預設 cluster 分割為 4Kb
若是撈 10Mb 的資料時,相當於撈 1280 個 pages,要讀 2560 個 cluster
若改 cluster 分割為 64 Kb,相當於一個 cluster 可放 8 個 pages,所以只要讀 160 個 cluster
磁碟 I/O 量相對降低,效能可提升一些些
但相對地,面對交易紀錄檔或是同詞曲上的零碎檔案會付出使用額外磁碟空間的代價
其實 DB 的結構設計、正規化、索引、...、也都是影響效能的因素之一,並非分割 cluster 成 64Kb 就跟吃大補丸一樣有顯著的提升


參考資料:http://msdn.microsoft.com/zh-tw/library/ms190969(v=SQL.100).aspx
                    http://www.dbworld.com.tw/

2010年10月14日 星期四

SQL Server 2008 on a Windows Server 2008 Cluster

PART1: http://www.mssqltips.com/tip.asp?tip=1687
PART2: http://www.mssqltips.com/tip.asp?tip=1698
PART3: http://www.mssqltips.com/tip.asp?tip=1709
PART4: http://www.mssqltips.com/tip.asp?tip=1721
問題一:
基本上按照以上步驟安裝即可~~!!
比較要注意的就是如果OS有裝賽門鐵克防毒那可能會出現一些問題!!
出現的問題就是當一節點重開後~另一節點就會有認不到的問題!!
此BUG現在不知道賽門鐵克是否有修復了!

問題二:
如果SQL Server 2008 是要安裝在Windows Server 2005上的話!!
要把SQL Server 2008 +SP1整合在一起!!這樣裝起來才不會出錯!
相關網址:
http://sharedderrick.blogspot.com/2010/01/sql-server-2008-with-sp1-slipstreaming.html

MSSQL Performance Dashboard Reports

微軟有針對SQL Server 2005 SP2 出了一個效能檢視工具---SQL Server 2005 Performance Dashboard Reports!!
這個工具是不用錢的~~只要有裝SQL Server 2005 SP2 以上的版本都能使用 (SQL Server 2008也可以用喔)~~
以下針對安裝方法及使用方法來介紹!!!

1.安裝方式:
 1-0:系統需求:
   安裝Performance Dashboard Reports需要SQL Server 2005 SP2以上的版本(SQL Server 2008也可以用喔)

 1-1:下載檔案:(SQL Server 2008需下載第二個載點的檔案)
   載點1:
 http://www.microsoft.com/downloads/details.aspx?FamilyId=1d3a4a0d-7e0c-4730-8204-e419218c1efc&displaylang=en
  
   載點2:http://blogs.technet.com/b/rob/archive/2009/02/18/performance-dashboard-reports-for-sql-server-2008.aspx

 1-2:開始安裝:
   SQL SERVER 2005 :
     一直按NEXT就可以了!!!

   SQL SERVER 2008:
     A.更改預設安裝路徑:
        C:\Program Files\Microsoft SQL Server\100\Tools\PerformanceDashboard
   
  B.檔案取代:
        將載點2的檔案複製到安裝目錄取代檔案!!!(Performance_dashboard_main.rdl 和Setup.sql)

  1-3:SSMS執行Setup.sql         SSMS執行Setup.sql 前,建議修改datediff(ms, …) 變更為datediff(s, …)~~
         通常執行Setup.sql是不會遇到什麼問題!!

  1-4:SSMS新增效能報表

STEP1:
 
 


STEP2:
C:\Program Files\Microsoft SQL Server\90\Tools\PerformanceDashboard


安裝至此算是告一段落囉~~~不會太難!!!滑鼠點一點就裝完了!!
接下來可以開始使用囉!!
2.使用方法始用SSMS點開performance_dashboard_main這張報表就可以囉!
報表裏面有提供一些效能的資訊!Performance Dashboard Reports提供了以下以幾點功能:

1.CPU bottlenecks (and what queries are consuming the most CPU)
2.IO bottlenecks (and what queries are performing the most IO)
3.Index recommendations generated by the query optimizer (missing indexes)
4.Blocking
5.Latch contention 
以上這五點我覺得Index 建議這項最好用!!
他可以幫你檢查出該用INDEX卻沒用的欄位!!也可以看到有哪些INDEX被用到的機率極低!

MySQL Innodb 與 Binlog mode關係!!!

今天在做DB(innodb) table schema匯入後要異動資料時有發生下列錯誤
ERROR Log: binary logging not possible. message: transaction level 'read-committed' in innodb is not safe for binlog mode 'statement'
原因:當binlog_format 為statement時, read committed 會發生錯誤!!!
解決方法: (推薦方法4)
方法1.mysql> set session transaction isolation level REPEATABLE READ ; REPEATABLE READ ;
方法2. mysql>set session binlog_format=row;
方法3. mysql>set session binlog_format= mixed;
方法4. my.cnf 增加底下兩行~~在重啟MYSQL
binlog_format=mixed or row
innodb_locks_unsafe_for_binlog=1
所以以後要注意read committed與binlog格式的關係,否則會導致資料無法異動!!!
Binlog  format:
從 MySQL 5.1.12 開始,binlog_format可以用以下三種模式:
           1. STATEMENT: SQL語句的log(statement-based)
           2. ROW:資料行的log(row-based)
           3. MIXED: statement && row 混合使用,預設是statement
Binlog主要是做mysql replication或者是恢復某依段時間資料時會用到,也有人拿Binlog來做mysql 的差異備份~~~
所以對於Binlog format的選擇也是蠻重要的~~
如果對資料品質要求高一點的話可以選擇ROW層級的~~~
詳細Binlog format參考資料:
http://homeserver.com.tw/mysql/mysql-%e5%90%84%e7%a8%aebinlog_format%e5%84%aa%e7%bc%ba%e9%bb%9e%e6%af%94%e8%bc%83/

MySQL 讀寫分離 && Load Balance-MYSQL PROXY

這幾天在研究及測試MYSQL PROXY這個架構!
以下為研究之後的一些結果!!參考看看囉!!




MYSQL PROXY架構模型:








MYSQL PROXY優點:
1.Master / Slave讀寫分離
2.Slave DB Connection Load Balance
3.Slave DB Failover
           4.程式開發較簡單(不用考慮Connection)


MYSQL PROXY缺點:
1.目前尚是Alpha!官方不保證他的穩定性!
2.MYSQL PROXY這個服務掛掉後,client端就無法對Master / Slave DB 作存取
          
結論:
在對於資料及時性要求不高的環境上,可以考慮用看看!
如果有考慮要用這個solution的話,還需要用實體機器作一下壓力測試!
畢竟這個版本官方也不能保證穩定性!

MySQL 讀寫分離 && Load Balance---Amoeba

如果讀寫分離由程式端控制的話,目前有找到一款套件Amoeba-mysql來控制Slave DB Load Balance
這個是大陸人寫的套件(MYSQL官方套件)!
目前Amoeba-mysql測試Load Balance功能,沒有太大問題發生!! 比之前測試MYSQL_PROXY穩定很多!
雖然穩定~~但是他有限定支援的SQL~~~有些SQL語法不支援~~







Amoeba-mysql架構模型:










根據以上的架構需要
1.MASTER DB:需要 1
2.SLAVE DB : 需要2台或更多
3.Amoeba-Mysql : 建議至少獨立一台, 兩台以上可以做到Amoeba-Mysql備援 ; 
如果不能獨立出來的話Amoeba-Mysql也可以建在Master / Slave 上面




Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1) 安裝文章 5

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1) 安裝文章 5
************************************************** ****************
以下是測試項目,來測試發現,RAC是否裝好了。
************************************************** ****************

在運行srvctl的時候,遇到:(rac1,rac2都需要改)
/home/oracle/app/oracle/product/10.2.0/db_1/jdk/jre/bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
的錯誤,可以按照如下方式解決: (ORACLE)
$ cd /home/oracle/app/oracle/product/10.2.0/db_1/bin/
$ cp srvctl srvctl.bak
$ gedit srvctl
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
同樣在其後新增加一行: unset LD_ASSUME_KERNEL

測試資料庫狀態:(在rac1,rac2上分別測試) (ORACLE)
$ cd /home/oracle/app/oracle/product/10.2.0/db_1/bin/
$ srvctl config database -d RAC
rac1 RAC1 /home/oracle/app/oracle/product/10.2.0/db_1
rac2 RAC2 /home/oracle/app/oracle/product/10.2.0/db_1
 

測試資料庫當前狀態:(在rac1,rac2上分別測試) (ORACLE)
$ cd /home/oracle/app/oracle/product/10.2.0/db_1/bin/
$ unset LANG //這個是在用telnet登錄時,中文會出現亂碼的情況下的設置,改成了英語(缺省設置)
$ srvctl status database -d RAC
Instance RAC1 is running on node rac1
Instance RAC2 is running on node rac2
$ srvctl status database -d rac
Instance RAC1 is running on node rac1
Instance RAC2 is running on node rac2
開來不區分大小寫,rac RAC ,但在ORACLE_SID中就要寫RAC1, RAC2 ,RAC,不能寫rac1,rac2,rac,sqlplus裡面要區別大小寫。

測試集群CRS當前狀態:(在rac1,rac2上分別測試) (ORACLE)
[oracle@rac1 ~]$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

[oracle@rac2 ~]$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

測試集群當前狀態:(在rac1,rac2上分別測試) (ORACLE)
$ cd /home/oracle/app/crs/bin
$ ./crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora....C1.inst application ONLINE ONLINE rac1
ora....C2.inst application ONLINE ONLINE rac2
ora.RAC.db application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2


測試集群應用程序啟動狀態:(在rac1,rac2上分別測試)(ORACLE)
$ cd /home/oracle/app/crs/bin
$ unset LANG
$ srvctl status nodeapps -n rac1
VIP is running on node: rac1
GSD is running on node: rac1
Listener is running on node: rac1
ONS daemon is running on node: rac1

$srvctl status nodeapps -n rac2
VIP is running on node: rac2
GSD is running on node: rac2
Listener is running on node: rac2
ONS daemon is running on node: rac2

測試集群ASM狀態:(在rac1,rac2上分別測試) (ORACLE)
$ cd /home/oracle/app/crs/bin
$ srvctl status asm -n rac1
ASM instance +ASM1 is running on node rac1.

$ srvctl status asm -n rac2
ASM instance +ASM2 is running on node rac2.

測試命令: tnsping rac1 ,tnsping rac2 ,tnsping RAC1 ,tnsping RAC2(在rac1,rac2上分別測試)
具體結果如下:
tnsping [oracle@rac2 ~]$ tnsping rac1
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 16-SEP-2008 23:33:42
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.WORLD) (INSTANCE_NAME = RAC1)) )
OK (80 msec)
[oracle@rac2 ~]$ tnsping rac2
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 16-SEP-2008 23:33:51
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.WORLD) (INSTANCE_NAME = RAC2)) )
OK (20 msec)

windows客戶端連接RAC的配置方法:
Tnsname.ora中的(D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN)
RAC =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
       (LOAD_BALANCE = yes)
     )
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = RAC.WORLD)
     )
   )

在C:\windows\system32\drivers\etc中的hosts中加入
192.168.1.200 rac1-vip
192.168.1.201 rac2-vip

測試檢查RAC實例連接:(在rac1,rac2上分別測試)
驗證您能夠連接到每個節點上的實例和服務。 (注意:這裡的password,需要你輸入你創建資料庫的時候,賦予sys,system,那個初始密碼)
sqlplus
system/password@rac1
sqlplus
system/password@rac2
sqlplus
system/password@rac
登錄上後,都執行一下: SQL>select * from gv$instance;有結果返回就正常了。
再執行
SQL>select instance_name,host_name,archiver,thread#,status from gv$instance;
INSTANCE_NAME HOST_NAME ARCHIVER THREAD# STATUS
RAC2 rac2.localdomain STOPPED 2 OPEN
RAC1 rac1.localdomain STOPPED 1 OPEN

測試檢查資料庫配置:(在rac1,rac2上分別測試)
[oracle@rac1 ~]$ export ORACLE_SID=RAC1 // ORACLE_SID=RAC2 ,但不能是ORACLE_SID=RAC,沒有這個資源
[oracle@rac1 ~]$ sqlplus / as sysdba;
SQL> show sga

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 113247824 bytes
Database Buffers 167772160 bytes
Redo Buffers 2973696 bytes

SQL> select file_name,bytes/1024/1024 from dba_data_files;
FILE_NAME BYTES/1024/1024
+ORCLVOL/rac/datafile/system.262.665602059 400
+ORCLVOL/rac/datafile/undotbs1.263.665602155 200
+ORCLVOL/rac/datafile/sysaux.264.665602193 120
+ORCLVOL/rac/datafile/undotbs2.266.665602251 200
+ORCLVOL/rac/datafile/users.267.665602287 5
+ORCLVOL/rac/datafile/wisettms.273.665626799 100

//wisettms是我剛建的,是我通過http://192.168.1.100:1158/em方式進入創建的。
SQL> select group#, type, member,is_recovery_dest_file from v$logfile order by group#;
GROUP# TYPE MEMBER IS_REC
1 ONLINE +ORCLVOL/rac/onlinelog/group_1.258.665601953 NO
1 ONLINE +ORCLVOL/rac/onlinelog/group_1.259.665601963 YES
2 ONLINE +ORCLVOL/rac/onlinelog/group_2.260.665601973 NO
2 ONLINE +ORCLVOL/rac/onlinelog/group_2.261.665601981 YES
3 ONLINE +ORCLVOL/rac/onlinelog/group_3.268.665608153 NO
3 ONLINE +ORCLVOL/rac/onlinelog/group_3.269.665608175 YES
4 ONLINE +ORCLVOL/rac/onlinelog/group_4.270.665608195 NO
4 ONLINE +ORCLVOL/rac/onlinelog/group_4.271.665608215 YES
SQL> quit

[oracle@rac1 ~]$ export ORACLE_SID=+ASM1 // ORACLE_SID=+ASM2 ,但不能是ORACLE_SID=+ASM,沒有這個資源
[oracle@rac1 ~]$ sqlplus / as sysdba;
SQL> show sga
Total System Global Area 92274688 bytes
Fixed Size 1217884 bytes
Variable Size 65890980 bytes
ASM Cache 25165824 bytes

SQL> show parameter asm_disk
NAME TYPE VALUE
asm_diskgroups string ORCLVOL

SQL> select group_number, name, allocation_unit_size alloc_unit_size, state, type, total_mb,usable_file_mb,FREE_MB from v$asm_diskgroup;
GROUP_NUMBER NAME ALLOC_UNIT_SIZE STATE TYPE TOTAL_MB USABLE_FILE_MB FREE_MB
1 ORCLVOL 1048576 MOUNTED NORMAL 8188 1350 4747


SQL> select name,path,header_status,total_mb free_mb,trunc(bytes_read/1024/1024) read_mb,trunc(bytes_written/1024/1024) write_mb from v$asm_disk;


測試命令: sqlplus / as sysdba ,分別登錄到rac1,rac2上執行select instance_name,host_name from v$instance;
具體結果如下:
[oracle@rac2 ~]$ sqlplus / as sysdba;
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 16 23:53:32 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> conn
sys/password@rac1 as sysdba
Connected.
SQL> select instance_name,host_name from v$instance;
INSTANCE_NAME HOST_NAME
-------------------------------------------------- -------------------------------------------------- -------
RAC1 rac1.localdomain
SQL>quit

測試單個服務:(注意:這裡的password,需要你輸入你創建資料庫的時候,賦予sys,system,那個初始密碼)
[oracle@rac1 admin]$ sqlplus / as sysdba
SQL> conn
sys/password@rac1 as sysdba
Connected.

SQL> SELECT instance_name, host_name FROM v$instance;
INSTANCE_NAME HOST_NAME
RAC1 rac1.localdomain

SQL> conn sys/password@rac2 as sysdba;
Connected.
SQL> select instance_name,host_name from v$instance;
INSTANCE_NAME HOST_NAME
RAC2 rac2.localdomain

SQL> quit
測試集群實例服務:(注意:這裡的password,需要你輸入你創建資料庫的時候,賦予sys,system,那個初始密碼)
[oracle@rac1 admin]$ sqlplus / as sysdba
SQL> conn
sys/password@rac1 as sysdba
Connected.
SQL> SELECT * FROM v$active_instances;
INST_NUMBER-----------INST_NAME
           1 rac1.localdomain:RAC1
           2 rac2.localdomain:RAC2
SQL> SELECT inst_id, username, sid, serial# FROM gv$session WHERE username IS NOT NULL;


遇到:
SQL> conn
sys/password@rac2 as sysdba;
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
Warning: You are no longer connected to ORACLE.
解決方法如下:沒有找到,最好重新裝rac系統。


測試命令:察看listner基本信息,listener.ora, tnsnames.ora
在rac1上:
[oracle@rac2 ~]$ cd app/oracle/product/10.2.0/db_1/network/admin/
[oracle@rac1 admin]$ cat listener.ora
# listener.ora.rac1 Network Configuration File: /home/oracle/app/oracle/product/10.2.0/db_1/network/admin/listener.ora.rac1
# Generated by Oracle configuration tools.

LISTENER_RAC1 =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521)(IP = FIRST))
       )
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)(IP = FIRST))
       )
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
       )
     )
   )

在rac2上:
[oracle@rac2 ~]$ cd app/oracle/product/10.2.0/db_1/network/admin/
[oracle@rac2 bin]$ more /home/oracle/app/oracle/product/10.2.0/db_1/network/adm
in/listener.ora
# listener.ora.rac2 Network Configuration File: /home/oracle/app/oracle/product/
10.2.0/db_1/network/admin/listener.ora.rac2
# Generated by Oracle configuration tools.

LISTENER_RAC2 =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)(IP = FIRST))
       )
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521)(IP = FIRS
T))
       )
       (ADDRESS_LIST =
         (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
       )
     )
   )

測試命令:察看tnsnames.ora基本信息, rac1和rac2是一樣的,這裡只顯示rac1上的內容
[oracle@rac1 ~]$ cd app/oracle/product/10.2.0/db_1/network/admin/
[oracle@rac1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

RAC =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521))
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.localdomain)(PORT = 1521))
     (LOAD_BALANCE = yes)
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = RAC.WORLD)
     )
   )

LISTENERS_RAC =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521))
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.localdomain)(PORT = 1521))
   )

RAC2 =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.localdomain)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = RAC.WORLD)
       (INSTANCE_NAME = RAC2)
     )
   )

RAC1 =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.localdomain)(PORT = 1521))
     (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = RAC.WORLD)
       (INSTANCE_NAME = RAC1)
     )
   )

測試Listener狀態:(rac1,rac2都需要運行)
在rac1上:
[oracle@rac1 ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-SEP-2008 00:29:55
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER_RAC1
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 16-SEP-2008 17:01:55
Uptime 0 days 7 hr. 28 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /home/oracle/app/oracle/product/10.2.0/db_1/network/log/listener_rac1.log
Listening Endpoints Summary...
   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.200)(PORT=1521)))
   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.100)(PORT=1521)))
   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Services Summary...
Service "+ASM" has 1 instance(s).
   Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
   Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "RAC.WORLD" has 2 instance(s).
   Instance "RAC1", status READY, has 2 handler(s) for this service...
   Instance "RAC2", status READY, has 1 handler(s) for this service...
Service "RAC_XPT.WORLD" has 2 instance(s).
   Instance "RAC1", status READY, has 2 handler(s) for this service...
   Instance "RAC2", status READY, has 1 handler(s) for this service...
The command completed successfully

在rac2上:
[oracle@rac2 ~]$ lsnrctl status
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-SEP-2008 00:32:39
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER_RAC2
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 16-SEP-2008 17:02:05
Uptime 0 days 7 hr. 30 min. 34 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File /home/oracle/app/oracle/product/10.2.0/db_1/network/log/listener_rac2.log
Listening Endpoints Summary...
   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.201)(PORT=1521)))
   (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.101)(PORT=1521)))
   (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Services Summary...
Service "+ASM" has 1 instance(s).
   Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
   Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "RAC.WORLD" has 2 instance(s).
   Instance "RAC1", status READY, has 1 handler(s) for this service...
   Instance "RAC2", status READY, has 2 handler(s) for this service...
Service "RAC_XPT.WORLD" has 2 instance(s).
   Instance "RAC1", status READY, has 1 handler(s) for this service...
   Instance "RAC2", status READY, has 2 handler(s) for this service...
The command completed successfully
[oracle@rac2 ~]$


啟動資料庫步驟:
1、首先能使用$crs_stat -t命令查看系統狀態,如果不能,請執行以下方法:
在兩台計算機上都要運行
a、# cd /etc/init.d
   # ./init.crs stop
   # ./init.crs disable
b、兩台計算機都需要重新啟動
   # reboot
c、兩台計算機都需要執行

   方法一:
   # cd /etc/init.d
   # ./init.crs enable
   # ./init.crs start
  
   方法二(推薦):
   # cd /home/oracle/app/crs/bin
   # crsctl stop crs --停止crs服務
   # crs_stop -all --停止所有的crs服務
   # crsctl start crs
  
等待90秒鐘,再用crs_stat -t在兩台計算機上測試一下:
  只要不是,不管有多少的unknown都行.
2、其次,使用srvctl操作資料庫,不用crs_stop -f ,crs_start -f來啟動服務,因為crs_stop -f,crs_start -f啟動服務.
a、$ ./srvctl start nodeapps -n rac1 //在rac1上執行
   $ ./srvctl start nodeapps -n rac2 //在rac2上執行
   $ ./srvctl start instance -d rac -i rac1 //在rac1上執行
   $ ./srvctl start instance -d rac -i rac2 //在rac2上執行
   $ ./crs_stat -t


以下這個文檔有參考價值:
CRS及相關服務的常用命令的演示
1、查看狀態的命令
# su–oracle --先切換到oracle用戶
$ crs_stat -t --查看crs及所有的service的狀態
$ crsctl check crs --用crsctl命令,檢查crs相關服務的狀態
$ srvctl status nodeapps -n rac1 (rac2) --使用srvctl查看所有節點上的服務是否正常
$ srvctl status database -d rac --使用srvctl查看資料庫狀態
啟動和關閉相關服務的命令
# su – oracle
$ crs_start–all --啟動所有的crs服務
$ crs_stop–all --停止所有的crs服務
$ crsctl start crs --啟動crs服務
$ crsctl stop crs --停止crs服務
$ srvctl start nodeapps -n rac1(rac2) --啟動某節點上所有的應用
$ srvctl stop nodeapps -n rac1(rac2) --停止某節點上所有的應用
$ srvctl start listener -n rac1(rac2) --啟動某個節點的listener
$ srvctl stop listener -n rac1(rac2) --停止某個節點的listener
$ srvctl start instance–d rac–i rac1(rac2) --啟動某個instance
$ srvctl stop instance–d rac–i rac1(rac2) --停止某個instance
$ srvctl start database–d rac --啟動資料庫
$ srvctl stop database–d rac --停止資料庫

nodeapps :涉及gsd , ons , lsnr這三個服務

停止Oracle10g RAC的方法:
$ lsnrctl stop (每個節點上停止監聽,也可以用srvctl來操作)
$ emctl stop dbconsole (每個節點停止dbconsole)
$ srvctl stop database -d rac (停止資料庫所有實例)
$ srvctl stop nodeapps -n rac1 (停節點1服務)
$ srvctl stop nodeapps -n rac2 (停節點2服務)
# /etc/init.d/init.crs stop (root停cluster軟件)
或者用$ crs_stop -all
然後# init 0關閉服務器,或者如果重新啟動#init 6

啟動Oracle10g RAC的方法:
(如果OS重新啟動,那麼下面的所有服務是自動打開的【除了dbconsole】,不用手工執行了)。
$ lsnrctl start (每個節點上啟動監聽,也可以用srvctl來操作)
$ emctl start dbconsole (每個節點啟動dbconsole)
$ srvctl start database -d rac (啟動資料庫所有實例)
$ srvctl start nodeapps -n rac1 (啟動節點1服務)
$ srvctl start nodeapps -n rac2 (啟動節點2服務)
# /etc/init.d/init.crs start (root啟動cluster軟件)
或者用$ crs_start -all

$ srvctl start nodeapps -n rac1 (啟動節點1服務)
我估計等於
$ crs_start ora.rac1.LISTENER_RAC1.lsnr
$ crs_start ora.rac1.gsd
$ crs_start ora.rac1.ons
$ crs_start ora.rac1.vip

如果執行srvctl,報告有資源錯誤,首先是在rac1,rac2上都執行
# cd /etc/init.d
# ./init.crs stop
都停下後,執行
# ./init.crs start
等待90秒後,
$ ./crs_stat -t
如果還有沒有ONLINE的資源,就使用
$ ./crs_stop -f ...
$ ./crs_start -f ...
就可以了。

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 4-安裝Database

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 4-安裝Database

八、安裝Database軟件
(保證$ ./crsctl check crs $ ./crs_stat -t ,這兩個命令執行的結果都是正常)
(要新開啟一個終端,防止ORACLE_HOME=/home/oracle/app/crs的影響,我們要的位置是ORACLE_HOME=/home/oracle/app/oracle)
1.開始安裝(oracle用戶登錄)
$ cd /home/oracle/databases
$ ./runInstaller -ignoreSysPrereqs -jreLoc /usr/java/jdk1.5.0_16/jre
2.安裝圖形界面的步驟:
下一步(N) -->
企業版(E)(1.26GB)下一步(N) -->
下一步(N) -->
全選(S) -->
下一步(N) -->
(1個警告,3個要求待驗證.)下一步(N) -->
是(Y) -->
//可能出現:問是否升級選擇否(N) -->
僅安裝數據庫軟件(S) -->
下一步(N) -->
安裝(I),現在等著,大概2小時分鐘時間
10:51 - 12:54

然後在rac1,rac2上,執行root.sh
$ su - root
# cd /home/oracle/app/oracle/product/10.2.0/db_1
# ./root.sh
都是默認-->確定
注意點:
1.選擇安裝節點時,把所有節點都選上
2.選擇配置選項時,只安裝數據庫軟件,數據可以留以後再配
    選擇:install database software only
3.同樣要注意時間同步問題.


$ su - root
# /etc/init.d/init.crs stop啟動底層服務
報Error while stopping resources.Possible cause : CRSD is down的錯誤
解決辦法:
在重新啟動兩台虛擬機前,關閉服務(兩台都要執行)
# cd /etc/init.d
# ./init.crs disable
重新啟動後,兩台計算機都要執行
# cd /etc/init.d
# ./init.crs enable
# ./init.crs start
# ./init.crs stop
# ./init.crs start
就可以了執行(crs_stat -t遇到unknown節點)
$ ./crs_stop -f ...
$ ./crs_start -f ...
比如說: ora.rac1.gsd UNKNOWN
$ ./crs_stop -f ora.rac1.gsd
$ ./crs_start -f ora.rac1.gsd
就可以了.

[oracle@rac1 bin]$ ./crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2


九、創建數據庫和ASM實例
(保證$ ./crsctl check crs $ ./crs_stat -t ,這兩個命令執行的結果都是正常)
顯示是亂碼的解決方法:
如果你用命令行進入dbca的,先敲入unset LANG以取消語言設定,然後出來的GUI界面就是英文的,我想只能這樣好受一點,總比亂碼好一點吧
1.開始安裝(oracle用戶登錄)
$ cd /home/oracle/app/oracle/product/10.2.0/db_1/bin
$ unset LANG
$ dbca

2.安裝圖形界面的步驟:
Oracle Real Application Clusters database Next -->
Create a Database Next -->
Select All Next -->
Custom Database Next-->
"RAC.WORLD" and "RAC" Next -->
不選擇什麼Next -->
輸入數據庫密碼Next -->
"Automatic Storage Management (ASM)" Next -->
Create initialization parameter file(IFILE) Next -->
輸入sys新的密碼-->
Yes (DBCA will now create and start the ASM instance) -->
Yes (Do you want listener on port 1521) -->
Create New -->
Disk Group Name取名字叫orclvol ,並選中OCL-VOL1,OCL-VOL2,OCL-VOL3,OCL-VOL4點ok -->
Next -->
Data Area: +ORCLVOL(不用改變) Next -->
勾選Specify Flash Recovery Area ,選擇Browse... -->
點擊ok -->
Flash Recovery Area: +ORCLVOL ,Flash Recovery Area Size:2048 MB (不用改變) ,不要勾選Enable Archiving(歸檔日誌) -->
取消Oracle Data Mining ,Oracle Text , Oracle OLAP , Oracle Spatial ,留下Enterprise Manager Repository勾選-->
點擊Standard Database Components...按鈕-->
不選擇Oracle XML DB,勾選Oracle JVM -->
ok -->
Next -->
Next -->
選擇Custom ,其他缺省-->
Next -->
Next -->
Finish -->
ok
安裝完後,exit
現在等著很長的時間,因為我是從晚上0:19,在第二天早上6:19發現有集群上的錯誤,從新啟動,到6:52才才裝好.反正一句話,這個時間安裝得長.
測試一下:
http://192.168.1.100:1158/em

安裝的過程中
出現fatal error:ora.rac2.LISTENER_RAC2.lsnr或者類似的資源不能啟動
解決辦法:
$ crs_stop -f ora.rac2.LISTENER_RAC2.lsnr
$ crs_start -f ora.rac2.LISTENER_RAC2.lsnr
$ crs_stop -f ora.rac2.ASM2.asm
$ crs_start -f ora.rac2.ASM2.asm

[oracle@rac2 bin]$ ./crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora....C1.inst application ONLINE ONLINE rac1
ora....C2.inst application ONLINE ONLINE rac2
ora.RAC.db application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac2

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 3-安裝Clusterware

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 3-安裝Clusterware
七、安裝Clusterware
注意:時間同步很重要,否則安裝過程出錯.因為vmware的時間問題,我在安裝到同步文件到rac2這步時,每2秒同步一次時間,不然安裝出錯.     在這項配置中,除非特別說明,所有操作都是基於oracle用戶的.
1、利用ftp,把10201_clusterware_linux32.zip下載到rac1上(用oracle用戶下載),並解壓
$ cd /home/oracle
$ unzip -q 10201_clusterware_linux32.zip
$ rm -rf 10201_clusterware_linux32.zip

2、檢查安裝環境
在安裝crs之前,建議先利用CVU(Cluster Verification Utility)檢查CRS的安裝前環境(需要先安裝cvuqdisk-1.0.1-1.rpm ,位於clusterware/rpm/目錄下)
[oracle@rac1]$ /home/oracle/clusterware/cluvfy/runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

需要注意幾點,其返回的信息中有幾個錯誤可忽略~~

.與VIP查找一組適合的接口有關,錯誤信息如下:
錯誤信息如下:
ERROR:
Could not find a suitable set of interfaces for VIPs.

這是一個bug,Metalink中有詳細說明,doc.id:338924.1,如說明中所述,可以忽略該錯誤,沒什麼問題.

.有一堆包的驗證會出現錯誤,要么提示找不到,要么是版本不對.例如:
Check: Package existence for "compat-gcc-7.3-2.96.128"
   Node Name Status Comment
   ------------------------------ -------------------- ---------- ----------------
   node2 missing failed
   node1 missing failed
Result: Package existence check failed for "compat-gcc-7.3-2.96.128".

...........
...........
這之類的吧

不用管它們,這也是一個BUG,只要確認節點中都已經安裝了正確版本的compat-*包即可.

.內存檢查失敗
可以忽略的錯誤,內存差一點並不會影響到crs的安裝,只是慢一些而已.


2、開始安裝crs

會遇到Checking operating system version: must be redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2這個錯誤
解決方法如下:(這個方法還沒有成功,還沒有找到CentOS具體的配置,你在運行runInstaller的時候,需要加上-ignoreSysPrereqs參數,系統檢查的時候,強制下一步)
$cd /home/oracle/clusterware/install
$cp oraparam.ini oraparam.ini.bak
$gedit oraparam.ini
### #[Certified Versions]
Linux=redhat-3,SuSE-9,redhat-4,centos-5,UnitedLinux-1.0,asianux-1,asianux-2]
再添加
[Linux-CentOS release 5.2 (Final)-optional]
TEMP_SPACE=80
SWAP_SPACE=150
MIN_DISPLAY_COLORS=256

解決中文亂碼的方法:安裝JDK方法
把jdk-1_5_0_16-linux-i586-rpm.bin從SUN公司網站下下來以後,ftp到rac1,rac2上(root權限)
# cd /root
# chmod 777 jdk-1_5_0_16-linux-i586-rpm.bin
# ./jdk-1_5_0_16-linux-i586-rpm.bin
按默認到文件最後,輸入yes就可以了.
# rm -rf jdk-1_5_0_16-linux-i586-rpm.bin
# exit

如果使用中文安裝,安裝出現的亂碼主要原因來自於oracle自帶的jre,所以我們首先安裝自己的java的jre安裝好後 (RAC2也必須安裝)
$ cd /home/oracle/clusterware
$ export ORACLE_HOME=/home/oracle/app/crs
$./runInstaller -ignoreSysPrereqs -jreLoc /usr/java/jdk1.5.0_16/jre

rac的安裝並沒有太明顯的主從關係,一般我們認為,在哪個上面執行了安裝,哪個就是主(實際也不完全是這樣,主節點安裝的時候,也會自動將文件複製到其它節點的)
這裡我們選擇rac1進行安裝~~


安裝圖形界面的步驟:
下一步(N) -->
下一步(N) -->
下一步(N) -->
是(Y) -->
(1個警告,1個要求待驗證.)下一步(N) -->
是(Y) -->
添加(A) -->
從上到下,依次是: rac2.localdomain , rac2-priv.localdomain , rac2-vip.localdomain -->
確定(O) -->
下一步(N) -->
選中eth0,點擊編輯(E) -->
把專用選擇成公用-->
確定-->
下一步(N) -->
外部冗餘(E) -->
在空白處輸入/dev/raw/raw1 -->
下一步(N) -->
外部冗餘(E) -->
在空白處輸入/dev/raw/raw2 -->
下一步(N) -->
(如果這時報請檢查/dev/raw/raw2是否有oracle權限時
在rac1,rac2上執行:
# chown oralce:oinstall /dev/raw/raw2
# chmod 660 /dev/raw/raw2
就行了.
下一步(N) -->
)
安裝(I),現在等著,大概1小20時分鐘時間


關於磁盤冗餘
指定OCR使用外部冗餘還是內部冗餘,如果服務器作了raid,不需要內部冗餘,直接選擇外部冗餘.
指定表決磁盤(所謂表決磁盤,實際就是一個文件),仍然使用外部冗餘.


3、(一定會碰到這個錯誤,請在rac1的root.sh執行之前做,rac1,rac2都要做)
錯誤描述:在/home/oracle/app/crs/bin下,運行vipca就會有這個錯誤
(這個錯誤一定會碰見,因此在rac1在執行./root.sh之後,請先解決這個錯誤)
/home/oracle/app/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
可以按照如下方式解決:

修改vipca文件(需要在兩個節點上操作)
[oracle@rac2 bin]$ cp /home/oracle/app/crs/bin/vipca /home/oracle/app/crs/bin/vipca.bak
[oracle@rac2 bin]$ gedit /home/oracle/app/crs/bin/vipca
找到如下內容:
       Remove this workaround when the bug 3937317 is fixed
       arch=`uname -m`
       if [ "$arch" = "i686" -o "$arch" = "ia64" ]
       then
             LD_ASSUME_KERNEL=2.4.19
             export LD_ASSUME_KERNEL
       fi
       #End workaround
在fi後新添加一行:
unset LD_ASSUME_KERNEL

以及srvctl文件(需要在兩個節點上操作)
[oracle@rac2 bin]$ cp /home/oracle/app/crs/bin/srvctl /home/oracle/app/crs/bin/srvctl.bak
[oracle@rac2 bin]$ gedit /home/oracle/app/crs/bin/srvctl
找到如下內容:
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
同樣在其後新增加一行:
unset LD_ASSUME_KERNEL

4、在rac1,rac2上,執行orainstRoot.sh和root.sh腳本.
$ su - root
# cd /home/oracle/app/oracle/oraInventory
# ./orainstRoot.sh
# cd /home/oracle/app/crs
# ./root.sh


遇到Native: listNetInterfaces:[3]的解決辦法:(這個的時機是在rac1,rac2都執行完root.sh後,點確定之前,如果錯誤沒有出現,可以不做這一步)
現象:
[root@rac2 bin]# ./vipca
Error 0(Native: listNetInterfaces:[3])
   [Error 0(Native: listNetInterfaces:[3])]
解決辦法:
[root@rac2 bin]# ./oifcfg iflist
eth0 192.168.1.0
eth1 10.0.0.0
[root@rac2 bin]# ./oifcfg setif -global eth0/192.168.1.0:public
[root@rac2 bin]# ./oifcfg setif -global eth1/10.0.0.0:cluster_interconnect
[root@rac2 bin]# ./oifcfg getif
eth0 192.168.1.0 global public
eth1 10.0.0.0 global cluster_interconnect
然後新開一個終端,要運行
# unset LANG
# /home/oracle/app/crs/bin/vipca
進行配置


遇到:IP地址"rac1-vip"已被使用.請輸入一個未使用的IP地址.的解決辦法:
手工重新配置VIP
使用root用戶,在rac2上操作(需要圖形界面)(這個的時機是在rac1,rac2都執行完root.sh後,點確定之前)
[root@rac2 bin]# unset LANG
[root@rac2 bin]# /home/oracle/app/crs/bin/vipca
Next
選擇eth0
填寫rac1和rac2的vip地址,如:
rac1 rac1-vip.localdomain 192.168.1.200 255.255.255.0
rac2 rac2-vip.localdomain 192.168.1.201 255.255.255.0
Next
vipca開始自動配置

遇到:
Warning: Cannot convert string "-isas-song ti-medium-r-normal--*-140-*-*-c-*-
gb2312.1980-0" to type FontStruct的解決辦法:
先敲入unset LANG以取消語言設定,然後出來的GUI界面就是英文的,我想只能這樣好受一點,總比亂碼好一點吧.


************************************************** ************************
啟動vip時失敗報錯,查看日誌/home/oracle/app/crs/log/rac1/racg/ora.rac1.vip.log
Default gateway is not defined
設好網關,重試,OK

啟動ons失敗報錯,查看日誌/home/oracle/app/crs/log/rac1/racg/ora.rac1.ons.log
Failed to get IP for localhost
vi /etc/hosts
添加127.0.0.1 rac1 localhost.localdomain localhost
重試,OK
配置好以後會有一個eth0:1的虛擬網卡,ip地址為vip
重試oracle cluster verfication utility ,通過,OK
被*包圍的這部分我安裝的時候沒有出現,但我保留.

host and port number already configrued in OCR
************************************************** ************************

5、最後一步oracle cluster verfication utility可能會失敗:

Checking existence of VIP node application (required)
Check failed.
Check failed on nodes:
         rac2,rac1

執行成功後返回圖形界面,點擊ok,這時開始執行環境配置.

如果在/home/oracle/app/oracle/oraInventory/logs/installActions...文件中
報WARNING: RAC2.localdomain:6200 already configured.WARNING: RAC1.localdomain:6200 already configured.的錯誤
請執行
$cd /home/oracle/app/crs/bin
$racgons remove_config rac1.localdomain:6200
$racgons remove_config rac2.localdomain:6200
只需要在rac1上執行就行.
至此,Clusterware安裝完畢.

重新啟動兩台操作系統
CRS安裝結束
從/home/oracle/app/crs/bin目錄中運行olsnodes驗證安裝已成功,例如:
用oracle用戶登錄
$ cd /home/oracle/app/crs/bin
$ olsnodes
rac1
rac2
Once CRS已安裝並運行;

禁止Clusterware在系統重啟後自動啟動的方法:
# /etc/init.d/init.crs disable
啟動Clusterware在系統重啟後自動啟動的方法:
# /etc/init.d/init.crs enable


[oracle@rac1 ~]$ /home/oracle/app/crs/bin./crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora.rac1.gsd application ONLINE UNKNOWN rac1
ora.rac1.ons application ONLINE UNKNOWN rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora.rac2.gsd application ONLINE UNKNOWN rac2
ora.rac2.ons application ONLINE UNKNOWN rac2
ora.rac2.vip application ONLINE ONLINE rac2

[oracle@rac1 bin]$ crs_stop -all
Attempting to stop `ora.rac1.vip` on member `rac1`
Attempting to stop `ora.rac2.vip` on member `rac2`
Stop of `ora.rac2.vip` on member `rac2` succeeded.
Stop of `ora.rac1.vip` on member `rac1` succeeded.

[oracle@rac1 bin]$ crs_start -all
Attempting to start `ora.rac1.vip` on member `rac1`
Attempting to start `ora.rac2.vip` on member `rac2`
Start of `ora.rac1.vip` on member `rac1` succeeded.
Start of `ora.rac2.vip` on member `rac2` succeeded.
上面的這些crs_stat -t輸出是我多次安裝時出錯的狀態, 我裝好了一次,狀態如下:
[oracle@rac1 bin]$ crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac1

查看CRS服務狀態
[oracle@rac1 bin]$ ./crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

結果顯示正確就可以.不報錯的話當然就不需要執行了,如果沒有錯誤你應該也找不到configToolFailedCommands.sh文件.

重新啟動兩台計算機後,如果發現有unknown的狀態,解決方法如下:
[oracle@rac1 bin]$ crs_stop -f ora.rac1.gsd
[oracle@rac1 bin]$ crs_start -f ora.rac1.gsd
crs_stop -f強制關閉,如果不強制-f關閉,那麼實在不知道怎麼辦了.

如果crs_stop -f還是啟動不了的話,請執行以下語句:
停止CRS:
[oracle@rac1 bin]$ /etc/init.d/init.crs stop //或者
[oracle@rac1 bin]$./crsctl stop crs //或者
[oracle@rac1 bin]$ ./crs_stop –all
啟動CRS:
# /etc/init.d/init.crs start //或者
[oracle@rac1 bin]$ ./crsctl start crs
然後等待90秒以後,執行以下指令:
[oracle@rac1 bin]$ ./crsctl check crs
[oracle@rac1 bin]$./crs_stat -t
如果還發現有unknown的狀態,解決方法如下:
[oracle@rac1 bin]$ ./crs_stop -f ora.rac1.gsd //關閉unknown狀態的節點,ora.rac1.gsd這個是我的例子,自己相應地改就是了.
[oracle@rac1 bin]$ ./crs_start -f ora.rac1.gsd
最後實現的效果是:
[oracle@rac1 bin]$ crs_stat -t
Name Type Target State Host
-------------------------------------------------- ----------
ora.rac1.gsd application ONLINE ONLINE rac1
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip application ONLINE ONLINE rac1
ora.rac2.gsd application ONLINE ONLINE rac2
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip application ONLINE ONLINE rac1

遇到:在運行./olsnodes報:的錯誤時的解決辦法:
[oracle@rac1 bin]$ ./oracleasm scandisks
[oracle@rac1 bin]$ ./oracleasm listdisks
# reboot
重新啟動後,就可以了。

遇到CRS-0184: Cannot communicate with the CRS daemon.的錯誤
解決方法:
$ su - root
# /etc/init.d/init.crs start啟動底層服務,rac1,rac2都要啟動
# exit
等待90秒鐘
(不建議使用以下的解決辦法)
$ cd /home/oracle/app/crs/bin
$ ./crsctl start resources啟動資源
如果還是啟動不了
更改兩個節點的/etc/security/limits.conf
修改下面的配置:

fsize = -1
core = 2097151
cpu = -1
data = -1
rss = -1
stack = -1
nofiles = -1
重新啟動系統:
一切正常:
如果遇到unkown,見上面的解決辦法.
現在可以安裝Oracle RAC軟件的其餘部分了.
************************************************** ********************************************
建議:現在就關機,把rac1,rac2虛擬機備份一個,以防後面做錯,前面的就白做了.
************************************************** ********************************************

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 2-配置磁碟

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1)安裝文章 2-配置磁碟
六、配置磁盤(2個裸設備4個ASMDISK)(這節內容除了fdisk分區外,只用rac1上運行,其他步驟需要在rac1,rac2上運行)
(如果你後面裝好了數據庫軟件,以及asm部分,這時你想重新裝系統,建議你利用vmware-vdiskmanager工具重新生成物理的文件)
1、配置目錄
[root@rac1 ~]# mkdir -p /home/oracle/app/oracle (oracle軟件安裝目錄)(rac2也需要執行)
[root@rac1 ~]# mkdir -p /home/oracle/app/crs (集群就緒軟件目錄)(rac2也需要執行)

注:下面的兩個文件不需要創建,建好raw設備直接鏈接過來即可
/home/oracle/app/crs/ocr.crs (集群註冊) OCR大概需要至少100M空間
/home/oracle/app/crs/vote.crs (表決磁盤) voting大概需要至少20M的空間

[root@rac1 ~]# chown -R oracle:oinstall /home/oracle/app (rac2也需要執行)
[root@rac1 ~]# chmod -R 775 /home/oracle/app (rac2也需要執行)

使用fdisk對共享磁盤分區,只需在一個節點上執行,創建完後須要分別重起兩個節點,重起後查看兩個節點的磁盤是否都已經出現了剛才創建的分區
對/dev/sdb
# fdisk /dev/sdb
m
d
n
p
1
確認
25
t
83
n
p
2
確認
51
t
2
83
w

對/dev/sdc /dev/sdd /dev/sde /dev/sdf都做以下操作:
# fdisk /dev/sdc
m
d
n
p
1
確認
確認
t
83
w
操作完後,得結果大致如下:
其他盤類似,如
#fdisk -l
   Device Boot Start End Blocks Id System
/dev/sdb1 1 25 200781 83 Linux
/dev/sdb2 26 51 208845 83 Linux
/dev/sdc1 1 261 2096451 83 Linux
/dev/sdd1 1 261 2096451 83 Linux
/dev/sde1 1 261 2096451 83 Linux
/dev/sdf1 1 261 2096451 83 Linux


2、配置raw設備(不能使用lvm+raw)(CentOS安裝的時候,缺省是Linux LVM,需要改成Linux,上面那步已經做了)(rac2也需要執行)
[root@rac1 ~]# raw /dev/raw/raw1 /dev/sdb1 (rac2也需要執行)
[root@rac1 ~]# raw /dev/raw/raw2 /dev/sdb2 (rac2也需要執行)

注:如果在rac2上執行raw /dev/raw/raw2 /dev/sdb2報錯,再執行一次fdisk /dev/sdb ,輸入w就可找到了/dev/sdb2這個設備了.

如果要取消設備的綁定,可以重建綁定這個裸設備到0 0.(如果上面沒有出錯,這步不用執行)
[root@rac1 ~]# raw /dev/raw/raw1 0 0

授權設備
[root@rac1 ~]# chown oracle:oinstall /dev/raw/raw[1-2] (rac2也需要執行)
[root@rac1 ~]# chmod 660 /dev/raw/raw[1-2] (rac2也需要執行)

ORACLE用戶創建鏈接:
使用oracle用戶
[root@rac1 ~]# su - oracle (rac2也需要執行)
[oracle@rac1 ~]$ ln -s /dev/raw/raw1 /home/oracle/app/crs/ocr.crs (rac2也需要執行)
[oracle@rac1 ~]$ ln -s /dev/raw/raw2 /home/oracle/app/crs/vote.crs (rac2也需要執行)
[oracle@rac1 ~]$ exit (rac2也需要執行)

使開機啟動自動綁定raw設備 (rac2也需要執行)
#cp /etc/rc.d/rc.local /etc/rc.d/rc.local.bak.bak
#gedit /etc/rc.d/rc.local
在文件最後添加如下內容:
raw /dev/raw/raw1 /dev/sdb1
raw /dev/raw/raw2 /dev/sdb2
chown oracle:oinstall /dev/raw/raw[1-2]
chmod 660 /dev/raw/raw[1-2]
3、利用ftp,把下載好的asm程序ftp到虛擬機上(用root帳戶來ftp)(rac2也需要執行)
oracleasm-support-2.0.4-1.el5.i386.rpm
oracleasm-2.6.18-92.el5-2.0.4-2.el5.i686.rpm
oracleasmlib-2.0.3-1.el5.i386.rpm

4、配置asm設備(rac2也需要執行)
[root@rac1 ~]# cd /root
[root@rac1 ~]# rpm -ivh oracleasm-support-2.0.4-1.el5.i386.rpm
[root@rac1 ~]# rpm -ivh oracleasm-2.6.18-92.1.10.el5-2.0.4-1.el5.i686.rpm
[root@rac1 ~]# rpm -ivh oracleasmlib-2.0.3-1.el5.i386.rpm

配置ASMLib
(以下操作需要在兩個節點上執行)
[root@rac1 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.

This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.

Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Fix permissions of Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: [ OK ]
Creating /dev/oracleasm mount point: [ OK ]
Loading module "oracleasm": [ OK ]
Mounting ASMlib driver filesystem: [ OK ]
Scanning system for ASM disks: [ OK ]

以上操作將加載oracleasm.o驅動,並且mount上ASM文件系統,同時我們可以通過以下命令來手工的卸載和加載ASMLib
[root@rac1 ~]# /etc/init.d/oracleasm disable //出錯檢查/var/log/messages文件,確認需要更新的內核版本,這個可以不用執行
[root@rac1 ~]# /etc/init.d/oracleasm enable //這個要執行

添加init文件使系統啟動時自動加載ASMLib (rac2也需要執行)
[root@rac1 ~]# cd /etc/rc3.d
[root@rac1 ~]# ln -s ../init.d/oracleasm S99oracleasm
[root@rac1 ~]# ln -s ../init.d/oracleasm K01oracleasm

重新啟動系統,確認ASMLib已經可以自動加載 (rac2也需要執行)
[root@rac1 ~]#lsmod |grep oracleasm
oracleasm 44436 1

以下操作只需在一個節點上操作
創建ASM磁盤(說明:createdisk是針對分區,不是針對磁盤,即:先應將磁盤分區)
(如果重新做了新的磁盤,你需要用deletedisk刪除了,再生成,保險一點)
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdf1

以下操作需在兩個節點上操作
[root@rac1 ~]# /etc/init.d/oracleasm scandisks
[root@rac1 ~]# /etc/init.d/oracleasm listdisks

[root@rac1 ~]# /etc/init.d/oracleasm listdisks //列出ASM磁盤
VOL1
VOL2
VOL3
VOL4

如果要刪除ASM磁盤通過以下命令
[root@rac1 ~]# /etc/init.d/oracleasm deletedisk VOL4

注意:   如果是在RAC環境中的某一個節點中添加了ASM磁盤,那麼需要在其他的節點上運行scandisk來獲取這種變化
[root@rac1 ~]# /etc/init.d/oracleasm scandisks
OK,現在已經完成了創建ASM實例的物理基礎,下面開始安裝數據庫


************************************************** ********************************************
建議:程序下載過去後,關機,把rac1,rac2虛擬機備份一個,以防後面做錯,前面的就白做了.
************************************************** ********************************************

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1) 安裝文章 1

Windows XP + VMWare Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac (10.2.0.1) 安裝文章 1
一、測試環境及目的
主機:一台PC,Intel-32位的CPU(P4 2.8GHz),1.5GB內存,安裝CentOS-5.2-i386-bin-DVD.iso(3.74GB)版本的操作系統,在這個主機(XP)上面安裝了2個虛擬機,全部安裝CentOS-5.2-i386-bin-DVD.iso版本的操作系統,需要進行內核定制(升級到2.6.18-92.1.10.e15).
具體軟硬件環境:
CPU:Intel P4 32bit 2.8GHz
Memory:1.5GB
OS:Windows XP , CentOS5.2 for x86_32bit
App:VMWare Server 1.0.6 build-91891 for windows , Telnet For CentOS 5.2(in DVD), Ftp For CentOS 5.2(yum From Internet) , XManager 2.0 for Windows , jdk-1_5_0_16-linux-i586-rpm.bin
Oracle:10201_clusterware_linux32.zip , 10201_database_linux32.zip , oracleasm-support-2.0.4-1.el5.i386.rpm , oracleasmlib-2.0.3-1.el5.i386.rpm
目的:實現Windows XP + VMware Server 1.0.6 + CentOS 5.2 + Oracle 10g Rac + RAW下的Oracle 10g Rac數據庫安裝及測試.

二、下載軟件
1、下載並安裝VMWare Server 1.0.6 build-91891 for windows
2、下載
我的CentOS 5.2的初始版本號是2.6.18-92.el5,升級內核後是2.6.18-92.1.10.e15(這當然是裝好系統後,用uname -r查看的)(虛擬機要多裝,才會熟練)
內核為什麼要升級,主要是解決時間同步的問題,內核不升級,VMware-tools沒有辦法安裝好,rac之間的時間同步很成問題,這個是我安裝了多次rac過程中難以解決的問題,最後發現的解決辦法。
ASM:選擇IA32體系的(32位系統體系)

(2.6.18-92.1.10.e15)(這個版本的有用,需要下載)
oracleasm-support-2.0.4-1.el5.i386.rpm
oracleasmlib-2.0.3-1.el5.i386.rpm
oracleasm-2.6.18-92.1.10.el5-2.0.4-1.el5.i686.rpm


(2.6.18-92.el5)(這個版本的不用去管了,在這裡還保留,是因為算是個過程的記錄)
oracleasm-support-2.0.4-1.el5.i386.rpm
oracleasmlib-2.0.3-1.el5.i386.rpm
oracleasm-2.6.18-92.el5-2.0.4-1.el5.i686.rpm

(這個版本的有用,需要下載)
oracle clusterware : 10201_clusterware_linux32.zip
oracle database      : 10201_database_linux32.zip

Asm下載地址: http://www.oracle.com/technology/software/tech/linux/asmlib/rhel5.html
下載時看清是x86還是x86_64,一定看好自己的內核版本,特別是小版本號

clusterware下載地址: http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linuxsoft.html
三、創建共享磁碟並配置虛擬機
1、在C:\Program Files\VMware\VMware Server目錄下執行以下命令:
vmware-vdiskmanager -c -s 1Gb -a lsilogic -t 2 "e:\centosshare\ocfs.vmdk" |用於Oracle集群註冊表文件和CRS表決磁盤(ocr,vote)

vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 "e:\centosshare\asm1.vmdk" |用於Oracle的數據文件
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 "e:\centosshare\asm2.vmdk" |用於Oracle的數據文件
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 "e:\centosshare\asm3.vmdk" |用於Oracle的數據文件
vmware-vdiskmanager -c -s 2Gb -a lsilogic -t 2 "e:\centosshare\asm4.vmdk" |用於Oracle的閃回恢復區
2、在vmware server console創建vmware guest OS,選擇typical create-> Other Linux 2.6.x kernel,VirTual machine name取名centosrac1, Use Bridged networking ,虛擬硬盤20GB,不選擇Allocate all disk space now和Split disk into 2GB files,其他都是默認.
硬盤大小選擇20GB,建立方式為虛擬文件.
3、創建好後vmware guest OS之後,給guest加上一塊NIC(也就是網卡)(Edit virtual machine settings -->Add --> Next --> Ethernet Adapter --> Bridged -->完成)
修改內存選擇1024MB=1G(>800MB您就看不到warning了),
4、雙擊Hard Disk (SCSI 0:0)選擇Advanced...,Mode選擇Independent ,Persistent,點擊ok
5、關掉vmware console,在centosrac1目錄下面,打開Other Linux 2.6.x kernel.vmx,在最後空白處添加以下內容
scsi1.present = "TRUE"
scsi1.virtualDev = "lsilogic"
scsi1.sharedBus = "virtual"

scsi1:1.present = "TRUE"
scsi1:1.mode = "independent-persistent"
scsi1:1.filename = "e:\centosshare\ocfs.vmdk"
scsi1:1.deviceType = "disk"

scsi1:2.present = "TRUE"
scsi1:2.mode = "independent-persistent"
scsi1:2.filename = "e:\centosshare\asm1.vmdk"
scsi1:2.deviceType = "disk"

scsi1:3.present = "TRUE"
scsi1:3.mode = "independent-persistent"
scsi1:3.filename = "e:\centosshare\asm2.vmdk"
scsi1:3.deviceType = "disk"

scsi1:4.present = "TRUE"
scsi1:4.mode = "independent-persistent"
scsi1:4.filename = "e:\centosshare\asm3.vmdk"
scsi1:4.deviceType = "disk"

scsi1:5.present = "TRUE"
scsi1:5.mode = "independent-persistent"
scsi1:5.filename = "e:\centosshare\asm4.vmdk"
scsi1:5.deviceType = "disk"

disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.DataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"

這段是對vmware使用共享硬碟的方式進行定義,大多數人都知道配置disk.locking ="false"卻漏掉dataCache
保存退出之後,重新打開您的vmware-console,您就能夠看到vmware guest OS的配置中,都有這些硬盤出現了.
四、安裝CentOS操作系統
1、配置虛擬機CD-ROM device -->Use ISO image -->選擇你的CentOS-5.2-i386-bin-DVD.iso文件位置,然後啟動虛擬機
2、安裝步驟如下:
(如果啟動不了,在虛擬機啟動的時候,按Esc,選擇3 CD-ROM Drive來啟動)
boot:確認
跳過對CD media的檢查: Skip
Next
Chinese(繁體中文)
美國英語式
是(Y)
要選擇察看分區細節,把我們添加的盤(vote,ocr,asm)不要包含到Vl00裡面了.
把檢驗和修改分區方案選擇上
下一步(N)
是(Y)
選擇VolGroup00 -->編輯-->LogVol00-->編輯-->把容量改成18368-->把sdb1 sdc1 sdd1 sde1 sdf1的勾取消掉
達到的效果如下: /dev/sdb1 LVM PV 1019 1 130沒有掛載點(掛載點是空白的),sdc1 sdd1 sde1 sdf1效果也是一樣的.這裡只需要添加這些硬盤,這些硬盤不用掛到文件系統上.
下一步(N)
下一步(N)
下一步(N)
下一步(N)
輸入你的ROOT用戶密碼
下一步(N)

選擇現在定制(C)
下一步(N)

桌面環境選擇GNOME桌面環境
應用程序選擇編輯器,其他的是默認的,不修改
開發選擇GNOME軟件開發開發工具開發庫
服務器選擇Windows文件服務器
基本系統選擇基本,其他的是默認的,不修改
虛擬化不選擇
集群不選擇
集群存儲不選擇
下一步(N)
下一步(N)

大約花費50分鐘時間
然後,VM --> Settings --> CD-ROM
重新引導

前進(F)
防火牆禁用

前進(F)
是(Y)

SELinux設置:禁用
前進(F)
是(Y)

把系統時間改成當前時間
前進(F)

輸入一個新建的一般用戶和密碼
前進(F)

前進(F)
完成(F)
確定(O)

啟動到操作系統後,
需要解決以下問題,請按照先後順序進行解決:
CentOS 5.2在VMware下,如何联網到Internet的問題
VMware Server 1.0.6虛擬機Centos OS5.2系統時間同步的問題
CentOS 5.2_FTP設置的問題
CentOS 5.2_Telnet設置的問題
CentOS 5.2_Xmanager設置的問題
備份CentOS 5.2系統後,網卡設置的問題
開啟CentOS 5.2第二個網卡的問題
sendmail啟動時間過長的問題

a、CentOS在VMware下,如何連接到Internet的解決辦法 1、我的ADSL的IP地址是192.168.1.1
2、配置靜態IP,遮罩,閘道是
192.168.1.100
255.255.255.0
192.168.1.1

3、主DNS配置的是192.168.1.1
4、操作系統重新啟動就可上網了.
步驟:
系統-->管理-->網絡-->雙擊eth0 -->選擇靜態設置的IP地址-->
按照上面的地址信息配置-->硬件設備-->取消關聯到MAC地址的選項-->確定
--> DNS -->主DNS :192.168.1.1
這裡需要把eth1配靜態IP,子網掩碼
10.0.0.1 255.255.255.0配置,選擇當計算機啟動時激活設備(A),取消關聯到MAC地址的選項
eth0配置完新的IP地址,需要取消激活,然後再激活,就能用新的IP地址了.
eth1激活,就能用新的IP地址了.
重新啟動操作系統
# reboot
# ping
www.yam.com
b、VMware Server 1.0.6虛擬機Centos OS5.2系統時間同步的問題
1、升級並安裝gcc和kernel-devel(要保證操作系統能上網)
# yum install gcc kernel-devel
Is this ok [y/N] : y
Is this ok [y/N] : y

2、檢查內核是否一致,這裡肯定不一致
# uname -r
2.6.28-92.e15
# rpm -q kernel-devel
kernel-devel-2.6.28-92.e15
kernel-devel-2.6.28-92.1.10.e15

3、下載新的內核,並安裝
# yum -y upgrade kernel kernel-devel
# reboot 4、驗證是否安裝好了新內核 # ls -d /usr/src/kernels/$(uname -r)*/include
應該出現類似2.6.18-92.1.10.e15內核的信息

5、在CentOS重新啟動後,把虛擬機安裝虛擬工具進行安裝
  go to VM> Install VMware Tools... --> Install
(如果CentOS光盤還沒有退出,可能無法運行虛擬機工具,init 0系統,手動取消CentOS系統光盤(選擇Use physical drive:),再啟動系統,就可以安裝虛擬工具了)
# cd /media/VMware Tools 6、安裝虛擬工具 # cp VMwareTools-1.0.6-91891.tar.gz /tmp
# cd /tmp
# tar -zxf VMwareTools-1.0.6-91891.tar.gz
# rm -rf VMwareTools-1.0.6-91891.tar.gz
# cd /tmp/vmware-tools-distrib
# ./vmware-install.pl

7、一切按確認進行安裝,選擇螢幕頻率時可以是3(推薦),也可以是2

8、修改/etc/X11/xorg.conf文件
# cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak
# gedit /etc/X11/xorg.conf
新添加以下內容(如果已經存在則跳過此步驟):
Section "Monitor"
Identifier "vmware"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "vmmouse"
Option "Protocol" "Auto"
Option "Device" "/dev/input/mouse0"
EndSection

然後找到含有"ServerLayout"的section在Section跟EndSection之間加上以下一行:
InputDevice "Mouse0" "CorePointer"
最後重新啟動操作系統

9、使用虛擬工具
# cd /usr/bin
# vmware-toolbox
或者
(我的CPU是Intel 32位的P4 2.8GHz的處理器,所以選擇bin32,如果你的CPU是AMD 64/Intel 64位的處理器,估計要選擇bin64文件夾下的vmware-toolbox,估計,我沒有測試過)
# cd /tmp/vmware-tools-distrib/lib/bin32
# ./vmware-toolbox

選擇第一頁的
Time synchrononiztion between the virtual machine and the host operating system.
前面的按鈕按下去.

10、修改/boot/grub/grub.conf文件
# cp /boot/grub/grub.conf /boot/grub/grub.conf.bak
# gedit /boot/grub/grub.conf
將kernel /vmlinuz-2.6.18-92.1.10.el15 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
修改成kernel /vmlinuz-2.6.18-92.1.10.el15 ro root=/dev/VolGroup00/LogVol00 rhgb quiet clock=pit nosmp noapic nolapic

11、修改文件(如果已經存在則跳過此步驟):C:\Documents and Settings\All Users\Application Data\VMware\VMware Server\config.ini
添加如下三行:
host.cpukHz = "2800000"
host.noTSC = "TRUE"
ptsc.noTSC = "TRUE"
其中:host.cpukHz要根據你的cpu的實際主頻修改,例子中表示CPU主頻是2.8G。
12、測試一下:
# date 09010000
一會,你發現系統時間自動被改回來,就安裝成功了.


c、CentOS 5.2_FTP設置的問題
步驟如下:
1、運行yum install vsftpd命令(如果有the yum lock警告出現,你把那個告訴你的pid,kill掉就能用yum命令了.)
具體的細節如下:
[root@localhost ~]# yum install vsftpd
都選擇y 2、將/etc/vsftpd/user_list文件和/etc/vsftpd/ftpusers文件中的root這一行註釋掉 # root
需要執行的具體命令是:
#cp /etc/vsftpd/user_list /etc/vsftpd/user_list.bak
#cp /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers.bak
#gedit /etc/vsftpd/user_list把root這一行改成#root
#gedit /etc/vsftpd/ftpusers把root這一行改成#root

3、執行以下命令
# setsebool -P ftpd_disable_trans=1
如果SELinux關閉的話,上面的命令無法執行,那麼請運行ntsysv,選擇vsftpd這個前面加個*,那麼ftp在系統啟動後,會自動啟動.
這裡把防火也也可以關閉了.把iptables前面的*,取消掉.

4、# service vsftpd restart (ftp服務器就可以使用了. )
d、CentOS 5.2_Telnet設置的問題
1、安裝軟件(前提是把光盤加載到系統上,如果加不上,關閉系統再加上光盤後,再啟動系統)[root@localhost CentOS]# cd /media/CentOS_5.2_Final/CentOS
[root@localhost CentOS]# rpm -ivh xinetd-2.3.14-10.e15.i386.rpm
[root@localhost CentOS]# service xinetd start
[root@localhost CentOS]# rpm -ivh telnet-server-0.17-39.el5.i386.rpm
[root@localhost CentOS]# chkconfig telnet on

2、啟動telnet服務
 
  1、開啟服務
方法一:使用ntsysv,在出現的窗口之中,將telnet勾選起來,然後按下OK即可!
 方法二:編輯/etc/xinetd.d/telnet
[root@localhost root]# vi /etc/xinetd.d/telnet
找到disable = yes < ==就是改這裡,將yes改成no即可!服務預設是關閉的
方法三:使用chkconfig命令直接開啟
  [root@localhost root]# chkconfig telnet on
  2、激活服務
telnet是掛在xinetd底下的,所以自然只要重新激活xinetd就能夠將xinetd裡頭的設定重新讀進來,所以剛剛設定的telnet自然也就可以被激活.
[root@localhost CentOS]# service xinetd restart
或者
[root@localhost CentOS]# /etc/rc.d/init.d/xinetd restart #這個是比較正規的方法

允許root用戶登入,可用下列方法
開啟root用戶的telnet功能
1、編輯/etc/default/login文件.(如果沒有,就創建一個login文件)
添加內容:CONSOLE=/dev/console
2、編輯/etc/securetty文件(先要備份securetty文件:cp securetty securetty.bak)
,加上下面幾行(最後面添加):
pts/0
pts/1
pts/2
pts/3

這樣一來, root將可以直接進入Linux主機.不過,建議不要這樣做.還可以在普通用戶進入後,切換到root用戶,擁有root的權限!
不用重新啟動服務xinetd,就能有效
e、CentOS 5.2_Xmanager設置的問題
1、編輯/etc/gdm/custom.conf,內容如下:(需要先備份文件)
[daemon]

[security]
AllowRemoteRoot=true

[xdmcp]
Port=177
Enable=1

[gui]
[greeter]
[chooser]
[debug]
[servers]
2、關閉防火牆,不關的話,用不起
#ntsysv選擇iptables ,ip6tables把前面的*號去掉

3、重新啟動系統就可以了.
f、備份CentOS 5.2系統後,網卡設置的問題
在桌面上選擇系統-->管理-->網絡
選擇eth0-->硬件設備-->不要關聯到MAC地址
這樣,關閉系統,就可以備份新的系統,新的系統中的網卡就不會出現4個了eth0 eth0.bak eth1 eth1.bak,這些bak文件有問題,無法關閉,如果系統在不要關聯到MAC地址這個選項沒有選的話,新的拷貝系統就不會出問題了.

g、激活CentOS 5.2第二個網卡的問題
在桌面上選擇系統-->管理-->網絡
在eth1裡面要選擇當計算機啟動時激活設備(A) ,不然的話,系統啟動後,eth1是不會自動啟動的.

解決完以上問題
現在的系統具備:以root用戶登錄ftp,telnet,XMangaer

h、sendmail啟動時間過長的問題
那就關閉它
# ntsysv
取消sendmail前面的*
(修改後儲存F12)

五、安裝Oracle Rac前的系統準備
1、修改/etc/hosts文件,如下所示
# cp /etc/hosts /etc/hosts.bak
# gedit /etc/hosts

127.0.0.1 localhost.localdomain localhost(這裡必須這樣修改,否則RAC節點名出現在回送地址中,安裝RAC期間可能會報錯)
192.168.1.100 rac1.localdomain rac1
192.168.1.101 rac2.localdomain rac2

10.0.0.1 rac1-priv.localdomain rac1-priv
10.0.0.2 rac2-priv.localdomain rac2-priv

192.168.1.200 rac1-vip.localdomain rac1-vip
192.168.1.201 rac2-vip.localdomain rac2-vip


2、編輯/etc/sysconfig/network文件
# cp /etc/sysconfig/network /etc/sysconfig/network.bak
# gedit /etc/sysconfig/network
把hostname=localhost.localdomain改成hostname=rac1.localdomain

3、在桌面上選擇系統-->管理-->網絡
把eth0的自動獲取ip地址,改成靜態地址192.168.1.100 255.255.255.0
先激活eth1,然後再把eth1的自動獲取ip地址,改成靜態地址10.0.0.1 255.255.255.0
注:在eth1裡面要選擇當計算機啟動時激活設備(A) ,不然的話,系統啟動後,eth1是不會自動啟動的.

4、設置共享內存和信號參數
執行一下命令:
#cp /etc/sysctl.conf /etc/sysctl.conf.bak
#gedit /etc/sysctl.conf

編輯/etc/sysctl.conf文件,添加如下信息,這些信息可以根據自己的機器實際情況來調整(1048576=1G存儲空間=1024*1024 262144=256M)
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144

kernel.shmmni = 4096
kernel.sem = 250 32000 100 128

fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

5.配置hangcheck-timer內核模塊
該模塊是用來監控集群的狀態情況,linux as4中已經安裝了此模塊,使用下面的命令確認
find /lib/modules -name "hangcheck-timer.o"看看有沒有,如果有,配置並加載該模塊
#echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local
#modprobe hangcheck-timer
#grep Hangcheck /var/log/messages | tail -2
Jul 31 15:01:49 ha2pub kernel: Hangcheck: starting hangcheck timer 0.5.0 (tick is 30 seconds, margin is 180 seconds).
如果看到上面的信息,說明模塊的設置工作正確
配置Hangcheck計時器
# cd /etc/rc.d/
# cp rc.local rc.local.bak
# gedit rc.local
在最後面添加新的一行:
modprobe hangcheck-timer hangcheck-tick=30 hangcheck_margin=180

6.在節點上創建oracle用戶和目錄
#groupadd -g 1002 oinstall
#groupadd -g 1001 dba
#useradd -u 1001 -g oinstall -G dba oracle
#passwd oracle
# id nobody查看是否存在匿名用戶,如不存在則創建.
以oracle用戶登陸,分別建立兩個目錄
# su - oracle
$mkdir /home/oracle/app用於安裝oracle數據庫
$mkdir /home/oracle/orcl用於Oracle集群文件系統(OCFS)的掛載點

修改oracle用戶的.bash_profile文件如下所示
__________________________________________________________________
# .bash_profile

export ORACLE_BASE=/home/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORA_CRS_HOME=/home/oracle/app/crs/
export ORACLE_SID=RAC1

export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export THREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export NLS_LANG=american_america.ZHS16GBK

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
ulimit -u 16384 -n 65536

************************************************** ****
以下的不用加
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
________________________________________________________________________
注意,在第二個節點上,修改SID=RAC2

7、安裝所需的rpm包(在安裝光盤下,也可以用Yum install 安裝)
compat-db-4.2.52-5.1.i386.rpm
compat-gcc-34-3.4.6-4.i386.rpm
compat-gcc-34-c++-3.4.6-4.i386.rpm
compat-libgcc-296-2.96-138.i386.rpm
compat-libstdc++-296-2.96-138.i386.rpm
compat-libstdc++-33-3.2.3-61.i386.rpm
fontconfig-devel-2.4.1-7.el5.i386.rpm
freetype-devel-2.2.1-19.el5.i386.rpm
libaio-0.3.106-3.2.i386.rpm
libaio-devel-0.3.106-3.2.i386.rpm
libXp-1.0.0-8.1.el5.i386.rpm
openmotif22-2.2.3-18.i386.rpm
openmotif-2.3.0-0.5.el5.i386.rpm

命令如下:
#cd /media/CentOS_5.2_Final/CentOS
#rpm -ivh compat-db-4.2.52-5.1.i386.rpm
...
以下的命令類似,安裝完所有上面所列出的包

8、配置shell對oracle的限制
# cd /etc/security/
# cp limits.conf limits.conf.bak
# gedit limits.conf
在最後面添加新的一行:
#For Oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft memlock 3145728
oracle hard memlock 3145728

* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

以上的限制需要啟用pam模塊的一個選項
# cd /etc/pam.d/
# cp login login.bak
# gedit login
在最後面添加新的一行:
#For Oracle
session required /lib/security/pam_limits.so

# cp /etc/selinux/config /etc/selinux/config.bak
# gedit /etc/selinux/config
SELINUX=disabled

9、關閉系統,將centosrac1拷貝一份(整個文件夾),把名字改成centosrac2 ,是把Other Linux 2.6.x kernel.vmx中的displayName = "centosrac1"改成displayName = "centosrac2"
10.單獨啟動centosrac2,修改ip地址和hostname
a、編輯/etc/sysconfig/network文件
把hostname=rac1.localdomain改成hostname=rac2.localdomain

b、在桌面上選擇系統-->管理-->網絡
把eth0的靜態地址192.168.1.100改成192.168.1.101
把eth1的的靜態地址10.0.0.1改成10.0.0.2
注:在eth1裡面要選擇當計算機啟動時激活設備(A) ,不然的話,系統啟動後,eth1是不會自動啟動的.

c、在第二個節點上,修改/etc/oracle/.bash_profile中ORACLE_SID=orcl2
重新啟動操作系統

11.建立節點之間的互信(建議使用方法1來完成此項設置)
方法1:
Create the /etc/hosts.equiv file as the root user.
#touch /etc/hosts.equiv
#chmod 600 /etc/hosts.equiv
#chown root:root /etc/hosts.equiv
Edit the /etc/hosts.equiv file to include all the RAC nodes:
# cp /etc/hosts.equiv /etc/hosts.equiv.bak
# gedit /etc/hosts.equiv
+rac1 oracle
+rac2 oracle
+rac1-priv oracle
+rac2-priv oracle

需在兩台計算機都要運行:
#su - oracle
$ssh-keygen -t rsa生成密鑰對,使用空密碼
生成密鑰對:
只需在一台服務器上操作:
[oracle@rac1 ~]$ ssh 192.168.1.100 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
[oracle@rac1 ~]$ ssh 192.168.1.101 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys
[oracle@rac1 ~]$ scp authorized_keys 192.168.1.100:/home/oracle/.ssh/
[oracle@rac1 ~]$ scp authorized_keys 192.168.1.101:/home/oracle/.ssh/
需在兩台計算機上操作:
[oracle@rac1 ~]$ chmod 600 /home/oracle/.ssh/authorized_keys
[oracle@rac2 ~]$ chmod 600 /home/oracle/.ssh/authorized_keys

#ssh-keygen -t rsa生成密鑰對,使用空密碼
生成密鑰對:
只需在一台服務器上操作:
[root@rac1 ~]# ssh 192.168.1.100 cat /root/.ssh/id_rsa.pub >> authorized_keys
[root@rac1 ~]# ssh 192.168.1.101 cat /root/.ssh/id_rsa.pub >> authorized_keys
[root@rac1 ~]# scp authorized_keys 192.168.1.100:/root/.ssh/
[root@rac1 ~]# scp authorized_keys 192.168.1.101:/root/.ssh/
需在兩台計算機上操作:
[root@rac1 ~]# chmod 600 /root/.ssh/authorized_keys
[root@rac2 ~]# chmod 600 /root/.ssh/authorized_keys

所有的驗證:
在兩台計算機上的root權限和oracle權限下,都要運行以下命令:
ssh localhost.localdomain date
ssh rac1 date
ssh rac2 date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1.localdomain date
ssh rac2.localdomain date
ssh rac1-priv.localdomain date
ssh rac2-priv.localdomain date
如果有問yes/no,都輸入yes,只要以上命令都能在不輸入密碼的情況下,執行完畢,說明設置是對的.


方法2:
我採用的是ssh,具體過程有很多文檔說明,這裡省略.分別要建立root用戶,oracle用戶的互信.
#cp /etc/hosts.allow /etc/hosts.allow.bak
#gedit /etc/hosts.allow
添加sshd:ALL
# /etc/rc.d/init.d/sshd restart

1.分別從rac1和rac2上登錄作為root後運行ssh-keygen,目的是簡單地在/root下創建目錄.ssh,當提示輸入
passphase時打入兩次回車.這將生成/root/.ssh/identity and /root/.ssh/identity.pub
 
2.先測試一下,從rac1登錄作為root,打入#ssh rac2,會要求提示root password.
3.現在從rac1登錄作為root,運行scp /root/.ssh/id_rsa.pub rac2:/root/.ssh/authorized_keys. ,
 文件名必須不能弄錯.

4.現在再從rac1運行#ssh rac2則不需要密碼了:)
同理rac2也是這樣的(重複第3步)

具體的指令如下:
rac1上,以root用戶登錄
#ssh-keygen輸入兩次回車
#scp /root/.ssh/id_rsa.pub rac1:/root/.ssh/authorized_keys
輸入密碼
#scp /root/.ssh/id_rsa.pub rac2:/root/.ssh/authorized_keys

rac2上,以root用戶登錄
#ssh-keygen輸入兩次回車
#scp /root/.ssh/id_rsa.pub rac2:/root/.ssh/authorized_keys1
輸入密碼
#cd /root/.ssh
#cat authorized_keys1>>authorized_keys
#scp /root/.ssh/id_rsa.pub rac1:/root/.ssh/authorized_keys1

rac1上,以root用戶登錄
#cd /root/.ssh
#cat authorized_keys1>>authorized_keys

rac1上,以oracle用戶登錄
$ssh-keygen輸入兩次回車
$scp /home/oracle/.ssh/id_rsa.pub rac1:/home/oracle/.ssh/authorized_keys
輸入密碼
$scp /home/oracle/.ssh/id_rsa.pub rac2:/home/oracle/.ssh/authorized_keys

rac2上,以oracle用戶登錄
$ssh-keygen輸入兩次回車
$scp /home/oracle/.ssh/id_rsa.pub rac2:/home/oracle/.ssh/authorized_keys1
輸入密碼
$cd /home/oracle/.ssh
$cat authorized_keys1>>authorized_keys
$scp /home/oracle/.ssh/id_rsa.pub rac1:/home/oracle/.ssh/authorized_keys1

rac1上,以oracle用戶登錄
$cd /home/oracle/.ssh
$cat authorized_keys1>>authorized_keys


然後在分別以root用戶,oracle在兩個節點上執行如下命令,
ssh localhost.localdomain date
ssh rac1 date
ssh rac2 date
ssh rac1-priv date
ssh rac2-priv date
ssh rac1.localdomain date
ssh rac2.localdomain date
ssh rac1-priv.localdomain date
ssh rac2-priv.localdomain date
如果需要輸入(yes/no)?輸入yes,測試完所有命令,如果都不要輸密碼,就配置成功了.


12、建立節點時間同步
a、兩台計算機以rac1為時間標準
在rac1上,以root用戶登錄
# cd /etc/xinetd.d
# cp time-stream time-stream.bak
# gedit time-stream
把disable = yes改成 disable = no
# service xinetd restart
# rdate -s rac1
# hwclock -w
就可以了.

在rac2上,以root用戶登錄
# rdate -s rac1
# hwclock -w
就可以了.

這時也可以把rac2的校時服務開啟
# cd /etc/xinetd.d
# cp time-stream time-stream.bak
# gedit time-stream
把disable = yes改成disable = no
# service xinetd restart
# rdate -s rac1
# hwclock -w
就可以了.
b、系統啟動後,rac1向ntp server校時(由於和本機同步,所以不用ntp校時了,b這一步可以不做)
在rac1上,以root用戶登錄
#crontab -e
//crontab -l是列出任務
//crontab -r是刪除所有任務
添加如下內容:
* * * * * /usr/sbin/ntpdate time.stdtime.gov.tw | hwclock -w
意思是,每分鐘更新時間一次.
#date 09010000
#service crond restart
就可以看效果了.
c、系統啟動後,rac2向rac1校時
在rac2上,以root用戶登錄
在/etc/rc.d/init.d/下寫一個腳本
#cd /etc/rc.d/init.d/
#gedit uptimefromrac1
內容:
#!/bin/bash
/etc/rc.d/init.d/uptimefromrac_1 &
然後:
#gedit uptimefromrac_1
內容:
#!/bin/bash
while(true;)
do
rdate -s rac1
sleep 20
done
然後:
#chmod 777 uptimefromrac1
#chmod 777 uptimefromrac_1
# ln -s /etc/rc.d/init.d/uptimefromrac1 /etc/rc.d/rc5.d/S99uptimefromrac1
這樣rac2每20秒鐘與rac1同步一次時間或者簡單點
#crontab -e
* * * * * rdate -s rac1 | hwclock -w(可以crontab被啟動的時機是root用戶登錄的時機,所以系統啟動後,crontab不會被運行,只能用腳本了)


13、把網卡綁定mac地址(rac1,rac2上,都要執行)
在桌面上選擇系統-->管理-->網路
選擇eth0-->硬件設備-->關聯到MAC地址
選擇eth1-->硬件設備-->關聯到MAC地址
然後點擊確定.