一、DG環境配置
此次搭建Standby的主庫爲:” RedHat 6.5+11G+RAC+ASM安裝與配置(三節點)”,11g單實例ASM安裝使用ASMLib的方式,不在使用UDEV方式,磁盤爲本機磁盤,非遠程掛載的磁盤。本次搭建包含了11g單實例ASM的詳細安裝過程。
1、 基本環境
主庫:
實例名:racdb1,racdb2,racdb3 DB_NAME:racdb DB_UNIQUE_NAME:racdb
備庫:
實例名:racdg DB_NAME:racdb DB_UNIQUE_NAME:racdg
IP:172.16.1.15 HOSTNAME:asm-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.rpm,RedHat6.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配置文件
[root@ asm-standby ~]#oracleasm init #創建/dev/oracleasm掛載點
ASM相關服務
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界面,只截取重要截圖
這裏說說選第二項,而不選第四項的理由:因爲第二項是圖形化安裝和配置,會配置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
忽略[INS-32018]錯誤,這是因爲按單實例的方式安裝的話,Oracle是不建議將ORACLE_HOME建立在ORACLE_BASE之外的。點擊“Yes”,軟件會正常安裝
在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界面,只截取重要截圖
執行腳本:
[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
三、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
[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;
[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;
查看歸檔是否同步:
總結:
Oracle 11g RAC到單實例ASM的物理Standby搭建其實與使用普通文件無很大區別,只需要將單實例ASM的安裝結合起來就沒事困難的。在搭建過程中,可能出問題最頭痛的就是歸檔無法從主庫中傳到備庫,經常遇到的error is 1034主備庫密碼不一致的問題,error is 12520 TNS無法連通問題,這些都較好解決。error1033的話基本上就是備庫配置有問題了,主庫無法訪問備庫造成的。