一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于iSCSI和Openfiler構(gòu)建自己的Oracle RAC(三)

 waders 2010-03-17

在 Oracle Enterprise Linux 和 iSCSI 上構(gòu)建您自己的 Oracle RAC 集群(續(xù))

本指南中的信息未經(jīng) Oracle 驗(yàn)證,且不受 Oracle 支持,您在使用時(shí)只能風(fēng)險(xiǎn)自負(fù);本指南僅供教學(xué)使用。


集群件軟件

僅在集群 (linux1) 的一個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行下列安裝過程!Oracle Universal Installer 將把 Oracle 集群件軟件安裝到集群中的兩個(gè) Oracle RAC 節(jié)點(diǎn)。

您現(xiàn)在就可以安裝該環(huán)境的“集群”部分:Oracle 集群件了。在上一節(jié)中,您將 Oracle 集群件的安裝文件下載并提取到 linux1/home/oracle/orainstall/clusterware 目錄中。這是唯一需要執(zhí)行安裝的節(jié)點(diǎn)。

在 Oracle 集群件的安裝過程中,系統(tǒng)將提示您提供相關(guān)的并要在 RAC 集群中配置的節(jié)點(diǎn)。當(dāng)實(shí)際的安裝開始時(shí),它將使用我們?cè)?a class="bodylink" >第 15 節(jié)(“使用 SSH 為遠(yuǎn)程訪問配置 RAC 節(jié)點(diǎn)”)中配置的遠(yuǎn)程訪問將所需軟件復(fù)制到所有節(jié)點(diǎn)。

那 Oracle 集群件究竟是用來干什么的呢?它包含所有集群和數(shù)據(jù)庫配置元數(shù)據(jù)以及多個(gè)適用于 RAC 的系統(tǒng)管理特性。通過它,DBA 可以將一個(gè) Oracle 實(shí)例(或多個(gè)實(shí)例)注冊(cè)和調(diào)用到集群。在通常的操作中,Oracle 集群件將通過一種特殊的 ping 操作向集群中配置的所有節(jié)點(diǎn)發(fā)送消息(通常稱作“心跳”)。如果對(duì)任何節(jié)點(diǎn)的心跳檢測(cè)失敗,則它將檢查 Oracle 集群件配置文件(位于共享磁盤上)以辨別是節(jié)點(diǎn)故障還是網(wǎng)絡(luò)故障。

安裝 Oracle 集群件后,用于安裝 Oracle 數(shù)據(jù)庫軟件(下一節(jié))的 Oracle Universal Installer (OUI) 將自動(dòng)識(shí)別這些節(jié)點(diǎn)。與您將在本節(jié)中執(zhí)行的 Oracle 集群件安裝一樣,Oracle 數(shù)據(jù)庫軟件只需要從一個(gè)節(jié)點(diǎn)運(yùn)行。OUI 將把此軟件程序包復(fù)制到在 RAC 集群中配置的所有節(jié)點(diǎn)。

Oracle 集群件共享文件

系統(tǒng)將把由 Oracle 集群件使用的兩個(gè)共享文件(實(shí)際上是文件組)存儲(chǔ)到我們?cè)谇懊鎰?chuàng)建的 Oracle 集群文件系統(tǒng)第 2 版 (OFCS2) 中。這兩個(gè)共享 Oracle 集群件文件組是:

  • Oracle 集群注冊(cè)表 (OCR)

    • 文件 1:/u02/oradata/racdb/OCRFile
    • 文件 2:/u02/oradata/racdb/OCRFile_mirror
    • 大?。?2 * 100MB) = 200M

  • CRS 表決磁盤

    • 文件 1:/u02/oradata/racdb/CSSFile
    • 文件 2:/u02/oradata/racdb/CSSFile_mirror1
    • 文件 3:/u02/oradata/racdb/CSSFile_mirror2
    • 大小:(3 * 20MB) = 60MB

 

注:不能對(duì)這兩個(gè)共享 Oracle 集群件文件使用自動(dòng)存儲(chǔ)管理 (ASM):Oracle 集群注冊(cè)表 (OCR) 或 CRS 表決磁盤 文件。問題是只有這兩個(gè)文件就緒并可以訪問后才可以啟動(dòng) Oracle 實(shí)例。要使 ASM 可用,應(yīng)首先運(yùn)行 ASM 實(shí)例。

另請(qǐng)注意,可以將這兩個(gè)共享文件存儲(chǔ)到 OCFS2、共享的原始設(shè)備或其他供應(yīng)商的集群化文件系統(tǒng)中。

驗(yàn)證終端 Shell 環(huán)境

在啟動(dòng) Oracle Universal Installer 之前,您應(yīng)該首先驗(yàn)證您已登錄到要從其運(yùn)行安裝程序的服務(wù)器(例如 linux1), 然后從控制臺(tái)root 運(yùn)行 xhost 命令以允許建立 X Server 連接。接下來,以 oracle 用戶帳戶登錄。如果您正在使用遠(yuǎn)程客戶端來連接到執(zhí)行安裝的節(jié)點(diǎn)(從 X Server 所在的工作站通過 SSH 或 Telnet 連接 linux1),您將需要將 DISPLAY 變量設(shè)置為指向本地工作站。最后,驗(yàn)證集群中所有節(jié)點(diǎn)的遠(yuǎn)程訪問/用戶等效性:

驗(yàn)證服務(wù)器并啟用 X Server 訪問

# hostname
linux1
# xhost +
access control disabled, clients can connect from any host

oracle 用戶帳戶登錄并設(shè)置 DISPLAY(如果需要)

# su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$ DISPLAY=<your local workstation>:0.0
$ export DISPLAY

驗(yàn)證遠(yuǎn)程訪問/用戶等效性

驗(yàn)證您能夠在將要從中運(yùn)行 Oracle Installer 的 Linux 服務(wù)器上,不使用口令對(duì)集群中的所有其他 Linux 服務(wù)器運(yùn)行安 全 Shell 命令(sshscp)。使用安全 shell 方法時(shí),需要首先在終端 shell 會(huì)話上啟用用 戶等效性 然后再嘗試運(yùn)行 OUI。要為當(dāng)前的終端 shell 會(huì)話啟用用戶等效性,請(qǐng)執(zhí)行以下步驟(記住為 RSA 鍵輸入在提示時(shí)生成的通行短語):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
$ ssh linux1 "date;hostname"
Fri Jul 31 22:28:43 EDT 2009
linux1
$ ssh linux2 "date;hostname"
Fri Jul 31 22:29:00 EDT 2009
linux2

安裝集群就緒服務(wù)

執(zhí)行以下任務(wù)安裝 Oracle 集群件:

$ cd ~oracle
$ /home/oracle/orainstall/clusterware/runInstaller -ignoreSysPrereqs

屏幕名稱 答復(fù)
Welcome 屏幕 單擊 Next
Specify Inventory directory and credentials 接受默認(rèn)值:
   Inventory directory: /u01/app/oracle/oraInventory
   Operating System group name:oinstall
Specify Home Details 為 ORACLE_HOME(實(shí)際上是 $ORA_CRS_HOME,我將在本文中使用它)設(shè)置 NamePath, 如下所示:
   Name: OraCrs10g_home
   Path:/u01/app/crs
Product-Specific Prerequisite Checks 安裝程序?qū)?zhí)行一系列的檢查以確定節(jié)點(diǎn)是否滿足安裝和配置 Oracle 集群件軟件的最低要求。如果任何檢查失敗,您將需要通過單擊該復(fù)選框手動(dòng)驗(yàn)證失敗的檢查。我所執(zhí)行的安裝通過了所有檢查,未出現(xiàn)任何問題。

單擊 Next 繼續(xù)。

Specify Cluster Configuration Cluster Name: crs
Public Node Name Private Node Name Virtual Node Name
linux1 linux1-priv linux1-vip
linux2 linux2-priv linux2-vip
Specify Network Interface Usage
Interface Name Subnet Interface Type
eth0 192.168.1.0 Public
eth1 192.168.2.0 Private
Specify OCR Location 從帶有 RAC 的 Oracle 數(shù)據(jù)庫 10g 第 2 版 (10.2) 開始,Oracle 集群件支持創(chuàng)建鏡像的 OCR 文件,從而增強(qiáng)了集群可靠性。就本示例而言,我選擇了通過保留默認(rèn)選項(xiàng)“Normal Redundancy”鏡像 OCR 文件:

Specify OCR Location: /u02/oradata/racdb/OCRFile
Specify OCR Mirror Location:/u02/oradata/racdb/OCRFile_mirror

Specify Voting Disk Location 從帶有 RAC 的 Oracle 數(shù)據(jù)庫 10g 第 2 版 (10.2) 開始,已經(jīng)修改了 CSS,使您可以為 CSS 配置多個(gè)表決磁盤。在第 1 版 (10.1) 中,您只能配置一個(gè)表決磁盤。通過啟用多個(gè)表決磁盤配置,您可以使用冗余的表決磁盤在獨(dú)立的共享物理磁盤上為 RAC 數(shù)據(jù)庫配置多個(gè)表決磁盤。該選項(xiàng)簡化了 iSCSI 網(wǎng)絡(luò)協(xié)議以及其他網(wǎng)絡(luò)附件存儲(chǔ) (NAS) 存儲(chǔ)解決方案的使用。注意,要利用多個(gè)表決磁盤的好處,必須至少配置三個(gè)表決磁盤。就本示例而言,我選擇了通過保留默認(rèn)選項(xiàng)“Normal Redundancy”鏡像表決磁盤:

Voting Disk Location: /u02/oradata/racdb/CSSFile
Additional Voting Disk 1 Location:/u02/oradata/racdb/CSSFile_mirror1
Additional Voting Disk 2 Location:/u02/oradata/racdb/CSSFile_mirror2

Summary

單擊 Install 開始安裝!

Execute Configuration Scripts

orainstRoot.sh

安裝完成后,將提示您運(yùn)行 orainstRoot.shroot.sh 腳本。以“root”用戶帳戶在集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)(從執(zhí)行安裝的節(jié)點(diǎn)開始)上打開一個(gè)新控制臺(tái)窗口。

導(dǎo)航到 /u01/app/oracle/oraInventory 目錄,并在 RAC 集群的所有節(jié)點(diǎn)上運(yùn) 行 orainstRoot.sh。

在兩個(gè)節(jié)點(diǎn)上執(zhí)行 orainstRoot.sh 之后,驗(yàn)證“/etc/oraInst.loc”文件的權(quán)限為 644 (-rw-r--r--) 且所有者為 root。 如果 oracle 用戶帳戶不具備該文件的讀權(quán)限,在 Oracle 安裝期間可能會(huì)出現(xiàn)問題 —“the location of the oraInventory directory cannot be determined”。例如,在 Oracle 集群件安裝后(運(yùn)行 Oracle 集群驗(yàn)證實(shí)用程序時(shí)),將出現(xiàn)以下錯(cuò)誤:"“CRS is not installed on any of the nodes”。 如果對(duì) /etc/oraInst.loc 的權(quán)限設(shè)置不當(dāng),則可能是因?yàn)樵谶\(yùn)行 root.sh 之前,您未在兩個(gè)節(jié)點(diǎn)上運(yùn)行 orainstRoot.sh。此外,umask 設(shè)置可能關(guān)閉 — 應(yīng)為 0022。 在 RAC 集群的兩個(gè)節(jié)點(diǎn)上運(yùn)行以下命令以更正此問題:

# chmod 644 /etc/oraInst.loc
            # ls -l /etc/oraInst.loc
            -rw-r--r-- 1 root root 63 Aug  1 12:31 /etc/oraInst.loc

 


 

root.sh

在集群中兩個(gè) Oracle RAC 節(jié)點(diǎn)(從執(zhí)行安裝的節(jié)點(diǎn)開始)上的同一個(gè)新控制臺(tái)窗口中,以“root”用戶帳戶登錄。

導(dǎo)航到 /u01/app/crs 目錄并在集群中的每個(gè)節(jié)點(diǎn)(從執(zhí)行安裝的節(jié)點(diǎn)開始)上找到 root.sh 文件。在 RAC 集群的所有節(jié)點(diǎn)上運(yùn)行 root.sh 文件,一次一個(gè)

如果 Oracle 集群件主目錄是 ORACLE_BASE 目錄的子目錄(這種情況永遠(yuǎn)不應(yīng)出現(xiàn)?。瑒t在兩個(gè)節(jié)點(diǎn)上的運(yùn)行 root.sh 腳本時(shí),您將會(huì)收到幾個(gè)有關(guān)權(quán)限的警告。可以忽略這些警告,沒什么問題。

可能需要等一會(huì)兒才會(huì)運(yùn)行 root.sh。

在最后一個(gè)節(jié)點(diǎn)上運(yùn)行 root.sh 失敗!

收到本節(jié)所述任何錯(cuò)誤之后,請(qǐng)保持 OUI 處于開啟狀態(tài)。在本節(jié)所述問題尚未全部得以解決之前,請(qǐng)不要單擊“Execute Configuration Scripts”對(duì)話框上的 OK 按鈕。

問題 1

在對(duì)最后一個(gè)節(jié)點(diǎn)執(zhí)行 root.sh 時(shí),vipca 將無法運(yùn)行,會(huì)出現(xiàn)以下錯(cuò)誤:

Oracle CRS stack installed and running under init(1M)
            Running vipca(silent) for configuring nodeapps
            /u01/app/crs/jdk/jre//bin/java: error while loading
            shared libraries: libpthread.so.0:
            cannot open shared object file: No such file or directory

注意,在采取下述解決辦法之前,srvctl 也會(huì)產(chǎn)生類似的輸出。

出現(xiàn)該錯(cuò)誤的原因是,Linux 內(nèi)核的這些版本會(huì)采用 Oracle 以前的一個(gè)解決辦法,即在 vipcasrvctl 中使用 LD_ASSUME_KERNEL 設(shè)置來修補(bǔ) Linux 線程中的一個(gè)原有缺陷。而這個(gè)解決辦法在 OEL5、RHEL5 或 SLES10 上不再有效,故而產(chǎn)生錯(cuò)誤。

要解決上面的問題 1,編輯 vipca(在所有節(jié)點(diǎn)的 CRS bin 目錄下)以撤消對(duì) LD_ASSUME_KERNEL 的設(shè)置。在第 120 行左右的 IF 語句之后,添加一條 unset 命令,從而確保 LD_ASSUME_KERNEL 未經(jīng)過設(shè)置,如下所示:

if [ "$arch" = "i686" -o "$arch" = "ia64" ]
                        then
                        LD_ASSUME_KERNEL=2.4.19
                        export LD_ASSUME_KERNEL
                        fi
                        unset LD_ASSUME_KERNEL    <<== Line to be added

類似地,對(duì)于 srvctl(在所有節(jié)點(diǎn)的 CRS bin 目錄,以及(若已安裝)RDBMS bin 和 ASM bin 目錄下),通過在第 168 行左右添加一行來取消設(shè)置 LD_ASSUME_KERNEL,應(yīng)如下所示:

LD_ASSUME_KERNEL=2.4.19
                        export LD_ASSUME_KERNEL
                        unset LD_ASSUME_KERNEL    <<== Line to be added

切記要對(duì)所有節(jié)點(diǎn)重新編輯這些文件:

  <ORA_CRS_HOME>/bin/vipca
            <ORA_CRS_HOME>/bin/srvctl
            <RDBMS_HOME>/bin/srvctl
            <ASM_HOME>/bin/srvctl  # (If exists)

應(yīng)用 10.2.0.2 或 10.2.0.3 補(bǔ)丁集后,這些補(bǔ)丁集仍將包括這些對(duì) OEL5、RHEL5 或 SLES10 來說多余的設(shè)置。此問題是由開發(fā)引起的,在 10.2.0.4 補(bǔ)丁集中得以修復(fù)。

另請(qǐng)注意,這里我們顯式取消設(shè)置 LD_ASSUME_KERNEL 而不是僅僅通過將其標(biāo)為注釋語句來取消其設(shè)置,這是為了處理這樣的情況:用戶在其環(huán)境(登錄 shell)中設(shè)置了該變量。

問題 2

在解決了上面的問題 1 后,如果 VIP IP 在不可路由的地址范圍 [10.x.x.x172.(16-31).x.x192.168.x.x] 內(nèi),則 vipca 現(xiàn)在無法運(yùn)行,會(huì)出現(xiàn)以下錯(cuò)誤:

[root@linux2 ~]# $ORA_CRS_HOME/bin/vipca
            Error 0(Native: listNetInterfaces:[3])
            [Error 0(Native: listNetInterfaces:[3])]

有幾種方法來解決問題 2。本解決辦法的目標(biāo)是使“$ORA_CRS_HOME/bin/oifcfg getif”命令的輸出 中包含 public 和 cluster_interconnect 接口。如果您試著運(yùn)行上述命令,會(huì)發(fā)現(xiàn)該命令不提供任何信息,這就意味著我們要做點(diǎn)什么了!

第一步是確定當(dāng)前的接口和 IP 地址:

[root@linux2 ~]# $ORA_CRS_HOME/bin/oifcfg iflist
            eth1  192.168.2.0
            eth0  192.168.1.0

我們記得,在 Oracle 集群件的安裝過程中,我用 192.168.1.0 作為公共接口,用 192.168.2.0 作為 cluster_interconnect 接口。

利用此信息,我們可以相應(yīng)地使用 $ORA_CRS_HOME/bin/oifcfg 命令的 setif 選項(xiàng)來手動(dòng)設(shè)置公共/專用接口:

# $ORA_CRS_HOME/bin/oifcfg setif -global eth0/192.168.1.0:public
            # $ORA_CRS_HOME/bin/oifcfg setif -global eth1/192.168.2.0:cluster_interconnect

現(xiàn)在,我們?cè)俅芜\(yùn)行“$ORA_CRS_HOME/bin/oifcfg getif”命令以驗(yàn)證其輸出:

[root@linux2 ~]# $ORA_CRS_HOME/bin/oifcfg getif
            eth0  192.168.1.0  global  public
            eth1  192.168.2.0  global  cluster_interconnect

從最后一個(gè)節(jié)點(diǎn)手動(dòng)運(yùn)行 vipca

在解決上述所有問題之后,以 root 用戶身份從發(fā)生錯(cuò)誤的最后一個(gè)節(jié)點(diǎn)手動(dòng)重新運(yùn)行 vipca (GUI)。請(qǐng)記住,vipca 是一個(gè) GUI,需要根據(jù)您的 X 服務(wù)器設(shè)置 DISPLAY 變量:

# $ORA_CRS_HOME/bin/vipca

出現(xiàn)“VIP Configuration Assistant”時(shí),我按如下所示回應(yīng)屏幕提示:

   歡迎頁面:單擊 Next
   Network interfaces:只選擇公共接口 — eth0
   Virtual IPs for cluster nodes:
       Node Name:linux1
       IP Alias Name:linux1-vip
       IP Address:192.168.1.200
       Subnet Mask: 255.255.255.0

       Node Name: linux2
       IP Alias Name:linux2-vip
       IP Address:192.168.1.201
       Subnet Mask: 255.255.255.0

   Summary: 單擊 Finish
   Configuration Assistant Progress Dialog: 配置完成后單擊 OK。
   Configuration Results: 單擊 Exit

返回到 OUI 并確認(rèn)“Execute Configuration scripts”對(duì)話框窗口。

End of installation 安裝結(jié)束時(shí),退出 OUI。

驗(yàn)證 Oracle 集群件安裝

安裝 Oracle 集群件后,可以運(yùn)行幾個(gè)測(cè)試來驗(yàn)證安裝是否成功。在 RAC 集群的兩個(gè)節(jié)點(diǎn)上運(yùn)行下列命令。

檢查集群節(jié)點(diǎn)

$ /u01/app/crs/bin/olsnodes -n
linux1 1
linux2 2

配置 Oracle 集群件功能

$ $ORA_CRS_HOME/bin/crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host
----------------------------------------------------------------------
ora.linux1.gsd application    0/5    0/0    ONLINE    ONLINE    linux1
ora.linux1.ons application    0/3    0/0    ONLINE    ONLINE    linux1
ora.linux1.vip application    0/0    0/0    ONLINE    ONLINE    linux1
ora.linux2.gsd application    0/5    0/0    ONLINE    ONLINE    linux2
ora.linux2.ons application    0/3    0/0    ONLINE    ONLINE    linux2
ora.linux2.vip application    0/0    0/0    ONLINE    ONLINE    linux2

檢查 CRS 狀態(tài)

$ $ORA_CRS_HOME/bin/crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
檢查 Oracle 集群件自動(dòng)啟動(dòng)腳本
$ ls -l /etc/init.d/init.*
-r-xr-xr-x 1 root root  1951 Aug  1 12:49 /etc/init.d/init.crs
-r-xr-xr-x 1 root root  4699 Aug  1 12:49 /etc/init.d/init.crsd
-r-xr-xr-x 1 root root 35379 Aug  1 12:49 /etc/init.d/init.cssd
-r-xr-xr-x 1 root root  3175 Aug  1 12:49 /etc/init.d/init.evmd

 


22. 安裝 Oracle 數(shù)據(jù)庫 10g 軟件

僅在集群 (linux1) 的一個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行下列安裝過程!Oracle Universal Installer 將把 Oracle 數(shù)據(jù)庫軟件安裝到集群中的兩個(gè) Oracle RAC 節(jié)點(diǎn)。

成功安裝 Oracle 集群件軟件后,下一步是安裝包含 RAC 的 Oracle 數(shù)據(jù)庫 10g 第 2 版 (10.2.0.1.0)。

就本示例而言,您在安裝該軟件時(shí)將不使用“Create Database”選項(xiàng)。而是將在安裝后使用 Database Configuration Assistant (DBCA) 創(chuàng)建數(shù)據(jù)庫。

與前面章節(jié)中的 Oracle 集群件安裝一樣,Oracle 10g 數(shù)據(jù)庫軟件只需從一個(gè)節(jié)點(diǎn)運(yùn)行。OUI 將把此軟件程序包復(fù)制到在 RAC 集群中配置的所有節(jié)點(diǎn)。

驗(yàn)證終端 Shell 環(huán)境

如上一節(jié)(安裝 Oracle 集群件 10g 軟件)中所討論的,首先需要為集群中所有節(jié)點(diǎn)的遠(yuǎn)程訪問和用戶等效性配置終端 shell 環(huán)境,然后才能運(yùn)行 Oracle Universal Installer。注意,您可以利用上一節(jié)中使用的終端 shell 會(huì)話,對(duì)此您不必采取下面描述的關(guān)于設(shè)置遠(yuǎn)程訪問和 DISPLAY 變量的任何操作:

oracle 用戶帳戶登錄并設(shè)置 DISPLAY(如果需要)

# su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$ DISPLAY=<your local workstation>:0.0
$ export DISPLAY

驗(yàn)證遠(yuǎn)程訪問/用戶等效性

驗(yàn)證您能夠在將要從中運(yùn)行 Oracle Installer 的 Linux 服務(wù)器上,不使用口令對(duì)集群中的所有其他 Linux 服務(wù)器運(yùn)行安 全 Shell 命令(sshscp)。使用安全 shell 方法時(shí),需要首先在終端 shell 會(huì)話上啟用用 戶等效性 然后再嘗試運(yùn)行 OUI。要為當(dāng)前的終端 shell 會(huì)話啟用用戶等效性,請(qǐng)執(zhí)行以下步驟(記住為 RSA 鍵輸入在提示時(shí)生成的通行短語):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
$ ssh linux1 "date;hostname"
Sat Aug  1 14:14:42 EDT 2009
linux1
$ ssh linux2 "date;hostname"
Sat Aug  1 14:15:16 EDT 2009
linux2

運(yùn)行 Oracle 集群驗(yàn)證實(shí)用程序

安裝 Oracle 數(shù)據(jù)庫軟件之前,我們應(yīng)該使用集群驗(yàn)證實(shí)用程序 (CVU) 運(yùn)行以下數(shù)據(jù)庫安裝前檢查。

注: 有關(guān)如何配置 CVU 的說明,可在本文前面的“使 用集群驗(yàn)證實(shí)用程序的前提條件”一節(jié)中找到。

$ cd /home/oracle/orainstall/clusterware/cluvfy
$ CV_HOME=/home/oracle/orainstall/clusterware/cluvfy; export CV_HOME
$ CV_JDKHOME=/home/oracle/orainstall/clusterware/cluvfy/jdk14; export CV_JDKHOME
$ ./runcluvfy.sh stage -pre dbinst -n linux1,linux2 -r 10gR2 -verbose

查看 CVU 報(bào)告。注意,該報(bào)告將包含我們?cè)跈z查 CRS 安裝前任務(wù)時(shí)收到的錯(cuò)誤 — 找不到一組合適的 VIP 接口,并且找不到 Oracle Enterprise Linux 5 中不需要的特定 RPM 程序包??梢院雎赃@兩個(gè)錯(cuò)誤,沒什么問題。

安裝 Oracle 數(shù)據(jù)庫 10g 第 2 版軟件

使用以下命令安裝 Oracle 數(shù)據(jù)庫 10g 第 2 版軟件:

$ cd ~oracle
$ /home/oracle/orainstall/database/runInstaller -ignoreSysPrereqs

屏幕名稱 答復(fù)
Welcome 屏幕 單擊 Next
Select Installation Type 選擇要執(zhí)行的安裝類型:“Enterprise Standard Edition”、“Standard Edition”或“Custom”。

如果您需要諸如 Oracle Label Security 之類的高級(jí)組件,或者只是想定制環(huán)境,請(qǐng)選擇“Custom”。

針對(duì)本文,我選擇了“Custom”選項(xiàng)。

Specify Home Details 為 ORACLE_HOME 設(shè)置 NamePath,如下所示:
   Name:OraDb10g_home1
   Path:/u01/app/oracle/product/10.2.0/db_1
Specify Hardware Cluster Installation Mode 選擇 Cluster Installation 選項(xiàng),然后選擇所有可用節(jié)點(diǎn)。單擊“Select All”選擇所有服務(wù)器:linux1 和 linux2。

如果安裝此時(shí)停止,且有 RAC 節(jié)點(diǎn)的狀態(tài)顯示為“Node not reachable”,則執(zhí)行以下檢查:

  • 確保 Oracle 集群件正在所討論的節(jié)點(diǎn)上運(yùn)行。
  • 確保您能夠從執(zhí)行安裝的節(jié)點(diǎn)訪問所討論的節(jié)點(diǎn)。
Available Product Components
(Custom Database Installs Only)
選擇您打算用于數(shù)據(jù)庫環(huán)境的組件。
Product-Specific Prerequisite Checks 安裝程序?qū)?zhí)行一系列的檢查以確定節(jié)點(diǎn)是否滿足安裝和配置 Oracle 數(shù)據(jù)庫軟件的最低要求。如果任何檢查失敗,您將需要通過單擊該復(fù)選框手動(dòng)驗(yàn)證失敗的檢查。

可能會(huì)收到一個(gè)關(guān)于可用的交換空間不滿足其最低要求的錯(cuò)誤:

Checking available swap space requirements...
            Expected result: 3036MB
            Actual Result: 1983MB

大多數(shù)情況下,您會(huì)具有所需的最小交換空間(如上所示),可以安全地忽略該錯(cuò)誤。只需單擊“Checking available swap space requirements...”復(fù)選框,然后單擊 Next 繼續(xù)。

Privileged Operating System Groups
(Custom Database Installs Only)
選擇將用于每個(gè) Oracle 組名的 UNIX 組,如下所示:

   Database Administrator (OSDBA) Group: dba
   Database Operator (OSOPER) Group:oper

Create Database 選擇“Install database Software only”選項(xiàng)。

記住,我們將在單獨(dú)的步驟中使用 DBCA 創(chuàng)建集群化數(shù)據(jù)庫。

Summary

單擊 Install 開始安裝!

Root Script Window - Run root.sh 安裝完成后,將提示您運(yùn)行 root.sh 腳本。需要記住的是,需要在 RAC 集群的所有節(jié)點(diǎn)一 次一個(gè)地(從運(yùn)行數(shù)據(jù)庫安裝的節(jié)點(diǎn)開始)運(yùn)行 root.sh 腳本。

首先,以 root 用戶帳戶在安裝 Oracle 10g 數(shù)據(jù)庫軟件的節(jié)點(diǎn)上打開一個(gè)新控制臺(tái)窗口。我打開的是“linux1”。

導(dǎo)航到 /u01/app/oracle/product/10.2.0/db_1 目錄,運(yùn)行 root.sh。

在集群的所有節(jié)點(diǎn)上運(yùn)行 root.sh 腳本后,返回 OUI 并確認(rèn)“Execute Configuration scripts”對(duì)話框窗口。

End of installation 安裝結(jié)束時(shí),退出 OUI。

在 SRVCTL 中取消設(shè)置 LD_ASSUME_KERNEL

上 一節(jié)中的 Oracle 集群件安裝過程中,我們需要修改 CRS bin 目錄中的 vipcasrvctl。 我們還需要對(duì) Database bin 目錄中的新的 srvctl 進(jìn)行同樣的修改:

$ $ORACLE_HOME/bin/srvctl

/u01/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

出現(xiàn)該錯(cuò)誤的原因是,Linux 內(nèi)核的這些版本會(huì)采用 Oracle 以前的一個(gè)解決辦法,即在 vipcasrvctl 中使用 LD_ASSUME_KERNEL 設(shè)置來修補(bǔ) Linux 線程中的一個(gè)原有缺陷。而這個(gè)解決辦法在 OEL5、RHEL5 或 SLES10 上不再有效,故而產(chǎn)生錯(cuò)誤。

要解決此問題,編輯 srvctl(在所有節(jié)點(diǎn)的 Database bin 目錄中),通過在第 168 行左右添加一行來撤消對(duì) LD_ASSUME_KERNEL 的設(shè)置:

LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
            unset LD_ASSUME_KERNEL    <<== Line to be added

切記要對(duì)所有節(jié)點(diǎn)重新編輯這些文件:

  <ORA_CRS_HOME>/bin/vipca
<ORA_CRS_HOME>/bin/srvctl
<RDBMS_HOME>/bin/srvctl
<ASM_HOME>/bin/srvctl  # (If exists)

應(yīng)用 10.2.0.2 或 10.2.0.3 補(bǔ)丁集后,這些補(bǔ)丁集仍將包括這些對(duì) OEL5、RHEL5 或 SLES10 來說多余的設(shè)置。此問題是由開發(fā)引起的,在 10.2.0.4 補(bǔ)丁集中得以修復(fù)。

另請(qǐng)注意,這里我們顯式取消設(shè)置 LD_ASSUME_KERNEL 而不是僅僅通過將其標(biāo)為注釋語句來取消其設(shè)置,這是為了處理這樣的情況:用戶在其環(huán)境(登錄 shell)中設(shè)置了該變量。

 


23. 安裝 Oracle 10g 隨附 CD 軟件

僅在集群 (linux1) 的一個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行下列安裝過程!Oracle 10g 隨附 CD 軟件將由 Oracle Universal Installer 安裝到集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)。

成功安裝 Oracle 數(shù)據(jù)庫軟件后,下一步是安裝 Oracle 數(shù)據(jù)庫 10g 隨附 CD 第 2 版軟件 (10.2.0.1.0)。

請(qǐng)注意,這是一個(gè)可選步驟。就本文而言,我的測(cè)試數(shù)據(jù)庫將通常使用 Java 虛擬機(jī) (Java VM) 和 Oracle interMedia, 因此將需要安裝 Oracle 數(shù)據(jù)庫 10g 隨附 CD。要執(zhí)行的安裝類型將為 Oracle Database 10g Products 安裝類型。

此安裝類型包括用于提高 Java 性能的原生編譯的 Java 庫 (NCOMP) 文件。如果不安裝 NCOMP 文件,則在使用 Java VM 的數(shù)據(jù)庫升級(jí)為修補(bǔ)版時(shí),將發(fā)生 ORA-29558:JAccelerator (NCOMP) not installed 錯(cuò)誤。

驗(yàn)證終端 Shell 環(huán)境

如前面的章節(jié)(安裝 Oracle 數(shù)據(jù)庫 10g 軟件)中所討論的,首先需要為集群中所有節(jié)點(diǎn)的遠(yuǎn)程訪問和用戶等效性配置終端 shell 環(huán)境,然后才能運(yùn)行 Oracle Universal Installer。注意,您可以利用上一節(jié)中使用的同一終端 shell 會(huì)話,對(duì)此您不必采取下面描述的關(guān)于設(shè)置遠(yuǎn)程訪問和 DISPLAY 變量的任何操作:

oracle 用戶帳戶登錄并設(shè)置 DISPLAY(如果需要)

# su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$ DISPLAY=<your local workstation>:0.0
$ export DISPLAY

驗(yàn)證遠(yuǎn)程訪問/用戶等效性

驗(yàn)證您能夠在將要從中運(yùn)行 Oracle Installer 的 Linux 服務(wù)器上,不使用口令對(duì)集群中的所有其他 Linux 服務(wù)器運(yùn)行安 全 Shell 命令(sshscp)。使用安全 shell 方法時(shí),需要首先在終端 shell 會(huì)話上啟用用 戶等效性 然后再嘗試運(yùn)行 OUI。要為當(dāng)前的終端 shell 會(huì)話啟用用戶等效性,請(qǐng)執(zhí)行以下步驟(記住為 RSA 鍵輸入在提示時(shí)生成的通行短語):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
$ ssh linux1 "date;hostname"
Sat Aug  1 14:14:42 EDT 2009
linux1
$ ssh linux2 "date;hostname"
Sat Aug  1 14:15:16 EDT 2009
linux2

安裝 Oracle 數(shù)據(jù)庫 10g 隨附 CD 軟件

使用以下命令安裝 Oracle 數(shù)據(jù)庫 10g 隨附 CD 軟件:

$ cd ~oracle
$ /home/oracle/orainstall/companion/runInstaller -ignoreSysPrereqs

屏幕名稱 答復(fù)
Welcome 屏幕 單擊 Next
Select a Product to Install 選擇“Oracle Database 10g Products 10.2.0.1.0”選項(xiàng)。
Specify Home Details 將 ORACLE_HOME NamePath 的目標(biāo)設(shè)置為前面安裝的 Oracle10g 數(shù)據(jù)庫軟件的目標(biāo),如下所示:
   Name: OraDb10g_home1
   Path:/u01/app/oracle/product/10.2.0/db_1
Specify Hardware Cluster Installation Mode 默認(rèn)情況下,將選擇 Cluster Installation 選項(xiàng)以及集群中的所有可用節(jié)點(diǎn)。保留這些默認(rèn)選項(xiàng),然后單擊 Next 繼續(xù)。

如果安裝此時(shí)停止,且有 RAC 節(jié)點(diǎn)的狀態(tài)顯示為“Node not reachable”,則執(zhí)行以下檢查:

  • 確保 Oracle 集群件正在所討論的節(jié)點(diǎn)上運(yùn)行。
  • 確保您能夠從執(zhí)行安裝的節(jié)點(diǎn)訪問所討論的節(jié)點(diǎn)。
Product-Specific Prerequisite Checks 安裝程序?qū)?zhí)行一系列的檢查以確定節(jié)點(diǎn)是否滿足安裝和配置隨附 CD 軟件的最低要求。如果任何檢查失敗,您將需要通過單擊該復(fù)選框手動(dòng)驗(yàn)證失敗的檢查。我所執(zhí)行的安裝通過了所有檢查,未出現(xiàn)任何問題。

單擊 Next 繼續(xù)。

Summary 在 Summary 屏幕上,單擊 Install 開始安裝!
End of installation 安裝結(jié)束時(shí),退出 OUI。

 


24. 創(chuàng)建 TNS 監(jiān)聽器進(jìn)程

僅在集群 (linux1) 的一個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行下列配置過程!Network Configuration Assistant (NETCA) 將在集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)上的集群化配置中設(shè)置 TNS 監(jiān)聽器。

DBCA 需要在 RAC 集群的所有節(jié)點(diǎn)上配置并運(yùn)行 Oracle TNS 監(jiān)聽器進(jìn)程,然后它才能創(chuàng)建集群化數(shù)據(jù)庫。

只需在集群的一個(gè)節(jié)點(diǎn)上執(zhí)行 TNS 監(jiān)聽器創(chuàng)建過程。執(zhí)行所有更改并將這些更改復(fù)制到集群的所有節(jié)點(diǎn)上。在一個(gè)節(jié)點(diǎn)(我將使用 linux1) 上,啟動(dòng) NETCA 并執(zhí)行創(chuàng)建新 TNS 監(jiān)聽器進(jìn)程的過程,同時(shí)配置節(jié)點(diǎn)的本地訪問權(quán)限。

驗(yàn)證終端 Shell 環(huán)境

如上一節(jié)(安裝 Oracle 數(shù)據(jù)庫 10g 隨附 CD 軟件)中所討論的,首先需要為集群中所有節(jié)點(diǎn)的遠(yuǎn)程訪問和用戶等效性配 置終端 shell 環(huán)境,然后才能運(yùn)行 Oracle Universal Installer。注意,您可以利用上一節(jié)中使用的終端 shell 會(huì)話,對(duì)此您不必采取下面描述的關(guān)于設(shè)置遠(yuǎn)程訪問和 DISPLAY 變量的任何操作:

oracle 用戶帳戶登錄并設(shè)置 DISPLAY(如果需要)

# su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$ DISPLAY=<your local workstation>:0.0
$ export DISPLAY

驗(yàn)證遠(yuǎn)程訪問/用戶等效性

驗(yàn)證您能夠在將要從中運(yùn)行 Oracle Installer 的 Linux 服務(wù)器上,不使用口令對(duì)集群中的所有其他 Linux 服務(wù)器運(yùn)行安 全 Shell 命令(sshscp)。使用安全 shell 方法時(shí),需要首先在終端 shell 會(huì)話上啟用用 戶等效性 然后再嘗試運(yùn)行 OUI。要為當(dāng)前的終端 shell 會(huì)話啟用用戶等效性,請(qǐng)執(zhí)行以下步驟(記住為 RSA 鍵輸入在提示時(shí)生成的通行短語):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
$ ssh linux1 "date;hostname"
Sat Aug  1 14:14:42 EDT 2009
linux1
$ ssh linux2 "date;hostname"
Sat Aug  1 14:15:16 EDT 2009
linux2

運(yùn)行 Network Configuration Assistant

要啟動(dòng) NETCA,請(qǐng)運(yùn)行以下命令:

$ netca & 
下表將引導(dǎo)您為我們 RAC 環(huán)境創(chuàng)建一個(gè)新的 Oracle 監(jiān)聽器。

屏幕名稱 答復(fù)
Select the Type of Oracle
Net Services Configuration
選擇 Cluster Configuration
Select the nodes to configure 選擇所有節(jié)點(diǎn):linux1 和 linux2。
Type of Configuration 選擇 Listener configuration。
Listener Configuration — 接下來 6 個(gè)屏幕 后續(xù)屏幕現(xiàn)在與其他常規(guī)監(jiān)聽器配置相似。您只需接受后續(xù) 6 個(gè)屏幕的默認(rèn)參數(shù)即可:
   What do you want to do: Add
   Listener name:LISTENER
   Selected protocols:TCP
   Port number:1521
   Configure another listener:No
   Listener configuration complete![ Next ]
您將返回到此 Welcome (Type of Configuration) 屏幕。
Type of Configuration 選擇 Naming Methods configuration。
Naming Methods Configuration 后續(xù)屏幕是:
   Selected Naming Methods: Local Naming
   Naming Methods configuration complete![ Next ]
您將返回到此 Welcome (Type of Configuration) 屏幕。
Type of Configuration 單擊 Finish 退出 NETCA。

Oracle TNS 監(jiān)聽器進(jìn)程現(xiàn)在應(yīng)在 RAC 集群的所有節(jié)點(diǎn)上運(yùn)行:

$ hostname
linux1
$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX1
=====================
$ hostname
linux2
$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_LINUX2

 


25. 創(chuàng)建 Oracle 集群數(shù)據(jù)庫

僅在集群 (linux1) 的一個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行數(shù)據(jù)庫創(chuàng)建過程!

我們將使用 DBCA 創(chuàng)建集群化數(shù)據(jù)庫。

在執(zhí)行 DBCA 前,確保為 $ORACLE_BASE/product/10.2.0/db_1 環(huán)境正確設(shè)置了 $ORACLE_HOME$PATH

在試圖開始創(chuàng)建集群化數(shù)據(jù)庫之前,還應(yīng)確保已安裝的所有服務(wù)(Oracle TNS 監(jiān)聽器、Oracle 集群件進(jìn)程等)正在運(yùn)行。

驗(yàn)證終端 Shell 環(huán)境

如上一節(jié)(創(chuàng)建 TNS 監(jiān)聽器進(jìn)程)中所討論的,首先需要為集群中所有節(jié)點(diǎn)的遠(yuǎn)程訪問和用戶等效性配置終端 shell 環(huán)境,然后才能運(yùn)行 Oracle Universal Installer。注意,您可以利用上一節(jié)中使用的終端 shell 會(huì)話,對(duì)此您不必采取下面描述的關(guān)于設(shè)置遠(yuǎn)程訪問和 DISPLAY 變量的任何操作:

oracle 用戶帳戶登錄并設(shè)置 DISPLAY(如果需要)

# su - oracle
$ # IF YOU ARE USING A REMOTE CLIENT TO CONNECT TO THE
$ # NODE PERFORMING THE INSTALL
$ DISPLAY=<your local workstation>:0.0
$ export DISPLAY

驗(yàn)證遠(yuǎn)程訪問/用戶等效性

驗(yàn)證您能夠在將要從中運(yùn)行 Oracle Installer 的 Linux 服務(wù)器上,不使用口令對(duì)集群中的所有其他 Linux 服務(wù)器運(yùn)行安 全 Shell 命令(sshscp)。使用安全 shell 方法時(shí),需要首先在終端 shell 會(huì)話上啟用用 戶等效性 然后再嘗試運(yùn)行 OUI。要為當(dāng)前的終端 shell 會(huì)話啟用用戶等效性,請(qǐng)執(zhí)行以下步驟(記住為 RSA 鍵輸入在提示時(shí)生成的通行短語):

$ exec /usr/bin/ssh-agent $SHELL
$ /usr/bin/ssh-add
Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx
Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)
$ ssh linux1 "date;hostname"
Sat Aug  1 14:14:42 EDT 2009
linux1
$ ssh linux2 "date;hostname"
Sat Aug  1 14:15:16 EDT 2009
linux2

運(yùn)行 Oracle 集群驗(yàn)證實(shí)用程序

創(chuàng)建 Oracle 集群化數(shù)據(jù)庫之前,我們應(yīng)該使用集群驗(yàn)證實(shí)用程序 (CVU) 運(yùn)行以下數(shù)據(jù)庫配置檢查。

注: 有關(guān)如何配置 CVU 的說明,可在本文前面的“使 用集群驗(yàn)證實(shí)用程序的前提條件”一節(jié)中找到。

$ cd /home/oracle/orainstall/clusterware/cluvfy
$ CV_HOME=/home/oracle/orainstall/clusterware/cluvfy; export CV_HOME
$ CV_JDKHOME=/home/oracle/orainstall/clusterware/cluvfy/jdk14; export CV_JDKHOME
$ ./runcluvfy.sh stage -pre dbcfg -n linux1,linux2 -d ${ORACLE_HOME} -verbose

查看 CVU 報(bào)告。注意,該報(bào)告將包含我們?cè)跈z查 CRS 安裝前任務(wù)時(shí)收到的錯(cuò)誤:找不到一組合適的 VIP 接口。可以忽略該錯(cuò)誤,沒什么問題。

創(chuàng)建集群化數(shù)據(jù)庫

要開始數(shù)據(jù)庫創(chuàng)建過程,運(yùn)行以下命令:

$ dbca &
屏幕名稱 答復(fù)
Welcome 屏幕 選擇“Oracle Real Application Clusters database”。
Operations 選擇 Create a Database。
Node Selection 單擊 Select All 按鈕選擇所有服務(wù)器:linux1 和 linux2。
Database Templates 選擇 Custom Database。
Database Identification 選擇:
   Global Database Name: racdb.
   SID Prefix:racdb

我將 用于數(shù)據(jù)庫域。您可以使用任何域。請(qǐng)記住,此域不必為有效的 DNS 域。

Management Option 保留此處的默認(rèn)選項(xiàng),即“Configure the Database with Enterprise Manager / Use Database Control for Database Management”。
Database Credentials 我選擇 Use the Same Password for All Accounts。輸入口令(兩 次)并確保此口令不是以數(shù)字開頭。
Storage Options 對(duì)于本指南,我們將選擇 use Automatic Storage Management (ASM)。
Create ASM Instance 提供要用于新 ASM 實(shí)例的 SYS 口令。

此外,從 Oracle 10g 第 2 版開始,ASM 實(shí)例服務(wù)器參數(shù)文件 (SPFILE) 需要位于共享磁盤上。您將需要修改“Create server parameter file (SPFILE)”的默認(rèn)條目以駐留在 OCFS2 分區(qū)上,如下所示:/u02/oradata/racdb/dbs/spfile+ASM.ora.所有其他選項(xiàng)可以保留其默認(rèn)值。

然后將有一個(gè)對(duì)話框詢問您是否要?jiǎng)?chuàng)建并啟動(dòng) ASM 實(shí)例。選擇 OK 按鈕確認(rèn)此對(duì)話框。

OUI 將立即在 RAC 集群的所有節(jié)點(diǎn)上創(chuàng)建并啟動(dòng) ASM 實(shí)例。

ASM Disk Groups

首先,單擊 Create New 按鈕。這將彈出“Create Disk Group”窗口,其中顯示了我們?cè)谇懊媸褂?ASMLib 創(chuàng)建的四個(gè)卷。

如果在本文前面部分創(chuàng)建的卷沒有顯示在“Select Member Disks”窗口中:(ORCL:VOL1、ORCL:VOL2、ORCL:VOL3 和 ORCL:VOL4),則單擊“Change Disk Discovery Path”按鈕并輸入“ORCL:VOL*”。

對(duì)于第一個(gè)“Disk Group Name”,我使用了字符串“RACDB_DATA1”。在“Select Member Disks”窗口中選擇前兩個(gè) ASM 卷(ORCL:VOL1 和 ORCL:VOL2)。將“Redundancy”設(shè)置為“Normal”。

確認(rèn)此窗口中的所有值均正確后,單擊 [OK] 按鈕。這將顯示“ASM Disk Group Creation”對(duì)話框。完成 ASM 磁盤組創(chuàng)建過程時(shí),您將返回到“ASM Disk Groups”窗口。

再次單擊 Create New 按鈕。對(duì)于第二個(gè)“Disk Group Name”,我使用了字符串“FLASH_RECOVERY_AREA”。在“Select Member Disks”窗口中選擇后兩個(gè) ASM 卷(ORCL:VOL3 和 ORCL:VOL4)。將“Redundancy”設(shè)置為“Normal”。

確認(rèn)此窗口中的所有值均正確后,單擊 [OK] 按鈕。這將顯示“ASM Disk Group Creation”對(duì)話框。

完成 ASM 磁盤組創(chuàng)建過程后,您將返回到“ASM Disk Groups”窗口,其中創(chuàng)建并選擇了兩個(gè)磁盤組。

使用新建的磁盤組名稱“RACDB_DATA1”旁邊的復(fù)選框選擇僅一個(gè)磁盤組(確保未選擇 “FLASH_RECOVERY_AREA”的磁盤組),然后單擊 [Next] 繼續(xù)。

Database File Locations

我選擇使用默認(rèn)值,即使用 Oracle Managed Files:

Database Area: +RACDB_DATA1

Recovery Configuration 選中“Specify Flash Recovery Area”選項(xiàng)。

對(duì)于“Flash Recovery Area”,單擊 [Browse] 按鈕并選擇磁盤組名“+FLASH_RECOVERY_AREA”。

我使用的磁盤組的大小約為 17GB。定義快速恢復(fù)區(qū)大小時(shí),使用整個(gè)卷減去 10% — (17-10%=15 GB)。我使用了 15 GB (15360 MB) 的“Flash Recovery Area Size”。

Database Content 我將所有數(shù)據(jù)庫組件(和目標(biāo)表空間)設(shè)置為它們的默認(rèn)值,但選擇 Example Schemas 也完全可以。由于我們安裝了 Oracle 隨附 CD 軟件,因此該選項(xiàng)可用。
Database Services 對(duì)于此測(cè)試配置,單擊 Add,然后輸入 racdb_taf 作為“Service Name”。將這兩個(gè)實(shí)例設(shè)置為 Preferred,并為“TAF Policy”選擇“Basic”。
Initialization Parameters 根據(jù)您的環(huán)境更改任意參數(shù)。我保留了所有這些參數(shù)的默認(rèn)設(shè)置。
Database Storage 根據(jù)您的環(huán)境更改任意參數(shù)。我保留了所有這些參數(shù)的默認(rèn)設(shè)置。
Creation Options 保留默認(rèn)選項(xiàng) Create Database。我還始終選擇“Generate Database Creation Scripts”。單擊 Finish 啟動(dòng)數(shù)據(jù)庫創(chuàng)建過程。出現(xiàn)數(shù)據(jù)庫創(chuàng)建報(bào)告和腳本生成對(duì)話框后,數(shù)據(jù)庫創(chuàng)建將啟動(dòng)。

在“Summary”屏幕上單擊 OK

End of Database Creation 在數(shù)據(jù)庫創(chuàng)建結(jié)束時(shí),退出 DBCA。

退出 DBCA 后,在大約 30-60 秒內(nèi),您不會(huì)收到來自對(duì)話框窗口的任何反饋。過一會(huì)兒,將彈出另一對(duì)話框,指示它正在啟動(dòng)所有 Oracle 實(shí)例以及 HA 服務(wù)“racdb_taf”。這可能需要幾分鐘的時(shí)間才能完成。完成時(shí),所有窗口和對(duì)話框?qū)㈥P(guān)閉。

完成 DBCA 后,您就啟動(dòng)了一個(gè)功能完善的 Oracle RAC 集群!

$ $ORA_CRS_HOME/bin/crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    linux1
ora....X1.lsnr application    ONLINE    ONLINE    linux1
ora.linux1.gsd application    ONLINE    ONLINE    linux1
ora.linux1.ons application    ONLINE    ONLINE    linux1
ora.linux1.vip application    ONLINE    ONLINE    linux1
ora....SM2.asm application    ONLINE    ONLINE    linux2
ora....X2.lsnr application    ONLINE    ONLINE    linux2
ora.linux2.gsd application    ONLINE    ONLINE    linux2
ora.linux2.ons application    ONLINE    ONLINE    linux2
ora.linux2.vip application    ONLINE    ONLINE    linux2
ora.racdb.db   application    ONLINE    ONLINE    linux1
ora....b1.inst application    ONLINE    ONLINE    linux1
ora....b2.inst application    ONLINE    ONLINE    linux2
ora...._taf.cs application    ONLINE    ONLINE    linux1
ora....db1.srv application    ONLINE    ONLINE    linux1
ora....db2.srv application    ONLINE    ONLINE    linux2


驗(yàn)證 racdb_taf 服務(wù)

在創(chuàng)建 Oracle 集群化數(shù)據(jù)庫的過程中,您添加了一個(gè)名為 racdb_taf 的服務(wù),我們將用它來連接啟用了 TAF 的數(shù)據(jù)庫。使用以下命令來驗(yàn)證已成功添加 racdb_taf 服務(wù):

SQL> show parameter service
NAME                 TYPE        VALUE
-------------------- ----------- --------------------------------
service_names        string      racdb., racdb_taf
如果定義的唯一服務(wù)是用于 racdb. 的,則您將需要手動(dòng)將此服務(wù)添加到兩個(gè)實(shí)例中:
SQL> show parameter service
NAME                 TYPE        VALUE
-------------------- ----------- --------------------------
service_names        string      racdb.
SQL> alter system set service_names = 
2  'racdb., racdb_taf' scope=both;

 


26. 安裝后任務(wù) —(可選)

本章描述可應(yīng)用于新的 Oracle 10g 環(huán)境以增強(qiáng)可用性和數(shù)據(jù)庫管理的幾個(gè)可選任務(wù)。

重新編譯無效對(duì)象

運(yùn)行 utlrp.sql 腳本來立即重新編譯所有無效的 PL/SQL 程序包,而不是在首次訪問它們時(shí)再重新編譯。這是個(gè)可選步驟,但建議您選擇該步驟。
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlrp.sql

在 RAC 環(huán)境中啟用存檔日志

無論是單個(gè)實(shí)例還是集群化數(shù)據(jù)庫,Oracle 都會(huì)跟蹤對(duì)數(shù)據(jù)庫塊的所有更改并記錄到聯(lián)機(jī)重做日志文件 中。在 Oracle RAC 環(huán)境中,每個(gè)實(shí)例將具有自己的聯(lián)機(jī)重做日志文件集,稱為線程。每個(gè) Oracle 實(shí)例將以循環(huán)方式使用其聯(lián)機(jī)重做日志組。一個(gè)聯(lián)機(jī)重做日志填充之后,Oracle 將轉(zhuǎn)至下一個(gè)聯(lián)機(jī)重做日志。如果數(shù)據(jù)庫處于“存檔日志模式”,Oracle 將創(chuàng)建該聯(lián)機(jī)重做日志的一個(gè)副本,然后再對(duì)其進(jìn)行重用。一個(gè)線程至少必須包含兩個(gè)聯(lián)機(jī)重做日志(或聯(lián)機(jī)重做日志組)。對(duì)于單個(gè)實(shí)例的配置也同樣如此。單個(gè) 實(shí)例至少必須包含兩個(gè)聯(lián)機(jī)重做日志(或聯(lián)機(jī)重做日志組)。

聯(lián)機(jī)重做日志文件的大小完全獨(dú)立于另一個(gè)實(shí)例的重做日志大小。盡管在大多數(shù)配置中該大小是相同的,但是該大小可能會(huì)隨每個(gè)節(jié)點(diǎn)的負(fù)載和備份/恢復(fù)注 意事項(xiàng)而異。還值得一提的是,每個(gè)實(shí)例都具有對(duì)自己的聯(lián)機(jī)重做日志文件的獨(dú)占式寫訪問權(quán)限。但是在正確配置的 RAC 環(huán)境中,如果某個(gè)實(shí)例異常中斷,每個(gè)實(shí)例都可以讀取該實(shí)例的當(dāng)前聯(lián)機(jī)重做日志文件以執(zhí)行實(shí)例恢復(fù)。因此,聯(lián)機(jī)重做日志需要位于一個(gè)共享存儲(chǔ)設(shè)備上(就像數(shù) 據(jù)庫文件一樣)。

正如本文前面所提到的那樣,Oracle 以循環(huán)方式寫入其聯(lián)機(jī)重做日志文件。當(dāng)前的聯(lián)機(jī)重做日志填充之后,Oracle 將切換到下一個(gè)聯(lián)機(jī)重做日志。為簡化介質(zhì)恢復(fù),Oracle 允許 DBA 將數(shù)據(jù)庫置于“存檔日志模式”,以在聯(lián)機(jī)重做日志填充后(并且得到重用之前)創(chuàng)建它的副本。該過程稱為存檔。

利用 Database Configuration Assistant (DBCA),用戶可以將一個(gè)新數(shù)據(jù)庫配置為存檔日志模式,但是大多數(shù) DBA 在最初創(chuàng)建數(shù)據(jù)庫期間選擇跳過該選項(xiàng)。在這種情況下,數(shù)據(jù)庫沒有處于存檔日志模式,只需將數(shù)據(jù)庫置于存檔日志模式。但是請(qǐng)注意,這將需要短暫的數(shù)據(jù)庫中 斷。從 Oracle RAC 配置的一個(gè)節(jié)點(diǎn),執(zhí)行以下任務(wù)將支持 RAC 的數(shù)據(jù)庫置于存檔日志模式。對(duì)于本文,我將使用節(jié)點(diǎn) linux1, 該節(jié)點(diǎn)運(yùn)行 racdb1 實(shí)例:

  1. 登錄到一個(gè)節(jié)點(diǎn)(即 linux1),通過在當(dāng)前實(shí)例中將 cluster_database 設(shè)置為 FALSE 來禁用集群實(shí)例參數(shù):
    $ sqlplus / as sysdba
        SQL> alter system set cluster_database=false scope=spfile sid='racdb1';

  2. 關(guān)閉所有 訪問集群化數(shù)據(jù)庫的實(shí)例:
    $ srvctl stop database -d racdb

  3. 使用本地實(shí)例,掛載 數(shù)據(jù)庫:
    $ sqlplus / as sysdba
        SQL> startup mount

  4. 啟用存檔:
    SQL> alter database archivelog;

  5. 通過在當(dāng)前實(shí)例中將實(shí)例參數(shù) cluster_database 修改為 TRUE, 重新啟用對(duì)集群的支持:
    SQL> alter system set cluster_database=true scope=spfile sid='racdb1';

  6. 關(guān)閉本地實(shí)例:
    SQL> shutdown immediate

  7. 使用 srvctl 備份所有 實(shí)例:
    $ srvctl start database -d racdb

  8. (可選)使用 srvctl 備份所有服務(wù)(即 TAF):
    $ srvctl start service -d racdb

  9. 登錄到本地實(shí)例,驗(yàn)證存檔日志模式已啟用:
    $ sqlplus / as sysdba
        SQL> archive log list
        Database log mode              Archive Mode
        Automatic archival             Enabled
        Archive destination            USE_DB_RECOVERY_FILE_DEST
        Oldest online log sequence     29
        Next log sequence to archive   30
        Current log sequence           30

 

啟用存檔日志模式后,RAC 配置中的每個(gè)實(shí)例都可以自動(dòng)存檔重做日志!

下載并安裝自定義 Oracle 數(shù)據(jù)庫腳本

DBA 依賴 Oracle 的數(shù)據(jù)字典視圖和動(dòng)態(tài)性能視圖以支持并更好地管理他們的數(shù)據(jù)庫。盡管這些視圖提供一個(gè)簡單方便的機(jī)制來查詢有關(guān)數(shù)據(jù)庫的重要信息,但是擁有一個(gè)用于查詢這 些視圖的準(zhǔn)確、隨時(shí)可用的 SQL 腳本集合還是有幫助的。

在本節(jié)中,您將下載并安裝 Oracle DBA 腳本集合,用于管理數(shù)據(jù)庫的多個(gè)方面,包括空間管理、性能、備份、安全性和會(huì)話管理??梢允褂靡韵骆溄?http://www./data/Oracle/DBA_scripts/common.zip 下載 Oracle DBA 腳本存檔。使用 oracle 用戶帳戶將 common.zip 存檔下載到集群中每個(gè)節(jié)點(diǎn)的 $ORACLE_BASE 目錄。對(duì)于本文,將 common.zip 存檔復(fù)制到 /u01/app/oracle。 接下來,將存檔文件解壓縮到 $ORACLE_BASE 目錄。

例如,使用 oracle 用戶帳戶在 Oracle RAC 集群中的每個(gè)節(jié)點(diǎn)上執(zhí)行以下命令:

$ mv common.zip /u01/app/oracle
$ cd /u01/app/oracle
$ unzip common.zip

 

最后一步是驗(yàn)證(或設(shè)置)當(dāng)前 UNIX shell 相應(yīng)的環(huán)境變量,以確保在任何目錄中 Oracle SQL 腳本都可以從 SQL*Plus 運(yùn)行。對(duì)于 UNIX,驗(yàn)證以下環(huán)境變量已設(shè)置并包含在您的登錄 shell 腳本中:

ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export ORACLE_PATH

ORACLE_PATH 環(huán)境變量應(yīng)該已在 .bash_profile 登錄腳本中設(shè)置,該登錄腳本是在為 oracle 用戶帳戶創(chuàng)建登錄腳本一節(jié)中創(chuàng)建的。

既然 Oracle DBA 腳本已解壓縮并且 UNIX 環(huán)境變量 ($ORACLE_PATH) 已設(shè)置為相應(yīng)的目錄,現(xiàn)在您登錄到 SQL*Plus 后應(yīng)該能夠在 $ORACLE_BASE/common/oracle/sql 中運(yùn)行任何 SQL 腳本。例如,要在以 DBA 用戶身份登錄到 Oracle 數(shù)據(jù)庫后查詢表空間信息,使用以下命令:

SQL> @dba_tablespaces
Status    Tablespace Name TS Type      Ext. Mgt.  Seg. Mgt.    Tablespace Size    Used (in bytes) Pct. Used
--------- --------------- ------------ ---------- --------- ------------------ ------------------ ---------
ONLINE    UNDOTBS1        UNDO         LOCAL      MANUAL         1,283,457,024          9,043,968         1
ONLINE    SYSAUX          PERMANENT    LOCAL      AUTO             524,288,000        378,732,544        72
ONLINE    USERS           PERMANENT    LOCAL      AUTO           2,147,483,648        321,257,472        15
ONLINE    SYSTEM          PERMANENT    LOCAL      MANUAL           838,860,800        505,544,704        60
ONLINE    INDX            PERMANENT    LOCAL      AUTO           1,073,741,824             65,536         0
ONLINE    UNDOTBS2        UNDO         LOCAL      MANUAL         1,283,457,024         22,282,240         2
ONLINE    TEMP            TEMPORARY    LOCAL      MANUAL         1,073,741,824         92,274,688         9
------------------ ------------------ ---------
avg                                                                                                      23
sum                                                              8,225,030,144      1,329,201,152
7 rows selected.

要在登錄到 SQL*Plus 后獲得所有可用 Oracle DBA 腳本的列表,運(yùn)行 help.sql 腳本:

SQL> @help.sql
========================================
Automatic Shared Memory Management
========================================
asmm_components.sql
========================================
Automatic Storage Management
========================================
asm_alias.sql
asm_clients.sql
asm_diskgroups.sql
asm_disks.sql
asm_disks_perf.sql
asm_drop_files.sql
asm_files.sql
asm_files2.sql
asm_templates.sql
< --- SNIP --- >
perf_top_sql_by_buffer_gets.sql
perf_top_sql_by_disk_reads.sql
========================================
Workspace Manager
========================================
wm_create_workspace.sql
wm_disable_versioning.sql
wm_enable_versioning.sql
wm_freeze_workspace.sql
wm_get_workspace.sql
wm_goto_workspace.sql
wm_merge_workspace.sql
wm_refresh_workspace.sql
wm_remove_workspace.sql
wm_unfreeze_workspace.sql
wm_workspaces.sql

創(chuàng)建共享 Oracle 口令文件

在本節(jié)中,我將介紹配置一個(gè)在 Oracle 集群化數(shù)據(jù)庫的所有實(shí)例之間共享的 Oracle 口令文件所需的步驟。UNIX 中每個(gè)實(shí)例的數(shù)據(jù)庫口令文件位于 $ORACLE_HOME/dbs/orapw<ORACLE_SID>,包含所有具有 SYSDBA 權(quán)限的數(shù)據(jù)庫用戶的列表。當(dāng)一個(gè)數(shù)據(jù)庫用戶被授予 SYSDBA 角色時(shí),實(shí)例會(huì)將此記錄在您登錄到的實(shí)例的數(shù)據(jù)庫口令文件中。但是,集群中的其他實(shí)例怎么樣呢?其他實(shí)例上的數(shù)據(jù)庫口令文件沒有得到更新,不包含剛被授予 SYSDBA 角色的用戶。因此,類似 RMAN 之類的嘗試以這個(gè)具有 SYSDBA 權(quán)限的新用戶身份登錄的程序如果嘗試使用的口令文件不包含該用戶名的實(shí)例,將會(huì)失敗。

解決此問題的常見方法是將一個(gè)數(shù)據(jù)庫口令文件放到一個(gè)共享的/集群化文件系統(tǒng)上,然后創(chuàng)建從每個(gè)實(shí)例到該單一版本數(shù)據(jù)庫口令文件的符號(hào)鏈接。由于本 文描述的環(huán)境使用 Oracle 集群文件系統(tǒng) (OCFS2),因此我們將使用它來存儲(chǔ)該單一版本的數(shù)據(jù)庫口令文件。

在本節(jié)中,我們將 ASM 實(shí)例的 Oracle 口令文件也包括在內(nèi)。

  1. 在掛載在 /u02/oradata/racdb 上的集群文件系統(tǒng)上創(chuàng)建數(shù)據(jù)庫口令目錄。僅從集群中的一個(gè)節(jié)點(diǎn)使用 oracle 用戶帳戶 (linux1) 執(zhí)行以下命令:
    $ mkdir -p /u02/oradata/racdb/dbs
  2. 從集群中的一個(gè)節(jié)點(diǎn) (linux1),將數(shù)據(jù)庫口令文件移至集群文件系統(tǒng)上的數(shù)據(jù)庫口令目錄。選擇一個(gè)節(jié)點(diǎn),該 節(jié)點(diǎn)應(yīng)該包含具有最新的 SYSDBA 添加內(nèi)容的數(shù)據(jù)庫口令文件。大多數(shù)情況下,這不會(huì)有什么問題,因?yàn)槿魏稳鄙俚捻?xiàng)都可以通過授予它們 SYSDBA 角色來添加(而且這是一個(gè)全新的安裝,此時(shí)您不可能創(chuàng)建了任何 SYSDBA 用戶)。注意,執(zhí)行以下操作時(shí),無需關(guān)閉數(shù)據(jù)庫服務(wù)器。在 linux1 中使用 oracle 用戶帳戶執(zhí)行以下命令:

    $ mv $ORACLE_HOME/dbs/orapw+ASM1 /u02/oradata/racdb/dbs/orapw+ASM
        $ mv $ORACLE_HOME/dbs/orapwracdb1 /u02/oradata/racdb/dbs/orapwracdb
        $ ln -s /u02/oradata/racdb/dbs/orapw+ASM $ORACLE_HOME/dbs/orapw+ASM1
        $ ln -s /u02/oradata/racdb/dbs/orapwracdb $ORACLE_HOME/dbs/orapwracdb1
  3. 在集群的第二個(gè)節(jié)點(diǎn) (linux2) 中執(zhí)行以下命令:
    $ rm $ORACLE_HOME/dbs/orapw+ASM2
        $ rm $ORACLE_HOME/dbs/orapwracdb2
        $ ln -s /u02/oradata/racdb/dbs/orapw+ASM $ORACLE_HOME/dbs/orapw+ASM2
        $ ln -s /u02/oradata/racdb/dbs/orapwracdb $ORACLE_HOME/dbs/orapwracdb2

 

現(xiàn)在,當(dāng)一個(gè)用戶被授予 SYSDBA 角色后,所有實(shí)例都可以訪問相同的口令文件:

SQL> GRANT sysdba TO scott;

 

 


27. 驗(yàn)證 TNS 聯(lián)網(wǎng)文件

確保在集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)上配置 TNS 聯(lián)網(wǎng)文件!

listener.ora

我們已經(jīng)在第 24 節(jié)中介紹了如何為集群化環(huán)境創(chuàng)建 TNS 監(jiān)聽器配置文件 (listener.ora)。應(yīng)正確配置 listener.ora 文件且無需對(duì)它修改。

為清楚起見,我將節(jié)點(diǎn) linux1listener.ora 文件副本包含在了本指南的支持文件中。我還包含了 tnsnames.ora 文件的副本,該文件由 Oracle 配置并可以用于測(cè)試透明應(yīng)用程序故障切換 (TAF)。此文件應(yīng)已在集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)上進(jìn)行了配置。

您可以將這些條目中的任何條目包含在需要訪問集群化數(shù)據(jù)庫的其他客戶端計(jì)算機(jī)上。

從外部客戶端連接集群化數(shù)據(jù)庫

這是一個(gè)可選步驟,但我要執(zhí)行它以便確認(rèn)正確配置了 TNS 文件。使用其他安裝了 Oracle 的計(jì)算機(jī)(例如,連接網(wǎng)絡(luò)的 Windows 計(jì)算機(jī))并從集群的任一節(jié)點(diǎn)添加為集群化數(shù)據(jù)庫創(chuàng)建的 TNS 條目(位于 tnsnames.ora 中)。

注:驗(yàn)證您從其進(jìn)行連接的計(jì)算機(jī)對(duì)所有主機(jī)名的解析與它們?cè)?listener.oratnsnames.ora 文件中的顯示完全一樣。對(duì)于本文檔,您從其連接的計(jì)算機(jī)應(yīng)該能夠在本地主機(jī)文件中或通過 DNS 解析以下主機(jī)名:

192.168.1.100    linux1
192.168.1.101    linux2
192.168.1.200    linux1-vip
192.168.1.201    linux2-vip

嘗試使用在 tnsnames.ora 文件中定義的所有可用服務(wù)名稱連接集群化數(shù)據(jù)庫:

C:\> sqlplus system/manager@racdb2
C:\> sqlplus system/manager@racdb1
C:\> sqlplus system/manager@racdb_taf
C:\> sqlplus system/manager@racdb

 


28. 創(chuàng)建/更改表空間

創(chuàng)建集群化數(shù)據(jù)庫時(shí),我們將所有表空間設(shè)置為它們的默認(rèn)大小。如果您將一個(gè)大型驅(qū)動(dòng)器用作共享存儲(chǔ),則可能想創(chuàng)建一個(gè)大小可以調(diào)整的測(cè)試數(shù)據(jù)庫。

以下是幾個(gè)可為測(cè)試數(shù)據(jù)庫修改和創(chuàng)建所有表空間的 SQL 命令。請(qǐng)記住,此示例中使用的數(shù)據(jù)庫文件名稱(OMF 文件)可能與 Oracle Database Configuration Assistant (DBCA) 為您的環(huán)境創(chuàng)建的數(shù)據(jù)庫文件名稱不同。完成本節(jié)后,在適合的地方替換在您的環(huán)境中創(chuàng)建的數(shù)據(jù)文件名。可以使用以下查詢確定環(huán)境的文件名:

SQL> select tablespace_name, file_name
2  from dba_data_files
3  union
4  select tablespace_name, file_name
5  from dba_temp_files;
TABLESPACE_NAME     FILE_NAME
--------------- --------------------------------------------------
EXAMPLE         +RACDB_DATA1/racdb/datafile/example.257.570913311
INDX            +RACDB_DATA1/racdb/datafile/indx.270.570920045
SYSAUX          +RACDB_DATA1/racdb/datafile/sysaux.260.570913287
SYSTEM          +RACDB_DATA1/racdb/datafile/system.262.570913215
TEMP            +RACDB_DATA1/racdb/tempfile/temp.258.570913303
UNDOTBS1        +RACDB_DATA1/racdb/datafile/undotbs1.261.570913263
UNDOTBS2        +RACDB_DATA1/racdb/datafile/undotbs2.265.570913331
USERS           +RACDB_DATA1/racdb/datafile/users.264.570913355

$ sqlplus / as sysdba
SQL> create user scott identified by tiger default tablespace users;
SQL> grant dba, resource, connect to scott;
SQL> alter database datafile '+RACDB_DATA1/racdb/datafile/users.264.570913355' resize 1024m;
SQL> alter tablespace users add datafile '+RACDB_DATA1' size 1024m autoextend off;
SQL> create tablespace indx datafile '+RACDB_DATA1' size 1024m
2  autoextend on next 50m maxsize unlimited
3  extent management local autoallocate
4  segment space management auto;
SQL> alter database datafile '+RACDB_DATA1/racdb/datafile/system.262.570913215' resize 800m;
SQL> alter database datafile '+RACDB_DATA1/racdb/datafile/sysaux.260.570913287' resize 500m;
SQL> alter tablespace undotbs1 add datafile '+RACDB_DATA1' size 1024m
2  autoextend on next 50m maxsize 2048m;
SQL> alter tablespace undotbs2 add datafile '+RACDB_DATA1' size 1024m
2  autoextend on next 50m maxsize 2048m;
SQL> alter database tempfile '+RACDB_DATA1/racdb/tempfile/temp.258.570913303' resize 1024m;

以下是我為我的測(cè)試數(shù)據(jù)庫環(huán)境定義的表空間快照:

Status    Tablespace Name TS Type      Ext. Mgt.  Seg. Mgt.    Tablespace Size    Used (in bytes) Pct. Used
--------- --------------- ------------ ---------- --------- ------------------ ------------------ ---------
ONLINE    UNDOTBS1        UNDO         LOCAL      MANUAL         1,283,457,024         85,065,728         7
ONLINE    SYSAUX          PERMANENT    LOCAL      AUTO             524,288,000        275,906,560        53
ONLINE    USERS           PERMANENT    LOCAL      AUTO           2,147,483,648            131,072         0
ONLINE    SYSTEM          PERMANENT    LOCAL      MANUAL           838,860,800        500,301,824        60
ONLINE    EXAMPLE         PERMANENT    LOCAL      AUTO             157,286,400         83,820,544        53
ONLINE    INDX            PERMANENT    LOCAL      AUTO           1,073,741,824             65,536         0
ONLINE    UNDOTBS2        UNDO         LOCAL      MANUAL         1,283,457,024          3,801,088         0
ONLINE    TEMP            TEMPORARY    LOCAL      MANUAL         1,073,741,824         27,262,976         3
------------------ ------------------ ---------
avg                                                                                                      22
sum                                                              8,382,316,544        976,355,328
8 rows selected.

 


29. 驗(yàn)證 RAC 集群和數(shù)據(jù)庫配置

應(yīng)在集群的兩個(gè) Oracle RAC 節(jié)點(diǎn)上執(zhí)行以下 RAC 驗(yàn)證檢查!然而,對(duì)于本文,我將只從 linux1 執(zhí)行檢查。

本節(jié)提供了幾個(gè)可用于驗(yàn)證 Oracle RAC 10g 配置的 srvctl 命令和 SQL 查詢。

有五個(gè)為 SRVCTL 定義的節(jié)點(diǎn)級(jí)任務(wù):

  • 添加和刪除節(jié)點(diǎn)級(jí)應(yīng)用程序
  • 設(shè)置和取消設(shè)置節(jié)點(diǎn)級(jí)應(yīng)用程序的環(huán)境
  • 管理節(jié)點(diǎn)應(yīng)用程序
  • 管理 ASM 實(shí)例
  • 啟動(dòng)和停止一組包含虛擬 IP 地址、監(jiān)聽器、Oracle 通知服務(wù)和 Oracle 企業(yè)管理器代理的程序(出于維護(hù)目的)。

所有實(shí)例和服務(wù)的狀態(tài)

$ srvctl status database -d racdb
Instance racdb1 is running on node linux1
Instance racdb2 is running on node linux2

單個(gè)實(shí)例的狀態(tài)

$ srvctl status instance -d racdb -i racdb2
Instance racdb2 is running on node linux2

在數(shù)據(jù)庫全局命名服務(wù)的狀態(tài)

$ srvctl status service -d racdb -s racdb_taf
Service racdb_taf is running on instance(s) racdb1, racdb2

特定節(jié)點(diǎn)上節(jié)點(diǎn)應(yīng)用程序的狀態(tài)

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

ASM 實(shí)例的狀態(tài)

$ srvctl status asm -n linux1
ASM instance +ASM1 is running on node linux1.

列出配置的所有數(shù)據(jù)庫

$ srvctl config database
racdb

顯示 RAC 數(shù)據(jù)庫的配置

$ srvctl config database -d racdb
linux1 racdb1 /u01/app/oracle/product/10.2.0/db_1
linux2 racdb2 /u01/app/oracle/product/10.2.0/db_1

顯示指定集群數(shù)據(jù)庫的所有服務(wù)

$ srvctl config service -d racdb
racdb_taf PREF: racdb1 racdb2 AVAIL:

顯示節(jié)點(diǎn)應(yīng)用程序的配置 —(VIP、GSD、ONS、監(jiān)聽器)

$ srvctl config nodeapps -n linux1 -a -g -s -l
VIP exists.: /linux1-vip/192.168.1.200/255.255.255.0/eth0
GSD exists.
ONS daemon exists.
Listener exists.

顯示 ASM 實(shí)例的配置

$ srvctl config asm -n linux1
+ASM1 /u01/app/oracle/product/10.2.0/db_1

集群中所有正在運(yùn)行的實(shí)例

SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
INST_ID  INST_NO INST_NAME  PAR STATUS  DB_STATUS    STATE     HOST
-------- -------- ---------- --- ------- ------------ --------- -------
1        1 racdb1      YES OPEN    ACTIVE       NORMAL    linux1
2        2 racdb2      YES OPEN    ACTIVE       NORMAL    linux2

位于磁盤組中的所有數(shù)據(jù)文件

select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;
NAME
-------------------------------------------
+FLASH_RECOVERY_AREA/racdb/controlfile/current.258.570913191
+FLASH_RECOVERY_AREA/racdb/onlinelog/group_1.257.570913201
+FLASH_RECOVERY_AREA/racdb/onlinelog/group_2.256.570913211
+FLASH_RECOVERY_AREA/racdb/onlinelog/group_3.259.570918285
+FLASH_RECOVERY_AREA/racdb/onlinelog/group_4.260.570918295
+RACDB_DATA1/racdb/controlfile/current.259.570913189
+RACDB_DATA1/racdb/datafile/example.257.570913311
+RACDB_DATA1/racdb/datafile/indx.270.570920045
+RACDB_DATA1/racdb/datafile/sysaux.260.570913287
+RACDB_DATA1/racdb/datafile/system.262.570913215
+RACDB_DATA1/racdb/datafile/undotbs1.261.570913263
+RACDB_DATA1/racdb/datafile/undotbs1.271.570920865
+RACDB_DATA1/racdb/datafile/undotbs2.265.570913331
+RACDB_DATA1/racdb/datafile/undotbs2.272.570921065
+RACDB_DATA1/racdb/datafile/users.264.570913355
+RACDB_DATA1/racdb/datafile/users.269.570919829
+RACDB_DATA1/racdb/onlinelog/group_1.256.570913195
+RACDB_DATA1/racdb/onlinelog/group_2.263.570913205
+RACDB_DATA1/racdb/onlinelog/group_3.266.570918279
+RACDB_DATA1/racdb/onlinelog/group_4.267.570918289
+RACDB_DATA1/racdb/tempfile/temp.258.570913303
21 rows selected.

屬于“RACDB_DATA1”磁盤組的所有 ASM 磁盤

SELECT path
FROM   v$asm_disk
WHERE  group_number IN (select group_number
from v$asm_diskgroup
where name = 'RACDB_DATA1');
PATH
----------------------------------
ORCL:VOL1
ORCL:VOL2

 


30. 啟動(dòng)/停止集群

此時(shí),我們已經(jīng)完全安裝并配置了 Oracle RAC 10g 并擁有了一個(gè)功能完善的集群化數(shù)據(jù)庫。

至此完成所有工作后,您可能會(huì)問“那我又怎樣啟動(dòng)和停止服務(wù)呢?”如果您遵循了本指南中的說明,則所有服務(wù)(包括 Oracle 集群件、所有 Oracle 實(shí)例、企業(yè)管理器數(shù)據(jù)庫控制臺(tái)等)應(yīng)在 Linux 節(jié)點(diǎn)每次重新引導(dǎo)時(shí)自動(dòng)啟動(dòng)。

但有時(shí)您可能想要關(guān)閉某個(gè)節(jié)點(diǎn),然后手動(dòng)重新啟動(dòng)它。或者,您可能發(fā)現(xiàn)企業(yè)管理器沒有啟動(dòng)它而需要啟動(dòng)它。本節(jié)提供了啟動(dòng)和停止集群環(huán)境的命令。

確保您是以 oracle UNIX 用戶登錄的。我們將從 linux1 運(yùn)行本節(jié)中的所有命令:

# su - oracle
$ hostname
linux1

停止 Oracle RAC 10g 環(huán)境

第一步是停止 Oracle 實(shí)例。當(dāng)此實(shí)例(和相關(guān)服務(wù))關(guān)閉后,關(guān)閉 ASM 實(shí)例。最后,關(guān)閉節(jié)點(diǎn)應(yīng)用程序(虛擬 IP、GSD、TNS 監(jiān)聽器和 ONS)。

$ export ORACLE_SID=racdb1
$ emctl stop dbconsole
$ srvctl stop instance -d racdb -i racdb1
$ srvctl stop asm -n linux1
$ srvctl stop nodeapps -n linux1

啟動(dòng) Oracle RAC 10g 環(huán)境

第一步是啟動(dòng)節(jié)點(diǎn)應(yīng)用程序(虛擬 IP、GSD、TNS 監(jiān)聽器和 ONS)。當(dāng)成功啟動(dòng)節(jié)點(diǎn)應(yīng)用程序后,啟動(dòng) ASM 實(shí)例。最后,啟動(dòng) Oracle 實(shí)例(和相關(guān)服務(wù))以及企業(yè)管理器數(shù)據(jù)庫控制臺(tái)。

$ export ORACLE_SID=racdb1
$ srvctl start nodeapps -n linux1
$ srvctl start asm -n linux1
$ srvctl start instance -d racdb -i racdb1
$ emctl start dbconsole

使用 SRVCTL 啟動(dòng)/停止所有實(shí)例

啟動(dòng)/停止所有實(shí)例及其啟用的服務(wù)。我只是覺得有意思就把此步驟作為關(guān)閉所有實(shí)例的一種方法加進(jìn)來了!

$ srvctl start database -d racdb
$ srvctl stop database -d racdb

 


31. 透明的應(yīng)用程序故障切換 (TAF)

企業(yè)通常需要他們的企業(yè)應(yīng)用程序提供 99.99%(甚至 99.999%)的可用性。想一想,要確保全年停機(jī)時(shí)間不超過 0.5 小時(shí)或者甚至沒有停機(jī)時(shí)間得花費(fèi)多大代價(jià)!為了滿足眾多這種高可用性要求,企業(yè)正投資于可以在一個(gè)參與系統(tǒng)出現(xiàn)故障時(shí)提供自動(dòng)故障切換的機(jī)制。就 Oracle 數(shù)據(jù)庫的可用性而言,Oracle RAC 10g 通過它的高級(jí)故障切換機(jī)制提供了一個(gè)卓越的解決方案。Oracle RAC 10g 包含了提供持續(xù)可用性所需的必要組件,這些組件均在一個(gè)集群配置中工作;當(dāng)集群中的某個(gè)參與系統(tǒng)出現(xiàn)故障時(shí),將把用戶自動(dòng)遷移到其他可用系統(tǒng)。

透明的應(yīng)用程序故障切換 (TAF) 選件是 Oracle RAC 10g 一個(gè)負(fù)責(zé)處理故障切換的主要組件。它將把所有斷開的數(shù)據(jù)庫連接(和進(jìn)程)重新連接到集群的其他節(jié)點(diǎn)上。故障切換對(duì)用戶是完全透明的。

這最后一節(jié)簡短介紹了 TAF 在 Oracle RAC 10g 中的工作方式。請(qǐng)注意,對(duì) Oracle RAC 10g 中的故障切換進(jìn)行全面介紹可能需要單獨(dú)的一篇文章,我在此處只想提供一個(gè)簡短概述。

一個(gè)重要的說明是,TAF 自動(dòng)在 OCI 庫中發(fā)生。也就是說,您的應(yīng)用程序(客戶端)代碼不需要更改便可以利用 TAF。但您需要在 Oracle TNS 文件 tnsnames.ora 中執(zhí)行某些配置步驟。(請(qǐng)記住,直到編寫本文時(shí),由于 Java 瘦客戶端從不讀取 tnsnames.ora,因此它將無法參與 TAF。)

設(shè)置 tnsnames.ora 文件

在演示 TAF 之前,我們需要驗(yàn)證在一個(gè)非 RAC 客戶端計(jì)算機(jī)(如果您有一臺(tái)安裝了 Windows 計(jì)算機(jī))上的 tnsnames.ora 文件中存在一個(gè)有效的條目。確保您安裝了 Oracle RDBMS 軟件。(實(shí)際上,您只需要在客戶端上安裝 Oracle 軟件。)

在本指南的創(chuàng)建集群化數(shù)據(jù)庫過程中,我們創(chuàng)建了一個(gè)將用于測(cè)試 TAF 的名為 RACDB_TAF 的新服務(wù)。它為負(fù)載均衡和故障切換提供了所有必需的配置參數(shù)。可以將此條目的內(nèi)容復(fù)制到客戶端計(jì)算機(jī)(本示例中使用了我的 Windows 便攜式計(jì)算機(jī))上的 %ORACLE_HOME%\network\admin\tnsnames.ora 文件中:

...
RACDB_TAF =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linux1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = linux2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb_taf.)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
...
查看會(huì)話的故障切換信息的 SQL 查詢

以下 SQL 查詢可以用來查看一個(gè)會(huì)話的故障切換類型、故障切換方法和是否發(fā)生了故障切換。我們將在這個(gè)例子中自始至終使用這個(gè)查詢。

COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11
SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';

TAF 演示

從 Windows 計(jì)算機(jī)(或其他非 RAC 客戶端計(jì)算機(jī))中,以 SYSTEM 用戶登錄使用 racdb_taf 服務(wù)的集群化數(shù)據(jù)庫:

C:\> sqlplus system/manager@racdb_taf
COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11
SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';
INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
racdb1         linux1
SELECT        BASIC           NO

不要注銷上面的 SQL*Plus 會(huì)話!

我們已經(jīng)運(yùn)行了上面的查詢,現(xiàn)在我們應(yīng)該使用 abort 選項(xiàng)來關(guān)閉 linux1 上的 racdb1 實(shí)例。要執(zhí)行這一操作,您可以使用 srvctl 命令行實(shí)用程序,如下所示:

# su - oracle
$ srvctl status database -d racdb
Instance racdb1 is running on node linux1
Instance racdb2 is running on node linux2
$ srvctl stop instance -d racdb -i racdb1 -o abort
$ srvctl status database -d racdb
Instance racdb1 is not running on node linux1
Instance racdb2 is running on node linux2
現(xiàn)在我們返回到我們的 SQL 會(huì)話,然后重新運(yùn)行緩沖中的 SQL 語句:
COLUMN instance_name    FORMAT a13
COLUMN host_name        FORMAT a9
COLUMN failover_method  FORMAT a15
COLUMN failed_over      FORMAT a11
SELECT
instance_name
, host_name
, NULL AS failover_type
, NULL AS failover_method
, NULL AS failed_over
FROM v$instance
UNION
SELECT
NULL
, NULL
, failover_type
, failover_method
, failed_over
FROM v$session
WHERE username = 'SYSTEM';
INSTANCE_NAME HOST_NAME FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------- ------------- --------------- -----------
racdb2         linux2
SELECT        BASIC           YES
SQL> exit

從上面的演示中,我們可以看到現(xiàn)在已將上述會(huì)話故障切換到了 linux2 的實(shí)例 racdb2 上。

 


32. 故障診斷

確保 RAC 節(jié)點(diǎn)名沒有出現(xiàn)在環(huán)回地址中

確保在 /etc/hosts 文件的環(huán)回地址中包含節(jié)點(diǎn)名(linux1linux2)。如果機(jī)器名出現(xiàn)在環(huán)回地址條目中,如下所示:

127.0.0.1 linux1 localhost.localdomain localhost
需要按如下所示將其刪除:
127.0.0.1 localhost.localdomain localhost

如果 RAC 節(jié)點(diǎn)名出現(xiàn)在環(huán)回地址中,您在 RAC 安裝期間將接收到以下錯(cuò)誤信息:

ORA-00603: ORACLE server session terminated by fatal error
或者
ORA-29702: error occurred in Cluster Group Service operation

驗(yàn)證 localhost 在 /etc/hosts 文件中定義為回送地址

確保 localhost.localdomainlocalhost 項(xiàng)作為回送地址包含在每個(gè) Oracle RAC 節(jié)點(diǎn)的 /etc/hosts 文件中:

    127.0.0.1        localhost.localdomain localhost
如果 /etc/hosts 文件中不存在 localhost 項(xiàng),Oracle 集群件將無法啟動(dòng)應(yīng)用程序資源 — 特別是 ONS 進(jìn)程。該錯(cuò)誤將指明“Failed to get IP for localhost”并寫入 ONS 的日志文件。例如:
CRS-0215 could not start resource 'ora.linux1.ons'. Check log file
"/u01/app/crs/log/linux1/racg/ora.linux1.ons.log"
for more details.
ONS 日志文件包含類似以下內(nèi)容的行:

 

Oracle Database 10g CRS Release 10.2.0.1.0 Production Copyright 1996, 2005 Oracle.保留所有權(quán)利。
2007-04-14 13:10:02.729: [ RACG][3086871296][13316][3086871296][ora.linux1.ons]:Failed to get IP for localhost (1)
Failed to get IP for localhost (1)
Failed to get IP for localhost (1)
onsctl:ons failed to start
...

在所有的集群節(jié)點(diǎn)上設(shè)置正確的日期和時(shí)間

在安裝 Oracle 集群件、數(shù)據(jù)庫以及隨附 CD 期間,Oracle Universal Installer (OUI) 首先將軟件安裝到運(yùn)行該安裝程序的本地節(jié)點(diǎn)(即 linux1)。然后,將該軟件以遠(yuǎn)程方式復(fù)制到集群中的其余節(jié)點(diǎn)(即 linux2)。在遠(yuǎn)程復(fù)制過程中,OUI 將在每個(gè)遠(yuǎn)程節(jié)點(diǎn)上執(zhí)行 UNIX“tar”命令,以提取進(jìn)行了存檔和復(fù)制的文件。如果執(zhí) 行安裝的節(jié)點(diǎn)上的日期和時(shí)間大于其要進(jìn)行復(fù)制的節(jié)點(diǎn)上的日期和時(shí)間,那么 OUI 將在“tar”中引發(fā)一個(gè)錯(cuò)誤,以指示其在試圖提取 帶有時(shí)間戳的文件時(shí)失敗。

Error while copying directory
/u01/app/crs with exclude file list 'null' to nodes 'linux2'.
[PRKC-1002 : All the submitted commands did not execute successfully]
---------------------------------------------
linux2:
/bin/tar: ./bin/lsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future
/bin/tar: ./bin/olsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future
...(more errors on this node)

請(qǐng)注意,盡管這看起來像 OUI 中一個(gè)嚴(yán)重的錯(cuò)誤,但您完全可以將其看作是一個(gè)警告而忽略。“tar”命令 DOES 確實(shí)提取了文件;然而,當(dāng)您在遠(yuǎn)程節(jié)點(diǎn)上執(zhí)行文件列表時(shí)(使用 ls -l),它們將缺少時(shí)間字段,直到服務(wù)器上的時(shí)間大于該文件的時(shí) 間戳。

在啟動(dòng)以上任何一個(gè)所述安裝之前,確保盡可能將集群的每個(gè)成員節(jié)點(diǎn)設(shè)置為相同的時(shí)間和日期。由于兩個(gè) Oracle RAC 節(jié)點(diǎn)使用相同的參考 Network Time Protocol 服務(wù)器,因此 Oracle 強(qiáng)烈建議使用多數(shù)操作系統(tǒng)的 Network Time Protocol 功能來執(zhí)行該操作。

然而,訪問 Network Time Protocol 服務(wù)器并非始終可用。在這種情況下,為集群中的節(jié)點(diǎn)手動(dòng)設(shè)置日期和時(shí)間,確保要從其中執(zhí)行軟件安裝的節(jié)點(diǎn) (linux1) 的時(shí)間和日期小于集群中所有其他節(jié)點(diǎn) (linux2)。我一般使二者之間相差 20 秒,如以下示例所示:

設(shè)置 linux1 的日期和時(shí)間:

# date -s "7/28/2009 23:00:00"

設(shè)置 linux2 的日期和時(shí)間:

# date -s "7/28/2009 23:00:20"

本文中所述的雙節(jié)點(diǎn) RAC 配置沒有使用 Network Time Protocol 服務(wù)器。

Openfiler — 邏輯卷在引導(dǎo)時(shí)未激活

使用連接到 Openfiler 服務(wù)器的 USB 驅(qū)動(dòng)器時(shí),出現(xiàn)了一個(gè)我多次遇到的問題。重新引導(dǎo) Openfiler 服務(wù)器后,系統(tǒng)能夠識(shí)別 USB 驅(qū)動(dòng)器,但是無法加載邏輯卷,也無法將以下消息寫入 /var/log/messages —(也可通過 dmesg 獲得):
iSCSI Enterprise Target Software - version 0.4.14
iotype_init(91) register fileio
iotype_init(91) register blockio
iotype_init(91) register nullio
open_path(120) Can't open /dev/rac1/crs -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm1 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm2 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm3 -2
fileio_attach(268) -2
open_path(120) Can't open /dev/rac1/asm4 -2
fileio_attach(268) -2

請(qǐng)注意,我不是說只有與 Openfiler 服務(wù)器連接的 USB 驅(qū)動(dòng)器才會(huì)出現(xiàn)該問題。其他類型的驅(qū)動(dòng)器也可能會(huì)出現(xiàn)該問題,但是,我只看到了 USB 驅(qū)動(dòng)器出現(xiàn)了該問題!

如果您確實(shí)收到該錯(cuò)誤,首先應(yīng)在 Openfiler 服務(wù)器中使用 lvscan 命令檢查所有邏輯卷的狀態(tài):

# lvscan
inactive          '/dev/rac1/crs' [2.00 GB] inherit
inactive          '/dev/rac1/asm1' [115.94 GB] inherit
inactive          '/dev/rac1/asm2' [115.94 GB] inherit
inactive          '/dev/rac1/asm3' [115.94 GB] inherit
inactive          '/dev/rac1/asm4' [115.94 GB] inherit

注意,每個(gè)邏輯卷的狀態(tài)設(shè)置為 inactive —(工作系統(tǒng)上每個(gè)邏輯卷的狀態(tài)將設(shè)置為 ACTIVE)。

目前,我知道有兩種方法可以讓 Openfiler 在重新引導(dǎo)時(shí)自動(dòng)加載邏輯卷,下面將對(duì)這兩種方法進(jìn)行描述。

方法 1

首先,關(guān)閉集群中的兩個(gè) Oracle RAC 節(jié)點(diǎn)(linux1linux2)。然后,在 Openfiler 服務(wù)器中,針對(duì)每個(gè)連續(xù)的重新引導(dǎo),手動(dòng)將每個(gè)邏輯卷設(shè)置為 ACTIVE

# lvchange -a y /dev/rac1/crs
# lvchange -a y /dev/rac1/asm1
# lvchange -a y /dev/rac1/asm2
# lvchange -a y /dev/rac1/asm3
# lvchange -a y /dev/rac1/asm4

也可以使用卷組更改命令將所有邏輯卷的狀態(tài)設(shè)置為 active,如下所示:

# vgscan
Reading all physical volumes.  This may take a while...
Found volume group "rac1" using metadata type lvm2
# vgchange -ay
5 logical volume(s) in volume group "rac1" now active

將每個(gè)邏輯卷設(shè)置為 active 后,使用 lvscan 命令再次驗(yàn)證狀態(tài):

# lvscan
ACTIVE            '/dev/rac1/crs' [2.00 GB] inherit
ACTIVE            '/dev/rac1/asm1' [115.94 GB] inherit
ACTIVE            '/dev/rac1/asm2' [115.94 GB] inherit
ACTIVE            '/dev/rac1/asm3' [115.94 GB] inherit
ACTIVE            '/dev/rac1/asm4' [115.94 GB] inherit

作為最后的測(cè)試,重新引導(dǎo) Openfiler 服務(wù)器以確保引導(dǎo)過程后每個(gè)邏輯卷將設(shè)置為 ACTIVE。驗(yàn)證每個(gè)邏輯卷在引導(dǎo)時(shí)都將激活之后,檢查 iSCSI 目標(biāo)服務(wù)是否正在運(yùn)行:

# service iscsi-target status
ietd (pid 2668) is running...

最后,重新啟動(dòng)集群中的每個(gè) Oracle RAC 節(jié)點(diǎn)(linux1linux2)。

方法 2

該方法由 Martin Jones 友情提供。他的方法包括修正 /etc/rc.sysinit 腳本,主要是等待 USB 磁盤(在本例中為 /dev/sda) 得到檢測(cè)。對(duì) /etc/rc.sysinit 腳本(下面將進(jìn)行描述)進(jìn)行更改之后,驗(yàn)證外部驅(qū)動(dòng)器已打開電源,然后重新引導(dǎo) Openfiler 服務(wù)器。

以下是 Openfiler 服務(wù)器上的 /etc/rc.sysinit 腳本的一小部分,其中包含 Martin 建議的更改(用藍(lán)色高亮顯示):

..............................................................
# LVM2 initialization, take 2
if [ -c /dev/mapper/control ]; then
if [ -x /sbin/multipath.static ]; then
modprobe dm-multipath >/dev/null 2>&1
/sbin/multipath.static -v 0
if [ -x /sbin/kpartx ]; then
/sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a"
fi
fi
if [ -x /sbin/dmraid ]; then
modprobe dm-mirror > /dev/null 2>&1
/sbin/dmraid -i -a y
fi
#-----
#-----  MJONES - Customisation Start
#-----
# Check if /dev/sda is ready
while [ ! -e /dev/sda ]
do
echo "Device /dev/sda for first USB Drive is not yet ready."
echo "Waiting..."
sleep 5
done
echo "INFO - Device /dev/sda for first USB Drive is ready."
#-----
#-----  MJONES - Customisation END
#-----
if [ -x /sbin/lvm.static ]; then
if /sbin/lvm.static vgscan > /dev/null 2>&1 ; then
action $"Setting up Logical Volume
Management:" /sbin/lvm.static vgscan --mknodes --ignorelockingfailure &&
/sbin/lvm.static vgchange -a y --ignorelockingfailure
fi
fi
fi
# Clean up SELinux labels
if [ -n "$SELINUX" ]; then
for file in /etc/mtab /etc/ld.so.cache ; do
[ -r $file ] && restorecon $file  >/dev/null 2>&1
done
fi
..............................................................

最后,重新啟動(dòng)集群中的每個(gè) Oracle RAC 節(jié)點(diǎn)(linux1linux2)。

OCFS2 — o2cb_ctl:創(chuàng)建節(jié)點(diǎn)時(shí)無法訪問集群服務(wù)

使用 ocfs2console 為 OCFS2 配置節(jié)點(diǎn)時(shí),可能會(huì)遇到以下錯(cuò)誤:

o2cb_ctl: Unable to access cluster service while creating node

當(dāng)您首次啟動(dòng) ocfs2console 時(shí),該錯(cuò)誤不會(huì)顯示。當(dāng)集群配置有問題或者您在使用 ocfs2console 進(jìn)行最初的集群配置后沒有保存 該設(shè)置時(shí),將出現(xiàn)該消息。這是一個(gè)錯(cuò)誤!

解決方法是退出 ocfs2console,卸載 o2cb 模塊,并刪除 ocfs2 集群配置文件 /etc/ocfs2/cluster.conf。 我還希望刪除 /config 目錄。刪除 ocfs2 集群配置文件后,重新啟動(dòng) ocfs2console 程序。

例如:

# /etc/init.d/o2cb offline ocfs2
# /etc/init.d/o2cb unload
Unmounting ocfs2_dlmfs filesystem: OK
Unloading module "ocfs2_dlmfs": OK
Unmounting configfs filesystem: OK
Unloading module "configfs": OK
# rm -f /etc/ocfs2/cluster.conf
# rm -rf /config
# ocfs2console &

這一次,將添加節(jié)點(diǎn)!

OCFS2 — 調(diào)整 O2CB 心跳閾值

在本文之前的版本中(與將 iSCSI 用作共享存儲(chǔ)相反,將 FireWire 用作共享存儲(chǔ)),我能夠安裝和配置 OCFS2、格式化新卷并最后安裝位于新 OCFS2 卷上的 Oracle 集群件(及其所需的兩個(gè)共享文件,即表決磁盤和 OCR 文件)。我能夠安裝 Oracle 集群件并可以使用 FireWire 看到共享驅(qū)動(dòng)器,但當(dāng)集群件軟件在兩個(gè)節(jié)點(diǎn)上運(yùn)行大約 15 分鐘后,我收到了許多鎖定和掛起。掛起的節(jié)點(diǎn)總是變化不定(在我的示例中為 linux1linux2)。此 外,無論是 I/O 負(fù)載較高還是根本沒有,對(duì)該節(jié)點(diǎn)崩潰(掛起)都沒有影響。

查看 OCFS2 的跟蹤文件后,對(duì)表決磁盤的訪問顯然太慢(超過了 O2CB 心跳閾值)并導(dǎo)致 Oracle 集群件軟件(以及節(jié)點(diǎn))崩潰??刂婆_(tái)上將顯示如下所示的消息:

...
Index 0: took 0 ms to do submit_bio for read
Index 1: took 3 ms to do waiting for read completion
Index 2: took 0 ms to do bio alloc write
Index 3: took 0 ms to do bio add page write
Index 4: took 0 ms to do submit_bio for write
Index 5: took 0 ms to do checking slots
Index 6: took 4 ms to do waiting for write completion
Index 7: took 1993 ms to do msleep
Index 8: took 0 ms to do allocating bios for read
Index 9: took 0 ms to do bio alloc read
Index 10: took 0 ms to do bio add page read
Index 11: took 0 ms to do submit_bio for read
Index 12: took 10006 ms to do waiting for read completion
(13,3):o2hb_stop_all_regions:1888 ERROR: stopping heartbeat on all active regions.
Kernel panic - not syncing: ocfs2 is very sorry to be fencing this system by panicing

我所采用的解決方案是將 O2CB 心跳閾值由默認(rèn)值 31(在 OCFS2 的早期版本中通常為 7)增加到 61。某些設(shè)置可能需要更高的設(shè)置。這是一個(gè)可配置參數(shù),用于計(jì)算節(jié)點(diǎn)“隔離”自身所用的時(shí)間。在 OCFS2 的安裝和配置期間,我們?cè)?#8220;將 O2CB 配置為在引導(dǎo)時(shí)啟動(dòng)并調(diào)整 O2CB 心跳閾值”一節(jié)中調(diào)整了該值。如果您遇到來自 OCFS2 的內(nèi)核錯(cuò)誤并需要增加心跳閾值,使用“將 O2CB 配置為在引導(dǎo)時(shí)啟動(dòng)并調(diào)整 O2CB 心跳閾值”一節(jié)中描述的過程。

下面將描述如何手動(dòng)調(diào)整 O2CB 心跳閾值。

首先,我們了解一下如何確定 O2CB 心跳閾值的當(dāng)前設(shè)置。為此,可以查詢 /proc 文件系統(tǒng),如下所示:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
31

我們看到值為 31,但該值表示什么呢?其實(shí),它用在以下公式中確定隔離時(shí)間(秒):

[fence time in seconds] = (O2CB_HEARTBEAT_THRESHOLD - 1) * 2

因此,如果 O2CB 心跳閾值為 31,則隔離時(shí)間將為:

(31 - 1) * 2 = 60 seconds

如果我們需要一個(gè)更大的閾值(如 120 秒),則需將 O2CB_HEARTBEAT_THRESHOLD 調(diào)整為 61,如下所示:

(61 - 1) * 2 = 120 seconds

現(xiàn)在我們了解一下如何手動(dòng)將 O2CB 心跳閾值從 31 增大為 61。該任務(wù)需要在集群的所有 Oracle RAC 節(jié)點(diǎn)上執(zhí)行。首先需要修改 /etc/sysconfig/o2cb 文件并將 O2CB_HEARTBEAT_THRESHOLD 設(shè)置為 61:

#
# This is a configuration file for automatic startup of the O2CB
# driver.  It is generated by running /etc/init.d/o2cb configure.
# Please use that method to modify this file
#
# O2CB_ENABELED: 'true' means to load the driver on boot.
O2CB_ENABLED=true
# O2CB_BOOTCLUSTER: If not empty, the name of a cluster to start.
O2CB_BOOTCLUSTER=ocfs2
# O2CB_HEARTBEAT_THRESHOLD: Iterations before a node is considered dead.
O2CB_HEARTBEAT_THRESHOLD=61
# O2CB_IDLE_TIMEOUT_MS: Time in ms before a network connection is considered dead.
O2CB_IDLE_TIMEOUT_MS=30000
# O2CB_KEEPALIVE_DELAY_MS: Max time in ms before a keepalive packet is sent
O2CB_KEEPALIVE_DELAY_MS=2000
# O2CB_RECONNECT_DELAY_MS: Min time in ms between connection attempts
O2CB_RECONNECT_DELAY_MS=2000

修改 /etc/sysconfig/o2cb 文件后,需要更改 o2cb 配置。同樣,需要在集群的所有 Oracle RAC 節(jié)點(diǎn)上執(zhí)行該操作。

# umount /u02
# /etc/init.d/o2cb offline ocfs2
# /etc/init.d/o2cb unload
# /etc/init.d/o2cb configure
Configuring the O2CB driver.
This will configure the on-boot properties of the O2CB driver.
The following questions will determine whether the driver is loaded on
boot.  The current values will be shown in brackets ('[]').  Hitting
<ENTER> without typing an answer will keep that current value.  Ctrl-C
will abort.
Load O2CB driver on boot (y/n) [n]: y
Cluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2
Specify heartbeat dead threshold (>=7) [31]: 61
Specify network idle timeout in ms (>=5000) [30000]: 30000
Specify network keepalive delay in ms (>=1000) [2000]: 2000
Specify network reconnect delay in ms (>=2000) [2000]: 2000
Writing O2CB configuration: OK
Loading module "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading module "ocfs2_nodemanager": OK
Loading module "ocfs2_dlm": OK
Loading module "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Starting O2CB cluster ocfs2: OK

我們現(xiàn)在可以再次檢查以確保這些設(shè)置應(yīng)用于 o2cb 集群堆棧:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold
61

必須注意,用作 O2CB 心跳閾值的 61 并不適用于所有配置。在某些情況下,O2CB 心跳閾值可能需要增加到 601 以防止 OCFS2 驚擾內(nèi)核。

Oracle 集群件安裝:在最后一個(gè)節(jié)點(diǎn)上運(yùn)行 root.sh 失敗

在 Oracle 集群件安裝過程完成后,試著在 root.sh 腳本末尾配置 vipca 并對(duì)最后一個(gè)節(jié)點(diǎn)運(yùn)行該腳本,這將會(huì)失?。?

Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
/u01/app/crs/jdk/jre//bin/java: error while loading
shared libraries: libpthread.so.0:
cannot open shared object file: No such file or directory

收到此錯(cuò)誤后,請(qǐng)保持 OUI 處于開啟狀態(tài)。在本節(jié)所述問題尚未得到全部解決之前,請(qǐng)不要單擊“Execute Configuration Scripts”對(duì)話框上的 OK 按鈕。

注意,在采取下述解決辦法之前,srvctl 也會(huì)產(chǎn)生類似的輸出。

出現(xiàn)該錯(cuò)誤的原因是,Linux 內(nèi)核的這些版本會(huì)采用 Oracle 以前的一個(gè)解決辦法,即在 vipcasrvctl 中使用 LD_ASSUME_KERNEL 設(shè)置來修補(bǔ) Linux 線程中的一個(gè)原有缺陷。而這個(gè)解決辦法在 OEL5、RHEL5 或 SLES10 上不再有效,故而產(chǎn)生錯(cuò)誤。

要解決上面的問題,編輯 vipca(在所有節(jié)點(diǎn)的 CRS bin 目錄下)以撤消對(duì) LD_ASSUME_KERNEL 的設(shè)置。在第 120 行左右的 IF 語句之后,添加一條 unset 命令,從而確保 LD_ASSUME_KERNEL 未經(jīng)過設(shè)置,如下所示:

if [ "$arch" = "i686" -o "$arch" = "ia64" ]
            then
            LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
            fi
            unset LD_ASSUME_KERNEL    <<== Line to be added

類似地,對(duì)于 srvctl(在所有節(jié)點(diǎn)的 CRS bin 目錄,以及(若已安裝)RDBMS bin 和 ASM bin 目錄下),通過在第 168 行左右添加一行來取消設(shè)置 LD_ASSUME_KERNEL,具體應(yīng)如下所示:

LD_ASSUME_KERNEL=2.4.19
            export LD_ASSUME_KERNEL
            unset LD_ASSUME_KERNEL    <<== Line to be added

切記要對(duì)所有節(jié)點(diǎn)重新編輯這些文件:

  <ORA_CRS_HOME>/bin/vipca
<ORA_CRS_HOME>/bin/srvctl
<RDBMS_HOME>/bin/srvctl
<ASM_HOME>/bin/srvctl  # (If exists)

應(yīng)用 10.2.0.2 或 10.2.0.3 補(bǔ)丁集后,這些補(bǔ)丁集仍將包括這些對(duì) OEL5、RHEL5 或 SLES10 來說多余的設(shè)置。此問題是由開發(fā)引起的,在 10.2.0.4 補(bǔ)丁集中得以修復(fù)。

另請(qǐng)注意,這里我們顯式取消設(shè)置 LD_ASSUME_KERNEL 而不是僅僅通過將其標(biāo)為注釋語句來取消其設(shè)置,這是為了處理這樣的情況:用戶在其環(huán)境(登錄 shell)中設(shè)置了該變量。

在解決了上述 LD_ASSUME_KERNEL 問題后,如果 VIP IP 在不可路由的地址范圍 [10.x.x.x、172.(16-31).x.x192.168.x.x] 內(nèi),則 vipca 現(xiàn)在無法運(yùn)行,會(huì)出現(xiàn)以下錯(cuò)誤:

[root@linux2 ~]# $ORA_CRS_HOME/bin/vipca
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]

有幾種方法來解決此問題。本解決辦法的目標(biāo)是使“$ORA_CRS_HOME/bin/oifcfg getif”命令的輸出中 包含“public”和“cluster_interconnect”接口。如果您試著運(yùn)行上述命令,會(huì)發(fā)現(xiàn)該命令不提供任何信息,這就意味著我們要做點(diǎn) 什么了!

第一步是確定當(dāng)前的接口和 IP 地址。

[root@linux2 ~]# $ORA_CRS_HOME/bin/oifcfg iflist
eth1  192.168.2.0
eth0  192.168.1.0

我們記得,在 Oracle 集群件的安裝過程中,我用 192.168.1.0 作為 public 接口,用 192.168.2.0 作為 cluster_interconnect 接口。

利用此信息,我們相應(yīng)地可以用 $ORA_CRS_HOME/bin/oifcfg 命令的 setif 選項(xiàng)來手動(dòng)設(shè)置公共/專用接口:

# $ORA_CRS_HOME/bin/oifcfg setif -global eth0/192.168.1.0:public
# $ORA_CRS_HOME/bin/oifcfg setif -global eth1/192.168.2.0:cluster_interconnect

現(xiàn)在,我們?cè)俅芜\(yùn)行“$ORA_CRS_HOME/bin/oifcfg getif”命令以驗(yàn)證其輸出:

[root@linux2 ~]# $ORA_CRS_HOME/bin/oifcfg getif
eth0  192.168.1.0  global  public
eth1  192.168.2.0  global  cluster_interconnect

在解決上述所有問題之后,以 root 用戶身份從發(fā)生錯(cuò)誤的最后一個(gè)節(jié)點(diǎn)手動(dòng)重新運(yùn)行 vipca (GUI)。請(qǐng)記住,vipca 是一個(gè) GUI,需要根據(jù)您的 X 服務(wù)器設(shè)置 DISPLAY 變量:

# $ORA_CRS_HOME/bin/vipca

 


33. 結(jié)論

Oracle10g RAC 允許 DBA 配置一個(gè)擁有優(yōu)越的容錯(cuò)和負(fù)載平衡功能的數(shù)據(jù)庫解決方案。然而,對(duì)于那些希望更熟悉 Oracle10g RAC 的特性和優(yōu)勢(shì)的 DBA 而言,他們將發(fā)現(xiàn)即使一個(gè)小型 RAC 集群的配置成本也在 15,000 美元到 20,000 美元之間。

本文希望為您提供一個(gè)低成本的解決方案,通過該方案可使用 Oracle Enterprise Linux 和 iSCSI 技術(shù)安裝和配置經(jīng)濟(jì)實(shí)惠的 Oracle10g 第 2 版 RAC 集群。本文介紹的 RAC 解決方案總共需要大約 2,700 美元,可以為 DBA 提供一個(gè)功能完善的 Oracle10g 第 2 版 RAC 集群。雖然本文使用的硬件對(duì)于教學(xué)目的而言足夠穩(wěn)定,但永遠(yuǎn)不應(yīng)認(rèn)為其適用于生產(chǎn)環(huán)境。



34. 致謝

像這樣篇幅和復(fù)雜程度的文章通常并非出自一人之手。盡管本人能夠編寫并成功演示構(gòu)成此配置的組件的有效性,但我還是要感謝其他幾個(gè)幫助我成功編寫本 文的人。

首先,我要感謝來自 Oracle 的 Server BDE 團(tuán)隊(duì)的 Bane Radulovic。Bane 不僅向我介紹了 Openfiler,還與我共享了他對(duì)于該產(chǎn)品以及如何針對(duì) Oracle RAC 最好地利用它的經(jīng)驗(yàn)和知識(shí)。他的研究和辛苦工作使得配置 Openfiler 的任務(wù)得以圓滿完成。Bane 還參與了硬件建議和測(cè)試。

特別感謝 K Gopalakrishnan,他幫助提供了本文的 Oracle RAC 10g 概述一節(jié)。在本節(jié)中,有關(guān) Oracle RAC 歷史的大量內(nèi)容可以在他的暢銷書《Oracle Database 10g Real Application Clusters Handbook》中找到。本書受到希望成功實(shí)施 Oracle RAC 以及完全理解緩 沖融合全局資源目錄 等多種高級(jí)服務(wù)的運(yùn)行方式的 DBA 和開發(fā)人員的極力推薦。

接下來,我要感謝 Oracle ACE Werner Puschitz 在“在 Red Hat Enterprise Linux Advanced Server 3 上安裝具有真正應(yīng)用服務(wù)器集群 (RAC) 的 Oracle 數(shù)據(jù)庫 10g”一文中所做的杰 出貢獻(xiàn)。本文以及他撰寫的其他幾篇文章提供的有關(guān) Oracle RAC 的信息在任何其他 Oracle 文檔中都是無法找到的。沒有他的辛苦工作以及對(duì)配置 OCFS2 和 ASMLib 等問題的研究,本文可能根本無法完成。如果您有興趣拜讀 Werner Puschitz 撰寫的有關(guān) Linux 內(nèi)部結(jié)構(gòu)以及 Oracle 深入配置方面的技術(shù)文章,請(qǐng)?jiān)L問他的網(wǎng)站 www.

另外,還要感謝 Tzvika Lemel 就如何使用 Oracle 的集群驗(yàn)證實(shí)用程序 (CVU) 提出的意見和建議。

最后,我想表達(dá)對(duì)以下供應(yīng)商的感謝,他們慷慨地為本文提供了硬件:Stallard Technologies, Inc.、SeagateAvocent Corporation、Intel、D-Link、SIIGLaCie

 


Jeffrey Hunter [www.] 畢業(yè)于位于特洛克的加利福尼亞州立大學(xué)的 Stanislaus 分校,獲得了計(jì)算機(jī)科學(xué)學(xué)士學(xué)位,曾經(jīng)當(dāng)過 16 年以上的高級(jí) DBA 和軟件工程師。他是一位 Oracle 認(rèn)證專家、Java 開發(fā)認(rèn)證專家、Oracle ACE 和作家,當(dāng)前作為高級(jí)數(shù)據(jù)庫管理員就職于 The DBA Zone, Inc.。Jeff 的工作包括高級(jí)性能調(diào)節(jié)、Java 和 PL/SQL 編程、容量規(guī)劃、數(shù)據(jù)庫安全性以及 UNIX、Linux 和 Windows NT 環(huán)境中的物理/邏輯數(shù)據(jù)庫設(shè)計(jì)。Jeff 的其他興趣還涉及數(shù)學(xué)加密理論、Java 和 C 的編程語言處理器(編譯器和解釋器)、LDAP、編寫基于 Web 的數(shù)據(jù)庫管理工具,當(dāng)然還有 Linux。

將您的意見發(fā)送給我們

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产成人亚洲综合色就色| 亚洲日本久久国产精品久久| 男人的天堂的视频东京热| 日韩一区二区三区在线欧洲| 欧美成人黄色一区二区三区| 精品一区二区三区三级视频| 国产香蕉国产精品偷在线观看 | 国产精品免费自拍视频| 婷婷色国产精品视频一区| 亚洲一区二区三区三州| 亚洲精品偷拍视频免费观看| 日韩精品第一区二区三区| 尤物天堂av一区二区| 精品少妇人妻一区二区三区| 黑人巨大精品欧美一区二区区| 老熟妇乱视频一区二区| 日韩中文高清在线专区| 亚洲精品成人午夜久久| 激情少妇一区二区三区| 午夜精品在线观看视频午夜| 99久免费精品视频在线观| 这里只有九九热精品视频| 精品一区二区三区不卡少妇av| 日韩欧美黄色一级视频| 亚洲妇女作爱一区二区三区| 婷婷开心五月亚洲综合| 日本免费熟女一区二区三区| 欧美亚洲综合另类色妞| 亚洲午夜av一区二区| 黄片三级免费在线观看| 日本精品理论在线观看| 国产成人免费高潮激情电| 中日韩免费一区二区三区| 少妇肥臀一区二区三区| 欧美国产亚洲一区二区三区| 亚洲第一区二区三区女厕偷拍| 在线观看中文字幕91| 日韩精品小视频在线观看| 久久精品偷拍视频观看| 国产av一二三区在线观看| 国产精品免费视频久久|