1、DG環境配置java
這次搭建Standby的主庫爲:」 RedHat 6.5+11G+RAC+ASM安裝與配置(三節點)」,11g單實例ASM安裝使用ASMLib的方式,不在使用UDEV方式,磁盤爲本機磁盤,非遠程掛載的磁盤。本次搭建包含了11g單實例ASM的詳細安裝過程。linux
一、 基本環境c++
主庫:sql
實例名:racdb1,racdb2,racdb3 DB_NAME:racdb DB_UNIQUE_NAME:racdb數據庫
備庫:bash
實例名:racdg DB_NAME:racdb DB_UNIQUE_NAME:racdgsession
IP:172.16.1.15 HOSTNAME:asm-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.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/目錄下的腳本,有興趣的能夠認真研究一下。
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界面,只截取重要截圖
這裏說說選第二項,而不選第四項的理由:由於第二項是圖形化安裝和配置,會配置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
三、 配置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
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
[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;
[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的話基本上就是備庫配置有問題了,主庫沒法訪問備庫形成的。