Oracle 11gRAC集群

时间:2019-02-20
本文章向大家介绍Oracle 11gRAC集群,主要包括Oracle 11gRAC集群使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

title: Oracle 11gRAC集群
categories: 数据库
tags:
- Oracle
- RAC
- Cluster
timezone: Asia/Shanghai
date: 2019-01-06

Oracle 11g RAC搭建(VMware环境):https://blog.csdn.net/u014595668/article/details/51160783

Oracle RAC原理:https://blog.csdn.net/qq_34556414/article/details/79001267

Oracle 集群浅谈:https://www.cnblogs.com/yinuo/articles/2703883.html

Oracle的三种高可用集群方案:https://blog.csdn.net/weinierzui/article/details/70143460

sadm简单介绍:http://www.askmaclean.com/archives/在linux-6上使用udev解决rac-asm存储设备名问题.html

注意事项

1.主机名都用小写字母,长度不能超过15位,不要有特殊符号

2.两个节点的Plublic和VIP所在网卡的网卡名要一样

3.表决盘应该都是相同的大小。不同的大小可能导致可用性降低。

环境

[root@redhat6 ~]# cat  /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.10 (Santiago)

p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
p13390677_112040_Linux-x86-64_3of7.zip

RAC IP地址规划并写入hosts文件(只需要在eth0上配置Plublic IP即可。vip和SCAN IP会自动配置,要保证这两个IP没有被使用)

1.IP地址规划

节点 hostname 类型 IP地址 接口
1 rac1 Plublic IP 10.0.1.131 eth0
1 rac1-vip Virtaual IP 10.0.1.241 eth0
1 rac1priv Private IP 192.168.163.131 eth1
2 rac2 Plublic IP 10.0.1.132 eth0
2 rac2-vip Virtaual IP 10.0.1.242 eth0
2 rac2priv Private IP 192.168.163.132 eth1
both rac-cluster SCAN IP 10.0.1.100 eth0

2.分别修改两个节点的主机名(by all)

vim /etc/sysconfig/network

3.分别修改两台节点的IP地址(by all)

vim /etc/sysconfig/network-scripts/ifcfg-eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth1

4.分别写入两个节点的hosts文件(by all)

echo "10.0.1.131 rac1" >> /etc/hosts
echo "10.0.1.132 rac2" >> /etc/hosts
echo "10.0.1.133 rac1-vip" >> /etc/hosts
echo "10.0.1.134 rac2-vip" >> /etc/hosts
echo "10.0.1.135 rac-scan" >> /etc/hosts
echo "11.11.11.131 rac1-priv" >> /etc/hosts
echo "11.11.11.132 rac2-priv" >> /etc/hosts

cat /etc/hosts

第零步:关闭系统防火墙(by all)

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

service iptables stop
chkconfig iptables off

cat /etc/selinux/config
service iptables status

第一步:配置共享存储(by all)

1.现在Win2012上创建5个存储盘
这里创建了1G的ocr盘,一个1G的投票盘(votingdisk),一个20G的数据盘(data),一个10G的备份盘(backup)。

2.连接iscsi
安装并设置自动启动

mount -o loop /dev/cdrom /mnt/cdrom
cd /mnt/cdrom/Packages
rpm -ivh iscsi-initiator-utils-6.2.0.873-27.el6_9.x86_64.rpm
chkconfig iscsid on

扫描iscsi存储并重启服务器,重启后会自动挂载

iscsiadm -m discovery -t sendtargets -p 10.0.1.141:3260

查看

fdisk -l | grep Disk

第二步:初始化设置(by all)

1.禁用ntpd并删除其配置文件(禁用后rac的grid安装的时候回自动使用自带的CTSS进行时间关系)
service ntpd status
service ntpd stop
chkconfig ntpd off
mv /etc/ntp.conf /etc/ntp.conf.bak
2.修改profile文件,在文档尾部新增如下内容
vim /etc/profile
if [ $USER = "oracle" ]; then
	if [ $SHELL = "/bin/ksh" ]; then
		ulimit -p 16384
		ulimit -n 65536
	else
	ulimit -u 16384 -n 65536
	fi
fi
3.安装字体,防止中文环境下安装乱码
mkdir -p /usr/share/fonts/zh_CN/TrueType/
cp zysong.ttf /usr/share/fonts/zh_CN/TrueType/
4.编辑/etc/sysctl.conf(by all)
vim /etc/sysctl.conf
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 96636764160
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500


sysctl -p
5.编辑/etc/security/limits.conf(by all)
vim /etc/security/limits.conf
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 2047
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
6.编辑/etc/pam.d/login(by all)
echo "session required pam_limits.so" >> /etc/pam.d/login
6.创建用户并修改密码(by all)
groupadd -g 4321 oinstall
groupadd -g 4322 dba
groupadd -g 4323 oper
groupadd -g 4324 asmdba
groupadd -g 4325 asmadmin
groupadd -g 4326 asmoper
useradd -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -g oinstall -G asmadmin,asmdba,dba,oper oracle

echo "xiaoliu" | passwd --stdin grid
echo "xiaoliu" | passwd --stdin oracle
 
id oracle
id grid
7.新建grid和oracle安装目录(by all)
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/grid
mkdir /u01/app/oracle
chown -R grid:oinstall /u01
chown oracle:oinstall /u01/app/oracle
chmod -R 775 /u01/

参照官方文档,采用GI与DB分开安装和权限的策略,对于多实例管理有利。
8.配置环境变量(节点1)
# 需要注意的是ORACLE_UNQNAME是数据库名,创建数据库时指定多个节点是会创建多个实例,ORACLE_SID指的是数据库实例名
# 配置oracle账户环境变量
su - oracle
vim /home/oracle/.bash_profile

export ORACLE_SID=orcl1  # RAC1
export ORACLE_UNQNAME=oracledbrac
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

source .bash_profile

# 配置grid账户环境变量
su - grid
vim /home/grid/.bash_profile

export ORACLE_SID=+ASM1  # RAC1
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022

source .bash_profile
9.配置环境变量(节点2)
# 配置oracle账户环境变量
su - oracle
vim /home/oracle/.bash_profile

export ORACLE_SID=orcl2  # RAC2
export ORACLE_UNQNAME=oracledbrac
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

source .bash_profile

# 配置grid账户环境变量
su - grid
vim /home/grid/.bash_profile

export ORACLE_SID=+ASM2  # RAC2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0/grid
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
umask 022

source .bash_profile
10.配置oracle用户ssh互信(by all)

1.配置ssh互信方法1:使用oracle官方系统的脚本(用root账户在其中一个节点执行即可)

# 需要同时配置grid和oracle两个账户下的public ip和vip的ssh互信
/home/grid/grid/sshsetup/sshUserSetup.sh -user oracle -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced
/home/grid/grid/sshsetup/sshUserSetup.sh -user grid -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced


-hosts 表示:需要配置互信的服务器ip
-user 表示:用于远程登录到服务器上的用户名
-advanced 表示:hosts里的主机,每两个主机之间都是互信的。
    如果不加-advanced,例如:本机是HOST-A,在本机执行./sshUserSetup.sh -user aime -hosts A B C。那么就是HOST-A->A, HOST-A->B, HOST-A->C 的互信关系。A,B,C之间是不互信的。

2.配置ssh互信方法2:手动配置

# 这是很关键的一步,虽然官方文档中声称安装GI和RAC的时候OUI会自动配置SSH,但为了在安装之前使用CVU检查各项配置,还是手动配置互信更优。
# 注意:生成秘钥的的时候,一路回车,不要设定密码。
# 所有节点执行(by all)
su - oracle
rm -rf ~/.ssh
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa

su - grid
rm -rf ~/.ssh
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa


# 节点1执行
su - oracle
ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys rac2:.ssh/authorized_keys

su - grid
ssh rac1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh rac2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
scp ~/.ssh/authorized_keys rac2:.ssh/authorized_keys

# 节点2执行
su - oracle
chmod 600 ~/.ssh/authorized_keys
exit
su - grid
chmod 600 ~/.ssh/authorized_keys

3.执行以下命令测试(by all)

# 第一次会提示让输入密码,以后不会就表示成功
# 注意:需要同时在两个节点的oracle和grid用户都执行以下测试命令,互相测试
su - oracle
ssh rac1 date && \
ssh rac2 date && \
ssh rac1-priv date && \
ssh rac2-priv date

su - grid
ssh rac1 date && \
ssh rac2 date && \
ssh rac1-priv date && \
ssh rac2-priv date
10.安装依赖包(by all)

x64

yum install -y binutils-* compat-db* compat-db-* control-center* gcc-* gcc-c++-* glibc-* glibc-common-* gnome-libs-* \
make-* pdksh* sysstat-* xscreensaver-* make-* gdb-6.1post-* glibc-* glibc-common-* glibc-devel-* glibc-devel-* \
compat-gcc-* compat-gcc-c++-* compat-libstdc++-* compat-libstdc++-devel-* gnome-libs-* libstdc++-* libstdc++-devel-* \
openmotif-* sysstat-* setarch-* libaio-* libaio-devel-* libXp* libXp-devel* elfutils-libelf-devel* unixODBC-* \
unixODBC-devel-* compat-libcap1.x86_64 libcap.so.1 sg3_utils

x86

yum install -y compat-libstdc++-33-3.2.3-69.el6.i686 glibc-devel-2.12-1.132.el6.i686 libaio-devel-0.3.107-10.el6.i686 libstdc++-4.4.7-4.el6.i686 unixODBC-2.2.14-12.el6_3.i686 unixODBC-devel-2.2.14-12.el6_3.i686 libaio-0.3.107-10.el6.i686
11.配置udev(by all)(方法1)
echo "options=--whitelisted --replace-whitespace" >> /etc/scsi_id.config

for i in b c d e
do
echo "KERNEL==\"sd*\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id --whitelisted --replace-whitespace --
device=/dev/\$name\", RESULT==\"`/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\",
NAME=\"asm-disk$i\", OWNER=\"grid\", GROUP=\"asmadmin\", MODE=\"0660\""
done

将以上脚本输出的内容写入 /etc/udev/rules.d/99-oracle-asmdevices.rules文件 ,如果/etc/udev/rules.d目录下已存在99开头的规则文件,需先将其改为其
他数字开头

vim /etc/udev/rules.d/99-oracle-asmdevices.rules

cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adc9c722970d3da17b6",NAME="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adc81e583cc9a98a4e9",NAME="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adcbe42850beacee517",NAME="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360003ff44dc75adcb145661c7f58f967",NAME="asm-diske", OWNER="grid", GROUP="asmadmin", MODE="0660"

启动并验证udev

/sbin/start_udev

[root@rac1 ~]# ll /dev/asm*
brw-rw---- 1 grid asmadmin 8, 16 11月 24 19:33 /dev/asm-diskb
brw-rw---- 1 grid asmadmin 8, 32 11月 24 19:33 /dev/asm-diskc
brw-rw---- 1 grid asmadmin 8, 48 11月 24 19:33 /dev/asm-diskd
brw-rw---- 1 grid asmadmin 8, 64 11月 24 19:33 /dev/asm-diske

这里需要注意的是配置的,前后都不能有空格,否则会报错。最后看到的raw盘权限必须是grid:asmadmin用户。

12.配置udev(by all)(方法2)
vim /etc/udev/rules.d/60-raw.rules

ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"
KERNEL=="raw[1-5]*", OWNER="grid" GROUP="asmadmin", MODE="660"

启动并验证udev

/sbin/start_udev

[root@rac1 sshsetup]# ll /dev/raw/
总用量 0
crw-rw---- 1 grid asmadmin 162, 1 12月 28 20:14 raw1
crw-rw---- 1 grid asmadmin 162, 2 12月 28 20:14 raw2
crw-rw---- 1 grid asmadmin 162, 3 12月 28 20:14 raw3
crw-rw---- 1 grid asmadmin 162, 4 12月 28 20:14 raw4
crw-rw---- 1 grid asmadmin 162, 5 12月 28 20:14 raw5
crw-rw---- 1 root disk     162, 0 12月 28 20:14 rawctl

第三部分:安装grid(by all)

su - grid
unzip p13390677_112040_Linux-x86-64_3of7.zip -d grid/

su - root
rpm -ivh /home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm

执行安装前的环境检查(by all)

su - grid
/home/grid/grid/./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose -fixup

语法说明:
-pre: 该选项主要检查是否满足安装的需要。 
-post:该选择主要检查安装后组件是否正常。 
-n:该选项用于指定节点列表。 
-verbose:该选项用于输出详细的验证信息。 
-fixup:这是Oracle 11gR2中新增加的一个参数。利用这个参数,可以产生一个名为runfixup.sh的脚本。

runfixup.sh脚本中包含一系列的操作系统命令,利用这个脚本可以对操作系统进行一定的修改,使其满足安装条件。完成系统进行校验之后,以root用户的身份执行脚本runfixup.sh,就可以解决操作系统中一些尚不满足安装条件的情况。

在其中有一个节点上开始安装grid(会启动复制到另外一个节点)

su - grid
export DISPLAY=10.0.1.2:0.0
./runInstaller    

1   跳过软件更新
2   为集群安装和配置 Oracle Grid infrastucture
3   高级安装
4   简体中文 和 英文
5   SCAN名称改成上边的rac-cluster,关闭【配置GNS】
6   这里默认只有一个节点,需要手动添加节点2
7   确认网卡接口类型对不对(专用网络为心跳网络)
8   Oracle自动存储管理(Oracle ASM)
9   更改搜索路径填入【/dev/asm*】,并选中之前创建的裸磁盘(其中的3块1GB的作为中裁盘)
10  对这些账户使用同一口令(asmadmin)
11  不适用只能平台管理接口
12  确认ASM实例权限分组情况,默认即可
13  Oracle基目录/u01/app/grid,软件位置:/u01/app/11.2.0/grid,是之前设置系统变量里已经输入的地址
14  清单目录:保持默认即可:/u01/app/oralnventory
15  先决条件检查,检查成功后可以保存响应文件
16  安装过程中会提示让使用root用户执行两个sh配置脚本,先在安装Grid的的节点执行,成功以后在到另外节点执行。
    /u01/app/oraInventory/orainstRoot.sh
    /u01/app/11.2.0/grid/root.sh

第四部分:安装database

同样只需要在一个节点上安装即可,会自动复制到另外节点。

cd /home/oracle/database/
./runInstaller

1   取消【我希望通过 My Oracle Support 接受安全更新】
2   跳过软件更新
3   仅安装数据库软件
4   Oracle Real Application Clusters 数据库安装,下边节点已经将两个节点都显示出来了,会自动复制到第二个节点
5   选择语言
6   企业版
7   安装路径,之前都已经配置好的,默认即可
8   确认Oracle权限用户组,默认即可
9   先决条件检查:
    单客户机访问名(SCAN)警告  --忽略
    pdksh-5.2.14 警告   --忽略
10  概要,可以保存响应文件
11  开始安装,会自动复制到节点2
12  安装过程中会提示让使用root用户执行两个sh配置脚本
    /u01/app/oraInventory/orainstRoot.sh    --按提示在节点2执行
    /u01/app/oracle/product/11.2.0/db_1/root.sh     --需要在两个节点都执行
13  执行完脚本后点确定完成安装

第五部分:创建集群数据库(在节点1上执行即可)

注意8、10、12步骤

su - oracle
dbca

1   Oracle Real Application Cluster(RAC)数据库
2   创建数据库
3   定制数据库
4   全局数据库名和SID前缀都输入:orcl,选择双节点
5   Enterprise Manager和自动维护任务保持默认
6   所有账户(SYS、SYSTEM、DBSNMP、SYSMAN)使用同一管理口令(xiaoliu)
7   存储类型:自动存储管理(ASM),使用 Oracle-Managed Files选择数据库区为之前创建的DATA(+DATA)
    指定 ASM 专用的ASMSNMP口令:asmadmin
8   开启:指定快速恢复区,大小:4096 MB
    启用归档
9   数据库组件:默认
10  字符集选择:使用 Unicode(AL32UTF8),其他选项默认
11  数据库存储:默认
12  勾选生成数据库创建脚本:/u01/app/oracle/admin/orcl/scripts
13  创建数据库 - 概要 另存为HTML文件:/u01/app/oracle/product/11.2.0/db_1/bin/
14  创建完成

# 在第7步应该会提示密码错误,解决方法:
用网格用户(通常是grid用户)输入:
sqlplus / as sysasm
alter user ASMSNMP identified by 新密码

第六部分:恢复数据库

创建表空间
CREATE TEMPORARY TABLESPACE "PSSC_TEMP" TEMPFILE '+DATA/pssc/pssc_temp.dbf' SIZE 2147483648 AUTOEXTEND ON NEXT 52428800 MAXSIZE 20480M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1048576;
CREATE TABLESPACE "TBS_PSSC_SM" DATAFILE '+DATA/pssc/DATA_PSSC_SM.DBF' SIZE 524288000 AUTOEXTEND ON NEXT 104857600 MAXSIZE 32767M LOGGING ONLINE PERMANENT BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE DEFAULT NOCOMPRESS  SEGMENT SPACE MANAGEMENT AUTO;

创建用户
create user admin identified by xiaoliu default tablespace TBS_PSSC_SM temporary tablespace PSSC_TEMP profile DEFAULT;
grant dba to admin with admin option;
grant unlimited tablespace to admin with admin option;

恢复数据库
imp admin/xiaoliu file=/home/oracle/pssc_sm64_20181016.dmp from user=user_pssc_sm64 touser=admin

常用命令

查看监听状态
lsnrctl status

设置DISPLAY变量
export DISPLAY=10.0.1.2:0.0

查看Oracle数据库位置
select name from v$datafile;
select file_name from dba_data_files;

查看磁盘信息
select group_number,path,state,total_mb,free_mb from v$asm_disk;

查看磁盘IO信息
asmcmd lsdsk --statistics -G DATA

查看是否有数据库实例连接上ASM实例
select instance_name,db_name,status from v$asm_client;

ASM DISK信息(显示每个磁盘的大小和可用空间)
select path, state, total_mb, free_mb from v$asm_disk;

ASM DISKGROUP(显示磁盘组的大小和可用空间)
select name,state,type,total_mb,free_mb from v$asm_diskgroup;


ASM管理工具
su - grid
asmca
asmcmd

附录:rlwrap工具可以解决sqlplus和rman退格键和上下键不能使用的问题

rlwrap sqlplus / as sysdba
rlwrap rman target=USER_PSSC_SM64_20181016/123456

附录:sqlplus乱码问题

首先查看Oracle服务端的字符集
select userenv('language') from dual;

设置环境变量
export NLS_LANG=CHINESE_CHINA.AL32UTF8

附录:查看是否为归档模式

查看是否为归档模式
archive log list

%sqlplus /nolog (启动sqlplus)
SQL> conn / as sysdba (以DBA身份连接数据库)
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
SQL> exit (退出)

附录:安装Grid后的检查

su - grid

检查crs状态

[grid@rac2 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

检查Clusterware资源

[grid@rac2 ~]$ crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host        
----------------------------------------------------------------------
ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    rac1        
ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type 0/5    0/0    ONLINE    ONLINE    rac1        
ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    rac1        
ora.cvu        ora.cvu.type   0/5    0/0    ONLINE    ONLINE    rac1        
ora.gsd        ora.gsd.type   0/5    0/     OFFLINE   OFFLINE               
ora....network ora....rk.type 0/5    0/     ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  0/1    0/2    ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   0/3    0/     ONLINE    ONLINE    rac1        
ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1        
ora....C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac1        
ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2        
ora....C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac2        
ora....ry.acfs ora....fs.type 0/5    0/     ONLINE    ONLINE    rac1        
ora.scan1.vip  ora....ip.type 0/0    0/0    ONLINE    ONLINE    rac1 

检查集群节点

[grid@rac2 ~]$ olsnodes -n
rac1	1
rac2	2

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

[grid@rac1 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'
LISTENER_SCAN1
LISTENER

[grid@rac2 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'
LISTENER

确认针对Oracle Clusterware文件的Oracle ASM功能:
如果在 Oracle ASM 上暗转过了OCR和表决磁盘文件,则以Grid Infrastructure 安装所有者的身份,使用给下面的命令语法来确认当前正在运行已安装的Oracle ASM:

[grid@rac1 ~]$ srvctl status asm -a
ASM 正在 rac2,rac1 上运行
ASM 已启用。

附录:RAC维护

查看服务器状态

su - grid

[grid@rac2 ~]$ crs_stat -t -v
Name           Type           R/RA   F/FT   Target    State     Host        
----------------------------------------------------------------------
ora.DATA.dg    ora....up.type 0/5    0/     ONLINE    ONLINE    rac1        
ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    rac1        
ora....N1.lsnr ora....er.type 0/5    0/0    ONLINE    ONLINE    rac1        
ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    rac1        
ora.cvu        ora.cvu.type   0/5    0/0    ONLINE    ONLINE    rac1        
ora.gsd        ora.gsd.type   0/5    0/     OFFLINE   OFFLINE               
ora....network ora....rk.type 0/5    0/     ONLINE    ONLINE    rac1        
ora.oc4j       ora.oc4j.type  0/1    0/2    ONLINE    ONLINE    rac1        
ora.ons        ora.ons.type   0/3    0/     ONLINE    ONLINE    rac1        
ora.orcl.db    ora....se.type 0/2    0/1    ONLINE    ONLINE    rac1        
ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1        
ora....C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1        
ora.rac1.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1        
ora.rac1.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac1        
ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2        
ora....C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2        
ora.rac2.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2        
ora.rac2.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac2        
ora....ry.acfs ora....fs.type 0/5    0/     ONLINE    ONLINE    rac1        
ora.scan1.vip  ora....ip.type 0/0    0/0    ONLINE    ONLINE    rac1

查看群集运行状态

[grid@rac2 ~]$ srvctl status database -d oracledbrac
实例 orcl1 正在节点 rac1 上运行
实例 orcl2 正在节点 rac2 上运行

检查本地节点的CRS状态

[grid@rac2 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

检查集群的CRS状态

[grid@rac2 ~]$ crsctl check cluster
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online

查看集群中节点配置信息

[grid@rac2 ~]$ olsnodes -n -i -s -t
rac1	1	rac1-vip	Active	Unpinned
rac2	2	rac2-vip	Active	Unpinned

查看集群件的表决磁盘信息

[grid@rac2 ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   904428cf03064fa6bf30387138b54c35 (/dev/asm-diskb) [DATA]
 2. ONLINE   153d86b0a8f14f98bf246fd8a7019a8e (/dev/asm-diskc) [DATA]
 3. ONLINE   949a92b9e32e4f95bf34ef896e7d850a (/dev/asm-diskd) [DATA]
Located 3 voting disk(s).

查看集群SCAN VIP信息

[grid@rac2 ~]$ srvctl config scan
SCAN 名称: rac-cluster, 网络: 1/10.0.1.0/255.255.255.0/eth0
SCAN VIP 名称: scan1, IP: /rac-cluster/10.0.1.100

查看集群SCAN Listener信息

[grid@rac2 ~]$ srvctl config scan_listener
SCAN 监听程序 LISTENER_SCAN1 已存在。端口: TCP:11521

附录:格式化ASM 裸设备:

[root@rac1 ~]# ll /dev/asm*
brw-rw---- 1 grid asmadmin 8, 16 11月 24 21:59 /dev/asm-diskb
brw-rw---- 1 grid asmadmin 8, 32 11月 24 21:59 /dev/asm-diskc
brw-rw---- 1 grid asmadmin 8, 48 11月 24 21:59 /dev/asm-diskd
brw-rw---- 1 grid asmadmin 8, 64 11月 24 21:59 /dev/asm-diske


dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw2 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw3 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw4 bs=1024 count=256
dd if=/dev/zero of=/dev/raw/raw5 bs=1024 count=256

附录:oracle RAC RMAN自动备份脚本

1.节点1脚本
#!/bin/bash
ORACLE_SID=orcl1
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=$ORACLE_SID
export ORACLE_HOME=$ORACLE_HOME
export ORACLE_BASE=$ORACLE_BASE
backtime=`date +%Y%m%d`
echo $backtime
# by 小六 20181126 1327133225@qq.com
# ######################### oracle RAC RMAN自动备份脚本 #########################
# 备份要求
# 条件一:在node1每晚进行全量备份,同时删除过期备份和归档日志文件;
# 条件二:为保证节点备份的可用性,备份时node1本地保存一份,ASM存储保存一份;
# 条件三:本地node1点发生故障时,node2可以接管备份操作,在node2上生成全备和ASM中生成备份。
#
# by all
# su - oracle
# mkdir -p /home/oracle/log
# mkdir -p /home/oracle/bak
#
# %c 备份片的拷贝数 
# %d 数据库名称 
# %D 位于该月中的第几天 (DD) 
# %M 位于该年中的第几月 (MM) 
# %F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列 
# %n 数据库名称,向右填补到最大八个字符 
# %u 一个八个字符的名称代表备份集与创建时间 
# %p 该备份集中的备份片号,从1开始到创建的文件数 
# %U 一个唯一的文件名,代表%u_%p_%c 
# %s 备份集的号 
# %t 备份集时间戳 
# %T 年月日格式(YYYYMMDD)

$ORACLE_HOME/bin/rman log=/home/oracle/log/node1_backupall_$backtime.log <<EOF
connect target /
run{
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;

# by all
# su - oracle
# mkdir -p /home/oracle/oracle_bak

allocate channel c1 type disk FORMAT '/home/oracle/bak/node1_%d_%T_%u_%p', '+DATA/bak/node1_%d_%T_%u_%p';
allocate channel c2 type disk FORMAT '/home/oracle/bak/node1_%d_%T_%u_%p', '+DATA/bak/node1_%d_%T_%u_%p';

backup as compressed backupset database ;
backup as compressed backupset archivelog all  delete input;

# report obsolete命令用于列出rman资料库中能够被删除的全备份、数据文件拷贝和归档日志记录。 
# report obsolete; 

# 删除陈旧备份(noprompt=不提示)
# delete noprompt  obsolete; 

# 核对所有备份集
crosscheck backup;

# 核对归档日志
crosscheck archivelog all;

# 删除EXPIRED备份集(noprompt=不提示)
# delete noprompt expired backup;

# 释放通道
release channel c1;
release channel c2;
}
EOF
echo "backup complete!"
scp /home/oracle/log/node1_backupall_$backtime.log oracle@rac2:/home/oracle/log/
exit
2.节点2脚本
#!/bin/bash
ORACLE_SID=orcl2
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=$ORACLE_SID
export ORACLE_HOME=$ORACLE_HOME
export ORACLE_BASE=$ORACLE_BASE
backtime=`date +%Y%m%d`
echo $backtime
if [ -f /oracle/rmanbak/log/node1_backupall_$backtime.log ]
then
echo "node1 backup have been success!"
exit
else
echo "node1 backup have been filed,start node2 backup!"
$ORACLE_HOME/bin/rman log=/oracle/rmanbak/log/node2_backupall_$backtime.log <<EOF
connect target /
run{ 
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
allocate channel c1 type disk FORMAT '/oracle/rmanbak/ORCL/node2_%d_%T_%u_%p','+FRA/ORCL/BACKUPSET/node1_%d_%T_%u_%p' ;
allocate channel c2 type disk FORMAT '/oracle/rmanbak/ORCL/node2_%d_%T_%u_%p','+FRA/ORCL/BACKUPSET/node2_%d_%T_%u_%p';
backup database ;
backup archivelog all  delete input;
report obsolete; 
delete noprompt  obsolete; 
crosscheck backup;
crosscheck archivelog all;
delete noprompt expired backup;
release channel c1;
release channel c2;
}
EOF
echo "node2 backup complete!"
fi
#scp /oracle/rmanbak/log/node1_backupall_$backtime.log oracle@OracleNode2:/oracle/rmanbak/log/
exit
3.设置定时任务