原作者:Vincent Chan? 轉(zhuǎn)載:http://www.oracle.com/technology/global/cn/pub/articles/chan_sing2rac_install.html
對于那些具有有限操作經(jīng)驗的用戶而言,實施 Oracle RAC 10g 的前景令人生畏。但事情并不一定如此。
本指南將提供明確的步驟,引導(dǎo)您在 RHEL3 上將單一實例 Oracle 10g 數(shù)據(jù)庫轉(zhuǎn)換為 Oracle RAC。我將 Oracle 自動存儲管理 (ASM)(一個構(gòu)建到 Oracle 數(shù)據(jù)庫內(nèi)核中的集成文件系統(tǒng)和卷管理解決方案)用于 RAC 數(shù)據(jù)庫存儲,因為它不但提供了存儲可靠性和高性能,還簡化了數(shù)據(jù)庫存儲管理。
總的說來,有多種方法可以將數(shù)據(jù)庫轉(zhuǎn)換為 RAC。如果數(shù)據(jù)庫比較小,則可以考慮在 ASM 上安裝一個新的 RAC 數(shù)據(jù)庫,并將當前數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出/導(dǎo)入到 RAC 數(shù)據(jù)庫。對于較大的數(shù)據(jù)庫,首選的方法是使用 RMAN 將數(shù)據(jù)庫文件移植到 ASM。這里所要說明的方法是一個分為兩個階段的方法:首先,將數(shù)據(jù)移植到 ASM,然后將單一實例數(shù)據(jù)庫轉(zhuǎn)換為 RAC。如果您是對 ASM 不了解,建議您采用此移植方法,先熟悉 ASM,然后再進一步運用 ASM 和 RAC。(有關(guān) Oracle ASM 的更多信息,請訪問 Oracle ASM 產(chǎn)品中心或參考文檔。)
本指南要求您對 RAC 體系結(jié)構(gòu)有一個基本了解,對 Oracle 數(shù)據(jù)庫和 Red Hat Enterprise Linux 的管理較為熟悉。有關(guān)詳細信息,請參考文檔。
概述
RAC 集群由兩臺運行 RHEL3(內(nèi)核 2.4.21-27)的 Intel x86 服務(wù)器組成。每個節(jié)點都可以訪問共享存儲器并可以連接到公共網(wǎng)絡(luò)和專用網(wǎng)絡(luò)。
本指南分為以下步驟:
- 準備安裝
- 將數(shù)據(jù)庫移植到 ASM
- 安裝 Oracle 集群就緒服務(wù) (CRS) 軟件
- 安裝 Oracle RAC 軟件
- 后續(xù)安裝
- 測試透明應(yīng)用程序故障切換 (TAF)
主機名 | 實例名 | 數(shù)據(jù)庫名 | $ORACLE_BASE | 數(shù)據(jù)庫文件存儲 |
---|---|---|---|---|
salmon1 | prod1 | prod1 | /u01/app/oracle | ext3 |
和 RAC 數(shù)據(jù)庫環(huán)境情況介紹:
主機名 | 實例名 | 數(shù)據(jù)庫名 | $ORACLE_BASE | 數(shù)據(jù)庫文件存儲 | OCR 和 CRS Voting Disk |
---|---|---|---|---|---|
salmon1 | prod1a | prod1 | /u01/app/oracle | ASM | 原始 |
salmon2 | prod1b | prod1 | /u01/app/oracle | ASM | 原始 |
您將在每個節(jié)點上安裝 Oracle Home 以實現(xiàn)冗余。ASM 和 RAC 實例在每個節(jié)點上共享同一 Oracle Home。 第 1 步:準備安裝1a.檢驗軟件程序包版本。
安裝所需的程序包。其他信息可以從文檔中獲得。
[root@salmon1]# rpm -qa | grep -i compat compat-libstdc++-7.3-2.96.128 compat-gcc-c++-7.3-2.96.128 compat-libstdc++-devel-7.3-2.96.128 compat-db-4.0.14-5 compat-glibc-7.x-2.2.4.32.6 compat-slang-1.4.5-5 compat-gcc-7.3-2.96.128 compat-pwdb-0.62-3 [root@salmon1]# [root@salmon1]# rpm -qa | grep openmotif openmotif-2.2.3-3.RHEL3 [root@salmon1]# [root@salmon1]# rpm -qa | grep -i gcc gcc-gnat-3.2.3-42 gcc-c++-ssa-3.5ssa-0.20030801.48 compat-gcc-c++-7.3-2.96.128 libgcc-ssa-3.5ssa-0.20030801.48 gcc-3.2.3-42 gcc-g77-3.2.3-42 gcc-java-3.2.3-42 gcc-ssa-3.5ssa-0.20030801.48 gcc-g77-ssa-3.5ssa-0.20030801.48 gcc-objc-ssa-3.5ssa-0.20030801.48 libgcc-3.2.3-42 gcc-c++-3.2.3-42 gcc-objc-3.2.3-42 gcc-java-ssa-3.5ssa-0.20030801.48 compat-gcc-7.3-2.96.1281b.檢驗內(nèi)核參數(shù)。
檢驗以下內(nèi)核參數(shù)。其他信息可以從文檔中獲得。
[root@salmon1]# sysctl -a | grep shm kernel.shmmni = 4096 kernel.shmall = 2097152 kernel.shmmax = 2147483648 [root@salmon1]# sysctl -a | grep sem kernel.sem = 250 32000 100 128 [root@salmon1]# sysctl -a | grep -i ip_local net.ipv4.ip_local_port_range = 1024 65000 [root@salmon1]# sysctl -a | grep -i file-max fs.file-max = 655361c.創(chuàng)建 Oracle Base 目錄、oracle 用戶和組。
在第一個節(jié)點上使用下面的信息,在第二個節(jié)點上創(chuàng)建 oracle 用戶以及 oinstall 和 dba 組。
[oracle@salmon1]$ hostname salmon1.dbsconsult.com [oracle@salmon1]$ [oracle@salmon1]$ id uid=500(oracle) gid=500(dba) groups=500(dba),501(oinstall) [oracle@salmon1]$ [oracle@salmon1]$ echo $ORACLE_BASE /u01/app/oracle1d.編輯 oracle 用戶環(huán)境文件。
[oracle@salmon1]$ more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH=$PATH:$HOME/bin export ORACLE_SID=prod1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.1.0 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH umask 0221e.配置 oracle 用戶 shell 限制。
[root@salmon1]# more /etc/security/limits.conf * soft nproc 2047 * hard nproc 16384 * soft nofile 1024 * hard nofile 65536 [root@salmon1]# grep pam_limits /etc/pam.d/login session required /lib/security/pam_limits.so1f.配置公共網(wǎng)絡(luò)和專用網(wǎng)絡(luò)。
使用下面的信息對網(wǎng)絡(luò)接口設(shè)備 eth0(公共)和 eth1(專用)進行必需的更改。
[root@salmon1]# redhat-config-network
主機名 | IP 地址 | 類型 |
---|---|---|
salmon1.dbsconsult.com | 192.168.0.184 | 公共 (eth0) |
salmon2.dbsconsult.com | 192.168.0.185 | 公共 (eth0) |
salmon1.dbsconsult.com | 10.10.10.84 | 專用 (eth1) |
salmon2.dbsconsult.com | 10.10.10.85 | 專用 (eth1) |
salmon1-vip.dbsconsult.com | 192.168.0.186 | 虛擬 |
salmon2-vip.dbsconsult.com | 192.168.0.187 | 虛擬 |
1g.編輯 the /etc/hosts 文件。
127.0.0.1 localhost.localdomain localhost 10.10.10.84 sallocal1.dbsconsult.com sallocal1 10.10.10.85 sallocal2.dbsconsult.com sallocal2 192.168.0.184 salmon1.dbsconsult.com salmon1 192.168.0.185 salmon2.dbsconsult.com salmon2 192.168.0.186 salmon1-vip.dbsconsult.com salmon1-vip 192.168.0.187 salmon2-vip.dbsconsult.com salmon2-vip驗證主機名和配置的網(wǎng)絡(luò)接口設(shè)備。
[root@salmon1]# hostname salmon1.dbsconsult.com [root@salmon1]# /sbin/ifconfig
1h.使用 SSH 建立用戶等效性。
在集群就緒服務(wù) (CRS) 和 RAC 安裝過程中,Oracle Universal Installer (OUI) 必須能夠以 oracle 的身份將軟件復(fù)制到所有 RAC 節(jié)點,而不提示輸入口令。在 Oracle 10g 中,可以使用 ssh 代替 rsh 完成此操作。要建立用戶等效性,請在兩個節(jié)點上以 oracle 用戶的身份生成用戶的公鑰和私鑰。
[oracle@salmon1]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/oracle/.ssh/id_dsa): Created directory '/home/oracle/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/oracle/.ssh/id_dsa. Your public key has been saved in /home/oracle/.ssh/id_dsa.pub. The key fingerprint is: 5d:8c:42:97:eb:42:ae:52:52:e9:59:20:2a:d3:6f:59 oracle@salmon1.dbsconsult.com在每個節(jié)點上測試連接。驗證當您再次運行以下命令時,系統(tǒng)是否不提示您輸入口令。
ssh salmon1 date ssh salmon2 date ssh sallocal1 date ssh sallocal2 date ssh salmon1.dbsconsult.com date ssh salmon2.dbsconsult.com date ssh sallocal1.dbsconsult.com date ssh sallocal2.dbsconsult.com date1i.配置 hangcheck timer 內(nèi)核模塊。
hangcheck timer 內(nèi)核模塊監(jiān)控系統(tǒng)的運行情況,并重新啟動出現(xiàn)故障的 RAC 節(jié)點。它使用兩個參數(shù),即 hangcheck_tick(定義系統(tǒng)檢查頻率)和 hangcheck_margin(定義在重置 RAC 節(jié)點前的最大掛起延時)來確定節(jié)點是否出現(xiàn)故障。
在 /etc/rc.d/rc.local 中添加以下行以自動加載 hangcheck 模塊。
[root@salmon1]# grep insmod /etc/rc.d/rc.local insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=1801j.重新創(chuàng)建數(shù)據(jù)庫控制文件。
在轉(zhuǎn)換到 RAC 之前,確保在控制文件中正確調(diào)整以下項的大小。如果需要,請使用正確的設(shè)置重新創(chuàng)建數(shù)據(jù)庫控制文件。
MAXLOGFILES MAXLOGMEMBERS MAXDATAFILES MAXINSTANCES MAXLOGHISTORY1k.調(diào)整數(shù)據(jù)庫緩沖區(qū)高速緩存。
從單一實例數(shù)據(jù)庫轉(zhuǎn)換到 RAC 時,數(shù)據(jù)庫緩沖區(qū)高速緩存需要額外的內(nèi)存。在 RAC 中,為每個塊緩沖區(qū)高速緩存中的全局高速緩存服務(wù) (GCS) 分配空間。所需的額外內(nèi)存量取決于應(yīng)用程序訪問數(shù)據(jù)的方式,即同一個塊是否高速緩存到多個實例中。
在演示實驗中,我觀察到緩沖區(qū)高速緩存的使用率增加了大約 8%。使用緩沖區(qū)高速緩存顧問確定最佳的緩沖區(qū)高速緩存大小,或切換到 Oracle 自動共享內(nèi)存管理 (ASMM) 讓 Oracle 進行控制。第 2 步:將數(shù)據(jù)庫移植到 ASM
ASM 實例與數(shù)據(jù)庫實例之間的同步需要 Oracle 集群同步服務(wù) (CSS) 后臺程序。要啟動 ASM 實例,必須啟動 CSS 后臺程序。安裝或升級到 Oracle 數(shù)據(jù)庫 10g 時,應(yīng)該已經(jīng)為單節(jié)點版本配置了 CSS,并且 CSS 應(yīng)在系統(tǒng)重新啟動時自動啟動。
[root@salmon1]# ps a€“ef | grep ocssd.bin | wc a€“l(fā) 172a.下載 ASM RPM.
從 OTN 下載以下 ASM RPM:
- oracleasm-support-2.0.0-1.i386.rpm
- oracleasm-2.4.21-27.EL-1.0.4-2.i686.rpm(UP 內(nèi)核的驅(qū)動程序)或 oracleasm-2.4.21-27.ELsmp-1.0.4-1.i686.rpm(SMP 內(nèi)核的驅(qū)動程序)
- oracleasmlib-2.0.0-1.i386.rpm
2b.安裝 ASM RPM。
以 root 用戶的身份安裝 ASM RPM。
[root@salmon1]# rpm -i oracleasm-support-2.0.0-1.i386.rpm [root@salmon1]# rpm -i oracleasm-2.4.21-27.EL-1.0.4-2.i686.rpm Linking module oracleasm.o into the module path [ OK ] [root@salmon1]# rpm -i oracleasmlib-2.0.0-1.i386.rpm [root@salmon1]# rpm -qa | grep oracleasm oracleasm-2.4.21-27.EL-1.0.4-2 oracleasm-support-2.0.0-1 oracleasmlib-2.0.0-12c.配置 ASM。
以 root 用戶的身份配置 ASMLib。
[root@salmon1]# /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 ('[]').Hitting2d.創(chuàng)建 ASM 磁盤。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 []:dba 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
以 root 用戶的身份在任何一個節(jié)點上創(chuàng)建 ASM 磁盤。
[root@salmon1]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdg5 Marking disk "/dev/sdg5" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdg6 Marking disk "/dev/sdg6" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdg7 Marking disk "/dev/sdg7" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL4 /dev/sdg8 Marking disk "/dev/sdg8" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL5/dev/sdg9 Marking disk "/dev/sdg9" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL6 /dev/sdg10 Marking disk "/dev/sdg10" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL7 /dev/sdg11 Marking disk "/dev/sdg11" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL8 /dev/sdg12 Marking disk "/dev/sdg12" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL9 /dev/sdg13 Marking disk "/dev/sdg13" as an ASM disk [ OK ] [root@salmon1]# /etc/init.d/oracleasm createdisk VOL10 /dev/sdg14 Marking disk "/dev/sdg14" as an ASM disk [ OK ]驗證能否從每個節(jié)點看到 ASM 磁盤。
[root@salmon1]# /etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 VOL4 VOL5 VOL6 VOL7 VOL8 VOL9 VOL10 [root@salmon1]# /etc/init.d/oracleasm scandisks Scanning system for ASM disks [ OK ]2e.創(chuàng)建 ASM init.ora。
在第一個節(jié)點上,使用以下參數(shù)在 $ORACLE_HOME/dbs 中創(chuàng)建一個 init+ASM1A.ora 文件:
#asm_diskgroups='DG1', a€?DG2a€?, a€?RECOVERYDESTa€? asm_diskstring='ORCL:VOL*' background_dump_dest=/u01/app/oracle/admin/+ASM/bdump core_dump_dest=/u01/app/oracle/admin/+ASM/cdump user_dump_dest=/u01/app/oracle/admin/+ASM/udump instance_type=asm large_pool_size=16M remote_login_passwordfile=exclusive +ASM1A.instance_number=1 +ASM1B.instance_number=22f.創(chuàng)建 ASM 口令文件。
使用 orapwd 實用程序在第一個節(jié)點上的 $ORACLE_HOME/dbs 中創(chuàng)建一個 orapw+ASM1A 文件。
[oracle@salmon1]$ cd $ORACLE_HOME/dbs [oracle@salmon1]$ orapwd file=orapw+ASM1A password=sys entries=52g.創(chuàng)建第一個 ASM 實例。
在第一個節(jié)點上創(chuàng)建第一個 ASM 實例。將 CRS 軟件安裝到第二個節(jié)點后,將在“后續(xù)安裝”中創(chuàng)建第二個 ASM 實例。
[oracle@salmon1]$ export ORACLE_SID=+ASM1A [oracle@salmon1]$ sqlplus / as sysdba SQL*Plus:Release 10.1.0.3.0 - Production on Thu May 26 05:51:07 2005 Copyright (c) 1982, 2004, Oracle.保留所有權(quán)利。 Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 104857600 bytes Fixed Size 777616 bytes Variable Size 104079964 bytes Database Buffers 0 bytes Redo Buffers 0 bytes ORA-15110:no diskgroups mounted2h.創(chuàng)建 ASM 實例 spfile。
在 ASM 實例啟動后立即創(chuàng)建一個 spfile。使用 spfile 文件,任何新建的磁盤組都將自動添加到 spfile 文件。
SQL> create spfile from pfile; File created.2i.創(chuàng)建磁盤組。
創(chuàng)建三個磁盤組:DG1、DG2 和 RECOVERYDEST。DG1 和 DG2 將用于存儲 Oracle 數(shù)據(jù)文件和重做日志。RECOVERYDEST 將用作閃回恢復(fù)區(qū)。
SQL> create diskgroup dg1 normal redundancy 2 failgroup fg1a disk 3 'ORCL:VOL1','ORCL:VOL2' 4 failgroup fg1b disk 5 'ORCL:VOL3','ORCL:VOL4'; Diskgroup created. SQL> create diskgroup dg2 normal redundancy 2 failgroup fg2a disk 3 'ORCL:VOL5','ORCL:VOL6' 4 failgroup fg2b disk 5 'ORCL:VOL7','ORCL:VOL8'; Diskgroup created. SQL> create diskgroup recoverydest normal redundancy 2 failgroup fgrd1 disk 3 'ORCL:VOL9' 4 failgroup fgrd2 disk 5 'ORCL:VOL10'; Diskgroup created. SQL> show parameter diskgroup NAME TYPE VALUE ------------------------------ ----------- ----------------------------- asm_diskgroups string DG1, DG2, RECOVERYDEST SQL> select name,total_mb from v$asm_diskgroup; NAME TOTAL_MB ------------------------- ------------------- DG1 36864 DG2 36864 RECOVERYDEST 73728 3 rows selected. SQL> select name,path,failgroup from v$asm_disk; NAME PATH FAILGROUP -------- --------------- ---------------- VOL1 ORCL:VOL1 FG1A VOL10 ORCL:VOL10 FGRD2 VOL2 ORCL:VOL2 FG1A VOL3 ORCL:VOL3 FG1B VOL4 ORCL:VOL4 FG1B VOL5 ORCL:VOL5 FG2A VOL6 ORCL:VOL6 FG2A VOL7 ORCL:VOL7 FG2B VOL8 ORCL:VOL8 FG2B VOL9 ORCL:VOL9 FGRD1 10 rows selected.2j.配置閃回恢復(fù)區(qū)。
SQL> connect sys/sys@prod1 as sysdba Connected. SQL> alter database disable block change tracking; Database altered. SQL> alter system set db_recovery_file_dest_size=72G; System altered. SQL> alter system set db_recovery_file_dest=a€?+RECOVERYDESTa€?; System altered.2k.將數(shù)據(jù)文件移植到 ASM。
必須使用 RMAN 將數(shù)據(jù)文件移植到 ASM 磁盤組。所有數(shù)據(jù)文件都將移植到新創(chuàng)建的磁盤組 DG1。在 DG1 和 DG2 中創(chuàng)建重做日志和控制文件。在生產(chǎn)環(huán)境中,應(yīng)將重做日志存儲到與余下的 Oracle 數(shù)據(jù)文件不同的磁盤組和磁盤控制器上。
SQL> connect sys/sys@prod1 as sysdba Connected. SQL> alter system set db_create_file_dest=a€?+DG1a€?; System altered. SQL> alter system set control_files='+DG1/cf1.dbf' scope=spfile; System altered. SQL> shutdown immediate; [oracle@salmon1]$ rman target / RMAN> startup nomount; Oracle instance started Total System Global Area 419430400 bytes Fixed Size 779416 bytes Variable Size 128981864 bytes Database Buffers 289406976 bytes Redo Buffers 262144 bytes RMAN> restore controlfile from '/u02/oradata/prod1/control01.ctl'; Starting restore at 26-MAY-05 using target database controlfile instead of recovery catalog allocated channel:ORA_DISK_1 channel ORA_DISK_1:sid=160 devtype=DISK channel ORA_DISK_1:copied controlfile copy output filename=+DG1/cf1.dbf Finished restore at 26-MAY-05 RMAN> alter database mount; database mounted released channel:ORA_DISK_1 RMAN> backup as copy database format '+DG1'; Starting backup at 26-MAY-05 allocated channel:ORA_DISK_1 channel ORA_DISK_1:sid=160 devtype=DISK channel ORA_DISK_1:starting datafile copy input datafile fno=00001 name=/u02/oradata/prod1/system01.dbf output filename=+DG1/prod1/datafile/system.257.1 tag=TAG20050526T073442 recid=1 stamp=559294642 channel ORA_DISK_1:datafile copy complete, elapsed time: 00:02:49 channel ORA_DISK_1:starting datafile copy input datafile fno=00003 name=/u02/oradata/prod1/sysaux01.dbf output filename=+DG1/prod1/datafile/sysaux.258.1 tag=TAG20050526T073442 recid=2 stamp=559294735 channel ORA_DISK_1:datafile copy complete, elapsed time: 00:01:26 channel ORA_DISK_1:starting datafile copy input datafile fno=00002 name=/u02/oradata/prod1/undotbs01.dbf output filename=+DG1/prod1/datafile/undotbs1.259.1 tag=TAG20050526T073442 recid=3 stamp=559294750 channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:15 channel ORA_DISK_1:starting datafile copy input datafile fno=00004 name=/u02/oradata/prod1/users01.dbf output filename=+DG1/prod1/datafile/users.260.1 tag=TAG20050526T073442 recid=4 stamp=559294758 channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:07 channel ORA_DISK_1:starting datafile copy copying current controlfile output filename=+DG1/prod1/controlfile/backup.261.1 tag=TAG20050526T073442 recid=5 stamp=559294767 channel ORA_DISK_1:datafile copy complete, elapsed time: 00:00:08 Finished backup at 26-MAY-05 RMAN> switch database to copy; datafile 1 switched to datafile copy "+DG1/prod1/datafile/system.257.1" datafile 2 switched to datafile copy "+DG1/prod1/datafile/undotbs1.259.1" datafile 3 switched to datafile copy "+DG1/prod1/datafile/sysaux.258.1" datafile 4 switched to datafile copy "+DG1/prod1/datafile/users.260.1" RMAN> alter database open; database opened RMAN> exit SQL> connect sys/sys@prod1 as sysdba Connected. SQL> select tablespace_name, file_name from dba_data_files; TABLESPACE FILE_NAME --------------------- ----------------------------------------- USERS +DG1/prod1/datafile/users.260.1 SYSAUX +DG1/prod1/datafile/sysaux.258.1 UNDOTBS1 +DG1/prod1/datafile/undotbs1.259.1 SYSTEM +DG1/prod1/datafile/system.257.12l.將臨時表空間移植到 ASM。
SQL> alter tablespace temp add tempfile size 100M; Tablespace altered. SQL> select file_name from dba_temp_files; FILE_NAME ------------------------------------- +DG1/prod1/tempfile/temp.264.32m.將重做日志移植到 ASM。
刪除現(xiàn)有的重做日志,并在 ASM 磁盤組 DG1 和 DG2 中重新創(chuàng)建它們。
SQL> alter system set db_create_online_log_dest_1='+DG1'; System altered. SQL> alter system set db_create_online_log_dest_2='+DG2'; System altered. SQL> select group#, member from v$logfile; GROUP# MEMBER --------------- ---------------------------------- 1 /u03/oradata/prod1/redo01.log 2 /u03/oradata/prod1/redo02.log SQL> alter database add logfile group 3 size 10M; Database altered. SQL> alter system switch logfile; System altered. SQL> alter database drop logfile group 1; Database altered. SQL> alter database add logfile group 1 size 100M; Database altered. SQL> alter database drop logfile group 2; Database altered. SQL> alter database add logfile group 2 size 100M; Database altered. SQL> alter system switch logfile; System altered. SQL> alter database drop logfile group 3; Database altered. SQL> select group#, member from v$logfile; GROUP# MEMBER --------------- ---------------------------------------- 1 +DG1/prod1/onlinelog/group_1.265.3 1 +DG2/prod1/onlinelog/group_1.257.1 2 +DG1/prod1/onlinelog/group_2.266.3 2 +DG2/prod1/onlinelog/group_2.258.12n.從 spfile 文件創(chuàng)建 pfile 文件。
創(chuàng)建并保留數(shù)據(jù)庫 pfile 的副本。您將稍后在“后續(xù)安裝”中向 pfile 中添加更多的 RAC 特定參數(shù)。
SQL> connect sys/sys@prod1 as sysdba Connected. SQL> create pfile='/tmp/tmppfile.ora' from spfile; File created.2o.添加其他控制文件。
如果需要其他控制文件以實現(xiàn)冗余,則可以在 ASM 中創(chuàng)建它,方法與在其他任何文件系統(tǒng)中創(chuàng)建相同。
SQL> connect sys/sys@prod1 as sysdba Connected to an idle instance. SQL> startup mount ORACLE instance started. Total System Global Area 419430400 bytes Fixed Size 779416 bytes Variable Size 128981864 bytes Database Buffers 289406976 bytes Redo Buffers 262144 bytes Database mounted. SQL> alter database backup controlfile to '+DG2/cf2.dbf'; Database altered. SQL> alter system set control_files='+DG1/cf1.dbf ','+DG2/cf2.dbf' scope=spfile; System altered. SQL> shutdown immediate; ORA-01109:database not open Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 419430400 bytes Fixed Size 779416 bytes Variable Size 128981864 bytes Database Buffers 289406976 bytes Redo Buffers 262144 bytes Database mounted. Database opened. SQL> select name from v$controlfile; NAME --------------------------------------- +DG1/cf1.dbf +DG2/cf2.dbf將所有數(shù)據(jù)文件成功移植到 ASM 后,將不再需要舊的數(shù)據(jù)文件并可以將其刪除。您的單一實例數(shù)據(jù)庫現(xiàn)在在 ASM 上運行!
第 3 步:安裝集群就緒服務(wù) (CRS) 軟件
CRS 要求共享原始設(shè)備或 Oracle 集群文件系統(tǒng) (OCFS) 上有兩個文件,即 Oracle 集群注冊表 (OCR) 和 Voting Disk。這些文件必須可以由集群中的所有節(jié)點訪問。此處使用原始設(shè)備來容納這兩個文件。
3a.創(chuàng)建 OCR 和 Voting Disk。
OCR 的存儲器大小至少應(yīng)為 100MB,voting disk 的存儲器大小應(yīng)至少為 20MB。
文件 | 原始設(shè)備 | 磁盤分區(qū) | 文件名 | 大小 (MB) |
---|---|---|---|---|
OCR | /dev/raw/raw11 | /dev/sde1 | /u02/oradata/prod1/ocr | 100 |
Voting Disk | /dev/raw/raw12 | /dev/sde2 | /u02/oradata/prod1/vdisk | 20 |
[root@salmon1]# more /etc/sysconfig/rawdevices /dev/raw/raw11 /dev/sde1 /dev/raw/raw12 /dev/sde2 [root@salmon1]# chown oracle:dba /dev/raw/raw11 [root@salmon1]# chown oracle:dba /dev/raw/raw12 [root@salmon1]# /sbin/service rawdevices restart Assigning devices: /dev/raw/raw11 --> /dev/sde1 /dev/raw/raw11:bound to major 8, minor 65 /dev/raw/raw12 --> /dev/sde2 /dev/raw/raw12:bound to major 8, minor 66 done [root@salmon1]# su - oracle [oracle@salmon1]$ ln -s /dev/raw/raw11 /u02/oradata/prod1/ocr [oracle@salmon1]$ ln -s /dev/raw/raw12 /u02/oradata/prod1/vdisk3b.安裝 CRS 軟件。
安裝 CRS 軟件之前,請關(guān)閉監(jiān)聽程序、數(shù)據(jù)庫和 ASM 實例。裝入 CRS CD 或從 OTN 下載該軟件。只應(yīng)在第一個節(jié)點上啟動 OUI。安裝過程中,安裝程序?qū)⒃撥浖詣訌?fù)制到第二個節(jié)點。
[oracle@salmon1]$ export ORACLE_BASE=/u01/app/oracle [oracle@salmon1]$ /mnt/cdrom/runInstaller
- 歡迎 - 單擊“Next”。
- 指定文件位置:
- 名稱:OraCr10g_home1
- 路徑:/u01/app/oracle/product/10.1.0/crs_1
- 語言選擇 - 英語
- 集群配置:
- 集群名稱:crs
- 公共節(jié)點名稱:salmon1,專用節(jié)點名稱:sallocal1
- 公共節(jié)點名稱:salmon2,專用節(jié)點名稱:sallocal2
- 專用互連實施:
- 接口名稱:eth0,子網(wǎng):192.168.0.0,接口類型:公共
- 接口名稱:eth1,子網(wǎng):10.10.10.0,接口類型:專用
- Oracle 集群注冊表:
- 指定 OCR 位置:/u02/oradata/prod1/ocr
- Voting Disk:
- 輸入 Voting disk 文件名稱:/u02/oradata/prod1/vdisk
- 在第一個節(jié)點上以 root 用戶的身份在另一個窗口中執(zhí)行 /u01/app/oracle/oraInventory/orainstRoot.sh 腳本。
- 在第二個節(jié)點上以 root 用戶的身份在開一個窗口中執(zhí)行 /u01/app/oracle/oraInventory/orainstRoot.sh 腳本。
- 在兩個節(jié)點上運行 orainstRoot.sh 后單擊“Continue”。
- 摘要 - 單擊“Install”
- 在第一個節(jié)點上以 root 用戶的身份在另一個窗口中執(zhí)行 /u01/app/oracle/product/10.1.0/crs_1/root.sh 腳本。在該步驟完成之前,不要運行下一個步驟。
- 在第二個節(jié)點上以 root 用戶的身份在另一個窗口中執(zhí)行 /u01/app/oracle/product/10.1.0/crs_1/root.sh 腳本。
- 在兩個節(jié)點上運行 root.sh 后單擊“OK”。
- 安裝結(jié)束 - 單擊“Exit”。
[oracle@salmon1]$ /u01/app/oracle/product/10.1.0/crs_1/bin/olsnodes -n salmon1 1 salmon2 2 [oracle@salmon1]$ ps -ef | egrep "css|crs|evm"
第 4 步:安裝 Oracle RAC 軟件
4a.編輯 oracle 用戶環(huán)境文件。
在節(jié)點 1 上,設(shè)置 ORACLE_SID=prod1a。
在節(jié)點 2 上,設(shè)置 ORACLE_SID=prod1b。
[oracle@salmon1]$ more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi export PATH=$PATH:$HOME/bin export ORACLE_SID=prod1a export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.1.0/db_1 export ORA_CRS_HOME=$ORACLE_BASE/product/10.1.0/crs_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH umask 0224b.安裝 RAC 軟件。
裝入 Oracle 數(shù)據(jù)庫 10g 企業(yè)版 CD 或從 OTN 下載該軟件。只在第一個節(jié)點上啟動 OUI。安裝過程中,安裝程序?qū)⒃撥浖詣訌?fù)制到第二個節(jié)點。
[oracle@salmon1]$ .~/.bash_profile [oracle@salmon1]$ /mnt/cdrom/runInstaller
- 歡迎 - 單擊“Next”。
- 指定文件位置:
- 名稱:OraDB10g_home1
- 路徑:/u01/app/oracle/product/10.1.0/db_1
- 指定硬件安裝模式:
- 選擇“Cluster Installation”
- 單擊“Select All”
- 選擇安裝模式:
- 選擇“Enterprise Edition”
- 特定產(chǎn)品必要條件檢查:
- 所有檢查均通過后,才可繼續(xù)下一步。忽略 openmotif-2.1.30-11 警告。
- 選擇數(shù)據(jù)庫配置:
- 選擇“Do not create a starter database”
- 摘要 - 單擊“Install”
- 在第一個節(jié)點上以 root 用戶的身份在另一個窗口中執(zhí)行 /u01/app/oracle/product/10.1.0/db_1/root.sh 腳本。在 VIP 配置完成前,不要在第二個節(jié)點上運行 root.sh。
- VIPCA 歡迎 - 單擊“Next”
- VIP 配置幫助, 1 of 2:網(wǎng)絡(luò)接口:
- 選擇“eth0”
- VIP 配置幫助, 2 of 2:集群節(jié)點的虛擬 IP:
- 節(jié)點名稱:salmon1
- IP 假名:salmon1-vip
- IP 地址: 192.168.0.186
- 子網(wǎng)掩碼: 255.255.255.0
- 節(jié)點名稱:salmon2
- IP 假名:salmon2-vip
- IP 地址: 192.168.0.187
- 子網(wǎng)掩碼: 255.255.255.0
- 摘要 - 單擊“Finish”
- 配置助手進度對話框 - 單擊“OK”
- 配置結(jié)果 - 單擊“Exit”
- 在第二個節(jié)點上以 root 用戶的身份在另一個窗口中執(zhí)行 /u01/app/oracle/product/10.1.0/db_1/root.sh 腳本。
- 在兩個節(jié)點上運行 root.sh 后單擊“OK”。
- 安裝結(jié)束 - 單擊“Exit”。
只應(yīng)在一個節(jié)點上啟動和配置網(wǎng)絡(luò)配置助手 (NETCA)。在配置過程結(jié)束時,NETCA 將在兩個節(jié)點上啟動 Oracle listener。
[oracle@salmon1]$ netca
- Oracle 網(wǎng)絡(luò)配置助手:真正應(yīng)用集群,配置:
- 選擇“Cluster configuration”
- Oracle 網(wǎng)絡(luò)配置助手:TOPSNodes:
- 單擊“Select all nodes”
- Oracle 網(wǎng)絡(luò)配置助手:歡迎
- 選擇“Listener configuration”
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置,監(jiān)聽程序:
- 選擇“Add”
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置,監(jiān)聽程序名稱:
- 監(jiān)聽程序名稱:LISTENER
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置,擇協(xié)議
- 已選協(xié)議:TCP
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置,TCP/IP 協(xié)議:
- 選擇“Use the standard port number of 1521”
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置,增加監(jiān)聽程序?
- 選擇“No”
- Oracle 網(wǎng)絡(luò)配置助手:監(jiān)聽程序配置完成:
- 單擊“Next”
- Oracle 網(wǎng)絡(luò)配置助手:歡迎
- 選擇“Naming Methods configuration”
- 單擊“Next”
- Oracle 網(wǎng)絡(luò)配置助手:命名方式配置:選擇命名方式:
- 選擇“Local Naming”
- Oracle 網(wǎng)絡(luò)配置助手:命名方式配置完成:
- 單擊“Next”
- Oracle 網(wǎng)絡(luò)配置助手:歡迎
- 單擊“Finish”
在節(jié)點 1 上:
[oracle@salmon1]$ srvctl status nodeapps -n salmon1 VIP is running on node:salmon1 GSD is running on node:salmon1 Listener is running on node:salmon1 ONS daemon is running on node:salmon1在節(jié)點 2 上:
[oracle@salmon2]$ srvctl status nodeapps -n salmon2 VIP is running on node:salmon2 GSD is running on node:salmon2 Listener is running on node:salmon2 ONS daemon is running on node:salmon24e. listener.ora 文件
在節(jié)點 1 上:
[oracle@salmon1]$ more $ORACLE_HOME/network/admin/listener.ora LISTENER_SALMON1 = (DESCRIPTION_LIST = (DESCRIPTION= (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521)) ) (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.184)(PORT = 1521)) ) ) ) SID_LIST_LISTENER_SALMON1 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.1.0/db_1) (PROGRAM = extproc) ) )在節(jié)點 2 上:
[oracle@salmon2]$ more $ORACLE_HOME/network/admin/listener.ora LISTENER_SALMON2 = (DESCRIPTION_LIST = (DESCRIPTION= (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521)) ) (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.185)(PORT = 1521)) ) ) ) SID_LIST_LISTENER_SALMON2 = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/10.1.0/db_1) (PROGRAM = extproc) ) )4f. tnsnames.ora 文件
在兩個節(jié)點上:
[oracle@salmon1]$ more $ORACLE_HOME/network/admin/tnsnames.ora LISTENERS_PROD1 = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521)) ) PROD1 = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA= (SERVICE_NAME = PROD1) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 200) (DELAY = 5) ) ) ) PROD1A = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon1-vip)(PORT = 1521)) (CONNECT_DATA= (SERVER = DEDICATED) (SERVICE_NAME = PROD1) (INSTANCE_NAME = PROD1A) ) ) PROD1B = (DESCRIPTION= (ADDRESS = (PROTOCOL = TCP)(HOST = salmon2-vip)(PORT = 1521)) (CONNECT_DATA= (SERVER = DEDICATED) (SERVICE_NAME = PROD1) (INSTANCE_NAME = PROD1B) ) )
第 5 步:后續(xù)安裝
5a.在第一個節(jié)點上重新定位 ASM 實例文件。
將 ASM 實例口令文件和 spfile+ASM1A.ora 復(fù)制到新的 Oracle Home。
[oracle@salmon1]$ cp /u01/app/oracle/product/10.1.0/dbs/orapw+ASM1A /u01/app/oracle/product/10.1.0/db_1/dbs [oracle@salmon1]$ cp /u01/app/oracle/product/10.1.0/dbs/spfile+ASM1A.ora /u01/app/oracle/product/10.1.0/db_1/dbs5b.為第二個 ASM 實例創(chuàng)建 init.ora。
在第二個節(jié)點上,在 $ORACLE_HOME/dbs 中創(chuàng)建一個 init+ASM1B.ora 文件。
asm_diskgroups='DG1', a€?DG2a€?, a€?RECOVERYDESTa€? asm_diskstring='ORCL:VOL*' background_dump_dest=/u01/app/oracle/admin/+ASM/bdump core_dump_dest=/u01/app/oracle/admin/+ASM/cdump user_dump_dest=/u01/app/oracle/admin/+ASM/udump instance_type=asm large_pool_size=16M remote_login_passwordfile=exclusive +ASM1A.instance_number=1 +ASM1B.instance_number=25c.為第二個 ASM 實例創(chuàng)建口令文件。
使用 orapwd 實用程序在第二個節(jié)點上的 $ORACLE_HOME/dbs 中創(chuàng)建一個 orapw+ASM1B 文件。
5d.創(chuàng)建第二個 ASM 實例。
在第二個節(jié)點上創(chuàng)建第二個 ASM 實例。
[oracle@salmon2]$ export ORACLE_SID=+ASM1B [oracle@salmon2]$ sqlplus / as sysdba SQL*Plus:Release 10.1.0.3.0 - Production on Thu May 26 18:43:14 2005 Copyright (c) 1982, 2004, Oracle.保留所有權(quán)利。 Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 104857600 bytes Fixed Size 777616 bytes Variable Size 104079964 bytes Database Buffers 0 bytes Redo Buffers 0 bytes ASM diskgroups mounted SQL> create spfile from pfile; File created. SQL> shutdown immediate;5e.使用 CRS 注冊 ASM 實例。
為實現(xiàn)更高的可用性,請在 CRS 框架下注冊 ASM 實例。注冊后,CRS 應(yīng)檢測到任何失敗的實例,并自動嘗試啟動這些實例。重新啟動服務(wù)器后,CRS 還將自動啟動這些實例。
在節(jié)點 1 上:
[oracle@salmon1]$ srvctl add asm -n salmon1 -i +ASM1A -o /u01/app/oracle/product/10.1.0/db_1 [oracle@salmon1]$ srvctl start asm -n salmon1 [oracle@salmon1]$ srvctl status asm -n salmon1 ASM instance +ASM1A is running on node salmon1.在節(jié)點 2 上:
[oracle@salmon2]$ srvctl add asm -n salmon2 -i +ASM1B -o /u01/app/oracle/product/10.1.0/db_1 [oracle@salmon2]$ srvctl start asm -n salmon2 [oracle@salmon2]$ srvctl status asm -n salmon2 ASM instance +ASM1B is running on node salmon2. [oracle@salmon1]$ ps -ef | grep dbw | grep -v grep oracle 8918 1 0 May 26 ?00:00:01 asm_dbw0_+ASM1A [oracle@salmon1]$ kill -9 8918 [oracle@salmon1]$ srvctl status asm a€“n salmon1 ASM instance +ASM1A is not running on node salmon1. [oracle@salmon1]$ ps -ef | grep dbw | grep -v grep [oracle@salmon1]$ srvctl status asm a€“n salmon1 ASM instance +ASM1A is running on node salmon1. [oracle@salmon1]$ ps -ef | grep dbw | grep -v grep oracle 8920 1 0 May 26 ?00:00:01 asm_dbw0_+ASM1A5f.為兩個 RAC 實例創(chuàng)建口令文件。
使用 orapwd 實用程序在第一個節(jié)點上的 $ORACLE_HOME/dbs 中創(chuàng)建一個 orapwprod1a 文件,并在第二個節(jié)點上的 $ORACLE_HOME/dbs 中創(chuàng)建 orapwprod1b 文件。
5g.在 pfile 中添加 RAC 特定參數(shù)。
修改在第 2 步中保存的 pfile。添加并修改以下參數(shù):
*.cluster_database_instances=2 *.cluster_database=true *.remote_listener='LISTENERS_PROD1a€? prod1a.thread=1 prod1a.instance_number=1 prod1a.undo_tablespace='UNDOTBS1' prod1b.thread=2 prod1b.instance_number=2 prod1b.undo_tablespace='UNDOTBS2'5h.修改兩個實例的 init.ora。
在節(jié)點 1 上:
[oracle@salmon1]$ more $ORACLE_HOME/dbs/initprod1a.ora spfile='+DG1/spfileprod1.ora'在節(jié)點 2 上:
[oracle@salmon2]$ more $ORACLE_HOME/dbs/initprod1b.ora spfile='+DG1/spfileprod1.ora'5i.將數(shù)據(jù)庫 spfile 移植到 ASM。
SQL> !echo $ORACLE_SID prod1a SQL> connect / as sysdba Connected to an idle instance. SQL> startup pfile=/tmp/tmppfile.ora ORACLE instance started. Total System Global Area 419430400 bytes Fixed Size 779416 bytes Variable Size 128981864 bytes Database Buffers 289406976 bytes Redo Buffers 262144 bytes Database mounted. Database opened. SQL> create spfile='+DG1/spfileprod1.ora' from pfile='/tmp/tmppfile.ora'; File created. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 419430400 bytes Fixed Size 779416 bytes Variable Size 128981864 bytes Database Buffers 289406976 bytes Redo Buffers 262144 bytes Database mounted. Database opened. SQL> show parameter spfile NAME TYPE VALUE ---------------------- ------------ --------------------------- spfile string +DG1/spfileprod1.ora5j.創(chuàng)建 RAC 數(shù)據(jù)詞典視圖。
在第一個 RAC 實例上創(chuàng)建 RAC 數(shù)據(jù)詞典視圖。
SQL> !echo $ORACLE_SID prod1a SQL> spool /tmp/catclust.log SQL> @$ORACLE_HOME/rdbms/admin/catclust ... ... ... SQL> spool off SQL> shutdown immediate;5k.使用 CRS 注冊 RAC 實例。
在節(jié)點 1 上:
[oracle@salmon1]$ srvctl add database -d prod1 -o $ORACLE_HOME [oracle@salmon1]$ srvctl add instance -d prod1 -i prod1a -n salmon1 [oracle@salmon1]$ srvctl add instance -d prod1 -i prod1b -n salmon2 [oracle@salmon1]$ srvctl start instance -d prod1 -i prod1a5l.為第二個 RAC 實例創(chuàng)建重做日志。
SQL> connect sys/sys@prod1a as sysdba Connected. SQL> alter database add logfile thread 2 group 3 size 100M; SQL> alter database add logfile thread 2 group 4 size 100M; SQL> select group#, member from v$logfile; GROUP# MEMBER --------------- ---------------------------------------- 1 +DG1/prod1/onlinelog/group_1.265.3 1 +DG2/prod1/onlinelog/group_1.257.1 2 +DG1/prod1/onlinelog/group_2.266.3 2 +DG2/prod1/onlinelog/group_2.258.1 3 +DG1/prod1/onlinelog/group_3.268.1 3 +DG2/prod1/onlinelog/group_3.259.1 4 +DG1/prod1/onlinelog/group_4.269.1 4 +DG2/prod1/onlinelog/group_4.260.1 8 rows selected. SQL> alter database enable thread 2; Database altered.5m.為第二個 RAC 實例創(chuàng)建重做表空間。
SQL> create undo tablespace UNDOTBS2 datafile size 200M; SQL> select tablespace_name, file_name from dba_data_files 2 where tablespace_name=a€?UNDOTBS2a€?; TABLESPACE FILE_NAME --------------------- -------------------------------------- UNDOTBS2 +DG1/prod1/datafile/undotbs2.270.15n.啟動第二個 RAC 實例。
[oracle@salmon1]$ srvctl start instance -d prod1 -i prod1b [oracle@salmon1]$ crs_stat -t Name Type Target State Host ----------------------------------------------------------------------- ora....1a.inst application ONLINE ONLINE salmon1 ora....1b.inst application ONLINE ONLINE salmon2 ora.prod1.db application ONLINE ONLINE salmon1 ora....M1A.asm application ONLINE ONLINE salmon1 ora....M1B.asm application ONLINE ONLINE salmon2 ora....N1.lsnr application ONLINE ONLINE salmon1 ora....on1.gsd application ONLINE ONLINE salmon1 ora....on1.ons application ONLINE ONLINE salmon1 ora....on1.vip application ONLINE ONLINE salmon1 ora....N2.lsnr application ONLINE ONLINE salmon2 ora....on2.gsd application ONLINE ONLINE salmon2 ora....on2.ons application ONLINE ONLINE salmon2 ora....on2.vip application ONLINE ONLINE salmon2 [oracle@salmon1]$ srvctl status database -d prod1 Instance prod1a is running on node salmon1 Instance prod1b is running on node salmon2 [oracle@salmon1]$ srvctl stop database -d prod1 [oracle@salmon1]$ srvctl start database -d prod1 [oracle@salmon1]$ sqlplus system/system@prod1 SQL*Plus:Release 10.1.0.3.0 - Production on Fri May 27 05:53:21 2005 Copyright (c) 1982, 2004, Oracle.保留所有權(quán)利。 Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production With the Partitioning, Real Application Clusters, OLAP and Data Mining options SQL> select instance_number instance#, instance_name, host_name, status 2 from gv$instance; INSTANCE# INSTANCE_NAME HOST_NAME STATUS ----------------- ----------------- ------------------------- ----------- 1 prod1a salmon1.dbsconsult.com OPEN 2 prod1b salmon2.dbsconsult.com OPEN恭喜您!您已經(jīng)將單一實例數(shù)據(jù)庫轉(zhuǎn)換為 RAC!
第 6 步:測試透明應(yīng)用程序故障切換 (TAF)
Oracle TAF 中的故障切換機制使任何失敗的數(shù)據(jù)庫連接能夠重新連接到集群中的其他節(jié)點。故障切換對用戶是透明的。Oracle 在故障切換實例上重新執(zhí)行查詢并繼續(xù)向用戶顯示余下的結(jié)果。
為示范 TAF 選件的故障切換機制,請連接到兩個不同的數(shù)據(jù)庫會話并執(zhí)行以下步驟:
6a.使用 PROD1 服務(wù)連接第一個會話。
如果 failover_type 和 failover_mode 返回的輸出為“NONE”,則驗證是否在 tnsnames.ora 中正確配置了 PROD1 服務(wù)。
SQL> connect system/system@prod1 as sysdba Connected. SQL> select instance_number instance#, instance_name, host_name, status 2 from v$instance; INSTANCE# INSTANCE_NAME HOST_NAME STATUS ----------------- -------------- ------------------------- ---------------- 1 prod1a salmon1.dbsconsult.com OPEN SQL> select failover_type, failover_method, failed_over 2 from v$session where username='SYSTEM'; FAILOVER_TYPE FAILOVER_MODE FAILED_OVER ------------------------- -------------------- ---------------------- SELECT BASIC NO6b.從其他會話中關(guān)閉該實例。
在 prod1a 實例上以 sys 用戶的身份連接,并關(guān)閉該實例。
SQL> connect sys/sys@prod1a as sysdba Connected. SQL> select instance_number instance#, instance_name, host_name, status 2 from v$instance; INSTANCE# INSTANCE_NAME HOST_NAME STATUS ----------------- ---------------- ------------------------ ---------------- 1 prod1a salmon1.dbsconsult.com OPEN SQL> shutdown abort; ORACLE instance shut down.6c.驗證該會話是否已經(jīng)完成故障切換。
從第 6 步中的同一會話執(zhí)行以下查詢以驗證該會話是否故障切換到其他實例。
SQL> select instance_number instance#, instance_name, host_name, status 2 from v$instance; INSTANCE# INSTANCE_NAME HOST_NAME STATUS ----------------- ---------------- ------------------------ ---------------- 2 prod1b salmon2.dbsconsult.com OPEN SQL> select failover_type, failover_method, failed_over 2 from v$session where username='SYSTEM'; FAILOVER_TYPE FAILOVER_MODE FAILED_OVER ----------------- -------------- ---------------------- SELECT BASIC YES
結(jié)論
了解了 RAC 體系結(jié)構(gòu)并進行恰當規(guī)劃后,從單一實例數(shù)據(jù)庫轉(zhuǎn)移到 RAC 配置并不一定很復(fù)雜。ASM 和 RAC 相互支持以提供更高級別的可用性、可伸縮性和業(yè)務(wù)連續(xù)性。衷心希望本指南提供了清晰、準確的轉(zhuǎn)換執(zhí)行方法。