Oracle RAC+DG安装流程

这篇博客详细介绍了在CentOS 7.6环境下安装Oracle RAC 11.2.0.4及Data Guard的过程,包括环境准备、安装集群软件、验证Grid Infrastructure、数据库软件安装、配置ASM磁盘组、创建数据库实例以及Data Guard的安装和配置。内容涵盖了IP规划、主机文件配置、用户和组创建、系统参数调整、磁盘分区、软件安装以及数据库实例的创建和验证。

一、环境准备

系统:centos 7.6

软件:oracle 11.2.0.4

database: p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip

grid集群: p13390677_112040_Linux-x86-64_3of7.zip

ip规划

每个节点网卡需要2个,11.2开始至少需要4种IP地址,规划如下:

rac01:134.80.101.2 公共ip

rac01-vip:134.80.101.4 虚拟ip

rac01-pip:192.100.100.2 私有ip

rac02:134.80.101.3

rac02-vip:134.80.101.5

rac02-pip:192.100.100.3

scan-cluster:134.80.101.6 集群入口

说明:3个公共ip,2个虚拟ip 需要在同一个子网!

Oracle RAC环境下每个节点都会有多个IP地址,分别为公共IP(Public IP) 、私有IP(Private IP)和虚拟IP(Virtual IP):

  私有IP(Public IP)

  Private IP address is used only for internal clustering processing(Cache Fusion).

  专用(私有)IP地址只用于内部群集处理,如心跳侦测,服务器间的同步数据用。

  虚拟IP(Virtual IP)

  Virtual IP is used by database applications to enable fail over when one cluster node fails.

  当一个群集节点出现故障时,数据库应用程序通过虚拟IP地址进行故障切换。

  当一个群集节点出现故障时,数据库应用程序(包括数据库客户端)通过虚拟IP地址切换到另一个无故障节点,另一个功能是均衡负载。

  公共IP(Public IP)

  Public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.

  公共IP地址

  正常的(真实的)IP地址,通常DBA和SA使用公共IP地址在来管理存储、系统和数据库。

  监听IP(SCAN IP)

从Oracle 11g R2开始,Oracle RAC网络对IP地址有特殊要求,新增了加监听IP地址(SCAN IP),所以从Oracle 11g R2开始Oracle RAC网络至少需要4种IP地址(前面介绍三种IP地址)。在Oracle 11g R2之前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡、Failover等RAC的特性。因此,当数据库RAC集群需要添加或删除节点时,需要及时对客户端机器的tns进行更新,以免出现安全隐患。

在Oracle 11g R2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性。该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及SCAN IP Listener,在客户端仅需要配置SCAN IP的tns信息,通过SCAN IP Listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对Client产生影响。

(1)编辑/etc/hosts文件

rac01,rac02 同时配置 vim /etc/hosts 如下:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

##Public ip

134.80.101.2 rac1

134.80.101.3 rac2

##Private ip

192.100.100.2 rac1-priv

192.100.100.3 rac2-priv

##Virtual ip

134.80.101.4 rac1-vip

134.80.101.5 rac2-vip

##Scan-ip

134.80.101.150 rac-scan

##dg

134.80.101.200 oracledg

(2)创建用户和组

rac01,rac02两节点 root 下执行操作:创建组、用户,并设置用户密码

groupadd -g 1000 oinstall
groupadd -g 1200 dba
groupadd -g 1201 oper
groupadd -g 1300 asmadmin
groupadd -g 1301 asmdba
groupadd -g 1302 asmoper
useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid
useradd -u 1101 -g oinstall -G dba,oper,asmdba oracle
passwd grid
passwd oracle

(3)创建目录并授权

在rac01、rac02上进行目录的创建和授权:

root 下执行以下操作:

mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

(4)配置用户环境变量

配置grid用户

rac01:

[grid@rac01 ~]$ vim .bash_profile
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022
[grid@rac01 ~]$ source .bash_profile

rac02:

[grid@rac02 ~]$ vim .bash_profile
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022
[grid@rac02 ~]$ source .bash_profile

配置oracle用户

rac01:

[oracle@rac01 ~]$ vim .bash_profile
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl1
export ORACLE_UNQNAME=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
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
[oracle@rac01 ~]$ source .bash_profile

rac02:

[oracle@rac02 ~]$ vim .bash_profile
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl2
export ORACLE_UNQNAME=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
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
[oracle@rac02 ~]$ source .bash_profile

配置grid,oracle用户ssh互信

rac01:

ssh-keygen -t rsa #一路回车
ssh-keygen -t dsa #一路回车

rac02:

ssh-keygen -t rsa #一路回车
ssh-keygen -t dsa #一路回车

先rac01、再rac02上执行过上述两条命令后,再回到rac01再继续执行下面的命令:

cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
ssh rac02 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh rac02 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys rac02:~/.ssh/authorized_keys
chmod 600 .ssh/authorized_keys

两个节点互相ssh通过一次

ssh rac01 date
ssh rac02 date
ssh rac01-pip date
ssh rac02-pip date

(5)配置系统参数

关闭selinux&iptables

在rac01和rac02上都要执行

[root@rac01 ~]# cat /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected. 
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@rac01 ~]#  sysctemctl stop firewalld

修改 sysctl.conf

在rac01和rac02上都要执行

[root@ ~]# vim /etc/sysctl.conf ,在最后添加以下内容:
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736    #RAM times 0.5 
kernel.shmall = 4294967296    #physical RAM size / pagesize(getconf PAGESIZE)
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
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 = 1048586
net.ipv4.tcp_wmem = 262144 262144 262144
net.ipv4.tcp_rmem = 4194304 4194304 4194304
 [root@ rac01~]# sysctl -p 立即生效

修改 limits.conf

在rac01和rac02上都要执行

[root@rac01 ~]# vim /etc/security/limits.conf ,在最后添加以下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
修改 /etc/pam.d/login

在rac01和rac02上都要执行

[root@rac01 ~]# vim /etc/pam.d/login,在session required pam_namespace.so下面插入:
session required pam_limits.so

修改/etc/profile

在rac01和rac02上都要执行

[root@ rac01~]# cp /etc/profile /etc/profile.bak
[root@ rac01~]# vim /etc/profile,在文件最后添加以下内容:
if [ $USER = "ORACLE" ] || [ $USER = "GRID" ];then
if [ $SHELL = "/bin/ksh" ];then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi

停止并删除ntp服务

在rac01和rac02上都要执行

[root@rac01~]# service ntpd status
[root@rac01~]# chkconfig ntpd off
[root@rac01~]# cp /etc/ntp.conf /etc/ntp.conf.bak
[root@rac01 ~]# rm -rf /etc/ntp.conf

(7) 共享磁盘分区

在rac01执行 fdisk /dev/sdb

根据提示输入 n、 p、 w 等

# 同理,重复步骤对 sdc sdd sde 完成分区。

分区完 rac02 执行

[root@rac02 ~]# partprobe   分区立即生效

(8)安装asmlib

这里采用asmlib方式配置磁盘,需要安装oracleasm rpm包

[root@ ~]# yum install kmod-oracleasm
[root@ ~]# rpm -ivh oracleasmlib-2.0.12-1.el6.x86_64.rpm
[root@ ~]# rpm -ivh oracleasm-support-2.1.8-1.el6.x86_64.rpm

kmod可以直接yum安装,另外两个需要去官网下载

下载地址:https://www.oracle.com/linux/downloads/linux-asmlib-rhel7-downloads.html

创建ASM Disk Volumes

(9)配置并装载ASM核心模块

rac01 rac02都要操作

[root@rac01 ~]# oracleasm configure -i ,根据提示输入:
Configuringthe Oracle ASM library driver.
Thiswill configure the on-boot properties of the Oracle ASM library
driver.  The following questions will determinewhether the driver is
loadedon boot and what permissions it will have. The current values
willbe shown in brackets ('[]').  Hitting<ENTER> without typing an
answerwill keep that current value.  Ctrl-Cwill abort.
Defaultuser to own the driver interface []: grid
Defaultgroup to own the driver interface []: asmadmin
StartOracle ASM library driver on boot (y/n) [n]: y
Scanfor Oracle ASM disks on boot (y/n) [y]: y
WritingOracle ASM library driver configuration: done

[root@rac01 ~]# oracleasm init
    Creating/dev/oracleasm mount point: /dev/oracleasm
Loadingmodule "oracleasm": oracleasm
MountingASMlib driver filesystem: /dev/oracleasm

(10)创建ASM磁盘

rac01上执行

oracleasm createdisk CRSVOL1 /dev/sdc1
oracleasm createdisk FRAVOL1 /dev/sdc2
oracleasm createdisk ARCVOL1 /dev/sdc3
oracleasm createdisk DATAVOL1 /dev/sdd1
oracleasm createdisk DATAVOL2 /dev/sde1
oracleasm createdisk DATAVOL3 /dev/sdf1
oracleasm createdisk DATAVOL4 /dev/sdg1
oracleasm createdisk DATAVOL5 /dev/sdh1
[root@rac01 ~]# oracleasm listdisks
ARCVOL1
CRSVOL1
DATAVOL1
DATAVOL2
DATAVOL3
DATAVOL4
DATAVOL5
FRAVOL1

(11)使用oracleasm-discover查找ASM磁盘,运行该命令查看是否能找到刚创建的几个磁盘。

[root@rac01 ~]# oracleasm-discover
UsingASMLib from /opt/oracle/extapi/64/asm/orcl/1/libasm.so
[ASMLibrary - Generic Linux, version 2.0.4 (KABI_V2)]
Discovereddisk: ORCL:CRSVOL1 [2096753 blocks (1073537536 bytes), maxio 512]
Discovereddisk: ORCL:DATAVOL1 [41940960 blocks (21473771520 bytes), maxio 512]
Discovereddisk: ORCL:DATAVOL2 [41940960 blocks (21473771520 bytes), maxio 512]
Discovereddisk: ORCL:FRAVOL1 [62912480 blocks (32211189760 bytes), maxio 512]

rac02上使用oracleasm scandisks 扫描asm磁盘

[root@rac02 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@rac02 ~]# oracleasm listdisks
ARCVOL1
CRSVOL1
DATAVOL1
DATAVOL2
DATAVOL3
DATAVOL4
DATAVOL5
FRAVOL1

二、安装rac 集群软件

(1)安装oracle所依赖组件

配置yum源

cd /etc/yum.repos.d/

下载repo文件

wget http://mirrors.aliyun.com/repo/Centos-7.repo

mv CentOs-Base.repo CentOs-Base.repo.bak

mv Centos-7.repo CentOs-Base.repo

执行yum源更新命令

yum clean all
yum makecache
yum update

安装oracle 依赖

[root@rac01 ~]# yum -y install binutils compat-libstdc++ elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel numactl-devel sysstat unixODBC unixODBC-devel compat-libstdc++* libXp
[root@rac01 ~]# rpm -ivh pdksh-5.2.14-30.x86_64.rpm (这个包需要下载)
[root@rac02 ~]# 同上

(2)安装前预检查配置信息

使用grid用户 ,racnode1、racnode2都要执行一下这个脚本。

[grid@rac01 ~]$ cd /opt/grid/ 切换到软件上传目录
[grid@rac01 grid]$ ./runcluvfy.sh stage -pre crsinst -n rac01,rac02 -fixup -verbose

(3)开始安装grid软件

确保两个节点rac01、racn02都已经启动,然后以grid用户登录,开始Oracle Grid Infrastructure安装 【请在图形界面下】

[grid@rac01 ~]$ cd /opt/grid/ 切换到软件上传目录

调出图形界面,可以安装xmanager

[grid@rac01 grid] export DISPLAY=本地ip:0.0
[grid@rac01 grid]$ ./runInstaller

提示执行脚本。

一定要以root帐户执行,并且不能同时执行。

先执行rac01 /u01/app/oraInventory/orainstRoot.sh,

再执行rac02 /u01/app/oraInventory/orainstRoot.sh

然后,先执行rac01 /u01/app/11.2.0/grid/root.sh

再执行 rac02 /u01/app/11.2.0/grid/root.sh

安装完毕,点击close。 至此rac软件安装完毕。接下来要进行验证。

三、验证Oracle Grid Infrastructure安装成功

检查结果类似如下:

以rac01为例粘贴结果,rac02执行结果此处不粘贴了。

[root@racnode1 ~]# su - grid
[grid@racnode1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
检查Clusterware资源:[grid@racnode1 ~]$ crs_stat -t -v
Name             Type         R/RA F/FT Target State     Host
----------------------------------------------------------------------
ora.CRS.dg         ora....up.type     0/5 0/ ONLINE ONLINE racnode1
ora.DATA.dg         ora....up.type     0/5 0/ ONLINE ONLINE racnode1
ora.FRA.dg             ora....up.type     0/5 0/ ONLINE ONLINE racnode1
ora....ER.lsnr         ora....er.type     0/5 0/ ONLINE ONLINE racnode1
ora....N1.lsnr         ora....er.type     0/5 0/0 ONLINE ONLINE racnode1
ora.asm             ora.asm.type     0/5 0/ ONLINE ONLINE racnode1
ora.cvu             ora.cvu.type     0/5 0/0 ONLINE ONLINE racnode2
ora.gsd              ora.gsd.type     0/5 0/ OFFLINE OFFLINE
ora....network         ora....rk.type     0/5 0/ ONLINE ONLINE racnode1
ora.oc4j             ora.oc4j.type     0/1 0/2 ONLINE ONLINE racnode2
ora.ons             ora.ons.type         0/3 0/ ONLINE ONLINE racnode1
ora....SM1.asm         application     0/5 0/0 ONLINE ONLINE racnode1
ora....C1.lsnr         application     0/5 0/0 ONLINE ONLINE racnode1
ora. racnode1.gsd        application     0/5 0/0 OFFLINE OFFLINE
ora. racnode1.ons     application     0/3 0/0 ONLINE ONLINE racnode1
ora. racnode1.vip     ora....t1.type     0/0 0/0 ONLINE ONLINE racnode1
ora....SM2.asm         application     0/5 0/0 ONLINE ONLINE racnode2
ora....C2.lsnr         application     0/5 0/0 ONLINE ONLINE racnode2
ora. racnode2.gsd     application     0/5 0/0 OFFLINE OFFLINE
ora. racnode2.ons     application     0/3 0/0 ONLINE ONLINE racnode2
ora. racnode2.vip     ora....t1.type     0/0 0/0 ONLINE ONLINE racnode2
ora.scan1.vip         ora....ip.type     0/0 0/0 ONLINE ONLINE racnode1
 
crsctl stat res -t

检查集群节点

[grid@racnode1 ~]$ olsnodes -n
racnode1 1
racnode2 2

检查两个节点上的Oracle TNS监听器进程:

[grid@racnode1 ~]$ ps -ef|grep lsnr|grep -v 'grep'
grid 94448 1 0 15:04 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid 94485 1 0 15:04 ? 00:00:00 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
 
[grid@racnode1 ~]$ ps -ef|grep lsnr|grep -v 'grep'|awk '{print $9}'
LISTENER
LISTENER_SCAN1

确认针对Oracle Clusterware文件的Oracle ASM功能:

[grid@racnode1 ~]$ srvctl status asm -a
ASM is running on racnode1,racnode2
ASM is enabled.

检查Oracle集群注册表(OCR):

[grid@racnode1 ~]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
     Version : 3
     Total space (kbytes) : 262120
     Used space (kbytes) : 2624
     Available space (kbytes) : 259496
     ID : 1555425658
     Device/File Name : +CRS
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
     Cluster registry integrity check succeeded
     Logical corruption check bypassed due to non-privileged user

检查表决磁盘:

[grid@racnode1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 0d90b0c368684ff5bff8f2094823b901 (ORCL:CRSVOL1) [CRS]
Located 1 voting disk(s).

四、安装database软件

1、 安装软件

确保两个节点rac01、racn02都已经启动,然后以oracle用户登录,安装请在图形界面下

进入软件安装包的目录

[oracle@racnode1 database]$ ./runInstaller

rac01,rac02先后执行该root.sh脚本

至此软件安装完毕。

五、配置asm磁盘组

在安装ORACLE软件之前创建ASM磁盘组。下面开始创建ASM磁盘组。

(1)su - grid

(2)命令 asmca 启动图形配置 。 点击Create ,创建磁盘组。

(3)Disk Group Name 命名为DATA;

(4)Redundancy选择 External (None);;

(5)disks勾选 DATAVOL1、DATAVOL2、DATAVOL3、DATAVOL4、DATAVOL5;

六、创建数据库实例

(1)切换到oracle用户,以oracle用户运行命令 dbca 。

选择Oracle Real Application Cluster(RAC)database,点击next。

(2)选择Create a Database,创建一个数据库。点击next。

(3)选择custom database,截图来源网上,不对应参考即可

(4)选择Configuration Type:Admin-Managed. Global Database Name:orcl. SID Prefix:orcl.

(5)点击"Select ALL". 这里一定要选择全部节点.

(6)配置Enterprise Managert 和 Automatic Maintenance Tasks.

(7)设置密码。"Use the Same Administrative Password for All Accounts"

(8)在"Databse Area",点击"Browse",选择+DATA.

要求设置ASMSNMP密码

(9)设置FRA和归档。定义快速恢复区(FRA)大小时,一般用整个卷的大小的90%

(10)点击"Browse",选择 FRA

(11)设置内存、SGA和PGA、字符集、连接模式。

(12)选择Typical,SGA and PGA,先用默认的40%. 后面根据情况也可以调整。

(13)根据实际并发情况调整process 大小

(14)字符集这里一般正常选择UTF-8,看实际项目使用

(15)开始创建数据库。选择"Create Database"

创建过程中

(16)弹出提示Database creation complete.和相应的提示信息。

(17)点Exit,退出。数据库创建完成。

RAC安装到此完成。

七、Oracle dg安装流程

(1)环境配置

主库rac(已安装rac,并已有数据库appdb)

rac1:134.80.101.2,sid1:appdb1,version:11.2.0.4
rac2:134.80.101.3,sid2:appdb2,version:11.2.0.4

从库(已安装单实例数据库软件,无数据库实例)

oracledg:134.80.101.200,sid:appdbdg,version:11.2.0.4

(2)安装dg

以下所有主库操作都在节点1上做,如果需要在节点2上做的,

1. 主库打开归档模式,并强制写日志

先查看数据库的归档状态以及是否开启强制写日志,从下图可以看到目前数据库并没有打开归档,也没有开启强制写日志

SQL> select log_mode, force_logging from v$database;

数据库在mount状态下打开归档

SQL> alter system set log_archive_dest_1='location=+data' sid='*' scope=spfile;
SQL> shutdown immediate;  # 两节点都关闭
SQL> startup mount;  # 只开启节点1
SQL> alter database archivelog;
SQL> alter database open;

强制日志写,数据库在open状态就能修改

SQL> alter database force logging;
SQL> startup;  # 当节点1open完毕后,在节点2上打开数据库

再来查看数据库的归档状态以及是否开启强制写日志

SQL> select log_mode, force_logging from v$database;

2. 主库打开dataguard开关

SQL> alter system set log_archive_config='dg_config=(appdb,appdbdg)' sid='*' scope=both;  
# appdb是主库的db_unique_name,appdbdg是从库的db_unique_name

3. 主库设置远程归档

SQL> alter system set log_archive_dest_3='service=appdbdg valid_for=(online_logfiles,primary_role) db_unique_name=appdbdg' sid='*';

4. 将主库的口令文件传送给从库

[oracle@rac1 ~]$ scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracledg:$ORACLE_HOME/dbs/orapwappdbdg

5. 从库准备参数文件

这里参数文件跟给单实例搭建单实例dg没什么区别,所以不做具体介绍

#appdb2.__db_cache_size=72477573120
#appdb1.__db_cache_size=72477573120
#appdb2.__java_pool_size=3758096384
#appdb1.__java_pool_size=3758096384
#appdb2.__large_pool_size=1073741824
#appdb1.__large_pool_size=1073741824
#appdb1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
#appdb2.__pga_aggregate_target=64961380352
#appdb1.__pga_aggregate_target=64961380352
#appdb2.__sga_target=97173635072
#appdb1.__sga_target=97173635072
#appdb2.__shared_io_pool_size=0
#appdb1.__shared_io_pool_size=0
#appdb2.__shared_pool_size=18790481920
#appdb1.__shared_pool_size=18790481920
#appdb2.__streams_pool_size=0
#appdb1.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/appdb/adump'
*.audit_trail='db'
#*.cluster_database=true
*.compatible='11.2.0.4.0'
#*.control_files='+REDODG/appdb/control01.ctl','+REDODG/appdb/control02.ctl'
*.control_files='/oradata/appdbdg/control01.ctl','/oradata/appdbdg/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='appdb'
*.db_recovery_file_dest='/oradata/archivelog'
*.db_recovery_file_dest_size=85993459200
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=appdbXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.memory_target=16076295168
*.open_cursors=300
*.optimizer_dynamic_sampling=2
*.optimizer_index_cost_adj=40
*.processes=150
#*.remote_listener='rac-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=165
#appdb2.thread=2
#appdb1.thread=1
#appdb1.undo_tablespace='UNDOTBS1'
appdbdg.undo_tablespace='UNDOTBS1'
#appdb2.undo_tablespace='UNDOTBS2'
 
standby_file_management=auto
db_unique_name='appdbdg'
db_file_name_convert='+DATADG/appdb','/oradata/appdbdg'
log_file_name_convert='+REDODG/appdb','/oradata/appdbdg'

[oracle@oradg ~]# vi $ORACLE_HOME/dbs/initappdbdg.ora
 
*.audit_file_dest='/u01/app/oracle/admin/appdbdg/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oracle/oradata/appdbdg/controlfile/control01.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='appdb'
*.diagnostic_dest='/u01/app/oracle'
*.log_archive_config='dg_config=(appdb,appdbdg)'
*.log_archive_dest_2='location=/u01/app/oracle/oradata/appdbdg/archstdlog/ valid_for=(standby_logfiles,standby_role) db_unique_name=appdbdg'
*.memory_target=838860800
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='exclusive'
*.undo_tablespace='UNDOTBS1'
standby_file_management=auto  # 该参数默认值是manual,需要将其改为auto,表示主库的数据文件发生修改(如新建,重命名等),相应地从库也做相应修改
db_unique_name='appdbdg'
db_file_name_convert='+DATA/appdb/datafile/','/u01/app/oracle/oradata/appdbdg/datafile/','+DATA/appdb/tempfile/','/u01/app/oracle/oradata/appdbdg/tempfile/'
log_file_name_convert='+DATA/appdb/onlinelog/','/u01/app/oracle/oradata/appdbdg/onlinelog/'

6. 从库中准备相关目录

[oracle@oradg ~]$ mkdir -p /u01/app/oracle/admin/appdbdg/adump
[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/controlfile
[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/archstdlog
[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/datafile
[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/tempfile
[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/onlinelog

7. 启动从库实例

[oracle@oradg ~]$ export ORACLE_SID=appdbdg
[oracle@oradg ~]$ sqlplus / as sysdba
SQL> create spfile from pfile;
SQL> startup nomount

8. 从库配置并启动监听程序

因为采用duplicate方式复制主库数据,所以需要将从库配置为静态注册的形式

[oracle@oradg ~]$ vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = appdbdg)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
      (SID_NAME = appdbdg)
    )
  )
 
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracledg )(PORT = 1521))
  )

[oracle@oradg ~]$ lsnrctl start

9. 主库配置服务命名

# 两个节点都要设置

[oracle@rac1 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

appdbdg =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = oracledg )(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = appdbdg)
    )
  )

[oracle@rac2 ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora

内容跟rac1一致,略

10. 主库使用网络连接从库(测试连通性)

# 这里我的主库的sys密码是oracle,从库与主库一致

[oracle@rac1 ~]$ sqlplus sys/oracle@appdbdg as sysdba

11. 在主库启动rman复制从库

rman连接主库和从库

[oracle@rac1 ~]$ rman target / auxiliary sys/oracle@appdbdg
RMAN> duplicate target database for standby from active database;

12. 从库添加standbylog

添加的日志大小跟主库的onlinelog保持一致,数量多两组(主库的onlinelog信息查看v$log)

group的编号不与当前的onlinelog重复即可

[oracle@oradg ~]$ mkdir -p /u01/app/oracle/oradata/appdbdg/standbylog/

SQL> alter database add standby logfile group 21 '/u01/app/oracle/oradata/appdbdg/standbylog/std01.log' size 50M;
SQL> alter database add standby logfile group 22 '/u01/app/oracle/oradata/appdbdg/standbylog/std02.log' size 50M;
SQL> alter database add standby logfile group 23 '/u01/app/oracle/oradata/appdbdg/standbylog/std03.log' size 50M;
SQL> alter database add standby logfile group 24 '/u01/app/oracle/oradata/appdbdg/standbylog/std04.log' size 50M;
SQL> alter database add standby logfile group 25 '/u01/app/oracle/oradata/appdbdg/standbylog/std05.log' size 50M;
SQL> alter database add standby logfile group 26 '/u01/app/oracle/oradata/appdbdg/standbylog/std06.log' size 50M;

13. 从库打开应用日志

SQL> alter database recover managed standby database disconnect from session;

14. 主库切换归档

SQL> alter system switch logfile;

15. 打开从库

当从库应用归档一段时间后,就关闭应用归档日志,打开从库。

SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;

16. 验证同步

主库做修改

SQL> update scott.emp set sal=2000;
SQL> commit;

从库查询

SQL> select * from scott.emp;

至此,给rac搭建一个单实例的dg就已经做完了,跟单实例搭建单实例的dg没什么区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

minmax329

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值