当前位置: 首页 > news >正文

VMware虚拟机安装CentOS7.9 Oracle 11.2.0.4 RAC+单节点RAC ADG

目录

一、参考资料

二、RAC环境配置清单

1.主机环境

2.共享存储

3.IP地址 

4.虚拟机

三、系统参数配置

1. 配置网卡

1.1 配置NAT网卡

1.2 配置HostOnly网卡

2. 修改主机名

3. 配置/etc/hosts

4. 关闭防火墙

5. 关闭Selinux

6. 配置内核参数

7. 配置grid、oracle用户的shell限制

8. 配置/etc/pam.d/login文件

9. 创建组和用户

10. 创建目录并授权

11. 配置grid和oracle环境变量

12. 挂载镜像

13. 配置yum源

14. 安装依赖包

四、配置共享存储

1. 配置虚拟机共享磁盘

2. 配置udev

2.1 CentOS 6生成脚本

2.2 CentOS 7 生成脚本

2.3 udev规则配置文件

五、grid安装

1. 上传grid、oracle安装包和补丁包

2. 修改包权限

3. grid用户解压grid安装包

4. 第一个补丁安装

5. 安装grid

5.1 跳过更新

5.2 安装配置GI集群

5.3 高级安装

5.4 语言选择

5.5 集群名和scan名

5.6 添加第二个节点

5.7 配置ssh

5.8 确认网卡属性

5.9 使用ASM

5.10 选择OCR磁盘

5.11 设置密码

5.12 不选择智能平台管理 

5.13 ASM实例权限分组

5.14 安装目录

5.15 grid安装清单

5.16 环境检测

5.17 检测结果

5.18 打补丁并执行脚本

5.19 最后100% bug报错

5.20 完成grid安装

6. 多个报错

7. 安装失败卸载GI

7.1 执行./deinstall命令

7.2 节点2root执行脚本

7.3 节点1root执行脚本

7.4 继续执行脚本

7.5 清理asm磁盘

7.6 清理残留文件

六、创建ASM磁盘组

1. 显示ASM实例情况

2. OCR磁盘组

3. 创建磁盘组

4. 查看磁盘组状态

5. 创建磁盘组报错

5.1 删除磁盘组

5.2 root用户删除磁盘组资源

七、database软件安装

1. 解压安装包

2. 执行安装

3. 不勾选安全更新

4. 跳过更新

5. 只安装数据库软件

6. 配置ssh

7. 选择语言

8. 选企业版

9. 安装目录

10. 属组

11. 自动检测环境

12. 开始安装

13. bug报错

14. 两个节点用root执行脚本

15.完成安装

八、dbca建库

1. 创建rac集群

2. 创建数据库

3. 选择数据库类型

4. 数据库名和实例名前缀

5. 不配置EM

6. 用相同的密码

7. 多路复用

8. 不使用快速恢复区,暂不开启归档

9.安装的组件

10. 使用ASMM

11. 自定义连接数

12. 字符集和初始化参数

13. 开始创建

14. 完成安装

九、备库清单

十、备库配置

十一、ADG搭建

1. 主库

1.1 开启归档

1.2 修改归档路径

1.3 开启强制日志

1.4 添加standby日志

1.5 配置静态监听

1.6 配置TNSNAMES

1.7 配置参数

1.8 密码文件

2. 备库

2.1 配置静态监听

2.2 配置tnsnames

2.3 备库创建pfile文件

2.4 启动备库

3. 开始复制

4. 复制完成打开备库

5. 验证数据是否同步

6. ADG开关步骤

6.1 关闭ADG

6.2 启动ADG

十二、相关视图


一、参考资料

  • Requirements for Installing Oracle 11.2.0.4 RDBMS on OL7 or RHEL7 64-bit (x86-64) (Doc ID 1962100.1)
  • Installation walk-through - Oracle Grid/RAC 11.2.0.4 on Oracle Linux 7 (Doc ID 1951613.1)

二、RAC环境配置清单

以下是在VMwareWorkstation 17 Pro中安装测试

1.主机环境

节点1节点2
hostnamerac11g_1rac11g_2
CPU2*22*2
内存8G8G
SWAP8G8G
本地盘100G100G

2.共享存储

磁盘组大小冗余方式用途
OCR2G*3NormalOCR、Votedisk表决磁盘
DATA40GExternal控制文件、数据文件、redo等
FRA15GExternal归档、闪回文件等

3.IP地址 

节点1节点2
Public IP192.168.23.101192.168.23.102
VIP192.168.23.103192.168.23.104
Private IP12.12.12.1212.12.12.13
Scan IP192.168.23.105192.168.23.105

4.虚拟机

  • 每个虚拟机两块网卡,节点之间的网卡名称要一致,比如都为ens33、ens36
  • 业务public ip网卡用NAT模式,私有网络Private IP网卡用HostOnly模式
  • 本地硬盘可以不立即分配空间
  • 主机名不要使用大写字母
  • 系统为CentOS 7.9(CentOS-7-x86_64-DVD-2009.iso)
  • 设置好一个节点,可把二节点直接克隆出来改IP

三、系统参数配置

安装前的准备工作,分别在两个节点操作

1. 配置网卡

1.1 配置NAT网卡

[root@localhost ~]# cd /etc/sysconfig/network-scripts
[root@localhost network-scripts]# vi ifcfg-ens33
#修改
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.23.101#重启网卡
[root@localhost ~]# ifdown ens33 && ifup ens33

1.2 配置HostOnly网卡

由于是创建完虚拟机后新增的HostOnly网卡,没有配置文件,可以通过下面方式去新增配置文件

  • 使用nmcli con show命令获取ens36网卡的uuid
[root@rac11g_1 ~]# nmcli con show
NAME                UUID                                  TYPE      DEVICE
ens33               405f5126-93bf-472d-970a-f4e2a707c544  ethernet  ens33
Wired connection 1  b98743f7-f514-3b5f-82c8-ef2ac042ef57  ethernet  ens36
virbr0              83e51f05-6627-4910-8b85-b5c2e1b3f683  bridge    virbr0
  • 使用ip addr命令获取ens36网卡的mac地址
[root@rac11g_1 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:69:93:11 brd ff:ff:ff:ff:ff:ffinet 192.168.23.101/24 brd 192.168.23.255 scope global secondary noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::98a6:6bd5:2267:8f06/64 scope link noprefixroutevalid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:69:93:1b brd ff:ff:ff:ff:ff:ffinet 192.168.80.128/24 brd 192.168.80.255 scope global noprefixroute dynamic ens36valid_lft 1543sec preferred_lft 1543secinet6 fe80::61e9:798:194b:1dc3/64 scope link noprefixroutevalid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:ce:35:59 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000link/ether 52:54:00:ce:35:59 brd ff:ff:ff:ff:ff:ff
  •  复制ens33网卡的配置文件,下面是修改的内容
[root@rac11g_1 ~]# cd /etc/sysconfig/network-scripts/
[root@rac11g_1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@rac11g_1 network-scripts]# vi ifcfg-ens36
#修改后
NAME=ens36
UUID=b98743f7-f514-3b5f-82c8-ef2ac042ef57
DEVICE=ens36
IPADDR=12.12.12.13#重启ens36网卡
[root@rac11g_1 network-scripts]# ifdown ens36 && ifup ens36

2. 修改主机名

[root@localhost ~]# hostnamectl set-hostname rac11g_1
[root@localhost ~]# hostname
rac11g_1

3. 配置/etc/hosts

[root@rac11g_1 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6#Public IP
192.168.23.101 rac11g_1
192.168.23.102 rac11g_2#VIP
192.168.23.103 rac11g_1-vip
192.168.23.104 rac11g_2-vip#Private IP
12.12.12.12 rac11g_1-private
12.12.12.13 rac11g_2-private#Scan IP
192.168.23.105 rac11g-scan

4. 关闭防火墙

[root@rac11g_1 ~]# systemctl stop firewalld.service
[root@rac11g_1 ~]# systemctl disable firewalld.service
[root@rac11g_1 ~]# systemctl status firewalld.service

5. 关闭Selinux

[root@rac11g_1 ~]# vi /etc/selinux/config
#修改为
SELINUX=disabled#生效
[root@rac11g_1 ~]# setenforce 0

6. 配置内核参数

[root@rac11g_1 ~]# vi /etc/sysctl.conf
kernel.shmmax = 4294967296
kernel.shmall = 1048576
kernel.shmmni = 4096
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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#使配置生效
[root@rac11g_1 ~]# sysctl -p
参数说明
kernel.shmmax单个共享内存段最大值,让数据库在一个共享段里容纳整个SGA。举例:假设有8G内存,数据库最大使用内存,不要超过物理内存的80%(SGA+PGA),所以8G内存情况下,SGA要小于4.8G,PGA要小于1.6G,计算shmmax值最大为4.8Gx1024x1024x1024=5153960755
kernel.shmall控制共享内存页数=shmmax/PAGESIZE;getconf PAGESIZE 查看PAGESIZE
kernel.shmmni共享内存段的最大数量,默认
fs.aio-max-nr可以拥有的异步IO请求数,避免IO系统故障,默认
fs.file-max允许的文件句柄最大数目,默认
kernel.sem空格不能去掉,信号参数,默认
net.ipv4.ip_local_port_rangeoracle本地ipv4端口范围
net.core.rmem_default默认
net.core.rmem_max默认
net.core.wmem_default默认
net.core.wmem_max默认
vm.nr_hugepages大内存页,默认4K/页,数据库建议用2M/页,该参数一定要大于SGA。计算方式:sga_max_size/2M+100~500M。8G内存情况下SGA最大4.8G,(4.8x1024)/2=2457.6,加一点得2600

注意:

  1. kernel.sem这个参数 四个数字:第1个数字应约大于Oracle进程数,第2个数字建议是第1和第4个数字的乘积。这个参数能够满足大部分使用,但对于连接数较高(比如单节点8000个连接)可以设置为: 10000 1280000 512 1024
  2. kernel.shmall = physical RAM size / pagesize For most systems, this will be the value 2097152. See Note 301830.1 for more information.前为官方文档说明,但是有些教程是shmmax/pagesize
  3. kernel.shmmax = 1/2 of physical RAM. This would be the value 2147483648 for a system with 4GB of physical RAM. See Note:567506.1 for more information.
  4. kernel.shmmax定义了单个共享内存段的最大值,要放下整个数据库SGA内存的大小。要大于sga_mas_size
  5. limits文件里配置的memlock要大于或等于kernel.shmmax
  6. vm.nr_hugepages一定要计算正确,错误的设置会导致虚拟机启动失败(这里我没用该参数)

7. 配置grid、oracle用户的shell限制

[root@rac11g_1 ~]# vi /etc/security/limits.conf
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle hard memlock unlimited
oracle soft memlock unlimited

 说明:

  • soft代表软件限制,hard代表硬件限制

  • 软件限制到了会报警,硬件限制到了会报错

  • nproc参数:操作系统级别对每个用户创建的进程数的限制

  • nofile参数:文件描述符(句柄)一个进程能够打开文件的次数,也就是一个进程能打开多少文件,影响应用的并发度

  • stack参数:堆大小

  • memlock参数:限制锁定内存的大小,单位KB,略低于物理内存

8. 配置/etc/pam.d/login文件

[root@rac11g_1 ~]# vi /etc/pam.d/login
#加入
session required pam_limits.so

9. 创建组和用户

[root@rac11g_1 ~]# groupadd -g 1001 oinstall
[root@rac11g_1 ~]# groupadd -g 1002 dba
[root@rac11g_1 ~]# groupadd -g 1003 oper
[root@rac11g_1 ~]# groupadd -g 1004 asmadmin
[root@rac11g_1 ~]# groupadd -g 1005 asmdba
[root@rac11g_1 ~]# groupadd -g 1006 asmoper
[root@rac11g_1 ~]# useradd -u 1100 -g oinstall -G asmadmin,asmdba,asmoper,oper,dba grid
[root@rac11g_1 ~]# useradd -u 1101 -g oinstall -G dba,asmdba,oper oracle#修改grid和oracle密码
[root@rac11g_1 ~]# passwd grid
[root@rac11g_1 ~]# passwd oracle

10. 创建目录并授权

[root@rac11g_1 ~]# mkdir -p /home/u01/app/11.2.0/grid
[root@rac11g_1 ~]# mkdir -p /home/u01/app/grid
[root@rac11g_1 ~]# mkdir -p /home/u01/app/oracle
[root@rac11g_1 ~]# chown -R grid:oinstall /home/u01
[root@rac11g_1 ~]# chown oracle:oinstall /home/u01/app/oracle
[root@rac11g_1 ~]# chmod -R 775 /home/u01/

11. 配置grid和oracle环境变量

grid:

[grid@rac11g_1 ~]$ vi .bash_profile
export ORACLE_BASE=/home/u01/app/grid
export ORACLE_HOME=/home/u01/app/11.2.0/grid
export ORACLE_SID=+ASM1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
[grid@rac11g_1 ~]$ source .bash_profile

oracle:

[oracle@rac11g_1 ~]$ vi .bash_profile
export ORACLE_BASE=/home/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=rac1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export TMP=/tmp
export TMPDIR=$TMP
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
[oracle@rac11g_1 ~]$ source .bash_profile

12. 挂载镜像

​[root@rac11g_1 ~]# cd /soft/
[root@rac11g_1 soft]# mount CentOS-7-x86_64-DVD-2009.iso /media/

13. 配置yum源

[root@rac11g_1 ~]# cd /etc/yum.repos.d/
[root@rac11g_1 yum.repos.d]# mkdir bak
[root@rac11g_1 yum.repos.d]# mv CentOS-* bak
[root@rac11g_1 yum.repos.d]# cd bak
[root@rac11g_1 bak]# cp CentOS-Media.repo ..
[root@rac11g_1 bak]# cd ..
[root@rac11g_1 yum.repos.d]# vi CentOS-Media.repo
[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/
gpgcheck=0
enabled=1
[root@rac11g_1 yum.repos.d]# yum clean all
[root@rac11g_1 yum.repos.d]# yum makecache

14. 安装依赖包

[root@rac11g_1 yum.repos.d]# yum -y install binutils compat-libcap1 gcc gcc-c++ glibc glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat elfutils-libelf-devel unixODBC unixODBC-devel[root@rac11g_1 soft]# rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
[root@rac11g_1 soft]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

说明: 

  • compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm包需要单独上传安装
  • pdksh-5.2.14-37.el5_8.1.x86_64.rpm包需要单独上传安装
  • cvuqdisk-1.0.9-1.rpm包在解压后的grid安装包grid/rpm下
  • 如果安装pdksh包的时候有冲突,把冲突的那个包卸载了

四、配置共享存储

使用VM虚拟机本身添加共享存储,这种方式比较方便,平常自己搭建测试环境用这种就行

1. 配置虚拟机共享磁盘

  1. 关闭两台虚拟机
  2. 节点1:-【编辑虚拟机设置】-【添加】-【硬盘】-【SCSI】-【创建新的虚拟磁盘】-设置磁盘大小,立即分配所有磁盘空间,将虚拟磁盘存储为单个文件-下一步完成-创建完成-确定
  3. 再选中刚才创建的磁盘-【高级】-虚拟设备节点选择SCSI1:0(增加多块盘按顺序选择),勾选独立,永久
  4. 节点2:添加-硬盘-选择“使用现有虚拟磁盘”-下一步-选择节点1下的vmdk磁盘文件-完成-高级-选择SCSI1:0,勾选独立-确定;
  5. 两台编辑虚拟机vmx配置文件,加入下面配置
disk.locking="false"
scsi1.sharedBus="virtual"
scsi1:0.deviceType = "disk"(多个磁盘的就加多条)
scsi1:1.deviceType = "disk"(多个磁盘的就加多条)
scsi1:2.deviceType = "disk"(多个磁盘的就加多条)
scsi1:3.deviceType = "disk"(多个磁盘的就加多条)
diskLib.dataCacheMaxSize="0"
diskLib.dataCacheMaxReadAheadSize="0"
diskLib.DataCacheMinReadAheadSize="0"
diskLib.dataCachePageSize="4096"
diskLib.maxUnsyncedWrites="0"
  • 如果【永久】选项是灰色的,再加入下面的参数,设为独立模式
scsi1:0.mode = "independent-persistent"
scsi1:1.mode = "independent-persistent"
scsi1:2.mode = "independent-persistent"
scsi1:3.mode = "independent-persistent"
  • 启用磁盘UUID,编辑虚拟机vmx文件,两个节点都增加下面配置
disk.EnableUUID = "TRUE"

注意:

  • 用UDEV方式需要用到UUID
  • 创建磁盘要用单个文件和立即分配所有空间,否则安装的时候共享盘会报错

完成上述操作以后,开启虚拟机,使用fdisk -l命令分别在节点1、2查看,注意查询到磁盘盘符一定要相同

2. 配置udev

以下脚本通过scsi_id获取设备的块设备的唯一标识名wwid

2.1 CentOS 6生成脚本

for i in b c d e f;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\",NAME=\"asm-disk$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\""
done#或者for i in b c d e f;
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d /dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id -g -u -d /dev/sd$i`\",NAME=\"asm-disk$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\""
done

注意未分区用 $name,分区用 $parent 

2.2 CentOS 7 生成脚本

for i in b c d e f;
do
echo "KERNEL==\"sd*\",ENV{DEVTYPE}==\"disk\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d \$devnode\",RESULT==\"`/usr/lib/udev/scsi_id -g -u -d /dev/sd$i`\",SYMLINK=\"asm-disk$i\",OWNER=\"grid\",GROUP=\"asmadmin\",MODE=\"0660\""
done

2.3 udev规则配置文件

  • 编辑/etc/udev/rules.d/99-oracle-asmdevices.rules规则文件,加入上面生成的脚本
[root@rac11g_1 ~]# cd /etc/udev/rules.d
[root@rac11g_1 rules.d]# vi 99-oracle-asmdevices.rules
KERNEL=="sd*",ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c29603092ba8de9e904d0bf7427d",SYMLINK="asm-ocr1",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c294d210d9cef0f80370939947cb",SYMLINK="asm-ocr2",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c294a6b42dcbe65b04f415586c39",SYMLINK="asm-ocr3",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c2984687d8b88fd8a907c80d3232",SYMLINK="asm-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
KERNEL=="sd*",ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode",RESULT=="36000c296e3fe7883081a894d6b840138",SYMLINK="asm-arch",OWNER="grid",GROUP="asmadmin",MODE="0660"
  • 把该文件拷贝至节点2该目录下
[root@rac11g_1 rules.d]# scp 99-oracle-asmdevices.rules 192.168.23.102:/etc/udev/rules.d
  • 重新加载规则文件
[root@rac11g_1 rules.d]#  /sbin/udevadm trigger --type=devices --action=change
[root@rac11g_1 rules.d]#  /sbin/udevadm control --reload
  • 查看/dev/asm*
[root@rac11g_1 rules.d]# ll /dev/asm*
lrwxrwxrwx 1 root root 3 Jun 15 14:23 /dev/asm-arch -> sdf
lrwxrwxrwx 1 root root 3 Jun 15 14:23 /dev/asm-data -> sde
lrwxrwxrwx 1 root root 3 Jun 15 14:29 /dev/asm-ocr1 -> sdb
lrwxrwxrwx 1 root root 3 Jun 15 14:23 /dev/asm-ocr2 -> sdc
lrwxrwxrwx 1 root root 3 Jun 15 14:23 /dev/asm-ocr3 -> sdd[root@rac11g_1 rules.d]# ll /dev/sd*
brw-rw---- 1 root disk     8,  0 Jun 15 14:19 /dev/sda
brw-rw---- 1 root disk     8,  1 Jun 15 14:19 /dev/sda1
brw-rw---- 1 root disk     8,  2 Jun 15 14:19 /dev/sda2
brw-rw---- 1 grid asmadmin 8, 16 Jun 15 15:57 /dev/sdb
brw-rw---- 1 grid asmadmin 8, 32 Jun 15 15:57 /dev/sdc
brw-rw---- 1 grid asmadmin 8, 48 Jun 15 15:57 /dev/sdd
brw-rw---- 1 grid asmadmin 8, 64 Jun 15 15:57 /dev/sde
brw-rw---- 1 grid asmadmin 8, 80 Jun 15 15:57 /dev/sdf

五、grid安装

为解决grid安装BUG需要打两个补丁

1. 上传grid、oracle安装包和补丁包

#oracle安装包
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip#grid安装包
p13390677_112040_Linux-x86-64_3of7.zip#第二个补丁包,第一个补丁在grid安装包rpm目录下
p18370031_112040_Linux-x86-64.zip

2. 修改包权限

把/soft权限改为775,grid安装包权限改为grid:oinstall,oracle安装包权限改为oracle:oinstall 

[root@rac11g_1 ~]# chmod 775 /soft
[root@rac11g_1 soft]# chown oracle:oinstall p13390677_112040_Linux-x86-64_1of7.zip
[root@rac11g_1 soft]# chown oracle:oinstall p13390677_112040_Linux-x86-64_2of7.zip
[root@rac11g_1 soft]# chown grid:oinstall p13390677_112040_Linux-x86-64_3of7.zip

3. grid用户解压grid安装包

[grid@rac11g_1 soft]$ unzip p13390677_112040_Linux-x86-64_3of7.zip

4. 第一个补丁安装

进入解压后的安装包,安装cvuqdisk-1.0.9-1.rpm包

[root@rac11g_1 grid]# cd /soft/grid/rpm
[root@rac11g_1 rpm]# rpm -ivh cvuqdisk-1.0.9-1.rpm

5. 安装grid

[grid@rac11g_1 soft]$ cd grid
[grid@rac11g_1 grid]$ export DISPLAY=192.168.23.1:0.0
[grid@rac11g_1 grid]$ ./runInstaller

5.1 跳过更新

5.2 安装配置GI集群

5.3 高级安装

5.4 语言选择

多选了一个简体中文

5.5 集群名和scan名

与hosts文件保持一致,scan名称开头不能以数字开头否则监测不到

5.6 添加第二个节点

5.7 配置ssh

5.8 确认网卡属性

5.9 使用ASM

5.10 选择OCR磁盘

修改ASM磁盘路径,配置ASM共享磁盘的时候磁盘名在/dev下

OCR把三块盘都选上,冗余选Normal

5.11 设置密码

密码设为一样的,会给你个弹窗,说你密码强度太低,yes就行

5.12 不选择智能平台管理 

5.13 ASM实例权限分组

5.14 安装目录

grid软件安装路径和base目录,grid用户环境变量配置好了的

5.15 grid安装清单

5.16 环境检测

5.17 检测结果

首先点击fix&Check Again

使用root运行修复脚本,两个节点都需执行,执行完脚本后,点击OK,会再次检测环境

修复后再安装缺少的包

pdksh-5.2.14-37.el5_8.1.x86_64.rpm包需手动下载安装,都安装好后再次检测如下图

Device checks for asm:没安装asmlib,使用的udev绑定,可以忽略

Task resolv.conf integrity:这个是因为无法访问设置的DNS ip,对安装没影响

勾选Ignore All 进行下一步

5.18 打补丁并执行脚本

注意此时需要打第二个补丁

  1. 第一个脚本先在两个节点分别执行
  2. 第二个脚本执行前需要先打补丁,因为在7下执行脚本会报错,官方说需要先打p18370031_112040_Linux-x86-64.zip这个补丁
#grid用户
[grid@rac11g_1 ~]$ cd /soft/
[grid@rac11g_1 soft]$ unzip p18370031_112040_Linux-x86-64.zip#节点1,grid用户
[grid@rac11g_1 ~]$ cd $ORACLE_HOME/OPatch
[grid@rac11g_1 OPatch]$./opatch napply -local /soft/18370031#节点2,grid用户,解压安装同节点1
[grid@rac11g_1 soft]$ scp /soft/p18370031_112040_Linux-x86-64.zip rac11g_2:/soft/#安装完成用./opatch lsinventory命令检查两节点是否打上

打补丁过程

[grid@rac11gstd OPatch]$ ./opatch napply -local /soft/18370031
Oracle Interim Patch Installer version 11.2.0.3.4
Copyright (c) 2012, Oracle Corporation.  All rights reserved.Oracle Home       : /home/u01/app/11.2.0/grid
Central Inventory : /home/u01/app/oraInventoryfrom           : /home/u01/app/11.2.0/grid/oraInst.loc
OPatch version    : 11.2.0.3.4
OUI version       : 11.2.0.4.0
Log file location : /home/u01/app/11.2.0/grid/cfgtoollogs/opatch/opatch2024-06-17_02-58-51AM_1.logVerifying environment and performing prerequisite checks...
OPatch continues with these patches:   18370031Do you want to proceed? [y|n]
y
User Responded with: Y
All checks passed.Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.
(Oracle Home = '/home/u01/app/11.2.0/grid')Is the local system ready for patching? [y|n]
y
User Responded with: Y
Backing up files...
Applying interim patch '18370031' to OH '/home/u01/app/11.2.0/grid'Patching component oracle.crs, 11.2.0.4.0...Verifying the update...
Patch 18370031 successfully applied.
Log file location: /home/u01/app/11.2.0/grid/cfgtoollogs/opatch/opatch2024-06-17_02-58-51AM_1.logOPatch succeeded.

下面继续执行第二个脚本,节点1执行成功后再在第二个节点执行,两个节点都执行成功后点击OK

这里放一下节点1执行第二个脚本的内容

[root@rac11g_1 ~]# /home/u01/app/11.2.0/grid/root.sh
Performing root user operation for Oracle 11gThe following environment variables are set as:ORACLE_OWNER= gridORACLE_HOME=  /home/u01/app/11.2.0/gridEnter 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.
Using configuration parameter file: /home/u01/app/11.2.0/grid/crs/install/crsconfig_params
Creating trace directory
User ignored Prerequisites during installation
Installing Trace File Analyzer
OLR initialization - successfulroot walletroot wallet certroot cert exportpeer walletprofile reader walletpa walletpeer wallet keyspa wallet keyspeer cert requestpa cert requestpeer certpa certpeer root cert TPprofile reader root cert TPpa root cert TPpeer pa cert TPpa peer cert TPprofile reader pa cert TPprofile reader peer cert TPpeer user certpa user cert
Adding Clusterware entries to oracle-ohasd.service
CRS-2672: Attempting to start 'ora.mdnsd' on 'rac11g_1'
CRS-2676: Start of 'ora.mdnsd' on 'rac11g_1' succeeded
CRS-2672: Attempting to start 'ora.gpnpd' on 'rac11g_1'
CRS-2676: Start of 'ora.gpnpd' on 'rac11g_1' succeeded
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac11g_1'
CRS-2672: Attempting to start 'ora.gipcd' on 'rac11g_1'
CRS-2676: Start of 'ora.cssdmonitor' on 'rac11g_1' succeeded
CRS-2676: Start of 'ora.gipcd' on 'rac11g_1' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac11g_1'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac11g_1'
CRS-2676: Start of 'ora.diskmon' on 'rac11g_1' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac11g_1' succeededASM created and started successfully.Disk Group OCR created successfully.clscfg: -install mode specified
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
CRS-4256: Updating the profile
Successful addition of voting disk 59619274ab3f4f96bfbfa86bc4c6286a.
Successful addition of voting disk 2c6cbedca0a84fa6bf5800e580bc6994.
Successful addition of voting disk 50ee34ae3e134f92bf225a1c3081dfee.
Successfully replaced voting disk group with +OCR.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------1. ONLINE   59619274ab3f4f96bfbfa86bc4c6286a (/dev/asm-ocr1) [OCR]2. ONLINE   2c6cbedca0a84fa6bf5800e580bc6994 (/dev/asm-ocr2) [OCR]3. ONLINE   50ee34ae3e134f92bf225a1c3081dfee (/dev/asm-ocr3) [OCR]
Located 3 voting disk(s).
CRS-2672: Attempting to start 'ora.asm' on 'rac11g_1'
CRS-2676: Start of 'ora.asm' on 'rac11g_1' succeeded
CRS-2672: Attempting to start 'ora.OCR.dg' on 'rac11g_1'
CRS-2676: Start of 'ora.OCR.dg' on 'rac11g_1' succeeded
Configure Oracle Grid Infrastructure for a Cluster ... succeeded

5.19 最后100% bug报错

这个错误是官方要求DNS,属于bug,忽略,点击ok

点击skip

点击next,yes

5.20 完成grid安装

6. 多个报错

如果没有打p18370031_112040_Linux-x86-64.zip补丁

执行/home/u01/app/11.2.0/grid/root.sh时报错,卡很久,并报下面的错误

解决办法:

方法1

/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

方法2

[root@rac11g_1 init.d]# cd /var/tmp/.oracle
[root@rac11g_1 .oracle]# rm -rf npohasd
[root@rac11g_1 .oracle]# touch npohasd
[root@rac11g_1 .oracle]# chmod 755 npohasd

方法3

1. 创建服务ohas.service的服务文件并赋予权限
touch /usr/lib/systemd/system/ohas.servicechmod 777 /usr/lib/systemd/system/ohas.service2. 往ohas.service服务文件添加启动ohasd的相关信息vi /usr/lib/systemd/system/ohas.service添加如下内容:[Unit]
Description=Oracle High Availability Services
After=syslog.target[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always[Install]
WantedBy=multi-user.target 3. 加载,启动服务重新加载守护进程systemctl daemon-reload设置守护进程开机自动启动systemctl enable ohas.service手工启动ohas服务systemctl start ohas.service

第一节点再次执行/home/u01/app/11.2.0/grid/root.sh脚本成功

 第二节点用同样的方法,报错如下

[root@rac11g_2 tmp]# /home/u01/app/11.2.0/grid/root.sh
Performing root user operation for Oracle 11gThe following environment variables are set as:ORACLE_OWNER= gridORACLE_HOME=  /home/u01/app/11.2.0/gridEnter the full pathname of the local bin directory: [/usr/local/bin]:
The contents of "dbhome" have not changed. No need to overwrite.
The contents of "oraenv" have not changed. No need to overwrite.
The contents of "coraenv" have not changed. No need to overwrite.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.
Using configuration parameter file: /home/u01/app/11.2.0/grid/crs/install/crsconfig_params
User ignored Prerequisites during installation
Installing Trace File Analyzer
CRS-2672: Attempting to start 'ora.cssdmonitor' on 'rac11g_2'
CRS-2676: Start of 'ora.cssdmonitor' on 'rac11g_2' succeeded
CRS-2672: Attempting to start 'ora.cssd' on 'rac11g_2'
CRS-2672: Attempting to start 'ora.diskmon' on 'rac11g_2'
CRS-2676: Start of 'ora.diskmon' on 'rac11g_2' succeeded
CRS-2676: Start of 'ora.cssd' on 'rac11g_2' succeededMounting Disk Group OCR failed with the following message:
ORA-15032: not all alterations performed
ORA-15017: diskgroup "OCR" cannot be mounted
ORA-15003: diskgroup "OCR" already mounted in another lock name spaceConfiguration of ASM ... failed
see asmca logs at /home/u01/app/grid/cfgtoollogs/asmca for details
Did not succssfully configure and start ASM at /home/u01/app/11.2.0/grid/crs/install/crsconfig_lib.pm line 6912.
/home/u01/app/11.2.0/grid/perl/bin/perl -I/home/u01/app/11.2.0/grid/perl/lib -I/home/u01/app/11.2.0/grid/crs/install /home/u01/app/11.2.0/grid/crs/install/rootcrs.pl execution failed

原因两个节点执行/home/u01/app/11.2.0/grid/root.sh脚本,其实是没有同时执行的,可能是节点一执行成功后没释放,还有就是配置共享存储时,没有设置为独立和立即分配所有空间

解决办法

用root用户进入GI_HOME/install执行./rootcrs.pl -deconfig -force 

然后又报错

[root@rac11g_1 install]# /home/u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force -verbose
Can't locate Env.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /home/u01/app/11.2.0/grid/crs/install) at crsconfig_lib.pm line 703.
BEGIN failed--compilation aborted at crsconfig_lib.pm line 703.
Compilation failed in require at /home/u01/app/11.2.0/grid/crs/install/rootcrs.pl line 305.
BEGIN failed--compilation aborted at /home/u01/app/11.2.0/grid/crs/install/rootcrs.pl line 305.

解决上述错误,复制Env.pm

cp -p /home/u01/app/11.2.0/grid/perl/lib/5.10.0/Env.pm /usr/lib64/perl5/vendor_perl/

再次执行./rootcrs.pl -deconfig -force

[root@rac11g_1 5.10.0]# /home/u01/app/11.2.0/grid/crs/install/rootcrs.pl -deconfig -force -verbose
Using configuration parameter file: /home/u01/app/11.2.0/grid/crs/install/crsconfig_params
Network exists: 1/192.168.23.0/255.255.255.0/ens33, type static
VIP exists: /rac11g_1-vip/192.168.23.103/192.168.23.0/255.255.255.0/ens33, hosting node rac11g_1
GSD exists
ONS exists: Local port 6100, remote port 6200, EM port 2016
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.crsd' on 'rac11g_1'
CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.OCR.dg' on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.oc4j' on 'rac11g_1'
CRS-2677: Stop of 'ora.oc4j' on 'rac11g_1' succeeded
CRS-2677: Stop of 'ora.OCR.dg' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.asm' on 'rac11g_1'
CRS-2677: Stop of 'ora.asm' on 'rac11g_1' succeeded
CRS-2792: Shutdown of Cluster Ready Services-managed resources on 'rac11g_1' has completed
CRS-2677: Stop of 'ora.crsd' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.ctssd' on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.evmd' on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.asm' on 'rac11g_1'
CRS-2673: Attempting to stop 'ora.mdnsd' on 'rac11g_1'
CRS-2677: Stop of 'ora.evmd' on 'rac11g_1' succeeded
CRS-2677: Stop of 'ora.mdnsd' on 'rac11g_1' succeeded
CRS-2677: Stop of 'ora.ctssd' on 'rac11g_1' succeeded
CRS-2677: Stop of 'ora.asm' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.cluster_interconnect.haip' on 'rac11g_1'
CRS-2677: Stop of 'ora.cluster_interconnect.haip' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.cssd' on 'rac11g_1'
CRS-2677: Stop of 'ora.cssd' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.crf' on 'rac11g_1'
CRS-2677: Stop of 'ora.crf' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.gipcd' on 'rac11g_1'
CRS-2677: Stop of 'ora.gipcd' on 'rac11g_1' succeeded
CRS-2673: Attempting to stop 'ora.gpnpd' on 'rac11g_1'
CRS-2677: Stop of 'ora.gpnpd' on 'rac11g_1' succeeded
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'rac11g_1' has completed
CRS-4133: Oracle High Availability Services has been stopped.
Successfully deconfigured Oracle clusterware stack on this node

 没有打补丁报一系列错误,有点麻烦

7. 安装失败卸载GI

7.1 执行./deinstall命令

[root@rac11g_1 ~]# su - grid
[grid@rac11g_1 ~]$ cd /home/u01/app/11.2.0/grid/deinstall
[grid@rac11g_1 deinstall]$ ./deinstall
Checking for required files and bootstrapping ...
Please wait ...
Location of logs /tmp/deinstall2024-06-13_03-33-37PM/logs/############ ORACLE DEINSTALL & DECONFIG TOOL START ##################################### CHECK OPERATION START #########################
## [START] Install check configuration ##Checking for existence of the Oracle home location /home/u01/app/11.2.0/grid
Oracle Home type selected for deinstall is: Oracle Grid Infrastructure for a Cluster
Oracle Base selected for deinstall is: /home/u01/app/grid
Checking for existence of central inventory location /home/u01/app/oraInventory
Checking for existence of the Oracle Grid Infrastructure home
The following nodes are part of this cluster: rac11g_1,rac11g_2
Checking for sufficient temp space availability on node(s) : 'rac11g_1,rac11g_2'## [END] Install check configuration ##Traces log file: /tmp/deinstall2024-06-13_03-33-37PM/logs//crsdc.log
Enter an address or the name of the virtual IP used on node "rac11g_1"[rac11g_1-vip]>The following information can be collected by running "/sbin/ifconfig -a" on node "rac11g_1"
Enter the IP netmask of Virtual IP "192.168.23.103" on node "rac11g_1"[255.255.255.0]>Enter the network interface name on which the virtual IP address "192.168.23.103" is active>Enter an address or the name of the virtual IP used on node "rac11g_2"[rac11g_2-vip]>The following information can be collected by running "/sbin/ifconfig -a" on node "rac11g_2"
Enter the IP netmask of Virtual IP "192.168.23.104" on node "rac11g_2"[255.255.255.0]>Enter the network interface name on which the virtual IP address "192.168.23.104" is active>Enter an address or the name of the virtual IP[]>Network Configuration check config STARTNetwork de-configuration trace file location: /tmp/deinstall2024-06-13_03-33-37PM/logs/netdc_check2024-06-13_03-34-36-PM.logSpecify all RAC listeners (do not include SCAN listener) that are to be de-configured [LISTENER,LISTENER_SCAN1]:Network Configuration check config ENDAsm Check Configuration STARTASM de-configuration trace file location: /tmp/deinstall2024-06-13_03-33-37PM/logs/asmcadc_check2024-06-13_03-34-48-PM.logASM configuration was not detected in this Oracle home. Was ASM configured in this Oracle home (y|n) [n]: y
Is OCR/Voting Disk placed in ASM y|n [n]: yEnter the OCR/Voting Disk diskgroup name []:
Specify the ASM Diagnostic Destination [ ]:
Specify the diskstring []:
Specify the diskgroups that are managed by this ASM instance []:######################### CHECK OPERATION END ################################################ CHECK OPERATION SUMMARY #######################
Oracle Grid Infrastructure Home is:
The cluster node(s) on which the Oracle home deinstallation will be performed are:rac11g_1,rac11g_2
Oracle Home selected for deinstall is: /home/u01/app/11.2.0/grid
Inventory Location where the Oracle home registered is: /home/u01/app/oraInventory
Following RAC listener(s) will be de-configured: LISTENER,LISTENER_SCAN1
ASM instance will be de-configured from this Oracle home
Do you want to continue (y - yes, n - no)? [n]: y
A log of this session will be written to: '/tmp/deinstall2024-06-13_03-33-37PM/logs/deinstall_deconfig2024-06-13_03-33-42-PM.out'
Any error messages from this session will be written to: '/tmp/deinstall2024-06-13_03-33-37PM/logs/deinstall_deconfig2024-06-13_03-33-42-PM.err'######################## CLEAN OPERATION START ########################
ASM de-configuration trace file location: /tmp/deinstall2024-06-13_03-33-37PM/logs/asmcadc_clean2024-06-13_03-36-40-PM.log
ASM Clean Configuration START
ASM Clean Configuration ENDNetwork Configuration clean config STARTNetwork de-configuration trace file location: /tmp/deinstall2024-06-13_03-33-37PM/logs/netdc_clean2024-06-13_03-36-44-PM.logDe-configuring RAC listener(s): LISTENER,LISTENER_SCAN1De-configuring listener: LISTENERStopping listener: LISTENERWarning: Failed to stop listener. Listener may not be running.
Listener de-configured successfully.De-configuring listener: LISTENER_SCAN1Stopping listener: LISTENER_SCAN1Warning: Failed to stop listener. Listener may not be running.
Listener de-configured successfully.De-configuring Naming Methods configuration file on all nodes...
Naming Methods configuration file de-configured successfully.De-configuring Local Net Service Names configuration file on all nodes...
Local Net Service Names configuration file de-configured successfully.De-configuring Directory Usage configuration file on all nodes...
Directory Usage configuration file de-configured successfully.De-configuring backup files on all nodes...
Backup files de-configured successfully.The network configuration has been cleaned up successfully.Network Configuration clean config END---------------------------------------->The deconfig command below can be executed in parallel on all the remote nodes. Execute the command on  the local node after the execution completes on all the remote nodes.Run the following command as the root user or the administrator on node "rac11g_2"./tmp/deinstall2024-06-13_03-33-37PM/perl/bin/perl -I/tmp/deinstall2024-06-13_03-33-37PM/perl/lib -I/tmp/deinstall2024-06-13_03-33-37PM/crs/install /tmp/deinstall2024-06-13_03-33-37PM/crs/install/rootcrs.pl -force  -deconfig -paramfile "/tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rsp"Run the following command as the root user or the administrator on node "rac11g_1"./tmp/deinstall2024-06-13_03-33-37PM/perl/bin/perl -I/tmp/deinstall2024-06-13_03-33-37PM/perl/lib -I/tmp/deinstall2024-06-13_03-33-37PM/crs/install /tmp/deinstall2024-06-13_03-33-37PM/crs/install/rootcrs.pl -force  -deconfig -paramfile "/tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rsp" -lastnodePress Enter after you finish running the above commands<----------------------------------------

7.2 节点2root执行脚本

[root@rac11g_2 install]# /tmp/deinstall2024-06-13_03-33-37PM/perl/bin/perl -I/tmp/deinstall2024-06-13_03-33-37PM/perl/lib -I/tmp/deinstall2024-06-13_03-33-37PM/crs/install /tmp/deinstall2024-06-13_03-33-37PM/crs/install/rootcrs.pl -force  -deconfig -paramfile "/tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rsp"
Using configuration parameter file: /tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rsp
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
CRS-4047: No Oracle Clusterware components configured.
CRS-4000: Command Stop failed, or completed with errors.
################################################################
# You must kill processes or reboot the system to properly #
# cleanup the processes started by Oracle clusterware          #
################################################################
Either /etc/oracle/olr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/olr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Failure in execution (rc=-1, 256, No such file or directory) for command /etc/init.d/ohasd deinstall
Successfully deconfigured Oracle clusterware stack on this node

7.3 节点1root执行脚本

_03-33-37PM/crs/install/rootcrs.pl -force  -deconfig -paramfile "/tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rsp" -lastnode
Using configuration parameter file: /tmp/deinstall2024-06-13_03-33-37PM/response/deinstall_Ora11g_gridinfrahome1.rspAdding Clusterware entries to inittab
/crs/install/inittab does not exist.
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
****Unable to retrieve Oracle Clusterware home.
Start Oracle Clusterware stack and try again.
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
CRS-4047: No Oracle Clusterware components configured.
CRS-4000: Command Stop failed, or completed with errors.
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
################################################################
# You must kill processes or reboot the system to properly #
# cleanup the processes started by Oracle clusterware          #
################################################################
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/ocr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/olr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Either /etc/oracle/olr.loc does not exist or is not readable
Make sure the file exists and it has read and execute access
Failure in execution (rc=-1, 256, No such file or directory) for command /etc/init.d/ohasd deinstall
error: package cvuqdisk is not installed
Successfully deconfigured Oracle clusterware stack on this node

7.4 继续执行脚本

两个节点执行完成后,原窗口按回车继续

Setting the force flag to false
Setting the force flag to cleanup the Oracle Base
Oracle Universal Installer clean STARTDetach Oracle home '/home/u01/app/11.2.0/grid' from the central inventory on the local node : DoneDelete directory '/home/u01/app/11.2.0/grid' on the local node : DoneDelete directory '/home/u01/app/oraInventory' on the local node : DoneDelete directory '/home/u01/app/grid' on the local node : DoneDetach Oracle home '/home/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'rac11g_2' : DoneDelete directory '/home/u01/app/11.2.0/grid' on the remote nodes 'rac11g_2' : DoneDelete directory '/home/u01/app/oraInventory' on the remote nodes 'rac11g_2' : DoneDelete directory '/home/u01/app/grid' on the remote nodes 'rac11g_2' : DoneOracle Universal Installer cleanup was successful.Oracle Universal Installer clean END## [START] Oracle install clean ##Clean install operation removing temporary directory '/tmp/deinstall2024-06-13_03-33-37PM' on node 'rac11g_1'
Clean install operation removing temporary directory '/tmp/deinstall2024-06-13_03-33-37PM' on node 'rac11g_2'## [END] Oracle install clean ########################### CLEAN OPERATION END ################################################ CLEAN OPERATION SUMMARY #######################
ASM instance was de-configured successfully from the Oracle home
Following RAC listener(s) were de-configured successfully: LISTENER,LISTENER_SCAN1
Oracle Clusterware is stopped and successfully de-configured on node "rac11g_2"
Oracle Clusterware is stopped and successfully de-configured on node "rac11g_1"
Oracle Clusterware is stopped and de-configured successfully.
Successfully detached Oracle home '/home/u01/app/11.2.0/grid' from the central inventory on the local node.
Successfully deleted directory '/home/u01/app/11.2.0/grid' on the local node.
Successfully deleted directory '/home/u01/app/oraInventory' on the local node.
Successfully deleted directory '/home/u01/app/grid' on the local node.
Successfully detached Oracle home '/home/u01/app/11.2.0/grid' from the central inventory on the remote nodes 'rac11g_2'.
Successfully deleted directory '/home/u01/app/11.2.0/grid' on the remote nodes 'rac11g_2'.
Successfully deleted directory '/home/u01/app/oraInventory' on the remote nodes 'rac11g_2'.
Successfully deleted directory '/home/u01/app/grid' on the remote nodes 'rac11g_2'.
Oracle Universal Installer cleanup was successful.Run 'rm -rf /etc/oraInst.loc' as root on node(s) 'rac11g_1,rac11g_2' at the end of the session.Run 'rm -rf /opt/ORCLfmap' as root on node(s) 'rac11g_1,rac11g_2' at the end of the session.
Run 'rm -rf /etc/oratab' as root on node(s) 'rac11g_1' at the end of the session.
Oracle deinstall tool successfully cleaned up temporary directories.
#################################################################################### ORACLE DEINSTALL & DECONFIG TOOL END #############

7.5 清理asm磁盘

如果使用了asm磁盘,需要先清理asm磁盘,因为尝试了一次安装,你的ASM磁盘就被标记为used,不能再作为候选磁盘,要想再次使用,需要执行下面的操作,两个节点都操作下。

[root@rac11g_1 ~]# dd if=/dev/zero of=/dev/asm-ocr1 bs=1024 count=100
[root@rac11g_1 ~]# dd if=/dev/zero of=/dev/asm-ocr2 bs=1024 count=100
[root@rac11g_1 ~]# dd if=/dev/zero of=/dev/asm-ocr3 bs=1024 count=100

7.6 清理残留文件

删除残留文件,两个节点都清理下

[root@rac11g_1 app]# rm  -rf  /etc/ora*
[root@rac11g_1 app]# rm  -rf  /u01/app/grid/11.2.0/*
[root@rac11g_1 app]# rm  -rf  /u01/app/oraInventory
[root@rac11g_1 app]# rm  -rf  /etc/oraInst.loc
[root@rac11g_1 app]# rm  -rf  /etc/oracle/ocr.loc

六、创建ASM磁盘组

grid用户执行asmca

[grid@rac11g_1 grid]$ asmca

1. 显示ASM实例情况

2. OCR磁盘组

安装grid时,创建的OCR及votdisk磁盘组OCR

3. 创建磁盘组

 点击Create创建DATA和FRA磁盘组

注意:共享磁盘一定要设置为独立和立即分配所有空间

4. 查看磁盘组状态

[grid@rac11g_1 ~]$ sqlplus  / as sysasmSQL> select name,state from v$asm_diskgroup;
NAME                           STATE
------------------------------ ---------------------------------
DATA                           MOUNTED
FRA                            MOUNTED
OCR                            MOUNTED

5. 创建磁盘组报错

如果共享磁盘没有设置为独立和立即分配空间,则节点2无法挂载磁盘组,需要先删除磁盘组,再删除磁盘组资源,然后去虚拟机重新删除磁盘,再新建磁盘重新加入udev规则文件        

5.1 删除磁盘组

磁盘组为mount时:
SQL> drop diskgroup  diskgroup_name;如果磁盘组中有任何的数据,需要加入including contents,SQL> drop diskgroup diskgroup_name including contents;如果磁盘组无法mount, 就需要加上force,该操作会清楚磁盘头及磁盘组所有数据:
SQL> drop diskgroup diskgroup_name force including contents;SQL> drop diskgroup DATA force including contents;Diskgroup dropped.另一个选项excluding contents 是默认选项,该操作仅在磁盘组为空的情况下进行,如果不是,会报错。另外建议,创建磁盘组或者其他测试时,避免直接使用test, 可以使用testdg ,test_tb等,避免关键字相关问题

5.2 root用户删除磁盘组资源

[root@rac11g_1 ~]# /home/u01/app/11.2.0/grid/bin/crsctl delete resource ora.DATA.dg

七、database软件安装

1. 解压安装包

[root@rac11g_1 ~]# su - oracle
[oracle@rac11g_1 ~]$ cd /soft
[oracle@rac11g_1 soft]$ unzip p13390677_112040_Linux-x86-64_1of7.zip
[oracle@rac11g_1 soft]$ unzip p13390677_112040_Linux-x86-64_2of7.zip

2. 执行安装

[oracle@rac11g_1 soft]$ export DISPLAY=192.168.23.1:0.0
[oracle@rac11g_1 soft]$ cd database/
[oracle@rac11g_1 database]$ ./runInstaller

3. 不勾选安全更新

4. 跳过更新

5. 只安装数据库软件

6. 配置ssh

7. 选择语言

选上简体中文

8. 选企业版

9. 安装目录

10. 属组

11. 自动检测环境

忽略所有

12. 开始安装

13. bug报错

 56%的时候会报这个错,这是CentOS7下安装11gR2的bug

处理方法:

只在节点1做处理,备份一下这个文件ins_emagent.mk,然后在文件中搜索NMECTL,在括号后面加上 -lnnz11,保存

[root@rac11g_1 ~]# cd /home/u01/app/oracle/product/11.2.0/dbhome_1/sysman/lib
[root@rac11g_1 lib]# cp ins_emagent.mk ins_emagent.mk_bak20240614
[root@rac11g_1 lib]# vi ins_emagent.mk

然后点击retry

14. 两个节点用root执行脚本

15.完成安装

执行完脚本后

八、dbca建库

[oracle@rac11g_1 database]$ dbca

1. 创建rac集群

  • rac集群(选这个)
  • rac单节点
  • 单实例

2. 创建数据库

3. 选择数据库类型

  • 事务性
  • 自定义(选这个)
  • 数据仓库

4. 数据库名和实例名前缀

5. 不配置EM

 

6. 用相同的密码

7. 多路复用

8. 不使用快速恢复区,暂不开启归档

9.安装的组件

10. 使用ASMM

SGA+PGA要小于物理内存的80%,推荐范围在40-60%

本环境物理内存8G,留给grid集群1G,余7G用于分配SGA+PGA

7Gx80%=5.6G

SGA=5.6x80%=4587M 我给的3584M

PGA=5.6x20%=1146M 我给的980M

最后4564/1024/8=55%,在推荐范围内

11. 自定义连接数

12. 字符集和初始化参数

选择UTF8

修改open_cursor为500

默认专用模式

可以修改最大数据文件数量,其他参数可以根据自己生产情况来设置

13. 开始创建

需要一些时间完成创建

14. 完成安装

九、备库清单

备库是RAC单节点

节点1
hostnamerac11gstd
CPU2*2
内存8G
SWAP8G
本地盘100G

共享存储

磁盘组大小冗余方式用途
OCR1G*3NormalOCR、Votedisk表决磁盘
DATA25GExternal控制文件、数据文件、redo等
FRA10GExternal归档、闪回文件等

 IP地址

节点1
Public IP192.168.23.110
VIP192.168.23.112
Private IP13.13.13.13
Scan IP192.168.23.114

虚拟机

  • 虚拟机两块网卡
  • 业务public ip网卡用NAT模式,私有网络Private IP网卡用HostOnly模式
  • 本地硬盘可以不立即分配空间
  • 主机名不要使用大写字母
  • 系统为CentOS 7.9(CentOS-7-x86_64-DVD-2009.iso)

十、备库配置

同主库相同的方法配置

共享存储配置、grid安装、oracle软件安装和主库相同

十一、ADG搭建

1. 主库

1.1 开启归档

shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
archive log list;

1.2 修改归档路径

alter system set log_archive_dest_1='location=+FRA';

1.3 开启强制日志

alter database force logging;

1.4 添加standby日志

创建主库standby日志文件,每个实例的组数要比logfile多一组
standby logfile=(1+logfile组数)*thread=(1+2)*2=6

SQL> select * from v$logGROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ------------------- ------------ -------------------1          1         79   52428800        512          2 NO  INACTIVE                892360 2024-06-14 15:32:50       917066 2024-06-16 18:37:442          1         80   52428800        512          2 NO  CURRENT                 917066 2024-06-16 18:37:44   2.8147E+143          2          1   52428800        512          2 NO  CURRENT                 896190 2024-06-14 15:33:02   2.8147E+14 2024-06-14 15:33:024          2          0   52428800        512          2 YES UNUSED                       0                                0

添加standby日志

alter database add standby logfile thread 1 group 5 size 200m;
alter database add standby logfile thread 1 group 6 size 200m;
alter database add standby logfile thread 1 group 7 size 200m;
alter database add standby logfile thread 2 group 8 size 200m;
alter database add standby logfile thread 2 group 9 size 200m;
alter database add standby logfile thread 2 group 10 size 200m;

由于添加standby log和redo log大小不一样,修改主库redo log的大小

添加日志组
alter database add logfile thread 1 group 11 size 200m;
alter database add logfile thread 1 group 12 size 200m;
alter database add logfile thread 2 group 13 size 200m;
alter database add logfile thread 2 group 14 size 200m;切换日志组,另一个实例也执行
alter system switch logfile;删除日志组,等状态为INACTIVE的时候可删除
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
alter database drop logfile group 4;添加日志组
alter database add logfile thread 1 group 1 size 200m;
alter database add logfile thread 1 group 2 size 200m;
alter database add logfile thread 2 group 3 size 200m;
alter database add logfile thread 2 group 4 size 200m;切换日志组,另一个实例也执行
alter system switch logfile;删除日志组,等状态为INACTIVE的时候可删除
alter database drop logfile group 11;
alter database drop logfile group 12;
alter database drop logfile group 13;
alter database drop logfile group 14;

1.5 配置静态监听

用grid用户,在$ORACLE_HOME/network/admin/listener.ora文件中添加,GLOBAL_DBNAME配置为db_unique_name,SID_NAME配置为该节点ORACLE_SID

节点1

SID_LIST_LISTENER =(SID_LIST =(SID_DESC = (GLOBAL_DBNAME = zsorcl)(ORACLE_HOME = /home/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME = zsorcl1)))

节点2

SID_LIST_LISTENER =(SID_LIST =(SID_DESC = (GLOBAL_DBNAME = zsorcl)(ORACLE_HOME = /home/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME = zsorcl2)))

重启监听

lsnrctl stop
lsnrctl start

1.6 配置TNSNAMES

oracle用户,在$ORACLE_HOME/network/admin/tnsnames.ora文件中添加,其中zsorcl_p的host配置为public ip、VIP,service_name配置为listener.ora文件中的GLOBAL_DBNAME也就是主库的db_unique_name,两个节点相同,zsorcl_s的service_name为备库db_unique_name

zsorcl_p =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.101)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.103)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.102)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.104)(PORT = 1521)))(CONNECT_DATA =(server=dedicated)(SERVICE_NAME = zsorcl)))zsorcl_s =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.110)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.23.112)(PORT = 1521)))(CONNECT_DATA =(server=dedicated)(SERVICE_NAME = zsorcldg)))

测试连接

tnsping zsorcl_p
tnsping zsorcl_s

1.7 配置参数

修改db_unique_name需要重启,如果不修改主库的这个参数,可以不用重启,ASM情况下最好不要修改,默认会减到OMF指定DG下的db_unique_name路径下,如果修改了那么convert参数需要注意设置全至少两个转换路径。#zsorcl是主库db_unique_name,zsorcldg是备库db_unique_name
alter system set log_archive_config='dg_config=(zsorcl,zsorcldg)' scope=both sid='*';#配置本地归档
alter system set log_archive_dest_1='location=+fra valid_for=(all_logfiles,all_roles) db_unique_name=zsorcl' scope=both sid='*';
alter system set log_archive_dest_state_1=enable;#service是tnsnames.ora中备库的tns名
alter system set log_archive_dest_2='service=zsorcl_s lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=zsorcldg' scope=both sid='*';
alter system set log_archive_dest_state_2=enable;alter system set fal_server=‘zsorcl_s’ scope=both sid='*';#只用于物理备库。该参数设置成AUTO的时候,主库中添加和删除数据文件的同时,备库中也会自动的进行相应的更改,默认情况值为MANUAL
alter system set standby_file_management='AUTO' scope=both sid='*';alter system set fal_server='zsorcl_s' scope=both sid='*';#前面是备库的数据文件路径,后面是主库的数据文件路径,需要重启生效
alter system set db_file_name_convert='+DATA','+DATA'  scope=spfile sid='*';#前面是备库的日志文件路径,后面是主库的日子文件路径,需要重启生效
alter system set log_file_name_convert='+DATA','+DATA'  scope=spfile sid='*';#归档命名格式
alter system set log_archive_format='%t_%s_%r.arch' scope=spfile sid='*';

保护模式

最大保护最大可用最大性能
Redo archival processLGWRLGWRLGWR or ARCH
Network transmission modeSYNCSYNCSYNC or ASYNC when using LGWR process. SYNC if using ARCH process
Disk write optionAFFIRMAFFIRMAFFIRM or NOAFFIRM
Standby redo log required?YESYESNo, but it is recommended
  • AFFIRM:表示主数据库上的REDO LOG只有被写入到从数据库的standby log才算有效。
  • ASYNC(异步):在事务提交之前,由事务生成的重做数据不需要在具有该属性的目的地接收到。默认则为 ASYNC
  • SYNC(同步):事务生成的重做数据必须在事务提交之前被每个启用了该属性的目的地接收。

用LGWR传输大致如下:
1)主库:只要有新的重做日志产生,LGWR进程将触发LNSn进程把新生成的日志传输到备库(注意:这里不能由LGWR直接传输,因为整个数据库实例只有一个LGWR,为了保证它的主要业务性能不受影响,不能由它直接传输);
2)备库:RFS进程接收到日志后,将其写入Standby重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等Standby重做日志归档后再应用。
3)其中,ASYNC和SYNC的区别在于:SYNC是在redo还在内存时,LNSn进程就开始传输,而ASYNC是在redo缓冲到online redo log后,LNSn才开始传输。

ARCH方式
arch方式是指,主库在被操作过程中,操作记录不断写入联机重做日志文件中(redo日志中)直到该组日志容量被写满,触发归档进程生成归档日志,然后再将归档日志通过网络发送给备库。
从同步的实时性来看,LGWR(SYNC) > LGWR(ASYNC)> ARCH

1.8 密码文件

复制主库密码文件至备库,备库修改密码文件名为orapwzsorcl1,备库的实例名叫zsorcl1

[oracle@rac11g_1 dbs]$ scp orapwzsorcl1 oracle@192.168.23.110:/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs

2. 备库

2.1 配置静态监听

[grid@rac11gstd admin]$ vi listener.ora
#加入以下参数
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = zsorcldg)(ORACLE_HOME = /home/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME = zsorcl1)))#重启监听
[grid@rac11gstd admin]$ lsnrctl reload

2.2 配置tnsnames

把主库的tnsnames.ora文件复制到备库

[oracle@rac11g_1 admin]$ scp tnsnames.ora oracle@192.168.23.110:/home/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/

2.3 备库创建pfile文件

主库创建pfile文件复制至备库/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs下修改

[oracle@rac11g_1 ~]$sqlplus / as sysdba
SQL> create pfile='/home/oracle/pfile_std.ora' from spfile;
[oracle@rac11g_1 ~]$ scp pfile_std.ora oracle@192.168.23.110:/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs

备库pfile文件

[oracle@rac11gstd dbs]$ cat pfile_std.ora
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.db_create_file_dest='+DATA'
*.db_create_online_log_dest_1='+DATA'
*.db_create_online_log_dest_2='+FRA'
*.db_domain=''
*.db_file_name_convert='+DATA','+DATA'
*.db_name='zsorcl'
*.db_unique_name='zsorcldg'
*.diagnostic_dest='/home/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=zsorclXDB)'
*.fal_server='zsorcl_p'
zsorcl1.instance_number=1
*.log_archive_config='dg_config=(zsorcl,zsorcldg)'
*.log_archive_dest_1='location=+fra valid_for=(all_logfiles,all_roles) db_unique_name=zsorcldg'
*.log_archive_dest_2='service=zsorcl_p lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=zsorcl'
*.log_archive_format='%t_%s_%r.arch'
*.log_file_name_convert='+DATA','+DATA'
*.open_cursors=500
*.processes=500
*.remote_listener='rac11gstd-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sessions=555
*.standby_file_management='AUTO'
zsorcl1.thread=1
zsorcl1.undo_tablespace='UNDOTBS1'

2.4 启动备库

启动至nomount状态

[oracle@rac11gstd dbs]$ sqlplus / as sysdba
SQL> startup nomount pfile='/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs/pfile_std.ora';

3. 开始复制

主库节点1 oracle用户执行

[oracle@rac11g_1 ~]$ rman target sys/oracle@zsorcl_p auxiliary sys/oracle@zsorcl_s

执行复制命令,这个命令可以直接恢复数据文件、standby日志文件和控制文件。

RMAN> run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
allocate auxiliary channel ch5 type disk;
allocate auxiliary channel ch6 type disk;
duplicate target database for standby from active database nofilenamecheck;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
release channel ch5;
release channel ch6;
}

contents of Memory Script:
{sql clone 'alter database mount standby database';
}
executing Memory Scriptsql statement: alter database mount standby database
released channel: ch1
released channel: ch2
released channel: ch3
released channel: ch4
released channel: ch5
released channel: ch6
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 06/19/2024 11:44:46
RMAN-05501: aborting duplication of target database
RMAN-03015: error occurred in stored script Memory Script
RMAN-03009: failure of sql command on clone_default channel at 06/19/2024 11:44:46
RMAN-11003: failure during parse/execution of SQL statement: alter database mount standby database
ORA-00201: control file version 11.2.0.4.0 incompatible with ORACLE version 11.2.0.0.0
ORA-00202: control file: '+DATA/zsorcldg/controlfile/current.256.1172087029'RMAN>

备库pfile里面一定要加版本,否则报版本不一致错误

注意:

由于备库是没有通过dbca建库,备库oracle用户的$ORACLE_HOME/bin/oracle权限不正确,复制过程会报错。如果可执行文件$ORACLE_HOME/bin/oracle的属主或权限设定出了问题,那么可能会造成很多问题。例如:无法登陆到数据库、ora-600错误、“TNS-12518: TNS:listener could not hand off client connection”、“Linux Error: 32: Broken pipe”、“ORA-12537: TNS:connection closed”、访问ASM磁盘出错等。解决办法很简单,可以在grid用户下运行setasmgidwrap命令重新配置oracle用户的$ORACLE_HOME/bin/oracle可执行文件的权限和属主或者直接将oracle文件的权限修改为6751。$ORACLE_HOME/bin/oracle可执行文件正确属主应该是oracle:asmadmin,并且权限必须有s才可以。我修改过后重启了备库服务器才复制成功,没重启的时候方法对了还是不行。

#grid用户
[grid@rac11gstd ~]$ setasmgidwrap -o /home/u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle
#root用户
[root@rac11gstd ~]# cd /home/u01/app/oracle/product/11.2.0/dbhome_1/bin
[root@rac11gstd bin]# chmod 6751 oracle
[root@rac11gstd bin]# ll oracle
-rwsr-s--x 1 oracle asmadmin 239501536 Jun 14 14:10 oracle

备库完成上面文件属组和权限修改后,完整的复制过程

[oracle@rac11g_1 ~]$ rman target sys/oracle@zsorcl_p auxiliary sys/oracle@zsorcl_sRecovery Manager: Release 11.2.0.4.0 - Production on Wed Jun 19 11:48:52 2024Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.connected to target database: ZSORCL (DBID=3108552649)
connected to auxiliary database: ZSORCL (not mounted)RMAN> run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
allocate auxiliary channel ch5 type disk;
allocate auxiliary channel ch6 type disk;
duplicate target database for standby from active database nofilenamecheck;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
release channel ch5;
release channel ch6;
}using target database control file instead of recovery catalog
allocated channel: ch1
channel ch1: SID=402 instance=zsorcl1 device type=DISKallocated channel: ch2
channel ch2: SID=594 instance=zsorcl1 device type=DISKallocated channel: ch3
channel ch3: SID=202 instance=zsorcl1 device type=DISKallocated channel: ch4
channel ch4: SID=403 instance=zsorcl1 device type=DISKallocated channel: ch5
channel ch5: SID=10 instance=zsorcl1 device type=DISKallocated channel: ch6
channel ch6: SID=203 instance=zsorcl1 device type=DISKStarting Duplicate Db at 2024-06-19 11:48:57contents of Memory Script:
{backup as copy reusetargetfile  '/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwzsorcl1' auxiliary format'/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwzsorcl1'   ;
}
executing Memory ScriptStarting backup at 2024-06-19 11:48:57
Finished backup at 2024-06-19 11:48:58contents of Memory Script:
{backup as copy current controlfile for standby auxiliary format  '+DATA/zsorcldg/controlfile/current.257.1172087339';restore clone controlfile to  '+FRA/zsorcldg/controlfile/current.257.1172087339' from'+DATA/zsorcldg/controlfile/current.257.1172087339';sql clone "create spfile from memory";shutdown clone immediate;startup clone nomount;sql clone "alter system set  control_files =''+DATA/zsorcldg/controlfile/current.257.1172087339'', ''+FRA/zsorcldg/controlfile/current.257.1172087339'' comment=''Set by RMAN'' scope=spfile";shutdown clone immediate;startup clone nomount;
}
executing Memory ScriptStarting backup at 2024-06-19 11:48:58
channel ch1: starting datafile copy
copying standby control file
output file name=/home/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_zsorcl1.f tag=TAG20240619T114858 RECID=2 STAMP=1172058539
channel ch1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2024-06-19 11:49:00Starting restore at 2024-06-19 11:49:00channel ch6: skipped, AUTOBACKUP already found
channel ch5: copied control file copy
Finished restore at 2024-06-19 11:49:09sql statement: create spfile from memoryOracle instance shut downconnected to auxiliary database (not started)
Oracle instance startedTotal System Global Area     342425600 bytesFixed Size                     2253024 bytes
Variable Size                285216544 bytes
Database Buffers              50331648 bytes
Redo Buffers                   4624384 bytes
allocated channel: ch5
channel ch5: SID=580 instance=zsorcl1 device type=DISK
allocated channel: ch6
channel ch6: SID=10 instance=zsorcl1 device type=DISKsql statement: alter system set  control_files =   ''+DATA/zsorcldg/controlfile/current.257.1172087339'', ''+FRA/zsorcldg/controlfile/current.257.1172087339'' comment= ''Set by RMAN'' scope=spfileOracle instance shut downconnected to auxiliary database (not started)
Oracle instance startedTotal System Global Area     342425600 bytesFixed Size                     2253024 bytes
Variable Size                285216544 bytes
Database Buffers              50331648 bytes
Redo Buffers                   4624384 bytes
allocated channel: ch5
channel ch5: SID=580 instance=zsorcl1 device type=DISK
allocated channel: ch6
channel ch6: SID=10 instance=zsorcl1 device type=DISKcontents of Memory Script:
{sql clone 'alter database mount standby database';
}
executing Memory Scriptsql statement: alter database mount standby database
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.contents of Memory Script:
{set newname for tempfile  1 to"+data";switch clone tempfile all;set newname for datafile  1 to"+data";set newname for datafile  2 to"+data";set newname for datafile  3 to"+data";set newname for datafile  4 to"+data";set newname for datafile  5 to"+data";backup as copy reusedatafile  1 auxiliary format"+data"   datafile2 auxiliary format"+data"   datafile3 auxiliary format"+data"   datafile4 auxiliary format"+data"   datafile5 auxiliary format"+data"   ;sql 'alter system archive log current';
}
executing Memory Scriptexecuting command: SET NEWNAMErenamed tempfile 1 to +data in control fileexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEStarting backup at 2024-06-19 11:50:02
channel ch1: starting datafile copy
input datafile file number=00003 name=+DATA/zsorcl/datafile/undotbs1.261.1171638355
channel ch2: starting datafile copy
input datafile file number=00001 name=+DATA/zsorcl/datafile/system.259.1171638351
channel ch3: starting datafile copy
input datafile file number=00002 name=+DATA/zsorcl/datafile/sysaux.260.1171638353
channel ch4: starting datafile copy
input datafile file number=00004 name=+DATA/zsorcl/datafile/undotbs2.263.1171638361
output file name=+DATA/zsorcldg/datafile/undotbs2.261.1172087403 tag=TAG20240619T115002
channel ch4: datafile copy complete, elapsed time: 00:00:15
channel ch4: starting datafile copy
input datafile file number=00005 name=+DATA/zsorcl/datafile/users.264.1171638361
output file name=+DATA/zsorcldg/datafile/system.259.1172087403 tag=TAG20240619T115002
channel ch2: datafile copy complete, elapsed time: 00:00:16
output file name=+DATA/zsorcldg/datafile/users.262.1172087419 tag=TAG20240619T115002
channel ch4: datafile copy complete, elapsed time: 00:00:01
output file name=+DATA/zsorcldg/datafile/undotbs1.258.1172087403 tag=TAG20240619T115002
channel ch1: datafile copy complete, elapsed time: 00:00:19
output file name=+DATA/zsorcldg/datafile/sysaux.260.1172087403 tag=TAG20240619T115002
channel ch3: datafile copy complete, elapsed time: 00:00:18
Finished backup at 2024-06-19 11:50:21sql statement: alter system archive log currentcontents of Memory Script:
{switch clone datafile all;
}
executing Memory Scriptdatafile 1 switched to datafile copy
input datafile copy RECID=2 STAMP=1172087428 file name=+DATA/zsorcldg/datafile/system.259.1172087403
datafile 2 switched to datafile copy
input datafile copy RECID=3 STAMP=1172087428 file name=+DATA/zsorcldg/datafile/sysaux.260.1172087403
datafile 3 switched to datafile copy
input datafile copy RECID=4 STAMP=1172087428 file name=+DATA/zsorcldg/datafile/undotbs1.258.1172087403
datafile 4 switched to datafile copy
input datafile copy RECID=5 STAMP=1172087428 file name=+DATA/zsorcldg/datafile/undotbs2.261.1172087403
datafile 5 switched to datafile copy
input datafile copy RECID=6 STAMP=1172087429 file name=+DATA/zsorcldg/datafile/users.262.1172087419
Finished Duplicate Db at 2024-06-19 11:50:37released channel: ch1released channel: ch2released channel: ch3released channel: ch4released channel: ch5released channel: ch6RMAN>

4. 复制完成打开备库

打开备库并且开启实时日志应用

#关闭数据库
shutdown immediate#启动数据库
startup#查看当前open_mode,备库是read only状态
select database_role,protection_mode,protection_level,open_mode from v$database;#查看归档日志进程
select process,client_process,sequence#,status from v$managed_standby;#备库开启日志实时应用
recover managed standby database using current logfile disconnect from session;#查看归档日志进程,此时多了一个进程MRP0
select process,client_process,sequence#,status from v$managed_standby;

备库应用主库日志时有无using current logfile选项的区别

  • 无using current logfile,主库切换日志后,备库才从归档文件挖掘出变化,然后应用到库文件中。
  • 有using current logfile,备库根据接收到的redo信息,实时应用到备库上,即便是最大性能。

5. 验证数据是否同步

主库操作

create user zs identified by oracle;grant dba to zs;conn zs/oraclecreate table test_sync(id number);select count(*) from test_sync;COUNT(*)
----------0beginfor i in 1..10000 loopinsert into test_sync values (520);end loop;end;
/commit;select count(*) from test_sync;COUNT(*)
----------10000

备库查看数据是否过来

select count(*) from test_sync;COUNT(*)
----------10000

ADG验证完毕

6. ADG开关步骤

6.1 关闭ADG

主库shutdown >> 备库取消应用归档日志 >> 关闭备库 >> 关闭主库和备库的监听

1:主库上:SQL> shutdown immediate2:备库上:SQL> alter database recover managed standby database cancel;3:备库上:SQL> shutdown immediate4:停止监听主库:
[grid@rac11g_1 ~]$ lsnrctl stop
[grid@rac11g_2 ~]$ lsnrctl stop备库:
[grid@rac11gstd ~]$ lsnrctl stop

6.2 启动ADG

启动主库和备库监听 >> 启动备库 >> 启动主库 >> 切换主库日志

1:主库和备库:
[grid@rac11g_1 ~]$ lsnrctl start
[grid@rac11g_2 ~]$ lsnrctl start[grid@rac11gstd ~]$ lsnrctl start2:启动备库:
SQL> startup nomount
SQL> alter database mount standby database;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect from session;3:启动主库:
SQL> startup

至此oracle 11g rac + rac 单节点 ADG搭建完毕

十二、相关视图

查看保护模式

select database_role,protection_mode,protection_level,open_mode from v$database;

查看归档日志进程

select process,client_process,sequence#,status from v$managed_standby;

查看备库已经归档的redo

SELECT REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$ARCHIVED_LOG; 

查看备库已经应用的 redo

 SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$LOG_HISTORY;

查看备库接收 , 应用redo数据过程

SELECT MESSAGE FROM V$DATAGUARD_STATUS;

查看备库上的日志接收情况

select status,target,archiver,error,process from v$archive_dest;

查看当前序列号

archive log list;

相关文章:

VMware虚拟机安装CentOS7.9 Oracle 11.2.0.4 RAC+单节点RAC ADG

目录 一、参考资料 二、RAC环境配置清单 1.主机环境 2.共享存储 3.IP地址 4.虚拟机 三、系统参数配置 1. 配置网卡 1.1 配置NAT网卡 1.2 配置HostOnly网卡 2. 修改主机名 3. 配置/etc/hosts 4. 关闭防火墙 5. 关闭Selinux 6. 配置内核参数 7. 配置grid、oracle…...

iOS 视图实现渐变色背景

需求 目的是要实现视图的自定义的渐变背景色&#xff0c;实现一个能够随时使用的工具。 实现讨论 在 iOS 中&#xff0c;如果设置视图单一的背景色&#xff0c;是很简单的。可是&#xff0c;如果要设置渐变的背景色&#xff0c;该怎么实现呢&#xff1f;其实也没有很是麻烦&…...

hive命令和参数

一.命令行模式 hive命令行 hive -H 查询hive的可用参数 hive -e "" 在hive命令中直接执行简单的sql语句 在hive命令中执行sql文件 hive -f 文件地址 在hive命令中新建hive变量 hive --hivevar mykey"myvalue" beeline命令行 先得启动hiveserver…...

『MySQL 实战 45 讲』22 - MySQL 有哪些“饮鸩止渴”提高性能的方法?

MySQL 有哪些“饮鸩止渴”提高性能的方法&#xff1f; 需求&#xff1a;业务高峰期&#xff0c;生产环境的 MySQL 压力太大&#xff0c;没法正常响应&#xff0c;需要短期内、临时性地提升一些性能 短连接风暴 短连接模式&#xff1a;执行很少的 SQL 语句就断开&#xff0c;…...

创建kset

1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…...

实战:基于Java的大数据处理与分析平台

实战&#xff1a;基于Java的大数据处理与分析平台 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用Java构建高效的大数据处理与分析平台。…...

构建安全稳定的应用:Spring Security 实用指南

前言 在现代 Web 应用程序中&#xff0c;安全性是至关重要的一个方面。Spring Security 作为一个功能强大且广泛使用的安全框架&#xff0c;为 Java 应用程序提供了全面的安全解决方案。本文将深入介绍 Spring Security 的基本概念、核心功能以及如何在应用程序中使用它来实现…...

嵌入式STM32F103项目实例可以按照以下步骤进行构建和实现

嵌入式STM32F103项目实例可以按照以下步骤进行构建和实现&#xff1a; 1. 项目概述 目标&#xff1a;演示STM32F103开发板的基本功能&#xff0c;通过LED闪烁来实现。硬件需求&#xff1a;STM32F103开发板、LED灯、杜邦线、USB转串口模块&#xff08;可选&#xff0c;用于调试…...

2024最新Stable Diffusion【插件篇】:SD提示词智能生成插件教程!

前言 今天我们介绍几款可以自动生成提示词的插件。所谓智能生成提示词&#xff0c;就是我们只需要输入非常少量的关键字&#xff0c;插件就会根据关键词提示信息帮助我们生成一系列关键字或者句子作为提示词。下面来和我一起看看吧。 一. SD智能提示词工具 之前的文章中和大…...

彻底学会Gradle插件版本和Gradle版本及对应关系

看完这篇&#xff0c;保你彻底学会Gradle插件版本和Gradle版本及对应关系&#xff0c;超详细超全的对应关系表 需要知道Gradle插件版本和Gradle版本的对应关系&#xff0c;其实就是需要知道Gradle插件版本对应所需的gradle最低版本&#xff0c;详细对应关系如下表格&#xff0…...

p2p、分布式,区块链笔记: 通过libp2p的Kademlia网络协议实现kv-store

Kademlia 网络协议 Kademlia 是一种分布式哈希表协议和算法&#xff0c;用于构建去中心化的对等网络&#xff0c;核心思想是通过分布式的网络结构来实现高效的数据查找和存储。在这个学习项目里&#xff0c;Kademlia 作为 libp2p 中的 NetworkBehaviour的组成。 以下这些函数或…...

ShareSDK iOS端如何实现小红书分享

下载SDK 请登陆官网 &#xff0c;找到SDK下载&#xff0c;勾选需要的平台下载 导入SDK &#xff08;1&#xff09;离线导入将上述下载到的SDK&#xff0c;直接将整个SDK资源文件拖进项目里&#xff0c;如下图&#xff1a; 并且勾选以下3个选项 在点击Finish&#xff0c;…...

算法day1 两数之和 两数相加 冒泡排序 快速排序

两数之和 最简单的思维方式肯定是去凑两个数&#xff0c;两个数的和是目标值就ok。这里两遍for循环解决。 两数相加 敲了一晚上哈哈&#xff0c;结果超过int范围捏&#xff0c;难受捏。 public class Test2 {public static void main(String[] args) { // ListNode l1 …...

Rust监控可观测性

可观测性 在监控章节的引言中&#xff0c;我们提到了老板、前端、后端眼中的监控是各不相同的&#xff0c;那么有没有办法将监控模型进行抽象、统一呢&#xff1f; 来简单分析一下&#xff1a; 业务指标实时展示&#xff0c;这是一个指标型的数据( metric )手机 APP 上传的数…...

SVN 的忽略(Ignore)和递归(Recursively)以及忽略部分

SVN中忽略大家经常用到&#xff0c;但总是似懂非懂&#xff0c;下面就详细展开说明一下忽略如何设置。 两个忽略 通常设置忽略都是文件夹和里面的文件都忽略。 设置忽略我们通常只需要鼠标右键点击忽略就可以了&#xff0c;如图&#xff1a; 第一个忽略用的最多&#xff0c;…...

vue3开发过程中遇到的一些问题记录

问题&#xff1a; vue3在使用 defineProps、defineEmits、defineExpose 时不需要import&#xff0c;但是 eslint会报错error defineProps is not defined no-undef 解决方法&#xff1a; 安装 vue-eslint-parser 插件&#xff0c;在 .eslintrc.js 文件中添加配置 parser: vue-e…...

Jedis、Lettuce、RedisTemplate连接中间件

jedis就像jdbc一样&#xff0c;用于两个端直接的连接。 1.创建Spring项目 这里不过多赘述... 2.导入连接工具jedis 在pom文件中导入jedis的依赖。 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version&…...

【C++】继承(详解)

前言&#xff1a;今天我们正式的步入C进阶内容的学习了&#xff0c;当然了既然是进阶意味着学习难度的不断提升&#xff0c;各位一起努力呐。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23;学习 &#x1f448; &#…...

网络io与select,poll,epoll

前言 网络 IO&#xff0c;会涉及到两个系统对象&#xff0c;一个是用户空间调用 IO 的进程或者线程&#xff0c;另一个是内核空间的内核系统&#xff0c;比如发生 IO 操作 read 时&#xff0c;它会经历两个阶段&#xff1a; 1. 等待数据准备就绪 2. 将数据从内核拷贝到进程或…...

【Linux】多线程(一万六千字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 线程的概念 线程的理解(Linux系统为例) 在Linux系统里如何保证让正文部分的代码可以并发的去跑呢&#xff1f; 为什么要有多进程呢&#xff1f; 为…...

sh脚本笔记2

test条件测试 语法 条件测试语法说明语法1&#xff1a;test <测试表达式>这是利用test命令进行条件测试表达式的方法。test命令和“<测试表达式>”之间至少有一个空格语法2&#xff1a;[ <测试表达式> ]这是通过[]&#xff08;单中括号&#xff09;进行条件…...

js替换对象里面的对象名称

data为数组&#xff0c;val为修改前的名称&#xff0c;name为修改后的名称 JSON.parse(JSON.stringify(data).replace(/val/g, name)) &#xff1b; 1.替换data里面的对象tenantInfoRespVO名称替换成tenantInfoUpdateReqVO 2.替换语句&#xff1a; 代码可复制 let tenantInf…...

鸿蒙开发设备管理:【@ohos.settings (设置数据项名称)】

设置数据项名称 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 本模块提供设置数据项的访问功能相关接口的说明及示例。 导入模块 import settings from ohos.settings;settings.getUri…...

STM32之五:TIM定时器(2-通用定时器)

目录 通用定时器&#xff08;TIM2~5&#xff09;框图 1、 输入时钟源选择 2、 时基单元 3 、输入捕获&#xff1a;&#xff08;IC—Input Capture&#xff09; 3.1 输入捕获通道框图&#xff08;TI1为例&#xff09; 3.1.1 滤波器&#xff1a; 3.1.2 边沿检测器&#xf…...

【分布式系统】监控平台Zabbix对接grafana

以前两篇博客为基础 【分布式系统】监控平台Zabbix介绍与部署&#xff08;命令截图版&#xff09;-CSDN博客 【分布式系统】监控平台Zabbix自定义模版配置-CSDN博客 一.安装grafana并启动 添加一台服务器192.168.80.104 初始化操作 systemctl disable --now firewalld set…...

操作系统真象还原:编写硬盘驱动程序

第13章-编写硬盘驱动程序 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 13.1 硬盘及分区表 13.1.1 创建从盘及获取安装的磁盘数 要实现文件系统&#xff0c;必须先有个磁盘介质&#xff0c;虽然咱们己经有个虚拟磁盘 hd60M.img&#xff0c;但它只…...

firewalld防火墙(二)

一&#xff1a;firewalld高级配置 1&#xff1a;关于iptables的知识 iptables 是Linux系统中传统的命令行防火墙管理工具&#xff0c;它基于内核的netfilter框架工作&#xff0c;用于配置和管理网络规则集&#xff0c;比如过滤&#xff08;允许/拒绝&#xff09;进出的数据包…...

Android-悬浮窗口

在Android系统中&#xff0c;如果应用需要弹出一个悬浮窗口&#xff0c;就需要申请一项特殊权限 <uses-permission android:name"android.permission.SYSTEM_ALERT_WINDOW"/>在Android O之前的系统中申请了该权限后&#xff0c;再给对应的window设置 WindowM…...

打破僵局:Foxit Reader无法打开的终极解决方案

打破僵局&#xff1a;Foxit Reader无法打开的终极解决方案 在数字化阅读时代&#xff0c;Foxit Reader作为一款广受欢迎的PDF阅读器&#xff0c;其打不开的问题无疑会给用户带来诸多不便。本文将为您提供全面的解决方案&#xff0c;从基础检查到高级技巧&#xff0c;确保您能够…...

[调试] JTAG下运行正常,从QSPI或者SD卡启动则无响应,如何查找问题

[调试] JTAG下运行正常&#xff0c;从QSPI或者SD卡启动则无响应&#xff0c;如何查找问题 一、问题现象二、用自定义fsbl替代系统默认的fsbl1. 新建fsbl_new2. 如果提示缺少xilffs库3. 使能调试信息输出 三. 启动成功和失败情况下的典型输出1. JTAG启动模式: 正常加载2. QSPI启…...

Linux内核 -- 多线程之wait_event用法

Linux Kernel 中 wait_event 的高级用法及注意事项 在Linux内核编程中&#xff0c;wait_event 系列函数是用于实现进程等待和事件通知机制的重要工具。本文将详细介绍 wait_event 的高级用法以及注意事项。 1. 基本用法 wait_event 系列宏主要包括以下几种形式&#xff1a; …...

双指针系列第 8 篇:盛水最多的容器。几句话讲明白!

Leetcode 题目链接 思路 取首尾双指针和水量如下所示&#xff0c;设高度函数为 h ( i ) h(i) h(i)&#xff0c;在下图中 h ( l ) < h ( r ) h(l) < h(r) h(l)<h(r)。 观察以 l l l 为左边界所能构成的其他水量&#xff0c;与矮的右边界搭配结果如下。 与高的…...

c++高阶-1-模板

文章目录 模板一、模板基本语法二、函数模板1.基本语法2.函数模板注意事项3.普通函数和函数模板区别4.普通函数和函数模板调用规则 三、类模板1.基本语法2.类模板和函数模板的区别3.类模板中成员函数调用时机4.类模板对象做函数参数5.类模板与继承6.成员函数的类外实现 模板 一…...

.net core 的 winform 的 浏览器控件 WebView2

在.NET Core WinForms应用程序中&#xff0c;没有直接的“浏览器控件”&#xff0c;因为WinForms不支持像WebBrowser控件那样的功能。但是&#xff0c;你可以使用WebView2控件&#xff0c;它是一个基于Chromium的浏览器内核&#xff0c;可以在WinForms应用程序中嵌入Web内容。 …...

Django QuerySet对象,all()方法

all()方法 在Django中&#xff0c;all()方法是QuerySet对象的一个方法&#xff0c;用于获取模型的所有实例。 当你调用ModelName.objects.all()时&#xff0c;Django会生成一个SQL查询&#xff0c;从数据库中获取该模型的所有记录&#xff0c;并返回一个QuerySet对象&#xf…...

自动生成网站sitemap

要在 Next.js 和 Contentlayer 项目中实现自动生成 Sitemap 的功能&#xff0c;你可以编写一个脚本&#xff0c;在每次生成文档后自动生成 Sitemap。以下是一个示例脚本&#xff0c;你可以根据自己的需求进行调整。 步骤 1&#xff1a;安装必要的依赖 首先&#xff0c;你需要…...

中国经济昆虫志(55卷)

中国经济昆虫志&#xff0c;共55卷&#xff0c;内容包括概述、形态特征、分类等。各级分类单元均编有检索表&#xff0c;每个种有特征描述、地理分布&#xff0c;有的还记载有生活习性和防治方法。为便于鉴定&#xff0c;绘制有特征图和彩色图。 包括鞘翅目天牛科、半翅目蝽科、…...

linux环境安装elasticsearch缓存数据库和Kibana客户端

linux环境安装elasticsearch缓存数据库&#xff0c;今天我们安装7.17.18版本&#xff0c;并分析遇到的问题。 一、elasticsearch安装运行 1、直接下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.18-linux-x86_64.tar.gz2、解压 tar -…...

OpenSSL的一些使用案例

目录 一、介绍 二、基本使用 1、Shell &#xff08;1&#xff09;文件加解密 &#xff08;2&#xff09;生成密钥文件 2、API &#xff08;1&#xff09;md5sum &#xff08;2&#xff09;AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法&#xff0c;只…...

常用字符串方法<python>

导言 在python中内置了许多的字符串方法&#xff0c;使用字符串方法可以方便快捷解决很多问题&#xff0c;所以本文将要介绍一些常用的字符串方法。 目录 导言 string.center(width[,fillchar]) string.capitalize() string.count(sub[,start[,end]]) string.join(iterabl…...

线程池666666

1. 作用 线程池内部维护了多个工作线程&#xff0c;每个工作线程都会去任务队列中拿取任务并执行&#xff0c;当执行完一个任务后不是马上销毁&#xff0c;而是继续保留执行其它任务。显然&#xff0c;线程池提高了多线程的复用率&#xff0c;减少了创建和销毁线程的时间。 2…...

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法&#xff0c;其目的是将数据集分成 ( k ) 个不同的簇&#xff0c;每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置&#xff0c;使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…...

主流国产服务器操作系统技术分析

主流国产服务器操作系统 信创 "信创"&#xff0c;即信息技术应用创新&#xff0c;作为科技自立自强的核心词汇&#xff0c;在我国信息化建设的进程中扮演着至关重要的角色。自2016年起步&#xff0c;2020年开始蓬勃兴起&#xff0c;信创的浪潮正席卷整个信息与通信技…...

【Linux】线程封装与互斥(万字)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 C多线程的用法 对原生线程进行一次封装 理解pthread线程 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 操作共享变量会有问题的售票…...

5分钟教你部署MySQL8.0环境

此方法基于Windows操作系统&#xff01; 一、在MySQL官网单击downloads&#xff08;下载&#xff09;MySQLhttps://www.mysql.com/cn/ 选择在Windows操作系统下载 二、选择合适的版本 推荐下载第二种&#xff0c;安装时离线安装即可 三、安装MySQL8.0 1、找到MySQL下载完成…...

LLM应用:传统NLP任务

LLM出来以后&#xff0c;知乎上就出现了“传统NLP已死”的言论&#xff0c;但是传统NLP真的就被扔进历史的垃圾桶了吗&#xff1f; 其实&#xff0c;尽管LLM具有出色的通用能力&#xff0c;但仍然无法有效应对低资源领域的自然语言处理任务&#xff0c;如小语种翻译。为了更好地…...

基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建Kafka大数据运算环境---任务11:基础环境准备

任务描述 任务主要是安装配置基础环境&#xff0c;主要内容包括&#xff1a; 1、安装java Kafka和ZooKeeper都需要安装Java环境&#xff0c;推荐至少Java8及以上版本 2、安装ZooKeeper ZooKeeper是Kafka集群的必要组件 3、安装kafka Kafka版本包括使用的scala语言版本和kafka版…...

Golang中swtich中如何强制执行下一个代码块

switch 语句中的 case 代码块会默认带上 break&#xff0c;但可以使用 fallthrough 来强制执行下一个 case 代码块。 package mainimport ("fmt" )func main() {isSpace : func(char byte) bool {switch char {case : // 空格符会直接 break&#xff0c;返回 false…...

读书笔记-Java并发编程的艺术-第4章(Java并发编程基础)-第2节(启动和终止线程)

文章目录 4.2 启动和终止线程4.2.1 构造线程4.2.2 启动线程4.2.3 理解中断4.2.4 过期的suspend()、resume()和stop()4.2.5 安全地终止线程 4.2 启动和终止线程 在前面章节的示例中通过调用线程的start()方法进行启动&#xff0c;随着run()方法的执行完毕&#xff0c;线程也随之…...

通俗大白话理解Docker

什么是Docker Docker本质上是一种容器化技术&#xff0c;用于将应用程序及其所有依赖打包到一个标准化的单元中。这些单元&#xff08;容器&#xff09;可以在任何运行Docker的机器上运行。每个容器是相互隔离的&#xff0c;具有自己的文件系统、网络和进程空间。 以下是大白话…...

入门机器视觉的正确打开方式——徒手撸一个python+opencv实现的机器视觉简易调试工具(下)

目录 1.引言2.框架思路3.图像处理流程化的实现3.1如何解析图像流程数据结构3.2 使用networkx网络图库3.3 python实现 4.结论5.python源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 1.引言 在当今AI时代&#xff0c;关于视觉…...

ionic7 使用Capacitor打包 apk 之后,设置网络权限

报错处理 在打包的时候遇到过几个问题&#xff0c;这里记录下来两个 Visual Studio Code运行ionic build出错显示ionic : 无法加载文件 ionic 项目通过 android studio 打开报错 capacitor.settings.gradle 文件不存在 ionic7 项目初始化以及打包 apk 这篇文章讲到了如果安装…...

机器学习——岭回归

1、岭回归与线性回归的区别 岭回归&#xff08;Ridge Regression&#xff09;和线性回归&#xff08;Linear Regression&#xff09;都是用于回归分析的统计方法&#xff0c;但它们在处理方式和应用场景上有一些关键的区别&#xff1a; a)基本概念 线性回归&#xff1a;目标是…...

旅游系统(附管理端+前台)PHP源码

一. 前言 今天小编给大家带来了一款可学习&#xff0c;可商用的&#xff0c;旅游系统 源码&#xff0c;支持二开&#xff0c;无加密。支持景点管理&#xff0c;登录&#xff0c;景点预定&#xff0c;意见反馈&#xff0c;统计等功能。详细界面和功能见下面视频演示。 二. 视频…...

如何在Java中实现数据备份与恢复方案

如何在Java中实现数据备份与恢复方案 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在软件开发和运维过程中&#xff0c;数据备份与恢复是保障数据安全和系统可靠性的重要手段。无论是意外数据丢失…...

问题集锦1

01.inner中使用JwtTokenUtil.getUserCode() 前端调用上传&#xff08;java&#xff09;&#xff0c;上传使用加购 Overridepublic Boolean insertShoppingCart(InsertShoppingCartParamsDto dto) {// 通过userCode,itemCode和supplierCode来判断当前加购人添加到购物车的商品是…...

GfK中国联合上海市眼镜行业协会举办高层论坛:探索眼镜市场机遇共筑视觉健

中国与上海市眼镜行业协会联合主办的 “视界之窗:瞰见全球及中国眼镜市场未来”高层论坛5月16日在上海成功举行。本次论坛汇聚了上海市眼病防治中心视光中心、上海健康医学院医学技术学院等三十余家专业机构和协会专家,以及上海三联有限公司、上海依视路光学有限公司、卡尔蔡司…...

【Linux】TCP协议【中】{确认应答机制/超时重传机制/连接管理机制}

文章目录 1.确认应答机制2.超时重传机制&#xff1a;超时不一定是真超时了3.连接管理机制 1.确认应答机制 TCP协议中的确认应答机制是确保数据可靠传输的关键部分。以下是该机制的主要步骤和特点的详细解释&#xff1a; 数据分段与发送&#xff1a; 发送方将要发送的数据分成一…...

vite开发服务器server选项配置(2024-05-29)

server.host​ 类型&#xff1a; string | boolean默认&#xff1a; localhost 指定服务器应该监听哪个 IP 地址。 如果将此设置为 0.0.0.0 或者 true 将监听所有地址&#xff0c;包括局域网和公网地址。 也可以通过 CLI 使用 --host 0.0.0.0 或 --host 来设置。 NOTE 在某些…...

开发中遇到Electron自定义窗口的问题

开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件&#xff0c;自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron&#xff0c;进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…...

Android studio 连接 adb传输文件到电脑

前提是已经连接到adb window R&#xff1a; 打开控制台adb devices&#xff1a;可以查看已经连接的设备adb pull /storage/emulated/0/Download/aa.png C:\Users\Administrator\Desktop&#xff1a;拉取连接设备的文件 aa.png 到电脑桌面上 (在电脑控制台进行拉取操作) 如果…...

2024年中国电机工程学会杯数学建模思路 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#xff0c;预测2022今年国赛也会与该模型相关。 1 模型描…...