RAC物理结构

现在的RAC环境是二个节点: dbp,dbs, 这个实验就是添加节点dbi。

dbp,dbs和dbi节点的信息规划如下:

服务器主机名

dbp

dbs

dbi

公共IP地址(eth0)

192.168.123.154

192.168.123.155

192.168.123.156

虚拟IP地址(eth0)

192.168.123.130

192.168.123.131

192.168.123.132

私有IP地址(eth1)

10.0.0.154

10.0.0.155

10.0.0.156

ORACLE RAC SID

wxxrdb1

wxxrdb2

wxxrdb3

集群实例名称

crs(查看命令$CRS_HOME/bin/cemutlo -n)

OCR(oracle集群注册表)

/dev/raw/raw1   /dev/sdb1        300M
查看命令:

1、$CRS_HOME/bin/ocrcheck

2、根据上述步骤1查到裸设备后,再执行 raw -q /dev/raw/raw1 查得裸设备的major和minor号后,再根据以下查ASM设备的方法查得对应的块设备和计算大小。

表决磁盘(voting disk)

/dev/raw/raw2   /dev/sdb2       300M

查看命令:

1、$CRS_HOME/bin/crsctl query css votedisk

2、根据上述步骤1查到裸设备后,再执行 raw -q /dev/raw/raw2 查得裸设备的major和minor号后,再根据以下查ASM设备的方法查得对应的块设备和计算大小。

ASM

ASM_diskname:VOL1  For_DG:+DATA Blockdev_name:/dev/sdc1  容量:6G

ASM_diskname:VOL2  For_DG:+RECOVERY  Blockdev_name:/dev/sdd1  容量:6G

ASM_diskname: ARCH_DISK1  For_DG:+ARCH Blockdev_name:/dev/sdd2  容量:5G

ASM_diskname: ARCH_DISK2  For_DG:+ARCH Blockdev_name:/dev/sdd3  容量:5G

检查方法:

1、  oracleasm listdisks 查到所有的ASM diskname

2、  ls -ltr /dev/oracleasm/disks/VOL1

brw-rw---- 1 oracle dba 8, 33 02-12 00:16 /dev/oracleasm/disks/VOL1

查到VOL1的major是8,minor 是33

3、[root@dbp dev]# ls -ltr /dev | grep "8,.*33"

brw-r----- 1 root disk     8,   33 2016-02-12 sdc1

根据VOL1的major和minor号查到的块设备是/dev/sdc1

3、  查看 /dev/sdc1 的大小:

fdisk -l /dev/sdc1 或

blockdev --getsize /dev/sdc1 查得块数,再乘以512(OS块大小)/1024/1024/1024

上述两个命令计算的大小有差异,fdisk -l命令计算的大小比 blockdev命令计算的大,但blockdev命令计算的大小和v$asm_disk.total_mb 一样差不多。

4、  查看 ASM disk所属的DG(Disk Group):

select asmdg.name,asmd.group_number,asmd.path,asmd.total_mb,asmd.free_mb

from v$asm_disk asmd,v$asm_diskgroup asmdg

where asmd.group_number=asmdg.group_number;

数据库备份

一.安装前准备及OS安装配置

同2个节点的类似,装好虚拟操作系统,配置好硬盘,网关,IP地址,建立用户等效性,建立用户并创建相关目录,修改linux参数等。

1、安装并配置新节点的虚拟机

1.1、复制之前节点刚创建未配置RAC时的虚拟机或新创建一个虚拟机。

1.2、将之前节点创建虚拟机的.vmx配置文件中的以下部分复制到新节点虚拟机的.vmx配置文件中:

disk.locking= "FALSE"     ##创建ASM共享磁盘必须要配置此项

scsi1:0.deviceType = "disk"   ##如果scsi1:0对应的磁盘为共享磁盘,必须要配置此项

scsi1:2.deviceType= "disk"   ##如果scsi1:2对应的磁盘为共享磁盘,必须要配置此项

scsi1:0.fileName = "E:\VirtualMachines\ShareDisk\OCR_VOTEDISK.vmdk"

scsi1:0.mode= "independent-persistent"

scsi1:0.present= "TRUE"

scsi1:0.redo= ""

scsi1:0.writeThrough= "TRUE"

scsi1:1.deviceType= "disk"

scsi1:1.fileName= "E:\Virtual Machines\ShareDisk\ASM_DISK_ARCH_1.vmdk"

scsi1:1.mode= "independent-persistent"

scsi1:1.present= "TRUE"

scsi1:1.redo= ""

scsi1:1.writeThrough= "TRUE"

scsi1:2.deviceType= "disk"

scsi1:2.fileName= "E:\Virtual Machines\ShareDisk\ASM_DISK_ARCH_2.vmdk"

scsi1:2.mode= "independent-persistent"

scsi1:2.present= "TRUE"

scsi1:2.redo= ""

scsi1:2.writeThrough ="TRUE"

如果是复制之前节点创建的虚拟机,侧displayName 等参数也要改为新节点名字的参数。

2、节点三(dbi)的网络配置

配置节点三dbi的两个网卡(PublicNIC 和 Private NIC)的固定IP,Hostname, Gateway,配置情况见本文档最上的节点规划信息表,对应的配置文件是:

/etc/sysconfig/network-scripts/ifcfg-eth0  ## Public NIC 的IP和网关配置

/etc/sysconfig/network-scripts/ifcfg-eth1  ## Private NIC 的IP和网关配置

/etc/sysconfig/network    ## 主机名配置

配置情况如下:

[root@dbi network-scripts]# cat ifcfg-eth0

# Intel Corporation 82545EM Gigabit Ethernet Controller(Copper)

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

HWADDR=00:0c:29:ce:22:50

TYPE=Ethernet

NETMASK=255.255.255.0

IPADDR=192.168.123.156

USERCTL=no

IPV6INIT=no

PEERDNS=yes

[root@dbi network-scripts]# cat ifcfg-eth1

# Intel Corporation 82545EM Gigabit Ethernet Controller(Copper)

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

HWADDR=00:0c:29:ce:22:5a

TYPE=Ethernet

NETMASK=255.255.255.0

IPADDR=10.0.0.156

USERCTL=no

IPV6INIT=no

PEERDNS=yes

[root@dbi sysconfig]# cat network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=dbi

##上面这个在文件修改主机名的方法需要重启才能生效,而且是永久生效,要立即生效,还要再执行一下命令:hostname dbi

也可以用root用户登录图形界面配置或在安装系统时配置。

修改完IP,网关等网络配置之后,需要重启网络服务生效:

/etc/init.d/network restart

3、节点三(dbi)的时间同步配置

有多种方法可以实现时间同步,其中:

3.1、最简单的方法是使用ntpdate命令进行时间同步,但使用ntpdate命令同步时间时,ntpd服务必须要关闭。通过在各节点主机的crontab 中加入以下每分钟向节点一同步时间的定时任务:

* * * * * /usr/sbin/ntpdate 192.168.123.154

3.2、本例中,由于节点一dbp(192.168.123.154)已经配置为NTP时间服务器,所以需要在节点三(dbi)中做如下配置:

3.2.1、在dbi节点的/etc/ntp.conf文件中配置后的内容如下:

server192.168.123.154 prefer

driftfile /var/lib/ntp/drift

broadcastdelay 0.008

keys /etc/ntp/keys

3.2.2、在dbi节点及各节点的/etc/sysconfig/ntpd 文件中加入-x参数,配置后的内容如下:

[root@dbi tmp]#cat /etc/sysconfig/ntpd

# Drop root to id 'ntp:ntp' by default.

OPTIONS="-x-u ntp:ntp -p /var/run/ntpd.pid"

# Set to 'yes' to sync hw clock aftersuccessful ntpdate

SYNC_HWCLOCK=no

# Additional options for ntpdate

NTPDATE_OPTIONS=""

RAC 对节点间时间较敏感,如果不同步在安装clusterware 时后会报错,而且在安装vipca的时候也会报错。

3.3、然后,重启 NTP 服务:

[root@dbi tmp]# /etc/init.d/ntpd restart

[root@dbi tmp]# chkconfig --level 35 ntpd on  ##配置开机自动启动ntpd服务,必须执行这个。

5、 安装Oracle RAC依赖的操作系统软件包

5.1、执行以下命令检查系统所需的软件包是否已经安装:

rpm -q --qf'%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' \

binutils \

compat-db \

compat-libstdc++\

control-center \

gcc \

gcc-c++ \

glibc \

glibc-common \

gnome-libs \

libstdc++ \

libstdc++-devel\

make \

pdksh \

sysstat \

xscreensaver \

setarch \

glibc-devel \

libaio | sort

5.2、检查发现如下软件包没有安装:

packagecompat-db is not installed

packagecompat-libstdc++ is not installed  ##发现这个包安装了,还是提示没安装,安装后,不用理会这个提示

packagegnome-libs is not installed

package pdksh isnot installed

package sysstatis not installed

packagexscreensaver is not installed

mount挂载系统安装盘的ISO镜像文件,进入光盘的/Server目录下查看相关包进行安装。

6、 安装oracleasm ASMlib软件包

[root@dbi tmp]# ls -ltr

总计 252

-rw-r--r-- 1 root root  90225 02-13 02:21 oracleasm-support-2.1.8-1.el5.x86_64.rpm

-rw-r--r-- 1 root root  14176 02-13 02:21oracleasmlib-2.0.4-1.el5.x86_64.rpm

-rw-r--r-- 1 root root 137396 02-13 02:21oracleasm-2.6.18-238.el5-2.0.5-1.el5.x86_64.rpm

[root@dbi tmp]# rpm -Uvh oracleasm*

warning: oracleasm-2.6.18-238.el5-2.0.5-1.el5.x86_64.rpm:Header V3 DSA signature: NOKEY, key ID 1e5e0159

Preparing...               ########################################### [100%]

1:oracleasm-support     ########################################### [ 33%]

2:oracleasm-2.6.18-238.el########################################### [67%]

3:oracleasmlib          ########################################### [100%]

7、 修改各节点的/etc/hosts主机名解析文件

在各节点的/etc/hosts文件中加入节点三dbi主机的解析条目,修改后各节点主机的/etc/hosts内容如下:

127.0.0.1               localhost.localdomain localhost

#::1            localhost6.localdomain6 localhost6

##Configure for Public NIC(eth0)

192.168.123.154dbp

192.168.123.155dbs

192.168.123.155dbi

##Configure for Private NIC(eth1)

10.0.0.154      dbp-priv

10.0.0.155      dbs-priv

10.0.0.156          dbi-priv

##Configure for VIP(eth0:1)

192.168.123.130 dbp-vip

192.168.123.131 dbs-vip

192.168.123.132  dbi-vip

8、 建立用户、配置环境变量及建立用户等价性

8.1、创建dba用户组和oracle用户

[root@dbitmp]# groupadd -g 700 dba

##创建dba用户组,组ID必须要其它节点一样,如700。这里由于其它节点的oracle用户只存在一个用户组dba,所以,只创建dba用户组,不创建oinstall用户组。一般来说,oracle用户的主用户组是oinstall,附属组是dba的。

[root@dbitmp]# useradd -m -d /home/oracle -u 600 -g dba oracle

##创建oracle用户,uid和用户组必须要用其它节点一样,如果oracle存在于是oinstall主组和dba附属组,侧创建oracle用户的命令应该是:[root@dbi tmp]# useradd -m -d /home/oracle -u 600 -g oinstall -G dbaoracle

[root@dbitmp]# passwd oracle   ##默认新创建的用户密码为空,需要修改密码

8.2、配置oracle用户环境变量

将以下内容添加到 /home/oracle/.bash_profile 文件中:

######## Configurefor Oracle environment variables ########

exportORACLE_BASE=/oracle

exportCRS_HOME=/oracle/product/crs

exportORACLE_HOME=/oracle/product/database

exportORACLE_SID=wxxrdb3

exportORACLE_UNQNAME=wxxrdb

#exportORACLE_TERM=xterm

exportTNS_ADMIN=$ORACLE_HOME/network/admin

exportORA_NLS10=$ORACLE_HOME/nls/data

exportPATH=$PATH:$CRS_HOME/bin:$ORACLE_HOME/bin

exportLANG=en_US.UTF-8

exportNLS_LANG=AMERICAN_AMERICA.ZHS16GBK

###########################End ###########################

8.3、建立用户等价性

[root@dbi tmp]# su - oracle

[oracle@dbi tmp]$ mkdir -m 700 ~/.ssh   ##-m参数表示权限位,相同于是 chmod700

[oracle@dbi tmp]$ ls -ld ~/.ssh

drwx------ 2 oracle dba 4096 02-13 02:41/home/oracle/.ssh

[oracle@dbi tmp]$ cd ~/.ssh

[oracle@dbi .ssh]$ ssh-keygen -t rsa

[oracle@dbi .ssh]$ ssh-keygen -t dsa

将dbp上将authorized_keys 文件copy到dbi:

[oracle@dbi .ssh]$ scpdbp:/home/oracle/.ssh/authorized_keys ./

[oracle@dbi .ssh]$ ls -ltr

total 24

-rw-r--r-- 1 oracle dba  392 Feb 13 03:03 id_rsa.pub

-rw------- 1 oracle dba 1675 Feb 13 03:03id_rsa

-rw-r--r-- 1 oracle dba  600 Feb 13 03:04 id_dsa.pub

-rw------- 1 oracle dba  672 Feb 13 03:04 id_dsa

-rw-r--r-- 1 oracle dba  401 Feb 13 03:09 known_hosts

-rw-r--r-- 1 oracle dba 1984 Feb 13 03:09authorized_keys

将dbi的id_rsa.pub 和id_dsa.pub 写入authorized_keys:

[oracle@dbi .ssh]$ cat *.pub >>authorized_keys

将dbi上最新的authorized_keys 文件copy到dbp和dbs上:

[oracle@dbi .ssh]$ scp authorized_keysdbp:/home/oracle/.ssh/

[oracle@dbi .ssh]$ scp authorized_keys dbs:/home/oracle/.ssh/

在三个节点上用Oracle用户分别ssh所有节点(必须和个节点都要执行一次):

ssh dbp date

ssh dbp-priv date

ssh dbs date

ssh dbs-priv date

ssh dbi date

ssh dbi-priv date

9、 创建目录结构

mkdir -p /oracle/product/database

mkdir -p /oracle/product/crs

chown -R oracle:dba /oracle

chmod -R 755 /oracle

10、配置Linux系统参数

10.1、配置Linux内核参数

vi /etc/sysctl.conf 加入以下参数内容:

net.ipv4.ip_forward = 0

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route = 0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

######## Configure for Oracle ########

kernel.shmall=2097152

kernel.shmmax=2147483648

kernel.shmmni=4096

kernel.sem=250 32000 100 128

fs.file-max=65536

net.ipv4.ip_local_port_range=1024 65000

net.core.rmem_default=262144

net.core.wmem_default=262144

net.core.rmem_max=1048576

net.core.wmem_max=1048576

################ End #################

执行 sysctl -p 立即生效上述内核参数:

[root@dbi tmp]# sysctl –p

10.2、修改limits.conf 资源限制参数

vi /etc/security/limits.conf 加入以下内容:

##如果使用 HugePage内存技术,添加下面2行:

#Oracle soft memlock 5242880

#Oracle hard memlock 5242880

######## Configure for Oracle ########

##文件句柄数

oracle  soft    nofile 1024

oracle  hard    nofile 65536

##进程句柄数

oracle  soft    nproc  2047

oracle  hard    nproc  16384

################ End #################

查看oracle用户的资源限制:

ulimit -a

10.3、修改/etc/pam.d/login 登录模块文件

vi/etc/pam.d/login加入以下内容:

session required/lib/security/pam_limits.so

11、配置hangcheck-timer 模块

查找hangcheck-timer模块位置:

[root@dbi tmp]# find /lib/modules -name"hangcheck-timer.ko"

/lib/modules/2.6.18-238.el5/kernel/drivers/char/hangcheck-timer.ko

配置系统启动时自动加载模块,在/etc/rc.d/rc.local 中添加如下内容:

/sbin/modprobehangcheck-timer

并执行一次:

[root@dbi tmp]# /sbin/modprobe hangcheck-timer

配置hangcheck-timer参数, 在/etc/modprobe.conf 中添加如下内容:

options hangcheck-timer hangcheck_tick=10hangcheck_margin=30

确认模块加载成功:

[root@dbi tmp]# grep -i hangcheck /var/log/messages | tail-2

Feb 14 01:48:43 dbikernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 180 seconds, marginis 60 seconds).

Feb 14 01:48:43 dbikernel: Hangcheck: Using monotonic_clock().

注意:以上检查显示tick 180秒,margin 60秒,必须要重启系统才能生效hangcheck_tick和hangcheck_margin新参数值的配置。

说明:hangcheck-timer模块是用于是将故障的RAC节点进行IO分离,即在hangcheck_tick配置的时间(单位秒)内检查到本机节点无响应或已宕机,就会将节点机器重启,oracle会将该故障节点踢出集群。hangcheck_margin参数表示有时系统负载较高,无法及时响应,该参数表示最大延迟响应时间,即hangcheck_tick是下限值,hangcheck_margin是上限值。hangcheck_tick默认值是30秒,hangcheck_margin默认值是180秒。

hangcheck-timer模块两次检查的时间间隔要小于 hangcheck_tick + hangcheck_margin,而 CRS的misscount参数的值必须要大于hangcheck_tick + hangcheck_margin,因为CRS的misscount参数表示超过该参数时间(单位秒),没收到故障节点的心跳消息,就会将故障节点踢出集群,进行集群重构(包括在正常节点的Crash Recovery)如果misscount的值小于hangcheck_tick +hangcheck_margin,就可能会导致故障节点还没重启,就将其踢出集群,但该故障节点还会向集群进行操作,就会损坏数据库,所以misscount参数的值必须要大于hangcheck_tick + hangcheck_margin,等节点重启后,再进行集群重构。CRS的misscount参数值可以通过crsctl get css misscount命令获得,通过 crsctl set css misscount n秒命令设置。

12、配置裸设备RAW(OCR和Votedisk使用的裸设备)

10g RAC的OCR磁盘和Votedisk表决磁盘都必须放在裸设备上,11g RAC侧不用。

12.1、vi /etc/udev/rules.d/60-raw.rules 文件,添加如下内容:

###############Configure for OCR and Votedisk of Oracle ###############

ACTION=="add",KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"

ACTION=="add",ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw/dev/raw/raw1 %M %m"

ACTION=="add",KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"

ACTION=="add",ENV{MAJOR}=="8", ENV{MINOR}=="18", RUN+="/bin/raw/dev/raw/raw2 %M %m"

ACTION=="add",KERNEL=="raw[1-2]", OWNER="oracle", GROUP="dba",MODE="660"

#################################End ##################################

12.2、重启udev服务进行梆定raw设备:

[root@dbi tmp]# start_udev

启动 udev:                                               [确定]

12.3、查看梆定的raw设备,已经梆定成功:

[root@dbi tmp]# ls -ltr /dev/raw

总计 0

crw-rw---- 1 oracledba 162, 1 02-14 13:21 raw1

crw-rw---- 1 oracledba 162, 2 02-14 13:21 raw2

查看裸设备梆定的块设备的major和minor号:

[root@dbi tmp]# raw -qa

/dev/raw/raw1:  bound to major 8, minor 17

/dev/raw/raw2:  bound to major 8, minor 18

根据major和minor号查找梆定的块设备:

[root@dbi tmp]# ls -ltr /dev | grep "8,[[:space:]]*1[7,8]"

brw-r----- 1 rootdisk     8,   18 2016-02-14 sdb2

brw-r----- 1 rootdisk     8,   17 2016-02-14 sdb1

检查裸设备和梆定的块设备的大小(块数)是一致的:

[root@dbi tmp]# blockdev --getsize /dev/raw/raw1

594342

[root@dbi tmp]# blockdev --getsize /dev/sdb1

594342

[root@dbi tmp]# blockdev --getsize /dev/raw/raw2

594405

[root@dbi tmp]# blockdev --getsize /dev/sdb2

594405

13、配置ASM磁盘

13.1、配置ASM:

[root@dbi tmp]# /etc/init.d/oracleasm configure

分别回答oracle、dba、y、y:

Default user to ownthe driver interface []: oracle   ## 允许使用ASM驱动接口的用户

Default group to ownthe driver interface []: dba    ## 允许使用ASM驱动接口的用户组

Start Oracle ASMlibrary driver on boot (y/n) [n]: y   ## 开机启动ASM驱动

Scan for Oracle ASMdisks on boot (y/n) [y]: y       ## 开机扫描ASM磁盘

Writing Oracle ASMlibrary driver configuration: done

Initializing theOracle ASMLib driver:                    [  OK  ]

Scanning the systemfor Oracle ASMLib disks:              [  OK  ]

13.2、显示ASM配置情况:

[root@dbi tmp]# oracleasm configure

ORACLEASM_ENABLED=true

ORACLEASM_UID=oracle

ORACLEASM_GID=dba

ORACLEASM_SCANBOOT=true

ORACLEASM_SCANORDER=""

ORACLEASM_SCANEXCLUDE=""

ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"

注意:/etc/init.d/oracleasmconfigure和 oracleasm configure的区别:

/etc/init.d/oracleasmconfigure 用于是启动ASM配置向导进行配置ASM;

oracleasm configure 用于显示当前ASM的配置情况。

13.3、查看ASM磁盘:

[root@dbi tmp]# oracleasm listdisks

ARCH_DISK1

ARCH_DISK2

VOL1

VOL2

二.添加节点之--安装Clusterware集群件到新节点

Oracle 集群件已经安装在集群上;这里的任务是将新节点添加到集群配置中。要执行该任务,需要执行 Oracle 提供的名为 addnode 的实用程序,该工具位于 Clusterware 的主 oui/bin 目录中。Oracle 集群件有两个文件(Oracle 集群信息库 (OCR) 和 Oracle 集群同步服务 (CSS) 表决磁盘),它们包含有关该集群以及由 Oracle 集群件管理的应用程序的信息。这些文件需要使用关于新节点的信息进行更新。集群件安装过程的第一步是验证新节点是否准备好进行安装。

1、检查硬件和操作系统配置

先看一下当前集群成员:

[oracle@dbp tmp]$olsnodes -n

dbp     1

dbs     2

检查硬件和系统配置,在其它任何一个正常节点上执行(如节点一dbp或节点二dbs):

[oracle@dbp tmp]$ echo $CRS_HOME

/oracle/product/crs

[oracle@dbptmp]$ cd /oracle/product/crs/bin

[oracle@dbpbin]$ ./cluvfy stage -post hwos -ndbp,dbs,dbi -verbose  ##只需在一个正常节点上执行

ERROR:

Could not find a suitable set of interfaces for VIPs.  ##这个报错暂时不用理会,继续下面的操作

Node connectivity check failed.

Checking shared storage accessibility...

WARNING:

Package cvuqdisk not installed.

dbp,dbi,dbs

Shared storage check failed on nodes "dbp,dbi,dbs".  ##这个报错暂时不用理会,继续下面的操作

Post-check forhardware and operating system setup was unsuccessful on all the nodes.

以上报错:1)、不能连通VIP,因为节点三dbi还没有安装集群件,所以vip是不通的,这个暂时不用理会。

2)、cvuqdisk这个支持共享存储的软件包在dbp,dbs,dbi三个节点都没有安装,这个软件包在Oracle集群件的安装包可以找到。

解决方法:

1)、设置环境变量CVUQDISK_GRP,使其指向作为 cvuqdisk的所有者所在的组(本例为 dba,因为没有oinstall用户组):

[root@dbp tmp]#export CVUQDISK_GRP=dba     ## root用户执行

2)、在dbp,dbs,dbi三个节点安装 cvuqdisk软件包:

[root@dbp tmp]# rpm -ivh cvuqdisk-1.0.9-1.rpm

3)、重新执行检查:

[oracle@dbp bin]$ ./cluvfy stage -post hwos -n dbp,dbs,dbi –verbose

不会报 cvuqdisk 软件包没有安装了,但是还会报:

Could not find a suitable set ofinterfaces for VIPs.

Shared storage check failed on nodes"dbp,dbi,dbs".

这两个错误,先不用理会,继续以下的操作。

2、在安装集群之前预检查节点列表中的所有节点

[oracle@dbpbin]$ ./cluvfy stage -pre crsinst -ndbp,dbs,dbi -verbose ##只需在一个正常节点上执行,这个会检查所有节点的软件包安装情况等信息

报以下错误:

Check: Existence of group "oinstall"

Node Name     Status                    Group ID

------------  ------------------------  ------------------------

dbp           does not exist            N/A

dbi           does not exist            N/A

dbs           does not exist            N/A

Result: Group existence check failed for"oinstall".  ##不用理会,因为本RAC环境只创建有dba用户组,没有oinstall用户组,oinstall用户组不是必须的。

Administrativeprivileges check failed.

ERROR:

Could not find a suitable set of interfaces for VIPs.

Result: Nodeconnectivity check failed.  ##这个报错暂时不用理会,继续下面的操作

3、执行addNode.sh脚本安装复制集群件到新节点

3.1、安装复制集群件到新节点操作及过程截图

[oracle@dbp bin]$ export DISPLAY=192.168.123.1:0.0

[oracle@dbp bin]$ cd $CRS_HOME/oui/bin

[oracle@dbp bin]$ ./addNode.sh

直接点击”Next”

输入新节点的对应/etc/hosts的Public/Private/Vip 节点名,然后点击“Next”

显示添加集群新节点的概要信息,点击”Install”

显示添加集群件到新节点进度

按提示,登录root用户,按顺序依次在dbi(新节点),dbp(第一个节点,执行addNode.sh的节点)执行以上三个脚本文件:

步骤1:

[root@dbi tmp]# cd /oracle/oraInventory

[root@dbioraInventory]# ./orainstRoot.sh

Changing permissions of/oracle/oraInventory to 770.

Changing groupname of/oracle/oraInventory to dba.

The execution of thescript is complete

步骤2:

[root@dbp tmp]# cd /oracle/product/crs/install

[root@dbp install]# ./rootaddnode.sh

clscfg: EXISTINGconfiguration version 3 detected.

clscfg: version 3 is10G Release 2.

Attempting to add 1new nodes to the configuration

Using ports:CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.

node<nodenumber>: <nodename> <private interconnect name><hostname>

node 3: dbi dbi-privdbi

Creating OCR keys foruser 'root', privgrp 'root'..

Operation successful.

/oracle/product/crs/bin/srvctladd nodeapps -n dbi -A dbi-vip/255.255.255.0/eth0 -o /oracle/product/crs

步骤3:

[root@dbi ~]# cd /oracle/product/crs

[root@dbi crs]# ./root.sh

WARNING: directory'/oracle/product' is not owned by root

WARNING: directory'/oracle' is not owned by root

Checking to see ifOracle CRS stack is already configured

/etc/oracle does notexist. Creating it now.

OCR LOCATIONS =  /dev/raw/raw1

OCR backup directory'/oracle/product/crs/cdata/crs' does not exist. Creating now

Setting thepermissions on OCR backup directory

Setting up NSdirectories

Oracle ClusterRegistry configuration upgraded successfully

WARNING: directory'/oracle/product' is not owned by root

WARNING: directory'/oracle' is not owned by root

clscfg: EXISTINGconfiguration version 3 detected.

clscfg: version 3 is10G Release 2.

Successfullyaccumulated necessary OCR keys.

Using ports:CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.

node<nodenumber>: <nodename> <private interconnect name><hostname>

node 1: dbp dbp-privdbp

node 2: dbs dbs-privdbs

clscfg: Argumentscheck out successfully.

NO KEYS WERE WRITTEN.Supply -force parameter to override.

-force is destructiveand will destroy any previous cluster

configuration.

Oracle ClusterRegistry for cluster has already been initialized

Startup will bequeued to init within 90 seconds.

Adding daemons toinittab

Expecting the CRSdaemons to be up within 600 seconds.

CSS is active onthese nodes.

dbp

dbs

dbi

CSS is active on allnodes.

Waiting for theOracle CRSD and EVMD to start

Waiting for theOracle CRSD and EVMD to start

Waiting for theOracle CRSD and EVMD to start

Waiting for theOracle CRSD and EVMD to start

Oracle CRS stack installedand running under init(1M)

Running vipca(silent)for configuring nodeapps

IP address "dbp-vip"has already been used. Enter an unused IP address.

提示:IP 地址 "dbp-vip"已被使用。请输入一个未使用的 IP 地址。

解决方法:因为 VIP已经在所有节点(而非新节点dbi)上进行了配置。我们手动执行 VIPCA(虚拟 IP配置助手)即可。点击以上图界面的”OK”按钮完成安装,然后用Xmanager工具连到新节点,在root用户下执行vipca:

[root@dbi crs]# export DISPLAY=192.168.123.1:0.0

[root@dbi crs]# cd /oracle/product/crs/bin

[root@dbi bin]# ./vipca

Exception in thread"main"

执行 vipca 后,提示异常,查看日志文件$CRS_HOME/cfgtoollogs/vipca/vipca.log显示缺少libXp的rpm包:

java.lang.UnsatisfiedLinkError:/oracle/product/crs/jdk/jre/lib/i386/libawt.so: libXp.so.6: cannot open sharedobject file: No such file or directory

解决方法:

1、  安装 libXp的rpm软件包

[root@dbi tmp]# rpm -ivh libXp-1.0.0-8.i386.rpm

2、  vi $CRS_HOME/bin/vipca文件,在 export LD_ASSUME_KERNEL后加入unset LD_ASSUME_KERNEL

3.2、安装集群件到新节点后检查

在新节点完成集群件的安装后,将在新节点产生如下动作:

1)、/etc/init.d/目录中创建下列文件:

[oracle@dbi tmp]$ ls -ltr /etc/init.d/init.*

-r-xr-xr-x 1 rootroot  3182 Feb 14 18:46/etc/init.d/init.evmd

-r-xr-xr-x 1 rootroot 36794 Feb 14 18:46 /etc/init.d/init.cssd

-r-xr-xr-x 1 rootroot  4706 Feb 14 18:46/etc/init.d/init.crsd

-r-xr-xr-x 1 rootroot  1951 Feb 14 18:46/etc/init.d/init.crs

2)、新节点dbi中生成/etc/oraInst.loc文件,记录oracleInventory的目录位置:

[oracle@dbi bin]$ cat /etc/oraInst.loc

inventory_loc=/oracle/oraInventory

inst_group=dba

3)、/etc/inittab 文件加入了如下条目:

h1:35:respawn:/etc/init.d/init.evmdrun >/dev/null 2>&1 </dev/null

h2:35:respawn:/etc/init.d/init.cssdfatal >/dev/null 2>&1 </dev/null

h3:35:respawn:/etc/init.d/init.crsdrun >/dev/null 2>&1 </dev/null

4)、在所有节点执行olsnodes 命令检查集群件是否已经注册了所有节点:

[oracle@dbi tmp]$ olsnodes -n

dbp     1

dbs     2

dbi     3

[oracle@dbp tmp]$ olsnodes -n

dbp     1

dbs     2

dbi     3

[oracle@dbs tmp]$ olsnodes -n

dbp     1

dbs     2

dbi     3

5)、生成 /etc/oratab文件,并加入以下条目:

[oracle@dbp wxxrdb]$ cat /etc/oratab

+ASM3:/oracle/product/database:N

wxxrdb:/oracle/product/database:N

6)、使用 crs_stat 命令在各节点检查是否启动了集群服务:

[oracle@dbi tmp]$crs_stat -t -v

Name           Type           R/RA   F/FT  Target    State     Host

----------------------------------------------------------------------

ora.dbi.gsd    application    0/5   0/0    ONLINE    ONLINE   dbi

ora.dbi.ons    application    0/3   0/0    ONLINE   ONLINE    dbi

ora.dbi.vip    application    0/0   0/0    ONLINE    ONLINE   dbi

ora....SM1.asmapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora....BP.lsnrapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora.dbp.gsd    application    0/5   0/0    ONLINE    ONLINE   dbp

ora.dbp.ons    application    0/3   0/0    ONLINE    ONLINE   dbp

ora.dbp.vip    application    0/0   0/0    ONLINE    ONLINE   dbp

ora....SM2.asmapplication    0/5    0/0   ONLINE    ONLINE    dbs

ora....BS.lsnrapplication    0/5    0/0   ONLINE    ONLINE    dbs

ora.dbs.gsd    application    0/5   0/0    ONLINE    ONLINE   dbs

ora.dbs.ons    application    0/3   0/0    ONLINE    ONLINE   dbs

ora.dbs.vip    application    0/0   0/0    ONLINE    ONLINE   dbs

ora.wxxrdb.db  application   0/1    0/1    ONLINE   ONLINE    dbs

ora....b1.instapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora....b2.instapplication    0/5    0/0   ONLINE    ONLINE    dbs

可以看到,dbi节点的gsd、ons、vip集群服务已经成功启动,查dbi节点的其它集群服务,如asm、listener、instance服务需要在安装和配置数据库软件后才会出现。

三.添加节点之--安装数据库软件到新节点

1、执行addNode.sh脚本安装复制数据库软件到新节点

1.1、安装复制数据库软件到新节点操作及过程截图

Oracle 已经提供了一个新的称为addNode.sh 的可执行文件,它位于 $ORACLE_HOME/oui/bin 目录。用Oracle 用户执行该脚本即可以将数据库软件复制安装到新节点。

在节点一上执行:

[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0

[oracle@dbp tmp]$ cd $ORACLE_HOME/oui/bin

[oracle@dbp bin]$ ./addNode.sh

指定新节点,然后点击“Next”

显示添加集群新节点的数据库软件概要信息,点击”Install”

显示添加数据库软件到新节点进度

该错误可忽略,点击”Yes”,查看日志文件:

[root@dbi racg]# cd /oracle/product/database/log/dbp/racg

[root@dbi racg]# tail-5 imon_wxxrdb.log

- OCIAQDeqArray

2016-02-1420:39:54.390: [    RACG][1210632512][8059][1210632512][ora.wxxrdb.wxxrdb1.inst]: clsrrlbgthr: Error 25228ORA-25228: timeout or end-of-fetch during message dequeue fromSYS.SYS$SERVICE_METRICS

- OCIAQDeqArray

在dbi节点,使用root用户登录,执行以上脚本文件:

[root@dbi racg]# cd /oracle/product/database

[root@dbi database]# ./root.sh

Running Oracle10root.sh script...

The followingenvironment variables are set as:

ORACLE_OWNER= oracle

ORACLE_HOME=  /oracle/product/database

Enter the fullpathname 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/oratabfile...

Entries will be addedto the /etc/oratab file as needed by

DatabaseConfiguration Assistant when a database is created

Finished runninggeneric part of root.sh script.

Now product-specificroot actions will be performed.

最后在安装向导界面中点击“Exit->Yes”完成新节点的数据库软件安装。

四.添加节点之--在新节点上配置监听器

在新节点oracle用户上运行 netca:

[oracle@dbi tmp]$ export DISPLAY=192.168.123.1:0.0

[oracle@dbi tmp]$ netca

选择 “Cluster configuration”,点击”Next”

只选择新节点dbi,点击”Next”

选择”Listener configuration”,点击”Next”

默认选择”Add”,点击”Next”

保留默认监听名:LISTENER,点击”Next”

选择TCP协议,点击“Next”

如果没有端口号冲突,就选择默认端口号1521,点击”Next”

选择”No”,不再配置另一个监听器,点击”Next”,最后点击”Finished”完成。

配置完监听器后,会自动将监听服务注册到CRS中,执行crs_stat -t -v检查:

五.添加节点之--在新节点上创建ASM实例

在节点一dbp上执行dbca为dbi节点创建ASM实例:

[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0

[oracle@dbp tmp]$ dbca

选择”Oracle Real Application Clusters database”,点击”Next”

选择”Configure Automatic Storage Management”,点击”Next”

选择dbp和dbi节点,这里dbp节点是必选的,作为父节点,然后向dbi节点进行extend。在dbi上安装ASM实例,点击”Next”

点击”Yes”

点击”ASM Parameters”,可以查看一下下面的”ASM Parameters”ASM参数列表。

创建ASM实例的相关目录:

[oracle@dbi +ASM]$ cd $ORACLE_BASE/admin/+ASM

[oracle@dbi +ASM]$ mkdir bdump cdump hdump pfile udump

输入之前ASM实例的SYS用户密码,和选择创建pfile文件,如果选择spfile文件会报错,点击”Next”

点击”OK”,开始创建ASM实例。

检查 $ORACLE_HOME/dbs 目录下 $ORACLE_BASE/admin/+ASM/pfile 目录下已经生成了pfile文件:

[oracle@dbi dbs]$ ls-ltr init*ASM*

lrwxrwxrwx 1 oracledba 33 Feb 14 21:56 init+ASM3.ora -> /oracle/admin/+ASM/pfile/init.ora

所有节点的ASM实例配置的ASM Diskgroup(ASM磁盘组)都必须显示出来,然后点击”Finish”

点击”No”完成新节点的ASM实例的创建

执行 crs_stat -t -v 检查dbi节点的ASM实例已经正常online,如下:

[oracle@dbi tmp]$ crs_stat -t -v

Name           Type           R/RA   F/FT  Target    State     Host

----------------------------------------------------------------------

ora....SM3.asm application    0/5   0/0    ONLINE    ONLINE   dbi

ora....BI.lsnrapplication    0/5    0/0   ONLINE    ONLINE    dbi

ora.dbi.gsd    application    0/5   0/0    ONLINE    ONLINE   dbi

ora.dbi.ons    application    0/3   0/0    ONLINE    ONLINE   dbi

ora.dbi.vip    application    0/0   0/0    ONLINE    ONLINE   dbi

ora....SM1.asmapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora....BP.lsnrapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora.dbp.gsd    application    0/5   0/0    ONLINE    ONLINE   dbp

ora.dbp.ons    application    0/3   0/0    ONLINE    ONLINE    dbp

ora.dbp.vip    application    0/0   0/0    ONLINE    ONLINE   dbp

ora....SM2.asmapplication    0/5    0/0   ONLINE    ONLINE    dbs

ora....BS.lsnrapplication    0/5    0/0   ONLINE    ONLINE    dbs

ora.dbs.gsd    application    0/5   0/0    ONLINE    ONLINE   dbs

ora.dbs.ons    application    0/3   0/0    ONLINE    ONLINE   dbs

ora.dbs.vip    application    0/0   0/0    ONLINE    ONLINE   dbs

ora.wxxrdb.db  application   0/1    0/1    ONLINE   ONLINE    dbs

ora....b1.instapplication    0/5    0/0   ONLINE    ONLINE    dbp

ora....b2.instapplication    0/5    0/0   ONLINE    ONLINE    dbs

在新节点dbi上登录ASM实例检查状态正常:

[oracle@dbi tmp]$ export ORACLE_SID=+ASM3

[oracle@dbi tmp]$ asmcmd -p

ASMCMD [+] >ls

ARCH/

DATA/

RECOVERY/

SQL> selectinst_id,instance_number,instance_name,host_name,status from gv$instance;

INST_ID INSTANCE_NUMBER INSTANCE_NAME   HOST_NAME STATUS

------- --------------- --------------- --------------------

3               3 +ASM3           dbi        STARTED

2               2 +ASM2           dbs        STARTED

1               1 +ASM1           dbp        STARTED

六.添加节点之--在新节点上创建数据库实例

在节点一dbp上执行dbca为dbi节点创建数据库实例:

[oracle@dbp tmp]$ export DISPLAY=192.168.123.1:0.0

[oracle@dbp tmp]$ dbca

选择”Oracle Real Application Clusters database”,点击”Next”

选择”Instance Management”,点击”Next”

选择”Add an instance”,点击”Next”

输入数据库的sys用户和密码,点击”Next”

显示目前存在活动的数据库实例,点击”Next”

选择要添加实例的节点,这里必须要选择新节点dbi,点击”Next”

这里点击下一步后,会提示 The local node instance wxxrdb1 is not running。检查wxxrdb1实例是已经正常运行在dbp节点上的,重启集群所有的服务后,再重新dbca到这一步,还是提示The local node instance wxxrdb1 is not running。不知道是什么原因,不知道是否是10.2.0.1.0版本的bug。可以尝试以下两种方法重试:

1)、在第一个节点中的登录sqlplus /as sysdba,重新启动实例:

SQL> shutdownimmediate;

SQL> startup;

然后再执行 dbca

2)、可以尝试在其它正常的节点(非新增节点),如第二节点dbs中执行dbca

本次操作是选择了上面第一种方法在sqlplus中重启实例,再执行dbca重试就可以了,使用集群管理命令重启实例,如:

srvctl stop instance -d wxxrdb -i wxxrdb1

srvctl start instance -d wxxrdb -i wxxrdb1

或使用重启数据库和实例命令,如:

srvctl stop database -d wxxrdb -o immediate

srvctl start database -d wxxrdb -o open

都是不可以的,执行dbca创建新节点实例时会报如上The local node instance wxxrdb1 is not running的错误。

点击”File Location Variables”显示如上图的窗口,显示的SID是 wxxrdb1,这个不用理会,这个是指执行dbca的实例ID,不是指新节点的实例ID,新节点的实例ID是wxxrdb3。

点击”Fnish”后,如下所示:

显示新节点实例wxxrdb3的概要信息,点击”OK”,如果出现如下错误提示:

表示每个节点使用的归档目录不是ASM共享磁盘目录,而是本地目录,因为是在dbp节点上使用dbca命令创建新节点dbi的数据库实例,可能是从dbp节点的数据库实例wxxrdb1上读取了参数值(log_archive_dest_1='location=/wxxrdb1_arch'),而dbi节点还没有创建/wxxrdb1_arch这个目录,所以会报错,在dbi节点用root用户创建该目录并修改为oracle属主权限:

[root@dbi tmp]# mkdir -m 755 /wxxrdb1_arch

[root@dbi tmp]# chown oracle:dba /wxxrdb1_arch

然后再重试即可。

开始创建新节点的数据库实例

新节点的数据库实例创建完成,点击”No”退出向导界面。

最后,在各节点执行 crs_stat -t -v 命令检查新节点dbi的数据库实例wxxrdb3是否已经注册到了CRS,并且是否已经成功online:

在sqlplus中检查各实例都已经成功open:

SQL> selectinst_id,instance_name,host_name,thread#,status from gv$instance;

INST_ID INSTANCE_NAME    HOST_NAME     THREAD# STATUS

---------- ---------------- -------------------- --------

3 wxxrdb3          dbi                 3 OPEN

2 wxxrdb2          dbs                 2 OPEN

1 wxxrdb1          dbp                 1 OPEN

OK,本次添加RAC节点的操作成功圆满完成!!!

转自:https://blog.csdn.net/samdy_chan/article/details/52420228

【RAC】10grac添加节点,详细步骤的更多相关文章

  1. 大快搜索DKhadoop集群管理平台添加节点的步骤说明

    Hadoop作为搭建大数据处理平台的重要“基石”,关于它的分析和讲解的文章已经有很多了.Hadoop本身是一分布式的系统,因此在安装的时候,需要多每一个节点进行组建的安装.并且由于是开源软件,其安装过 ...

  2. 为11.2.0.2 Grid Infrastructure添加节点

    转自:http://www.askmaclean.com/archives/add-node-to-11-2-0-2-grid-infrastructure.html 在之前的文章中我介绍了为10g ...

  3. ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇)

    ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇) 本文主要转载 [  http://www.cnxdug.org/?p=2511 ] 有部分细节自己实验添加,再此谢谢前辈. ...

  4. rac添加新节点的步骤与方法2

    上一篇文章,把节点删除了.这次新增加一个节点 .新增加的节点是host03.如下: #Public IP192.168.16.45 racdb1192.168.16.46 racdb2192.168. ...

  5. 实验:Oracle单节点RAC添加节点

    环境:RHEL 6.5 + Oracle 11.2.0.4 单节点RAC 需求:单节点RAC添加新节点 1.添加节点前的准备工作 2.正式添加节点 3.其他配置工作 1.添加节点前的准备工作 参考Or ...

  6. 配置Jenkins的slave节点的详细步骤适合windows等其他平台(转)

    @  新建一个slave节点在Jenkins服务器上 1,进入Jenkins的主界面,进入“Manage Jenkins” 页面: 2,点击如下图中的“Manage  Nodes”: 3,进入页面后点 ...

  7. 配置Jenkins的slave节点的详细步骤适合windows等其他平台

    @  新建一个slave节点在Jenkins服务器上 1,进入Jenkins的主界面,进入"Manage Jenkins" 页面: 2,点击如下图中的"Manage  N ...

  8. Oracle RAC集群添加节点

    一,节点环境 所有节点分发/etc/hosts,这里我添加两个节点,一个是上次删除的节点,另一个是什么都没有的节点,尝试添加 服务器介绍什么的都在这hosts文件了,大家自己琢磨下 [grid@nod ...

  9. 详细步骤:手动添加bits/stdc++.h到vs2017

    本机环境:win10系统 64位 vs2017 最近码代码时偶然发现了bits/stdc++.h这个头文件(万能头文件),基本上所有的代码只要用了这个头文件就不再写其他头文件了. 看到它就仿佛开启了新 ...

随机推荐

  1. SQL盲注、SQL注入 - SpringBoot配置SQL注入过滤器

    1. SQL盲注.SQL注入   风险:可能会查看.修改或删除数据库条目和表.   原因:未对用户输入正确执行危险字符清理.   固定值:查看危险字符注入的可能解决方案. 2. pom.xml添加依赖 ...

  2. SpringBoot瘦身部署(15.9 MB - 92.3 KB)

    1. 简介   SpringBoot项目部署虽然简单,但是经常因为修改了少量代码而需要重新打包上传服务器重新部署,而公网服务器的网速受限,可能整个项目的代码文件仅仅只有1-2MB甚至更少,但是需要上传 ...

  3. JavaSE23-函数式接口&Stream流

    1.函数式接口 1.1 函数式接口概述 概念 有且仅有一个抽象方法的接口 如何检测一个接口是不是函数式接口 @FunctionalInterface 放在接口定义的上方:如果接口是函数式接口,编译通过 ...

  4. JVM虚拟机(三):Java内存区域

    运行时数据区   Java虚拟机再执行Java程序过程中会把它所管理的内存划分为若干个不同分工的数据区域. 程序计数器   程序计数器时一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示 ...

  5. [BUUOJ]刮开有奖reverse

    刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 1.查壳 ...

  6. Hibernate实现对数据的CRUD

    今天主要去看公司的老框架, CRUD用的较多,所以总结一下步骤,以免忘记的时候温习 回顾 JDBC 工作过程: 加载驱动 建立连接 定义sql,发生sql语句 执行sql语句获得执行结果 处理返回结果 ...

  7. Vue必须必须要注意的几个细节

    1.每次执行完,尽量npm run dev 一次,有时候又缓存问题 2.安装sass 一.使用save会在package.json中自动添加.因为sass-loader依赖于node-sass npm ...

  8. 手写算法-python代码实现KNN

    原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...

  9. 关于 Softmax 回归的反向传播求导数过程

    对于 \(Softmax\) 回归的正向传播非常简单,就是对于一个输入 \(X\) 对每一个输入标量 \(x_i\) 进行加权求和得到 \(Z\) 然后对其做概率归一化. Softmax 示意图 下面 ...

  10. windows使用git bash 无法交互键盘上下键移动选择选项的解决方法

    目录 遇到的问题 解决方案 1. 直接通过数字键来选择 2. 使用 winpty 来启动命令 3. 将 git bash 换成 cmd 4. 使用vscode中是bash 遇到的问题 windows使 ...