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

1、DG環境配置java

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

 

一、 基本環境c++

主庫:sql

實例名:racdb1racdb2racdb3        DB_NAMEracdb              DB_UNIQUE_NAMEracdb數據庫

備庫:bash

實例名:racdg                         DB_NAMEracdb              DB_UNIQUE_NAMEracdgsession

IP172.16.1.15                       HOSTNAMEasm-standbyoracle

 

二、 配置軟件安裝環境app

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

[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

 

三、  配置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/目錄下的腳本,有興趣的能夠認真研究一下。

 

2、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


三、 配置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


3、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


二、 備庫操做

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的話基本上就是備庫配置有問題了,主庫沒法訪問備庫形成的。

相關文章
相關標籤/搜索