一、背景
在近期的项目推进过程中,我们计划采用Oracle19c RAC数据库。为确保项目落地阶段的高效实施,同时沉淀标准化安装经验,特在本地虚拟机环境中开展全流程模拟搭建工作。本文将详细记录从环境准备、集群配置到数据库实例部署的完整过程,期望通过技术实践分享,为朋友们提供帮助。
声明:本文中的ip都是本地虚拟机中设置的ip,不涉及生产,如有雷同纯属巧合!
二、安装前规划
网络规划
| 主机名 | public ip | vip ip | private ip | scan ip | scan name |
|---|---|---|---|---|---|
| node1 | 192.*.*.60 | 192.*.*.70 | 10.*.*.11 | 192.*.*.75 | orclscan |
| node2 | 192.*.*.62 | 192.*.*.72 | 10.*.*.12 | 192.*.*.75 | orclscan |
三、主机配置
本次使用Centos7.9操作系统,安装操作系统过程略。
共享存储配置(node1 & node2)
windows主机上创建共享磁盘目录:

添加共享磁盘:
在node1节点操作:
添加一个大小5G的磁盘作为asm-ocr






同样的方法,再添加一个大小20G的磁盘作为asm-data

为了防止共享盘独占,需要找到node1节点的vmx文件,如下图:

编辑node1节点的vmx文件,在最后加入:
scsi1.sharedBus= "virtual"
disk.locking= "false"
diskLib.dataCacheMaxSize= "0"
diskLib.dataCacheMaxReadAheadSize= "0"
diskLib.DataCacheMinReadAheadSize= "0"
diskLib.dataCachePageSize= "4096"
diskLib.maxUnsyncedWrites= "0"
在node2节点操作:


同样的操作方式,在node2节点加入asm-data盘!
同样,编辑node2节点的vmx文件,在最后加入:
scsi1.sharedBus= "virtual"
disk.locking= "false"
diskLib.dataCacheMaxSize= "0"
diskLib.dataCacheMaxReadAheadSize= "0"
diskLib.DataCacheMinReadAheadSize= "0"
diskLib.dataCachePageSize= "4096"
diskLib.maxUnsyncedWrites= "0"
多路径配置(node1 & node2)
安装 multipath 绑定多路径
#安装并配置multipath
yum install -y device-mapper*
mpathconf --enable --with_multipathd y
#列出所有可用块设备的信息
lsblk
#查看共享盘的scsi_id
/usr/lib/udev/scsi_id -g -u /dev/sdc
/usr/lib/udev/scsi_id -g -u /dev/sdd

配置 multipath 文件:
cat >/etc/multipath.conf<<EOF
defaults {
user_friendly_names yes
}
blacklist {
devnode "^sd[a-b]"
}
multipaths {
multipath {
wwid "36000c2926584a8045c9a2948e879401e"
alias asm_ocr
}
multipath {
wwid "36000c29dea988329e85ed6319586de9a"
alias asm_data
}
}
EOF
注意:wwid的值为上面获取的scsi_id,alias可自定义,这里配置1块OCR盘,1块DATA盘!
激活multipath多路径
#删除现有路径
multipath -F
#格式化路径
multipath -v2
#查看多路径
multipath -ll


配置UDEV绑盘
rm -rf /dev/mapper/udev_info
rm -rf /etc/udev/rules.d/99-oracle-asmdevices.rules
cd /dev/mapper
for i in asm_*; do
printf "%s %s\n" "$i" "$(udevadm info --query=all --name=/dev/mapper/"$i" | grep -i dm_uuid)" >>/dev/mapper/udev_info
done
while read -r line; do
dm_uuid=$(echo "$line" | awk -F'=' '{print $2}')
disk_name=$(echo "$line" | awk '{print $1}')
echo "KERNEL==\"dm-*\",ENV{DM_UUID}==\"${dm_uuid}\",SYMLINK+=\"${disk_name}\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\"" >>/etc/udev/rules.d/99-oracle-asmdevices.rules
done </dev/mapper/udev_info
##重载udev
udevadm control --reload-rules
udevadm trigger --type=devices
ll /dev/asm*

注意: 这里由于没有创建 grid 用户,因此权限和组是 root,等创建 grid 用户后,再次重载 udev 即可!
确认配置完成后,分别在两个节点输入命令 ls /dev/asm* 查看是否已经成功绑定!
node2节点操作方式同node1节点。
网络配置(node1 & node2)
启动node1节点,登录node1节点:
#查看网卡编号
[root@node1 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.*.*.60 netmask 255.255.255.0 broadcast 192.*.*.255
inet6 fe80::278c:4ef0:51a0:76ee prefixlen 64 scopeid 0x20<link>
ether 00:50:56:21:a1:ea txqueuelen 1000 (Ethernet)
RX packets 479 bytes 44375 (43.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 282 bytes 41455 (40.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.31.237 netmask 255.255.255.0 broadcast 192.168.31.255
inet6 fe80::c7aa:dbf3:238c:425a prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:6c:e4:8a txqueuelen 1000 (Ethernet)
RX packets 2403 bytes 150121 (146.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 76 bytes 10497 (10.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 108 bytes 9180 (8.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 108 bytes 9180 (8.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:30:a4:a4 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@node1 ~]# nmcli connection show
NAME UUID TYPE DEVICE
Wired connection 1 3a14e728-e688-3735-a3a6-56686811ecc7 ethernet ens36
ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33
virbr0 9ca1ac9f-e875-4c43-bd54-cd2dd817b13b bridge virbr0
可以看到,ens36网卡并没有激活,并且有多余的'Wired connection 1'连接。
#删除'Wired connection 1'
[root@node1 ~]# nmcli connection delete 'Wired connection 1'
Connection 'Wired connection 1' (3a14e728-e688-3735-a3a6-56686811ecc7) successfully deleted.
[root@node1 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33
virbr0 9ca1ac9f-e875-4c43-bd54-cd2dd817b13b bridge virbr0
#添加ens36网卡
[root@node1 ~]# nmcli connection add con-name ens36 type ethernet ifname ens36
Connection 'ens36' (0a0dc267-5cbe-4dd2-a1ef-c1aa6cf3e52b) successfully added.
[root@node1 ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33
ens36 0a0dc267-5cbe-4dd2-a1ef-c1aa6cf3e52b ethernet ens36
virbr0 9ca1ac9f-e875-4c43-bd54-cd2dd817b13b bridge virbr0
可以看到,ens36网卡已经成功激活。
启动node2节点,node2节点操作方式同node1节点。
node1节点使用nmcli配置Public IP、Private IP:
#配置Public IP
nmcli connection modify ens33 ipv4.addresses 192.*.*.60/24 ipv4.gateway 192.*.*.2 ipv4.method manual autoconnect yes
#配置Private IP
nmcli connection modify ens36 ipv4.addresses 10.*.*.11/24 ipv4.method manual autoconnect yes
#生效
nmcli connection up ens33
nmcli connection up ens36
nmcli connection show
node2节点使用nmcli配置Public IP、Private IP:
#配置Public IP
nmcli connection modify ens33 ipv4.addresses 192.*.*.62/24 ipv4.gateway 192.*.*.2 ipv4.method manual autoconnect yes
#配置Private IP
nmcli connection modify ens36 ipv4.addresses 10.*.*.12/24 ipv4.method manual autoconnect yes
#生效
nmcli connection up ens33
nmcli connection up ens36
nmcli connection show
挂载iso镜像(node1 & node2)
mount /dev/cdrom /mnt

配置yum源
cd /etc/yum.repos.d/
mkdir old
mv *.repo old/
cat >>/etc/yum.repos.d/local.repo<<EOF
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1
EOF
yum repolist all

安装依赖包(node1 & node2)
yum install -y bc \ binutils \ compat-libcap1 \ compat-libstdc++-33 \ elfutils-libelf \ elfutils-libelf-devel \ fontconfig-devel \ glibc \ glibc-devel \ ksh \ libaio \ libaio-devel \ libXrender \ libXrender-devel \ libX11 \ libXau \ libXi \ libXtst \ libgcc \ libstdc++ \ libstdc++-devel \ libxcb \ make \ policycoreutils \ policycoreutils-python \ smartmontools \ sysstat \ unzip \ psmisc \ xorg-x11-xauth \ net-tools \ nfs-utils \ gcc \ gcc-c++
系统安装盘里面没有compat-libstdc++-33包,需要提前下载并安装:
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

检查依赖包安装情况
rpm -q bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libXrender-devel libX11 libXau libXi libXtst libgcc libstdc++ libstdc++-devel libxcb make policycoreutils policycoreutils-python smartmontools sysstat unzip psmisc xorg-x11-xauth net-tools nfs-utils gcc gcc-c++ | grep "not installed"

/etc/hosts配置(node1 & node2)
cat >>/etc/hosts<<EOF
#Public IP
192.*.*.60 node1
192.*.*.62 node2
#Private IP
10.*.*.11 node1-priv
10.*.*.12 node2-priv
#Vip IP
192.*.*.70 node1-vip
192.*.*.72 node2-vip
#Scan IP
192.*.*.75 orclscan
EOF
检查目录大小
df -h

检查内存和SWAP大小
free -h

关闭透明大页和numa(node1 & node2)
1、查看透明大页是否关闭(always 表示启用,never 表示禁用):
cat /sys/kernel/mm/transparent_hugepage/enabled
2、修改 grub 配置文件添加"transparent_hugepage=never numa=off":
vi /etc/default/grub
在GRUB_CMDLINE_LINUX…行最后添加transparent_hugepage=never
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet transparent_hugepage=never numa=off"
GRUB_DISABLE_RECOVERY="true"
3、重新生成grub文件
当节点使用UEFI安装和启动时,使用如下命令:
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
当节点使用传统BIOS安装和启动时,使用如下命令:
# grub2-mkconfig -o /boot/grub2/grub.cfg
4、重启节点生效,重启后检查透明大页和numa是否生效,使用如下命令:
cat /sys/kernel/mm/transparent_hugepage/enabled
lscpu | grep -i numa
sysctl -a | grep numa
kernel.numa_balancing = 0
关闭防火墙(node1 & node2)
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
getenforce
检查 OS 时区(node1 & node2)
timedatectl status
# 如果时区不正确,使用下面命令修改:
# timedatectl set-timezone "Asia/Shanghai"

禁用chronyd(node1 & node2)
systemctl stop chronyd.service
systemctl disable chronyd.service
配置NTP时间同步
只在node2节点执行,和node1节点同步,生产系统中需要和时间服务器同步:
yum install -y ntpdate
##192.*.*.60为时间服务器IP,每天12点同步系统时间
cat >>/var/spool/cron/root<<EOF
00 12 * * * /usr/sbin/ntpdate -u 192.*.*.60 && /usr/sbin/hwclock -w
EOF
#查看计划任务
crontab -l
##手动执行
/usr/sbin/ntpdate -u 192.*.*.60 && /usr/sbin/hwclock -w
#禁用avahi-daemon
avahi-daemon 会导致 RAC 的节点重启。
systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.socket
systemctl disable avahi-daemon.service
系统参数配置(node1 & node2)
memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
totalMemory=$((memTotal / 2048))
shmall=$((memTotal / 4))
if [ $shmall -lt 2097152 ]; then
shmall=2097152
fi
shmmax=$((memTotal * 1024 - 1))
if [ "$shmmax" -lt 4294967295 ]; then
shmmax=4294967295
fi
cat >>/etc/sysctl.conf<<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = $shmall
kernel.shmmax = $shmmax
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
net.ipv4.conf.ens33.rp_filter = 1
net.ipv4.conf.ens36.rp_filter = 2
EOF
注意:ens33和ens36要根据实际环境替换。
参数生效:
sysctl -p
系统资源限制配置(node1 & node2)
配置limits.conf:
cat >>/etc/security/limits.conf<<EOF
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft nproc 2047
oracle hard nproc 16384
oracle hard memlock 134217728
oracle soft memlock 134217728
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
grid soft nproc 2047
grid hard nproc 16384
EOF
配置pam.d/login:
cat >>/etc/pam.d/login <<EOF
session required pam_limits.so
session required /lib64/security/pam_limits.so
EOF
用户及组、目录创建(node1 & node2)
创建安装 Oracle 数据库所需的用户、组以及安装目录。
创建组:
/usr/sbin/groupadd -g 54321 oinstall /usr/sbin/groupadd -g 54322 dba /usr/sbin/groupadd -g 54323 oper /usr/sbin/groupadd -g 54324 backupdba /usr/sbin/groupadd -g 54325 dgdba /usr/sbin/groupadd -g 54326 kmdba /usr/sbin/groupadd -g 54327 asmdba /usr/sbin/groupadd -g 54328 asmoper /usr/sbin/groupadd -g 54329 asmadmin /usr/sbin/groupadd -g 54330 racdba
创建用户:
/usr/sbin/useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,dba,racdba,oper grid
/usr/sbin/useradd -u 54321 -g oinstall -G asmdba,dba,backupdba,dgdba,kmdba,racdba,oper oracle
##修改用户密码为oracle
echo "oracle" |passwd oracle --stdin
echo "oracle" |passwd grid --stdin
##查看用户组
id grid
id oracle
##重载udev
udevadm control --reload-rules
udevadm trigger --type=devices
ll /dev/asm*
ll /dev/dm*

可以看到,绑盘权限已经变成 grid 了!
创建软件目录:
mkdir -p /data/app/19.3.0/grid mkdir -p /data/app/grid mkdir -p /data/app/oracle/product/19.3.0/db mkdir -p /data/app/oraInventory mkdir -p /backup mkdir -p /home/oracle/scripts chown -R oracle:oinstall /backup chown -R oracle:oinstall /home/oracle/scripts chown -R grid:oinstall /data chown -R grid:oinstall /data/app/grid chown -R grid:oinstall /data/app/19.3.0/grid chown -R grid:oinstall /data/app/oraInventory chown -R oracle:oinstall /data/app/oracle chmod -R 775 /data
环境变量配置(node1 & node2)
grid用户环境变量:
cat >>/home/grid/.bash_profile<<EOF
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/data/app/grid
export ORACLE_HOME=/data/app/19.3.0/grid
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=+ASM1
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sas='sqlplus / as sysasm'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
EOF
注意: 每个节点的 ORACLE_SID 不一样(+ASM1/+ASM2),需要自行修改!
oracle用户环境变量:
cat >>/home/oracle/.bash_profile<<EOF
umask 022
export TMP=/tmp
export TMPDIR=\$TMP
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export ORACLE_BASE=/data/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19.3.0/db
export ORACLE_HOSTNAME=node1
export ORACLE_TERM=xterm
export TNS_ADMIN=\$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export ORACLE_SID=orcl1
export PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATH
alias sas='sqlplus / as sysdba'
export PS1="[\`whoami\`@\`hostname\`:"'\$PWD]\$ '
EOF
注意: 每个节点的 ORACLE_HOSTNAME(node1/node2) 和 ORACLE_SID(orcl1/orcl2)不一样,需要自行修改!
安装介质上传并解压(node1)
安装包上传至node1节点 /soft 目录:
#创建安装介质存放目录
mkdir /soft
#上传安装介质到/soft目录
LINUX.X64_193000_db_home.zip
LINUX.X64_193000_grid_home.zip
p37257886_190000_Linux-x86-64.zip
p6880880_190000_Linux-x86-64.zip
注意: 19C 的安装包需要解压到对应的 ORACLE_HOME 目录下!
静默解压grid安装包:
chown -R grid:oinstall /soft
su - grid -c "unzip -q /soft/LINUX.X64_193000_grid_home.zip -d /data/app/19.3.0/grid/"
静默解压oracle安装包:
chown -R oracle:oinstall /soft
su - oracle -c "unzip -q /soft/LINUX.X64_193000_db_home.zip -d /data/app/oracle/product/19.3.0/db/"
静默解压补丁安装包:
cd /soft
##解压RU补丁包和OPatch补丁包
chown -R grid:oinstall /soft
su - grid -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /data/app/19.3.0/grid"
su - grid -c "unzip -q /soft/p37257886_190000_Linux-x86-64.zip -d /soft"
chown -R oracle:oinstall /soft
su - oracle -c "unzip -q -o /soft/p6880880_190000_Linux-x86-64.zip -d /data/app/oracle/product/19.3.0/db"
注意: 由于19C支持安装grid软件前打RU补丁,因此提前解压OPatch和RU补丁,为安装做准备!
root用户下,cvuqdisk安装(node1 & node2):
cd /data/app/19.3.0/grid/cv/rpm
rpm -ivh cvuqdisk-1.0.10-1.rpm

#传输到node2,安装
scp cvuqdisk-1.0.10-1.rpm node2:/soft
rpm -ivh /soft/cvuqdisk-1.0.10-1.rpm
配置grid用户ssh互信(node1)
su - grid
$ORACLE_HOME/oui/prov/resources/scripts/sshUserSetup.sh -user grid -hosts "node1 node2" -advanced -noPromptPassphrase
配置oracle用户ssh互信(node1)
su - grid
$ORACLE_HOME/oui/prov/resources/scripts/sshUserSetup.sh -user oracle -hosts "node1 node2" -advanced -noPromptPassphrase
所有配置都完成后,重启虚拟机。此时可以保存虚拟机快照,以防安装过程中出错!
四、安装grid软件(node1)+ RU
su - grid
cd $ORACLE_HOME
export DISPLAY=192.*.*.15:0.0 #这个根据本地实际情况进行配置
./gridSetup.sh -applyRU /soft/37257886

执行安装程序开始安装,通过-applyRU参数指向RU补丁解压位置,提前安装grid补丁。
./gridSetup.sh -applyRU /soft/37257886
这里首先进行的是补丁升级,然后再启动安装界面


填写集群名称和scan名字,scan名字和/etc/hosts一致

添加node2节点信息,进行互信


确保对应网卡和IP网段对应即可,19C心跳网段需要选ASM & Private,用于ASM实例的托管

选择ASM

不安装GIMR

修改路径,只有1块OCR盘,选择external

设置 sys/system 密码

不使用IPMI

不注册EM










root用户下,按顺序执行脚本:
#node1节点执行
/data/app/oraInventory/orainstRoot.sh
#node2节点执行
/data/app/oraInventory/orainstRoot.sh
#node1节点执行
/data/app/19.3.0/grid/root.sh
#node2节点执行
/data/app/19.3.0/grid/root.sh




安装继续:

这个报错可以忽略!
安装完成:

检查集群状态:
su - grid
crsctl stat res -t

检查 grid 补丁:
su - grid opatch lspatches sqlplus -v

五、创建ASM数据盘
asmca



检查 asm 磁盘:
asmcmd lsdg

建议重启两台主机,检查重启后 Grid 集群是否正常运行!
六、安装oracle软件(node1)+ RU
chown -R oracle:oinstall /soft
#root用户下切换到oracle用户
su - oracle
export DISPLAY=192.*.*.15:0.0
#进入ORACLE_HOME目录
cd $ORACLE_HOME
#检查opatch版本
opatch version
##执行安装程序开始安装
./runInstaller -applyRU /soft/37257886/


注意: 可以看到,已经开始对 ORACLE_HOME 进行补丁安装!
补丁打完,进入安装界面,选择仅安装 Oracle 软件:

选择集群模式:

选择节点,设置ssh互信:


选择企业版:





开始安装:


root 用户下,两个节点顺序执行 root.sh:
#节点1执行
/data/app/oracle/product/19.3.0/db/root.sh
#节点2执行
/data/app/oracle/product/19.3.0/db/root.sh


安装完成:

检查补丁版本:
su - oracle opatch lspatches sqlplus -version

至此,Oracle 软件已成功安装!
七、建库
dbca


选择Advanced configuration:


选择节点:

填写实例名 orcl;选择安装 CDB 模式,不创建PDB:

默认即可,使用 OMF 模式:

不开闪回,不开归档,可以建完实例后再配置:


配置内存,使用 ASMM 模式:

配置Processes:

配置字符集:


指定密码:


安装预检查,DNS 相关忽略:

安装汇总信息:

经过漫长的等待,建库结束了!

检查数据库实例信息:


至此,数据库创建完成!
设置数据库归档
1、开启归档模式
#关闭数据库实例
srvctl stop database -d orcl
#启动单个节点到mount模式
srvctl start instance -d orcl -i orcl1 -o mount
#开启归档
sqlplus / as sysdba
alter database archivelog;
#设置归档路径
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=+DATA';
exit;
##重启数据库实例
srvctl stop instance -d orcl -i orcl1
srvctl start database -d orcl
##检查归档
sqlplus / as sysdba
archive log list

2、配置定期删除归档计划任务
##进入oracle用户
su - oracle
mkdir -p /home/oracle/scripts/
##写入脚本
{
echo '#!/bin/bash'
echo 'source ~/.bash_profile'
echo 'deltime=`date +"20%y%m%d%H%M%S"`'
echo "rman target / nocatalog msglog /home/oracle/scripts/del_arch_\${deltime}.log<<EOF"
echo 'crosscheck archivelog all;'
echo "delete noprompt archivelog until time 'sysdate-7';"
echo "delete noprompt force archivelog until time 'SYSDATE-10';"
echo 'EOF'
} >>/home/oracle/scripts/del_arch.sh
chmod +x /home/oracle/scripts/del_arch.sh
切换到 oracle 用户写入计划任务:
cat >>/var/spool/cron/oracle<<EOF
12 00 * * * /home/oracle/scripts/del_arch.sh
EOF
##手动执行测试
su - oracle
/home/oracle/scripts/del_arch.sh
配置数据库开机自启
##查看数据库是否随机器启动自动启动
## root用户执行
/data/app/19.3.0/grid/bin/crsctl status resource ora.orcl.db -p|grep AUTO_START
##查看crs是否随机器启动自动启动
##cat /etc/oracle/scls_scr/<node_name>/root/ohasdstr
cat /etc/oracle/scls_scr/node1/root/ohasdstr
或者使用下面命令查看crs是否随机器启动自动启动
crsctl query crs autostart

配置数据库实例随集群服务自启动:
#root用户下执行
/data/app/19.3.0/grid/bin/crsctl modify resource "ora.orcl.db" -attr "AUTO_START=always" -unsupported
重启主机,测试集群都正常,至此,安装工作结束。
八、启动和关闭RAC
/data/app/19.3.0/grid/bin/crsctl stop cluster -all /data/app/19.3.0/grid/bin/crsctl start cluster -all
其他命令:
-关闭\启动单个实例 $ srvctl stop\start instance -d orcl -i orcl1 --关闭\启动所有实例 $ srvctl stop\start database -d orcl --关闭\启动CRS $ crsctl stop\start crs --关闭\启动集群服务 $ crsctl stop\start cluster -all crsctl start\stop crs 是单节管理 crsctl start\stop cluster [-all 所有节点] 可以管理多个节点 crsctl start\stop crs 管理crs 包含进程 OHASD crsctl start\stop cluster 不包含OHASD进程 要先启动 OHASD进程才可以使用 srvctl stop\start database 启动\停止所有实例及其启用的服务
九、碰到的问题
1、/usr/lib/udev/scsi_id -g -u /dev/sdc 命令获取不到设备的UUID信息。
解决办法:
打开虚拟机的vmx文件,加入下面内容,并重启虚拟机:
disk.EnableUUID = "TRUE"
2、安装grid软件,执行root.sh报错:CLSRSC-184: Configuration of ASM failed ,CLSRSC-258: Failed to configure and start ASM
[root@node1 ~]# /data/app/19.3.0/grid/root.sh
Performing root user operation.
The following environment variables are set as:
ORACLE_OWNER= grid
ORACLE_HOME= /data/app/19.3.0/grid
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Relinking oracle with rac_on option
Using configuration parameter file: /data/app/19.3.0/grid/crs/install/crsconfig_params
The log of current session can be found at:
/data/app/grid/crsdata/node1/crsconfig/rootcrs_node1_2025-05-12_02-05-11AM.log
2025/05/12 02:05:20 CLSRSC-594: Executing installation step 1 of 19: 'ValidateEnv'.
2025/05/12 02:05:20 CLSRSC-594: Executing installation step 2 of 19: 'CheckFirstNode'.
2025/05/12 02:05:23 CLSRSC-594: Executing installation step 3 of 19: 'GenSiteGUIDs'.
2025/05/12 02:05:25 CLSRSC-594: Executing installation step 4 of 19: 'SetupOSD'.
Redirecting to /bin/systemctl restart rsyslog.service
2025/05/12 02:05:25 CLSRSC-594: Executing installation step 5 of 19: 'CheckCRSConfig'.
2025/05/12 02:05:25 CLSRSC-594: Executing installation step 6 of 19: 'SetupLocalGPNP'.
2025/05/12 02:05:42 CLSRSC-594: Executing installation step 7 of 19: 'CreateRootCert'.
2025/05/12 02:05:49 CLSRSC-594: Executing installation step 8 of 19: 'ConfigOLR'.
2025/05/12 02:06:05 CLSRSC-594: Executing installation step 9 of 19: 'ConfigCHMOS'.
2025/05/12 02:06:05 CLSRSC-594: Executing installation step 10 of 19: 'CreateOHASD'.
2025/05/12 02:06:12 CLSRSC-594: Executing installation step 11 of 19: 'ConfigOHASD'.
2025/05/12 02:06:12 CLSRSC-330: Adding Clusterware entries to file 'oracle-ohasd.service'
2025/05/12 02:06:40 CLSRSC-594: Executing installation step 12 of 19: 'SetupTFA'.
2025/05/12 02:06:40 CLSRSC-594: Executing installation step 13 of 19: 'InstallAFD'.
2025/05/12 02:06:40 CLSRSC-594: Executing installation step 14 of 19: 'InstallACFS'.
2025/05/12 02:06:50 CLSRSC-594: Executing installation step 15 of 19: 'InstallKA'.
2025/05/12 02:06:59 CLSRSC-594: Executing installation step 16 of 19: 'InitConfig'.
ASM failed to start. Check /data/app/grid/cfgtoollogs/asmca/asmca-250512AM020731.log for details.
2025/05/12 02:07:55 CLSRSC-184: Configuration of ASM failed
2025/05/12 02:08:00 CLSRSC-258: Failed to configure and start ASM
Died at /data/app/19.3.0/grid/crs/install/crsinstall.pm line 2628.
解决办法:虚拟机内存4G不够用,调整到5G后root.sh成功执行。
3、创建磁盘组时由于asm磁盘member状态,无法使用相应的asm磁盘:

解决办法:
dd if=/dev/zero of=/dev/asm_ocr bs=512 count=1024
dd if=/dev/zero of=/dev/asm_data bs=512 count=1024000
#例子说明:
dd if=/dev/zero of=/dev/asm-disk1 bs=512 count=1024
if=文件名:输入文件名,缺省为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=1024指拷贝1024块
/dev/zero是一个输入设备,可以用来初始化文件;
4、oracle软件安装时异常,重新安装时报错:
ERROR: The home is not clean. This home cannot be used since there was a failed OPatch execution in this home. Use a different home to proceed.
解决办法:$ORACLE_HOME/install/patch文件大小为0,删除掉。
十、参考文档
https://docs.oracle.com/en/database/oracle/oracle-database/19/rilin/index.html
关于作者:
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证、MySQL 8.0 OCP认证以及OBCA、KCP、KCSM、ACP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~




