19C RAC CDB + DG

主机网络规划

网络配置 节点1 节点2
主机名称 rac1 rac2
Public_IP 192.168.189.211 192.168.189.212
Private_IP 10.10.10.211 10.10.10.212
VIP 192.168.189.213 192.168.189.214
Scan_IP 192.168.189.215 192.168.189.215

ESXI 创建共享磁盘

cd /vmfs/volumes/datastore1
mkdir wb_sharedisk
cd sharedisk

vmkfstools -c 10Gb -a lsilogic -d eagerzeroedthick /vmfs/volumes/datastore1/wb_sharedisk/asm1.vmdk
vmkfstools -c 10Gb -a lsilogic -d eagerzeroedthick /vmfs/volumes/datastore1/wb_sharedisk/asm2.vmdk
vmkfstools -c 10Gb -a lsilogic -d eagerzeroedthick /vmfs/volumes/datastore1/wb_sharedisk/asm3.vmdk
vmkfstools -c 10Gb -a lsilogic -d eagerzeroedthick /vmfs/volumes/datastore1/wb_sharedisk/asm4.vmdk
vmkfstools -c 10Gb -a lsilogic -d eagerzeroedthick /vmfs/volumes/datastore1/wb_sharedisk/asm5.vmdk

配置主机名

RAC1
hostnamectl set-hostname centos7-rac-1

RAC2
hostnamectl set-hostname centos7-rac-2

检查主机名和网络并且配置/etc/hosts文件

echo "
#Public_IP
192.168.8.20    Centos7-RAC1
192.168.8.21    Centos7-RAC2

#Private_IP
192.168.8.22    Centos7-RAC1-vip
192.168.8.23    Centos7-RAC2-vip

#VIP
10.10.10.1      Centos7-RAC1-priv
10.10.10.2      Centos7-RAC2-priv

#Scan_IP
192.168.8.24    Centos7-RAC-scan

#DG1
192.168.8.27        Centos7-DG" >> /etc/hosts
cat /etc/hosts

扩展SWAP内存

#RAC
mkdir /home/swap

dd if=/dev/zero of=/home/swap/swapfile bs=1024 count=33554432

mkswap /home/swap/swapfile

chmod 0600 /home/swap/swapfile

开机挂载

echo "
/home/swap/swapfile   swap            swap    defaults        0 0
/dev/cdrom              /mnt            iso9660               defaults        0 0" >> /etc/fstab

cat /etc/fstab

mount -a

swapon -a

free -h

df -Th
格式化分区应答文件
echo "
n
p
1
 
 
w
q" >./autopart
格式化分区
for i in b c d e f g
do
fdisk /dev/sd$i < ./autopart
done
刷新磁盘
partprobe

lsblk

配置udev

for i in b c d e f
do
wwid=`/usr/lib/udev/scsi_id -g -u -d /dev/sd$i`
echo "KERNEL==\"sd*\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d /dev/\$parent\", RESULT==\"$wwid\", SYMLINK+=\"asm-$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
done
查看udev
cat /etc/udev/rules.d/99-oracle-asmdevices.rules
重启udev
udevadm control --reload-rules

udevadm trigger --type=devices
验证udev
ls /dev/asm*

创建文件目录和相应的用户

groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 oper
groupadd -g 504 backupdba
groupadd -g 505 dgdba
groupadd -g 506 kmdba
groupadd -g 507 asmdba
groupadd -g 508 asmoper
groupadd -g 509 asmadmin
groupadd -g 510 racdba

useradd -u 522 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba oracle
echo W@ngBin92! |passwd --stdin oracle

useradd -u 501 -g oinstall -G dba,asmdba,asmoper,asmadmin,racdba grid
echo W@ngBin92! |passwd --stdin grid

创建目录并授权

#grid_oracle_base
mkdir -p /home/u01/app/19.3.0

#grid_oracle_home
mkdir -p /home/u01/app/grid/19.3.0/db_1

#oracle_home
mkdir -p /home/u01/app/oracle/product/19.3.0/db_1

#oracle_oinstall
mkdir -p /home/u01/app/oraInventory 

chown -R grid:oinstall /home/u01/app/grid
chown -R grid:oinstall /home/u01/app/19.3.0
chown -R oracle:oinstall /home/u01/app/oracle
chown -R grid:oinstall /home/u01/app/oraInventory 

chmod -R 775 /home/u01

主机解压安装包

unzip LINUX.X64_193000_db_home.zip -d /home/u01/app/oracle/product/19.3.0/db_1

unzip LINUX.X64_193000_grid_home.zip -d /home/u01/app/grid/19.3.0/db_1

chown -R grid:oinstall   /home/u01/app/grid

chown -R oracle:oinstall /home/u01/app/oracle

关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

关闭SELINUX防火墙!

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

cat /etc/selinux/config|grep -Ev '^$|^#'

setenforce 0

配置YUM源解决程序依赖的问题

mkdir /etc/yum.repos.d/backup

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

echo "[dvd]
name=dvd
baseurl=file:///mnt
gpgcheck=0
enable=1" >>/etc/yum.repos.d/dvd.repo

cat /etc/yum.repos.d/dvd.repo

yum repolist

安装ORACLE先决条件的软件包

yum -y install bc binutils compat-libcap1 compat-libstdc++ compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel gcc gcc-c++ glibc glibc-2.5 glibc-common glibc-devel glibc-headers glibc-kernheaders ksh libaio libaio-devel libgcc librdmacm-devel libstdc++ libstdc++-devel libtermcap-devel libX11 libXau libxcb libXext libXi libXp libXrender libXrender-devel libXtst make net-tools nfs-utils python python-configshell python-rtslib python-six readline smartmontools sysstat targetcli unixODBC unixODBC-devel
安装额外依赖包
yum -y install compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm  
yum -y install kmod-libs-20-21.el7.x86_64.rpm
yum -y install cvuqdisk-1.0.10-1.rpm                        
yum -y install oracleasm-support-2.1.11-2.el7.x86_64.rpm
yum -y install expect-5.45-14.el7_1.x86_64.rpm              
yum -y install rlwrap-0.37-1.el6.x86_64.rpm
yum -y install kmod-20-21.el7.x86_64.rpm                    
yum -y install tcl-8.5.13-8.el7.x86_64.rpm
yum -y install /home/u01/app/oracle/product/19.3.0/db_1/cv/rpm/cvuqdisk-1.0.10-1.rpm

关闭时间同步ntpd服务

检查两节点时间,时区是否相同,并禁止ntp

systemctl disable ntpd.service

systemctl stop ntpd.service

mv /etc/ntp.conf /etc/ntp.conf.orig

systemctl status ntpd

timedatectl set-timezone Asia/Shanghai

修改LINUX的内核文件

删除可能存在参数
cat /etc/sysctl.conf /etc/sysctl.conf.backup
sed -i -e '/#net.core.somaxconn/d' /etc/sysctl.conf
sed -i -e '/fs.aio-max-nr/d' /etc/sysctl.conf
sed -i -e '/fs.file-max/d' /etc/sysctl.conf
sed -i -e '/kernel.sem/d' /etc/sysctl.conf
sed -i -e '/kernel.shmall/d' /etc/sysctl.conf
sed -i -e '/kernel.shmmax/d' /etc/sysctl.conf
sed -i -e '/kernel.shmmni/d' /etc/sysctl.conf
sed -i -e '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sed -i -e '/net.core.rmem_default/d' /etc/sysctl.conf
sed -i -e '/net.core.rmem_max/d' /etc/sysctl.conf
sed -i -e '/net.core.wmem_default/d' /etc/sysctl.conf
sed -i -e '/net.core.wmem_max/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.conf.all.rp_filter/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.conf.default.rp_filter/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_intvl/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_probes/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_time/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_tw_recycle/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sed -i -e '/net.core.somaxconn/d' /etc/sysctl.conf
sed -i -e '/^$/d' /etc/sysctl.conf

##### 设置内核参数聚值计算变量

export shmmax=$(free | sed -n '2p'|gawk '{print int(($2*1024-1))}')
export shmall=$(free | sed -n '2p'|gawk '{print int(($2*1024-1)/4)}')
#kernel.sem参数取值定义与算法
#kernel.shmmax=256*1024*1024*1024-1
#kernel.shmall=(256*1024*1024*1024-1)/4
#process=1500
#kernel.sem=process+10 300*(process+10)  process+10       300=1510 453000 1510 300

export process=1500
export SEMMNI=300
export SEMMSL=$(($process+10))
export SEMMNS=$(($SEMMSL*$SEMMNI))
export SEMOPM=$SEMMSL

echo "
kernel.shmall = ${shmall}
kernel.shmmax = ${shmmax}
kernel.sem = $SEMMSL $SEMMNS $SEMOPM $SEMMNI
#net.core.somaxconn = 262144
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_intvl = 5
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1" >>/etc/sysctl.conf

sysctl -p

cat /etc/sysctl.conf|grep -Ev '^$|^#'|awk -F "=" '{print $1,$2}'|column -t

添加下列参数到/etc/security/limits.conf

echo "
# modify for oracle
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728

# modify for grid 
grid   soft   nofile    1024
grid   hard   nofile    65536
grid   soft   nproc    16384
grid   hard   nproc    16384
grid   soft   stack    10240
grid   hard   stack    32768
grid   hard   memlock    134217728
grid   soft   memlock    134217728
" >> /etc/security/limits.conf

cat /etc/security/limits.conf

添加下列条目到/etc/pam.d/login

echo "session required pam_limits.so" >>/etc/pam.d/login

cat /etc/pam.d/login

在两个节点修改/etc/security/limits.d/20-nproc.conf

sed -i 's/*          soft    nproc     4096/#*          soft    nproc     4096/g' /etc/security/limits.d/20-nproc.conf

echo "*   -   nproc   16384" >>/etc/security/limits.d/20-nproc.conf

cat /etc/security/limits.d/20-nproc.conf

停止avahi-daemon服务

两个节点分别操作
systemctl disable avahi-daemon.socket

systemctl disable avahi-daemon.service

ps -ef|grep avahi-daemon

killall avahi-daemon
添加NOZEROCONF=yes参数至/etc/sysconfig/network
echo "NOZEROCONF=yes" >>/etc/sysconfig/network

cat /etc/sysconfig/network

禁用透明大页

oracle官方建议关闭透明大页
修改grub文件
cp /etc/default/grub /etc/default/grub.bak

#增加一行transparent_hugepage=never到尾部
echo 'GRUB_CMDLINE_LINUX="transparent_hugepage=never"' >>  /etc/default/grub

# 执行命令
grub2-mkconfig -o /boot/grub2/grub.cfg

#不重启生效
echo never > /sys/kernel/mm/transparent_hugepage/enabled

#查看是否禁用透明大页
cat /sys/kernel/mm/transparent_hugepage/enabled

#返回值若是零,代表成功禁用THP
grep AnonHugePages /proc/meminfo

配置用户的环境变量

echo '
if [ $USER = "oracle" ]; then
   if [ $SHELL = "/bin/ksh" ]; then
      ulimit -p 16384
      ulimit -n 65536
      else
      ulimit -u 16384 -n 65536
   fi
fi' >> /etc/profile

source /etc/profile

节点1 oracle、grid配置环境变量

echo '
export PS1="[`whoami`@`hostname`:"'\''$PWD]$'\''  
export EDITOR=vi
export TMP=/tmp 
export LANG=en_US 
export TMPDIR=$TMP
export ORACLE_SID=orcl1
export ORACLE_TERM=xterm
export THREADS_FLAG=native
export ORACLE_BASE=/home/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1
export INVENTORY_LOCATION=/home/u01/app/oraInventory 
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
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' >>/home/oracle/.bash_profile

cat /home/oracle/.bash_profile


echo '
export PS1="[`whoami`@`hostname`:"'\''$PWD]$'\'' 
export EDITOR=vi
export TMP=/tmp 
export LANG=en_US 
export TMPDIR=$TMP
export ORACLE_SID=+ASM1
export ORACLE_TERM=xterm
export THREADS_FLAG=native
export ORACLE_BASE=/home/u01/app/19.3.0
export ORACLE_HOME=/home/u01/app/grid/19.3.0/db_1
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
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' >>/home/grid/.bash_profile

cat /home/grid/.bash_profile

节点2 oracle、grid置环境变量

echo '
export PS1="[`whoami`@`hostname`:"'\''$PWD]$'\'' 
export EDITOR=vi
export TMP=/tmp 
export LANG=en_US 
export TMPDIR=$TMP
export ORACLE_SID=orcl2
export ORACLE_TERM=xterm
export THREADS_FLAG=native
export ORACLE_BASE=/home/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1
export INVENTORY_LOCATION=/home/u01/app/oraInventory 
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
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' >>/home/oracle/.bash_profile

cat /home/oracle/.bash_profile


echo '
export PS1="[`whoami`@`hostname`:"'\''$PWD]$'\'' 
export EDITOR=vi
export TMP=/tmp 
export LANG=en_US 
export TMPDIR=$TMP
export ORACLE_SID=+ASM2
export ORACLE_TERM=xterm
export THREADS_FLAG=native
export ORACLE_BASE=/home/u01/app/19.3.0
export ORACLE_HOME=/home/u01/app/grid/19.3.0/db_1
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
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' >>/home/grid/.bash_profile

cat /home/grid/.bash_profile

配置互信

方法一(主机oracle,grid用户分别执行)

[oracle@rac01:/home/oracle]$ cat ssh.sh

#!/usr/bin/expect
set passwd W@ngBin92!
spawn ssh-keygen
expect {
        "id_rsa" {send "\r";exp_continue}
        "Overwrite" {send "y\r";exp_continue}
        "phrase" {send "\r";exp_continue}
        "again" {send "\r";exp_continue}
        }
spawn cp .ssh/id_rsa.pub .ssh/authorized_keys
set hosts [open ip.list r]
while { [gets $hosts ip]>=0} {
    spawn scp -r .ssh/ $ip:~/
    expect {
        "yes/no" {send "yes\r";exp_continue}
            "password:" {send "$passwd\r";exp_continue}
            }
}
close $hosts

[oracle@rac01:/home/oracle]$ cat ip.list

192.168.8.20
192.168.8.21

[oracle@rac01:/home/oracle]$ ./ssh.sh

方法二
#不配置root互信可能遇到ins-06003,手动配置后,grid安装界面调试ssh配置

配置root 互信
配置2个节点的root用户互信(2个节点执行)
创建秘钥目录

mkdir ~/.ssh
#以下2个生成密钥的命令,需要输入的参数直接回车即可
ssh-keygen -t rsa
ssh-keygen -t dsa

#生成认证文件
cat ~/.ssh/id_rsa.pub >~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >~/.ssh/authorized_keys

配置2个节点的root用户互信(仅在Centos7-RAC1节点执行)
//将节点1的所有密钥和认证文件拷贝给节点2,单独执行,每条命令会输入密码
ssh Centos7-RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh Centos7-RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys Centos7-RAC2:~/.ssh/authorized_keys

#测试root用户互信(2个节点执行)
ssh Centos7-RAC1 date;ssh Centos7-RAC2 date;ssh Centos7-RAC1-priv date;ssh Centos7-RAC2-priv date






配置oracle 互信
配置2个节点的oracle用户互信(2个节点执行)
su - oracle
mkdir ~/.ssh

#以下2个生成密钥的命令,需要输入的参数直接回车即可
ssh-keygen -t rsa
ssh-keygen -t dsa

#生成认证文件
cat ~/.ssh/id_rsa.pub >~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >~/.ssh/authorized_keys

配置2个节点的oracle用户互信(仅在Centos7-RAC1节点执行)
//将节点1的所有密钥和认证文件拷贝给节点2,单独执行,每条命令会输入密码

ssh Centos7-RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh Centos7-RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys Centos7-RAC2:~/.ssh/authorized_keys

#测试oracle用户互信(2个节点执行)
ssh Centos7-RAC1 date;ssh Centos7-RAC2 date;ssh Centos7-RAC1-priv date;ssh Centos7-RAC2-priv date






配置grid 互信
配置2个节点的grid用户互信(2个节点执行)
su - grid
mkdir ~/.ssh

#以下2个生成密钥的命令,需要输入的参数直接回车即可
ssh-keygen -t rsa
ssh-keygen -t dsa

#生成认证文件
cat ~/.ssh/id_rsa.pub >~/.ssh/authorized_keys
cat ~/.ssh/id_dsa.pub >~/.ssh/authorized_keys

配置2个节点的grid用户互信(仅在Centos7-RAC1节点执行)
//将节点1的所有密钥和认证文件拷贝给节点2,单独执行,每条命令会输入密码
ssh Centos7-RAC2 cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh Centos7-RAC2 cat ~/.ssh/id_dsa.pub >>~/.ssh/authorized_keys W@ngBin92!!!
scp ~/.ssh/authorized_keys Centos7-RAC2:~/.ssh/authorized_keys

#测试grid用户互信(2个节点执行)
//第一次ssh的话会添加host输入yes,不需要输入密码
ssh Centos7-RAC1 date;ssh Centos7-RAC2 date;ssh Centos7-RAC1-priv date;ssh Centos7-RAC2-priv date

图形化安装

图形安装grid

[grid@rac01:/home/grid]$ cd $ORACLE_HOME
[grid@rac01:/home/u01/app/19.3.0/grid]$ ./gridSetup.sh

图形安装oracle

[oracle@rac01:/home/oracle]$ cd $ORACLE_HOME
[oracle@rac01:/home/u01/app/oracle/product/19.3.0/db_1]$ ./runInstaller

图形dbca

[oracle@rac01:/home/oracle]$ dbca

DG主机配置
oracle 19C DG单机
1.配置主机名

hostnamectl set-hostname centos7-dg

2.检查主机名和网络并且配置/etc/hosts文件

echo "
192.168.8.20    Centos7-RAC1
192.168.8.21    Centos7-RAC2
192.168.8.22    Centos7-RAC1-vip
192.168.8.23    Centos7-RAC2-vip
10.10.10.1      Centos7-RAC1-priv
10.10.10.2      Centos7-RAC2-priv
192.168.8.24    Centos7-RAC-scan
192.168.8.27    Centos7-DG" >> /etc/hosts
cat /etc/hosts

3.扩展SWAP内存

DG

mkdir /home/swap
dd if=/dev/zero of=/home/swap/swapfile bs=1024 count=16777216
mkswap /home/swap/swapfile
chmod 0600 /home/swap/swapfile

开机挂载

echo "
/home/swap/swapfile   swap            swap    defaults        0 0
/dev/cdrom              /mnt            iso9660               defaults        0 0" >> /etc/fstab
cat /etc/fstab
mount -a
swapon -a
free -h
df -Th

4.创建文件目录和相应的用户

groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba oracle
echo 'oracle' | passwd --stdin oracle

5.创建安装目录

mkdir -p /home/u01/app/oracle
mkdir -p /home/u01/app/oraInventory
mkdir -p /home/u01/app/oracle/product/19.3.0/db_1
mkdir -p /home/u01/arch
mkdir -p /home/u01/app/oracle/oradata/std
mkdir -p /home/u01/app/oracle/oradata/std/datafile/
mkdir -p /home/u01/app/oracle/oradata/std/tempfile/
mkdir -p /home/u01/app/oracle/oradata/std/pdbseed/
mkdir -p /home/u01/app/oracle/admin/std/adump/
mkdir -p /home/u01/app/oracle/oradata/std/onlinelog/
chown -R oracle:oinstall /home/u01
chmod -R 775 /home/u01/app

--解压缩安装包到oracle_home目录下
主机解压安装包

unzip LINUX.X64_193000_db_home.zip -d /home/u01/app/oracle/product/19.3.0/db_1/
chown -R oracle:oinstall /home/u01
chmod -R 775 /home/u01/app

6.关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

7.关闭SELINUX防火墙!

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
cat /etc/selinux/config|grep -Ev '^$|^#'
setenforce 0

8.配置YUM源解决程序依赖的问题

mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
vi dvd.repo
echo "[dvd]
name=dvd
baseurl=file:///mnt
gpgcheck=0
enable=1" >>/etc/yum.repos.d/dvd.repo
yum repolist

3.安装ORACLE先决条件的软件包

yum -y install bc binutils compat-libcap1 compat-libstdc++ compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel gcc gcc-c++ glibc glibc-2.5 glibc-common glibc-devel glibc-headers glibc-kernheaders ksh libaio libaio-devel libgcc librdmacm-devel libstdc++ libstdc++-devel libtermcap-devel libX11 libXau libxcb libXext libXi libXp libXrender libXrender-devel libXtst make net-tools nfs-utils python python-configshell python-rtslib python-six readline smartmontools sysstat targetcli unixODBC unixODBC-devel

安装额外依赖包

yum -y install compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm  
yum -y install kmod-libs-20-21.el7.x86_64.rpm
yum -y install cvuqdisk-1.0.10-1.rpm                        
yum -y install oracleasm-support-2.1.11-2.el7.x86_64.rpm
yum -y install expect-5.45-14.el7_1.x86_64.rpm              
yum -y install rlwrap-0.37-1.el6.x86_64.rpm
yum -y install kmod-20-21.el7.x86_64.rpm                    
yum -y install tcl-8.5.13-8.el7.x86_64.rpm
yum -y install /home/u01/app/oracle/product/19.3.0/db_1/cv/rpm/cvuqdisk-1.0.10-1.rpm

关闭时间同步ntpd服务
检查两节点时间,时区是否相同,并禁止ntps

ystemctl disable ntpd.service
systemctl stop ntpd.service
mv /etc/ntp.conf /etc/ntp.conf.orig
systemctl status ntpd
timedatectl set-timezone Asia/Shanghai

4.修改LINUX的内核文件

#删除可能存在参数
sed -i -e '/#net.core.somaxconn/d' /etc/sysctl.conf
sed -i -e '/fs.aio-max-nr/d' /etc/sysctl.conf
sed -i -e '/fs.file-max/d' /etc/sysctl.conf
sed -i -e '/kernel.sem/d' /etc/sysctl.conf
sed -i -e '/kernel.shmall/d' /etc/sysctl.conf
sed -i -e '/kernel.shmmax/d' /etc/sysctl.conf
sed -i -e '/kernel.shmmni/d' /etc/sysctl.conf
sed -i -e '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sed -i -e '/net.core.rmem_default/d' /etc/sysctl.conf
sed -i -e '/net.core.rmem_max/d' /etc/sysctl.conf
sed -i -e '/net.core.wmem_default/d' /etc/sysctl.conf
sed -i -e '/net.core.wmem_max/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.conf.all.rp_filter/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.conf.default.rp_filter/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_intvl/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_probes/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_keepalive_time/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_tw_recycle/d' /etc/sysctl.conf
sed -i -e '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sed -i -e '/net.core.somaxconn/d' /etc/sysctl.conf
sed -i -e '/^$/d' /etc/sysctl.conf


#设置内核参数聚值计算变量
shmmax=$(free | sed -n '2p'|gawk '{print int(($2*1024-1))}')
shmall=$(free | sed -n '2p'|gawk '{print int(($2*1024-1)/4)}')
#取数据库最大进程数
process=1500
SEMMNI=300
SEMMSL=$(($process+10))
SEMMNS=$(($SEMMSL*$SEMMNI))
SEMOPM=$SEMMSL
echo "
#kernel.shmmax=256*1024*1024*1024-1
#kernel.shmall=(256*1024*1024*1024-1)/4
#process=1500
#kernel.sem=process+10 300*(process+10)  process+10       300=1510 453000 1510 300
kernel.shmall = ${shmall}
kernel.shmmax = ${shmmax}
kernel.sem = $SEMMSL $SEMMNS $SEMOPM $SEMMNI
#net.core.somaxconn = 262144
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
net.core.netdev_max_backlog = 262144
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_intvl = 5
net.ipv4.tcp_keepalive_probes = 6
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1" >>/etc/sysctl.conf
systemctl -p
cat /etc/sysctl.conf|grep -Ev '^$|^#'|awk -F "=" '{print $1,$2}'|column -t

5.添加下列参数到/etc/security/limits.conf

echo "
oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728
" >> /etc/security/limits.conf

6.添加下列条目到/etc/pam.d/login

echo "session required pam_limits.so" >>/etc/pam.d/login

在两个节点修改/etc/security/limits.d/20-nproc.conf

sed -i 's/*          soft    nproc     4096/#*          soft    nproc     4096/g' /etc/security/limits.d/20-nproc.conf
echo "*   -   nproc   16384" >>/etc/security/limits.d/20-nproc.conf
cat /etc/security/limits.d/20-nproc.conf

停止avahi-daemon服务
两个节点分别操作

systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon.service
ps -ef|grep avahi-daemon
killall avahi-daemon

添加NOZEROCONF=yes参数至/etc/sysconfig/network

echo "NOZEROCONF=yes" >>/etc/sysconfig/network
cat /etc/sysconfig/network

禁用透明大页

oracle官方建议关闭透明大页

修改grub文件

cp /etc/default/grub /etc/default/grub.bak

增加一行transparent_hugepage=never到尾部

echo 'GRUB_CMDLINE_LINUX="transparent_hugepage=never"' >>  /etc/default/grub

执行命令

grub2-mkconfig -o /boot/grub2/grub.cfg

4不重启生效

echo never > /sys/kernel/mm/transparent_hugepage/enabled

查看是否禁用透明大页

cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

grep AnonHugePages /proc/meminfo

AnonHugePages: 0 kB---------->>>返回值若是零,代表成功禁用THP

9.配置用户的环境变量

echo '
if [ $USER = "oracle" ]; then
   if [ $SHELL = "/bin/ksh" ]; then
      ulimit -p 16384
      ulimit -n 65536
      else
      ulimit -u 16384 -n 65536
   fi
fi' >> /etc/profile
source /etc/profile

节点1 oracle配置环境变量

echo '
export PS1="[`whoami`@`hostname`:"'$PWD]$'
export EDITOR=vi
export TMP=/tmp 
export LANG=en_US 
export TMPDIR=$TMP
export ORACLE_SID=orcl1
export ORACLE_TERM=xterm
export THREADS_FLAG=native
export ORACLE_BASE=/home/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1
export INVENTORY_LOCATION=/home/u01/app/oraInventory 
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:$PATH:$HOME/bin
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' >>/home/oracle/.bash_profile

image

  1. 创建新的集群

image

  1. 配置集群名称以及 scan 名称

image

  1. 节点互信

image

  1. 公网、私网网段选择

image

  1. 选择 asm 存储

image

  1. 选择配置 GIMR

image

  1. 这里选择 ocr、voting file 与 gimr 放在一起

image

  1. 选择 asm 磁盘组

image

  1. 输入密码

image

  1. 保持默认

image

  1. 保持默认

image

image

  1. 确认 base 目录

image

image

  1. 这里可以选择自动 root 执行脚本

image

  1. 预安装检查

image

  1. 解决相关依赖后,忽略如下报错

image

  1. 如下警告可以忽略-警告是由于没有使用 DNS 解析造成可忽略

image

  1. 执行 root 脚本

image

image

image

image

image

image

image

image

3.5 查看状态

image

image

image

4 以 Oracle 用户登录图形化界面

将数据库软件解压至$ORACLE_HOME 安装 Oracle 数据库软件

image

4.1 执行安装

image

image

image

image

image

image

image

预安装前检查忽略如下警告

image

image

4.2 执行 t root 脚本

image

image

5 创建 ASM 数据磁盘

5.1 grid 账户登录图形化界面,执行 asmca

image

image

image

image

image

image

6 建立数据库

以 Oracle 账户登录。

6.1. 执行建库 dbca

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

6.2 查看集群状态

image

image

image

image

image

6.3 查看数据库版本

image

DG环境部署

参数类型 Primary Standby
db version 19.3.0 19.3.0
host ip 192.168.8.20 rac01 192.168.8.21 rac02 scan 192.168.8.24 192.168.8.24 192.168.8.27
db_name orcl orcl orcl
db_unique_name orcl orcl
instance_name orcl orcl
RAC关闭数据库
[oracle@rac1:/home/oracle]$sqlplus / as sysdba

SQL> shutdown immediate
修改rac01强制归档以及开启归档模式
[oracle@rac1:/home/oracle]$sqlplus / as sysdba
SQL> startup mount;
SQL> alter system set log_archive_dest_1='location=+DATA/arch' scope=spfile;

System altered.

SQL> alter database archivelog; 

Database altered.

SQL>alter database force logging;

Database altered.


rac01开启数据库
SQL> alter database open;

rac02开启数据库
SQL>startup
修改主库初始化参数

查看主库所有文件路径备用

select name from v$datafile 
union 
select name from v$controlfile 
union 
select member from v$logfile 
union 
select name from v$tempfile 
union 
select value from v$parameter where name='spfile';
当主库已开启force logging之后再进行如下操作
alter database force logging;
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,std)' scope=both sid='*';         
alter system set log_archive_dest_1='LOCATION=+DATA/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl' scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_2='SERVICE=std LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=std' scope=both sid='*';
alter system set fal_client='orcl' scope=both sid='*';    
alter system set FAL_SERVER='std' scope=both sid='*';  
alter system set standby_file_management=AUTO scope=both sid='*';
alter  system set db_file_name_convert='+DATA/ORCL/86B637B62FE07A65E053F706E80A27CA/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28BEF60DF905442E0531408A8C07AA6/TEMPFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28C1D85392E6600E0531408A8C0E40A/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28C1D85392E6600E0531408A8C0E40A/TEMPFILE/','/home/u01/app/oracle/oradata/std/tempfile/','+DATA/ORCL/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/TEMPFILE/','/home/u01/app/oracle/oradata/std/tempfile/' scope=spfile;
alter system set log_file_name_convert='+DATA/ORCL/ONLINELOG/','/home/u01/app/oracle/oradata/orcl/onlinelog'  scope=spfile;
alter system set log_archive_format='%t_%s_%r.arc' scope=spfile sid='*';
alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile;
alter system set PARALLEL_EXECUTION_MESSAGE_SIZE=8192 scope=spfile;
重启数据库
cd /home/u01/app/19.3.0/grid/bin/
./crsctl check cluster -all
./crsctl stop cluster -all
./crsctl start cluster -all
./crsctl check cluster -all
主库增加Standby redo log

如果2节点RAC主库每个thread redo log有N组,standby redo log则需要(N+1)*2组。
主库查询redo 日志组数,有2个thread,每个thread有2组日志,standby则需要6组

SQL> select group#,thread#,members,status from v$log;
GROUP#    THREAD#    MEMBERS STATUS

     1          1          1 INACTIVE
     2          1          1 CURRENT
     3          2          1 INACTIVE
     4          2          1 CURRENT
主库增加standby日志组:
alter database add standby logfile thread 1 group 5  '+DATA/' size 200m;
alter database add standby logfile thread 1 group 6  '+DATA/' size 200m;
alter database add standby logfile thread 1 group 7  '+DATA/' size 200m;
alter database add standby logfile thread 2 group 8  '+DATA/' size 200m;
alter database add standby logfile thread 2 group 9  '+DATA/' size 200m;
alter database add standby logfile thread 2 group 10 '+DATA/' size 200m;
确认主库加的standby日志是否已创建
SQL> select group#,thread# from v$standby_log;

SQL> select * from v$standby_log;

GROUP#    THREAD#

     5          1
     6          1
     7          1
     8          2
     9          2
    10          2

在rac两个实例以及备库监听

sqlnet.ora不添加NAMES.DIRECTORY_PATH,rman无法登录,修改sqlnet后密码会失效,需要重置密码

[oracle@rac01:/home/oracle]$ cat /home/u01/app/oracle/product/19.3.0/db_1/network/admin/sqlnet.ora

# sqlnet.ora Network Configuration File: /home/u01/app/oracle/product/19.3.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

#SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /home/u01/app/oracle
tnsnames.ora增加备库时,需要增加(UR=A),不然nomount状态无法连接

[oracle@rac01:/home/oracle]$ cat /home/u01/app/oracle/product/19.3.0/db_1/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /home/u01/app/oracle/product/19.3.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.22)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.68.8.23)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.68.8.24)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

std =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.27)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = std)
      (UR=A)
    )
  )
listener.ora静态注册

[oracle@centos7-dg:/home/oinstall]cat /home/u01/app/oracle/product/19.3.0/db_1/network/admin/listener.ora

# listener.ora Network Configuration File: /home/u01/app/oracle//product/19.3.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

 SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /home/u01/app/oracle/product/19.3.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (SID_NAME = orcl)
      (ORACLE_HOME = /home/u01/app/oracle/product/19.3.0/db_1)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.27)(PORT = 1521))
    )
  )
rac01修改tnsnames.roa

[root@rac01:/home/oracle]$ cat /home/u01/app/oracle/product/19.3.0/db_1/network/admin/tnsnames.ora

# tnsnames.ora Network Configuration File: /home/u01/app/oracle/product/19.3.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.22)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.68.8.23)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.68.8.24)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

std =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.27)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = std)
      (UR=A)
    )
  )

重启监听服务

lsnrctl stop&&lsnrctl start
修改oracle密码(改动监听后导致的诡异问题,密码错误,修改密码后正常)
SQL> alter user sys identified by oracle;

SQL> alter user system identified by oracle;

查看密码所有目录

SQL> select * from v$passwordfile_info;

在主库上生成用于备库的参数文件

SQL> create pfile='/home/oracle/pfile.ora' from spfile;

将主库的参数文件,密码文件拷贝到备库

[root@rac02:/home/u01/app]$ su - grid
上一次登录:二 5月 18 06:54:27 CST 2021pts/0 上
[grid@rac02:/home/grid]$ asmcmd cp +DATA/ORCL/PASSWORD/pwdorcl.* /home/grid/
copying +DATA/ORCL/PASSWORD/pwdorcl.256.1072838099 -> /home/grid/pwdorcl

[grid@rac02:/home/grid]$ scp /home/grid/pwdorcl oracle@192.168.8.27:/home/u01/app/oracle/product/19.3.0/db_1/dbs/orapworcl

[oracle@rac02:/home/grid]$ scp /home/oracle/pfile.ora oracle@192.168.8.27:/home/u01/app/oracle/product/19.3.0/db_1/dbs/

7、 创建备库的归档目录以及各个数据文件目录

mkdir -p /home/u01/app/oracle/oradata/orcl/onlinelog
mkdir -p /home/u01/app/oracle/oradata/std/tempfile
mkdir -p /home/u01/app/oracle/oradata/std/controlfile
mkdir -p /home/u01/app/oracle/oradata/std/pdbseed
mkdir -p /home/u01/app/oracle/product/19.3.0/db_1/dbs

mkdir -p /home/u01/arch
mkdir -p /home/u01/app/oracle/oradata/std/datafile
mkdir -p /home/u01/app/oracle/admin/std/adump
mkdir -p /home/u01/app/oracle/oradata/std/onlinelog

修改主库传过来的pfile,生成备库pfile

[oracle@std:/u01/app/oracle/product/18.3.0/db_1/dbs]$vi initstd.ora

*.audit_file_dest='/home/u01/app/oracle/admin/orcl/adump'
*.audit_trail='none'
*.compatible='19.0.0'
*.control_files='/home/u01/app/oracle/oradata/std/controlfile/control01.ctl','/home/u01/app/oracle/oradata/std/controlfile/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_file_name_convert='+DATA/ORCL/86B637B62FE07A65E053F706E80A27CA/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28BEF60DF905442E0531408A8C07AA6/TEMPFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28C1D85392E6600E0531408A8C0E40A/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/C28C1D85392E6600E0531408A8C0E40A/TEMPFILE/','/home/u01/app/oracle/oradata/std/tempfile/','+DATA/ORCL/DATAFILE/','/home/u01/app/oracle/oradata/std/pdbseed/','+DATA/ORCL/TEMPFILE/','/home/u01/app/oracle/oradata/std/tempfile/'
*.db_name='ORCL'#Reset to original value by RMAN
*.db_unique_name='std'
*.diagnostic_dest='/home/u01/app/oracle'
*.enable_pluggable_database=true
*.fal_client='std'
*.fal_server='orcl'
*.log_archive_config='DG_CONFIG=(ORCL,STD)'
*.log_archive_dest_1='LOCATION=/home/u01/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STD'
*.log_archive_dest_2='SERVICE=orcl LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL'
*.log_file_name_convert='+DATA/ORCL/ONLINELOG/','/home/u01/app/oracle/oradata/orcl/onlinelog'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=410m
*.processes=320
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1638m
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

9、 启动备库数据库到nomount状态

SQL> startup nomount;

开始DG搭建恢复数据库

恢复数据库方法一、DUPLICATE

[oracle@centos7-dg:/home/oinstall] rman target sys/oracle@orcl auxiliary sys/oracle

Recovery Manager: Release 19.0.0.0.0 - Production on Tue May 18 15:35:16 2021
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ORCL (DBID=1600618991)
connected to auxiliary database: ORCL (not mounted)

RMAN>

执行脚本
run
{ 
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate AUXILIARY channel c7 type disk;
allocate AUXILIARY channel c8 type disk;
allocate AUXILIARY channel c9 type disk;
allocate AUXILIARY channel c10 type disk;
allocate AUXILIARY channel c11 type disk;
allocate AUXILIARY channel c12 type disk;
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER;
release channel c1;
release channel c2;
release channel c3;
release channel c4;
release channel c5;
release channel c6;
release channel c7;
release channel c8;
release channel c9;
release channel c10;
release channel c11;
release channel c12;
}

主库

[oracle@rac01:/]$ sqlplus / as sysdba

SQL> ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY SID='*';

备库

[oracle@centos7-dg:/home/oinstall]sqlplus / as sysdba

SQL> alter database recover managed standby database cancel;

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

恢复方法二

sh E-OBAR_BackupByScn.sh 0 orcl1 /home/oinstall/backup 7 10 1

scp -r /home/oinstall/backup 192.168.8.27:/home/oinstall/

sh ../../tools/PROD/E-OBAR_RmanInitStandbyDB.sh 2737722 /home/oinstall/backup/20210519003039_orcl1_L0 1600618991 1 orcl


posted @ 2025-06-01 12:14  刘文江  阅读(102)  评论(0)    收藏  举报