Oracle 11g RAC到單實例ASM的物理Standby搭建

一、DG環境配置

此次搭建Standby的主庫爲:RedHat 6.5+11G+RAC+ASM安裝與配置(三節點)11g單實例ASM安裝使用ASMLib的方式,不在使用UDEV方式,磁盤爲本機磁盤,非遠程掛載的磁盤。本次搭建包含了11g單實例ASM的詳細安裝過程。

 

1、 基本環境

主庫:

實例名:racdb1racdb2racdb3        DB_NAMEracdb              DB_UNIQUE_NAMEracdb

備庫:

實例名:racdg                         DB_NAMEracdb              DB_UNIQUE_NAMEracdg

IP172.16.1.15                       HOSTNAMEasm-standby

 

2、 配置軟件安裝環境

A、安裝oracle RAC所需的linux軟件包

[root@asm-standby~] # yum –y install binutils* compat-libstdc++* compat-libcap1 * elfutils-libelf*elfutils-libelf-devel* elfutils-libelf-devel-static* gcc* gcc-c++* glibc*glibc-common* glibc-devel* glibc-headers* ksh* libaio* libaio-devel* libgcc*libgomp* libstdc++* libstdc++-devel* make* sysstat* unixODBC * unixODBC-devel*

 

B、配置內核參數

執行如下腳本:

#!/bin/bash
prepareSystem(){
# Set SElinux to disabled mode regardless of its initial value
  sed -i -e's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  setenforce 0
# stop iptables
  /etc/init.d/iptables stop
  chkconfig --level 0123456iptables off
  chkconfig --level 0123456ip6tables off
}
 
Configure1(){
    cat >> /etc/sysctl.conf<<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
}
Configure2(){
    cat >>/etc/security/limits.conf <<EOF
oracle   soft  nproc  2047
oracle   hard  nproc  16384
oracle   soft  nofile 1024
oracle   hard  nofile 65536
grid   soft  nproc  2047
grid   hard  nproc  16384
grid   soft  nofile 1024
grid   hard  nofile 65536
EOF
}
Configure3(){
    cat >> /etc/pam.d/login<<EOF
session    required     pam_limits.so
EOF
}
 
prepareSystem
Configure1 && sysctl -p
Configure2
Configure3

[root@asm-standby~] # sh confirure.sh

 

C、創建相關組和用戶

創建組:

[root@ asm-standby ~] # groupadd oinstall

[root@ asm-standby ~] # groupadd asmadmin

[root@ asm-standby ~] # groupadd asmdba

[root@ asm-standby ~] # groupadd asmoper

[root@ asm-standby ~] # groupadd dba

[root@ asm-standby ~] # groupadd oper

 

創建grid用戶:

節點一ORACLE_SID=+ASM

[root@ asm-standby ~] # useradd -g oinstall -G asmadmin,asmdba,asmoper,dba grid

這裏和RAC安裝時的所屬組不同,多了一個dba組,若不添加此組則會導致數據文件無法寫入ASM磁盤組。

[root@ asm-standby ~] # passwd grid

編輯grid用戶的環境配置文件(~/.bash_profile),加入如下內容

export PS1="`/bin/hostname -s`-> "

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_SID=+ASM

export ORACLE_BASE=/u/app/grid

export ORACLE_HOME=/u/app/11.2.0/grid

export ORACLE_TERM=xterm

export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'

export TNS_ADMIN=$ORACLE_HOME/network/admin

export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

exportCLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

umask 022

 

創建ORACLE用戶:

節點一:ORACLE_SID=racdg

[root@ asm-standby ~] # usermodd -g oinstall-G dba,oper,asmdba,asmadmin oracle

這裏和RAC安裝時的所屬組不同,多了一個asmadmin組,若不添加此組則會導致在使用RMAN恢復時無寫入ASM的權限,不過這裏也可以通過修改$ORACLE_HOME/bin/oracle的權限來解決,chgrp asmadmin$ORACLE_HOME/bin/oracle,chmod 6751 $ORACLE_HOME/bin/oracle,(root用戶下修改)

[root@ asm-standby ~] # passwd oracle

編輯oracle用戶的環境配置文件(~/.bash_profile,加入如下內容

export TMP=/tmp

export TMPDIR=$TMP

export ORACLE_SID=racdg   #這裏你沒看錯,就是與主庫的SID不同

export ORACLE_BASE=/u/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_UNQNAME=racdg

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORACLE_TERM=xterm

export PATH=/usr/sbin:$PATH

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:$ORACLE_HOME/jdbc/lib

exportCLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

export NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss'

umask 022

 

創建軟件安裝目錄:

[root@ asm-standby ~] # mkdir-p /u/app/grid

[root@ asm-standby ~] # mkdir-p /u/app/11.2.0/grid

[root@ asm-standby ~] # chown-R grid:oinstall /u/app

[root@ asm-standby ~] # mkdir-p /u/app/oracle

[root@ asm-standby ~] # chownoracle:oinstall /u/app/oracle

[root@ asm-standby ~] # chmod -R 775 /u

 

3、  配置ASM磁盤

A、添加磁盤分區:

[root@ asm-standby ~]# fdisk -l | tail -n 4  #分區,但請勿格式化,也不要使用LVM方式分區

    Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1         1306  10490413+  83 Linux

/dev/sdb2            1307        7834  52436160  83  Linux

/dev/sdb3            7835        13054 41929650   83  Linux

B、安裝ASMlib

關於ASMlib包需要注意的問題,需要根據OS內核版本選擇對應的ASMlib包,RedHat 5的鏡像中是自帶,RedHat 6就需要費些功夫了,RedHat6.4之前的版本對應的ASMlib包相對較好查找,RedHat6.4之前使用kmod-oracleasm-2.0.6.rh1-2.el6.x86_64.rpmRedHat6.5請具體

參考https://access.redhat.com/solutions/698613,需要安裝的三個ASMlib包如下:

kmod-oracleasm-2.0.6.rh1-3.el6.x86_64.rpm

oracleasmlib-2.0.4-1.el6.x86_64.rpm

oracleasm-support-2.1.8-1.el6.x86_64.rpm

[root@ asm-standby ~]#uname–r        #查看OS內核版本

2.6.32-431.el6.x86_64

[root@ asm-standby ~]#rpm -qpR kmod-oracleasm-2.0.6.rh1-3.el6_5.x86_64.rpm|grep“2.6”

kernel >= 2.6.32-431.el6

kernel < 2.6.32-432.el6     #通過rpm –qpR知道此安裝包支持的內核版本範圍

[root@ asm-standby ~]#rpm –ivh kmod-oracleasm-2.0.6.rh1-3.el6_5.x86_64.rpm  #按順序安裝

[root@ asm-standby ~]#rpm –ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm

[root@ asm-standby ~]#rpm –ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm

 

C、加載ASMlib模塊

[root@ asm-standby ~]#whichoracleasm

/usr/sbin/oracleasm

[root@ asm-standby ~]#oracleasm configure –i  #創建/etc/sysconfig/oracleasm配置文件

wKiom1cp3ZSiGBbuAABeN1bo53I292.jpg

[root@ asm-standby ~]#oracleasm init  #創建/dev/oracleasm掛載點

wKiom1cp3ZXT44dXAABUj7PtefI762.jpg

ASM相關服務

wKioL1cp3mrDWqWkAAA6bpUt3MM724.jpg

D、創建ASM磁盤

[root@ asm-standby ~]#oracleasm createdisk VOL1/dev/sdb1

[root@ asm-standby ~]#oracleasm createdisk VOL2/dev/sdb2

[root@ asm-standby~]#oracleasm createdisk VOL3 /dev/sdb3

[root@ asm-standby ~]#oracleasm scandisks

[root@ asm-standby ~]#oracleasm listdisks

[root@ asm-standby ~]#ls –lh /dev/oracleasm/disks

以上命令均是調用/usr/lib/oracleasm/目錄下的腳本,有興趣的可以認真研究一下。

 

二、DG軟件安裝

1、安裝GRID軟件

[root@ asm-standby ~]#export display=0.0

[root@ asm-standby ~]#xhost +

[root@ asm-standby ~]#su - grid

[grid@ asm-standby grid]#./runInstaller    #進入OUI界面,只截取重要截圖

wKiom1cp3u-SflypAABFekF827k007.jpg

這裏說說選第二項,而不選第四項的理由:因爲第二項是圖形化安裝和配置,會配置ASM實例,以後開機啓動時,會隨spfile自啓動ASM實例。而如果選第四項的話,則需要使用asmca圖形化界面配置ASM實例,啓動時,不會隨機啓動,在安裝完軟件之後,還會提示執行如下的命令:

/u/app/11.2.0/grid/perl/bin/perl–l /u/app/11.2.0/grid/perl/lib –I /u/app/11.2.0/grid/crs/install /u/app/11.2.0/grid/crs/install/roothas.pl

wKioL1cp38WwZT4-AABg1WBX-Xs912.jpg

忽略[INS-32018]錯誤,這是因爲按單實例的方式安裝的話,Oracle是不建議將ORACLE_HOME建立在ORACLE_BASE之外的。點擊“Yes”,軟件會正常安裝

wKiom1cp3vGwrzpEAACIy_JtPL4295.jpg


wKioL1cp38bS9dMXAABOJxJJ9MI701.jpg

root用戶執行腳本:

[root@ asm-standby ~]# sh /u/app/oraInventory/orainstRoot.sh

[root@ asm-standby ~]# sh /u/app/11.2.0/grid/root.sh

 

2、安裝ORACLE軟件

[root@ asm-standby ~]#export display=0.0

[root@ asm-standby ~]#xhost +

[root@ asm-standby ~]#su - grid

[oracle@ asm-standby database]#./runInstaller    #進入OUI界面,只截取重要截圖

wKiom1cp3vGwhRYKAABbl42DjJo931.jpg


wKioL1cp38fyRyo9AABVeSMqeWY304.jpg

執行腳本:

[root@ asm-standby~]# sh /u/app/oracle/product/11.2.0/db_1/root.sh


3、 配置ASM磁盤組

之前在安裝RAC時,使用的是圖像化界面,這裏不再使用,而是使用命令進行創建ASM磁盤組。

[root@ asm-standby ~]#su – grid

[grid@ asm-standby ~]#sqlplus / as sysasm

 

SQL>create diskgroup DATA external redundancydisk ‘ORCL:VOL2’;

 

SQL>create diskgroup ARCH external redundancydisk ‘ORCL:VOL3’;

 

這裏說明一下如使用ASMLib建立ASM磁盤的話,則ASM磁盤路徑爲ORCL:ASMDISK_NAME,若使用UDEV方式建立的話,則在使用命令新增磁盤組或新增磁盤時,其磁盤路徑爲UDEV建立時的絕對路徑。

 

[grid@ asm-standby ~]#crs_stat –t –v

wKiom1cp3vLDhOK1AABSc02sKxo803.jpg


三、DG搭建

1 主庫操作

A、查看主庫

[oracle@ note1 ~]#sqlplus / as sysdba

 

SQL> select name,log_mode,protection_mode,force_loggingfrom v$database;

 

NAME     LOG_MODE     PROTECTION_MODE      FORCE_LOGGING

------   ----------  ---------------       -------------

RACDB    ARCHIVELOG   MAXIMUMPERFORMANCE  NO

 

SQL> alter database force logging;

 

Database altered

 

B、創建RAMN備份

[oracle@ note1~]#rman target / 

RMAN> run {

allocate channel c1 type disk;

allocate channel c2 type disk;

backup database format ‘/u/rman/%d_%T_%U.full’;

sql ‘alter system archive log current’;

backup currnet controlfile for standby format‘/u/rman/%d_%T_%U.ctl’;

release channel c1;

release channel c2;

}

因新建的庫,沒有很頻繁的歸檔切換,這裏就不對歸檔進行備份。

 

C、創建pfile文件

[oracle@ note1 ~]#sqlplus / as sysdba

 

SQL>create pfile=’/u/rman/pfile. ora’ fromspfile;

 

接下來將RMAN備份集、pfile文件和密碼文件拷貝到備庫

[oracle@ note1 ~]#ls –lh /u/rman

wKioL1cp4WazKMbhAABJHmlVTh8124.jpg


[oracle@ note1~]#scp –r /u/rman/* 172.16.1.15:/u/rman/

[oracle@ note1~]#scp –r $ORACLE_HOME/dbs/orapwracdb1 172.16.1.15:$ORACLE_HOME/dbs/orapwracdg


2、 備庫操作

A、 修改備庫參數文件

修改前的參數文件:

racdb1.__db_cache_size=956301312
racdb3.__db_cache_size=939524096
racdb2.__db_cache_size=889192448
racdb1.__java_pool_size=16777216
racdb3.__java_pool_size=16777216
racdb2.__java_pool_size=16777216
racdb1.__large_pool_size=16777216
racdb2.__large_pool_size=16777216
racdb3.__large_pool_size=16777216
racdb1.__pga_aggregate_target=1006632960
racdb3.__pga_aggregate_target=1006632960
racdb2.__pga_aggregate_target=1006632960
racdb1.__sga_target=1509949440
racdb3.__sga_target=1509949440
racdb2.__sga_target=1509949440
racdb1.__shared_io_pool_size=0
racdb3.__shared_io_pool_size=0
racdb2.__shared_io_pool_size=0
racdb1.__shared_pool_size=486539264
racdb3.__shared_pool_size=503316480
racdb2.__shared_pool_size=553648128
racdb1.__streams_pool_size=0
racdb3.__streams_pool_size=0
racdb2.__streams_pool_size=0
*.audit_file_dest='/u/app/oracle/admin/racdb/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.0.0'
*.control_files='+DATA/racdb/controlfile/current.256.909939065','+ARCH/racdb/controlfile/current.256.909939067'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='racdb'
*.db_recovery_file_dest='+ARCH'
*.db_recovery_file_dest_size=6948913152
*.diagnostic_dest='/u/app/oracle'
*.dispatchers='(protocol=TCP)'
racdb3.instance_number=3
racdb2.instance_number=2
racdb1.instance_number=1
*.log_archive_dest_1='LOCATION=+ARCH'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=2506096640
*.open_cursors=300
*.processes=300
*.remote_listener='cluster-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=335
*.shared_servers=20
racdb2.thread=2
racdb3.thread=3
racdb1.thread=1
racdb3.undo_tablespace='UNDOTBS3'
racdb2.undo_tablespace='UNDOTBS2'
racdb1.undo_tablespace='UNDOTBS1'

修改後的參數文件:

racdg.__db_cache_size=956301312
racdg.__java_pool_size=16777216
racdg.__large_pool_size=16777216
racdg.__pga_aggregate_target=1006632960
racdg.__sga_target=1509949440
racdg.__shared_io_pool_size=0
racdg.__shared_pool_size=553648128
racdg.__streams_pool_size=0
*.audit_file_dest='/u/app/oracle/admin/racdg/adump'
*.audit_trail='db'
*.cluster_database=false
*.compatible='11.2.0.0.0'
*.control_files='+DATA/racdg/controlfile/current.256.909939065','+ARCH/racdg/controlfile/current.256.909939067'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='racdb'
*.db_recovery_file_dest='+ARCH'
*.db_recovery_file_dest_size=6948913152
*.diagnostic_dest='/u/app/oracle'
*.dispatchers='(protocol=TCP)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=2506096640
*.open_cursors=300
*.processes=300
*.remote_login_passwordfile='exclusive'
*.sessions=335
*.shared_servers=20
*.thread=1
*.undo_tablespace='UNDOTBS1'
*.db_unique_name='racdg'
*.FAL_CLIENT='racdg'
*.FAL_SERVER='racdb1','racdb2','racdb3'
*.LOG_ARCHIVE_CONFIG='dg_config=(racdb,racdg)'
*.LOG_ARCHIVE_DEST_1='LOCATION=+ARCH/RACDG/archivelog/valid_for=(all_logfiles,all_roles) db_unique_name=racdg'
*.LOG_ARCHIVE_DEST_2='SERVICE=racdb1 LGWRASYNC valid_for=(online_logfiles,primary_role) db_unique_name=racdb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.STANDBY_FILE_MANAGEMENT=AUTO
*.DB_FILE_NAME_CONVERT='+DATA/RACDB/','+DATA/RACDG/','+ARCH/RACDB/','+ARCH/RACDG/'
*.LOG_FILE_NAME_CONVERT='+ARCH/RACDB/','+ARCH/RACDG/'

B、 RAC主庫、備庫TNSNAMES.ORA文件:

RACDB =
 (DESCRIPTION =
    (ADDRESS= (PROTOCOL = TCP)(HOST = 172.16.1.10)(PORT = 1521))
    (ADDRESS= (PROTOCOL = TCP)(HOST = 172.16.1.11)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER= DEDICATED)
     (SERVICE_NAME = racdb)
    )
  )
 
RACDB1 =
 (DESCRIPTION =
    (ADDRESS= (PROTOCOL = TCP)(HOST = 172.16.1.7)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER= DEDICATED)
     (SERVICE_NAME = racdb)
     (INSTANCE_NAME = racdb1)
    )
  )
 
RACDB2 =
 (DESCRIPTION =
    (ADDRESS= (PROTOCOL = TCP)(HOST = 172.16.1.8)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER= DEDICATED)
     (SERVICE_NAME = racdb)
     (INSTANCE_NAME = racdb2)
    )
  )
 
RACDB3 =
 (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =172.16.1.9)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER= DEDICATED)
     (SERVICE_NAME = racdb)
     (INSTANCE_NAME = racdb3)
    )
  )
 
RACDG =
 (DESCRIPTION =
    (ADDRESS= (PROTOCOL = TCP)(HOST = 172.16.1.15)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER= DEDICATED)
     (SERVICE_NAME = racdg)
    )
  )


C、 創建備庫

[oracle@ asm-standby ~]#mkdir –p /u/app/oracle/admin/racdg/adump

[oracle@ asm-standby ~]#sqlplus / as sysdba

 

SQL> startup nomount pfile=’/u/rman/pfile.ora’;

 

SQL> create spfile from pfile=’/u/rman/pfile.ora’;

 

SQL> shutdown immediate;

 

SQL> startup nomount;

 

[oracle@ asm-standby~]#rman target /

 

RMAN> restore standby controlfile from‘/u/rman/RACDB_20160504_05r4ogte_1_1.ctl’;

 

RMAN>sql ‘alter database mount standby database’;

 

RMAN>restore database;


wKioL1cp4oSAtGDXAABUyDQ6JEY036.jpg

[oracle@ asm-standby~]#sqlplus / as sysdba

 

SQL>recover managed standby database disconnectfrom session;

#現在執行這個是爲將ONLINELOG目錄建立起來,因爲數據字典中有LOGFILE的記錄,會根據記錄建立LOGFILE,若不執行的話,在ASMCMD中是看不到ONLINELOG目錄的。

 

SQL>alter database recover managed standbydatabase cancel;

 

D、 添加主庫參數

[oracle@ note1~]#sqlplus / as sysdba

 

SQL>alter system set standby_file_management=auto scope=both;

 

SQL>alter system setlog_archive_config=’dg_config=(racdg,racdb)’ scope=both;

 

SQL>alter system set fal_server=’racdg’scope=both;

 

SQL>alter system setlog_archive_dest_1=’LOCATION=+ARCH valid_for=(all_logfiles,all_roles)db_unique_name=racdb’ scope=both;

 

SQL>alter system set log_arhive_dest_2=’SERVICE=racdg LGWR ASYNC valid_for=(online_logfiles,primary_role)db_unique_name=racdg' scope=both;

 

SQL>alter system setlog_archive_dest_state_1=ENABLE scope=both;

 

SQL>alter system set log_archive_dest_state_2=ENABLE scope=both;

 

SQL>alter system archive log current;

 

備庫查看歸檔是否傳過來了

 

SQL>select sequence#,applied from v$archived_log;

 

F、 創建Standby redolog

RAC數據庫:Standby Redo Log組數=(所有節點中日誌組數最大值 + 1) * RAC節點數

 

[oracle@ asm-standby~]#sqlplus / as sysdba

 

SQL>alter database add standby logfile thread 1 ('+ARCH') size 50m ;

Database altered. 

SQL> /

Database altered.

SQL> /

Database altered.

SQL> /

Database altered.

SQL>c/1/2

l* alter database add standby logfile thread 2 ('+ARCH') size 50m

SQL>/

Database altered.

SQL> /

Database altered.

SQL> /

Database altered.

SQL> /

Database altered.

SQL>c/2/3

l* alter database add standby logfile thread 3 ('+ARCH') size 50m

SQL>/

Database altered.

SQL> /

Database altered.

SQL> /

Database altered.

SQL> /

Database altered.

 

SQL>recover managed standby database usingcurrent logfile disconnect from session;

 

查看歸檔是否同步:

wKiom1cp4ivz5nD1AAAbUTc2z7A468.jpg

總結:

     Oracle 11g RAC到單實例ASM的物理Standby搭建其實與使用普通文件無很大區別,只需要將單實例ASM的安裝結合起來就沒事困難的。在搭建過程中,可能出問題最頭痛的就是歸檔無法從主庫中傳到備庫,經常遇到的error is 1034主備庫密碼不一致的問題,error is 12520 TNS無法連通問題,這些都較好解決。error1033的話基本上就是備庫配置有問題了,主庫無法訪問備庫造成的。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章