Windows 11.2.0.4 RAC安装配置以及RAC添加节点

一、安装配置Oracle集群数据库

1. 安装前操作系统设置

  1. 关闭防火墙
1. 控制面板-系统安全-关闭防火墙
2. 高级设置-关闭域安全配置防火墙
  1. 修改主机名
1. 计算机右键-属性-更改计算机名
更改之后需要重启系统
  1. 修改IP以及网卡名称
修改网卡名称便于标识,修改给public、private等便于标识名称。
  1. 修改跃点数
you might set the public network interface metric to 100 and the private network interface metric to 300.
调整public metric为100
调整private metric为300
  1. 调整网卡顺序
1. RAC节点网卡顺序调整为相同,适配器设置,显示菜单栏,高级设置,可以调整顺序。public第一、private第二即可,否则可能网络配置出错。
2. 网卡关闭ipv6
netsh Interface 6to4 set state state=disabled
netsh interface isatap set state disabled
netsh interface teredo set state disabled
3. 关闭所有多余网卡,否则可能报错INS-048082,只保留public跟private。
  1. 修改hosts文件
C:\Windows\System32\drivers\etc\hosts
192.168.204.151 winrac01
192.168.204.152 winrac02
10.10.10.11 winrac01-priv
10.10.10.12 winrac02-priv
192.168.204.161 winrac01-vip
192.168.204.162 winrac02-vip
192.168.204.188 scanip
  1. 禁用Windows Media Sensing for TCP/IP
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
新增DWORD
value name:DisableDHCPMediaSense
Data Type:DWORD
Value:1
或
C:\Users\Administrator> netsh interface ipv4 set global dhcpmediasense=disabled
C:\Users\Administrator> netsh interface ipv6 set global dhcpmediasense=disabled
Validate the change with:
C:\Users\Administrator> netsh interface ipv4 show global
C:\Users\Administrator> netsh interface ipv6 show global
  1. 其他操作系统设置
1.共享C盘,C盘右键属性-高级共享
2.设置TEMP环境变量
可以选择重新设置TEMP,此次设置为C:\Windows\TEMP
3.安装netframework 3.5
4.测试两点连通性
两台主机RACtest1和RACtest2互相ping 公共主机名和专用节点名,看是否ping 的通,注意这时候的VIP 和SCAN是ping 不通的
5.同步时间节点
在 winrac01服务器上运行命令:net time \\winrac01(查看 RACtest1的当前时间)
然后在winrac02服务器上运行命令:net time \\winrac02 /set /y (设置 winrac02时间与winrac01同 步)
net time \\winrac01
net time \\winrac02 --查看时间
6.关闭windows 防火墙以及域防火墙

2. 配置共享存储

2.1 DAS存储

DAS存储存储管理界面映射给主机即可。
本次安装为华为存储,需要安装华为多路径Ultrapath即可,其他品牌安装对应多路径软件即可。

2.2 windows iscsi存储服务器

https://blog.csdn.net/u012232730/article/details/84854986

2.3 vmware虚拟磁盘配置

https://blog.csdn.net/kruie/article/details/94382972

https://blog.csdn.net/ningmeng_3211/article/details/105283226

# 修改vmware虚拟机vmx文件
policy.vm.mvmtid = ""
scsi0:1.fileName = "F:\VirtualDisk\windows_shared\Windows Server 2012-1g.vmdk"
scsi0:1.present = "TRUE"
scsi0:1.mode = "independent-persistent"
scsi0:2.fileName = "F:\VirtualDisk\windows_shared\Windows Server 2012-30g.vmdk"
scsi0:2.present = "TRUE"
scsi0:2.mode = "independent-persistent"
scsi0:1.redo = ""
scsi0:2.redo = ""
disk.locking="FALSE" 
scsi0:1.SharedBus="Virtual"
scsi0:2.SharedBus="Virtual"
disk.EnableUUID="TRUE"

2.4 磁盘创建RAW分区

上述配置完磁盘之后,磁盘管理器-新建简单卷-不分配驱动器号或驱动器路径-不要格式化这个卷
--其他节点不需要设置,联机磁盘,刷新即可。
# 对于华为UltraPath,DAS映射的存储,需要在上述执行完毕之后,分配盘符,然后再删除盘符,使其显示RAW格式,方可正常识别。
# 磁盘一定是raw,且对着磁盘前面图标点属性,关闭windows缓存,一定是raw,asm才能正常识别,如果不是raw而是空,则集群无法启动,识别不到磁盘,对着磁盘后面框属性,添加一下盘符,再删除但是不格式化磁盘,集群即可正常启动。
# 本次华为存储,设置完成之后就不显示raw格式,可能是因为没有开启automount,需要添加一下盘符,删除盘符即可正常识别为raw。
# 设置磁盘automount
C:\> diskpart
DISKPART> AUTOMOUNT ENABLE

3. 安装Oracle Grid以及Oracle Rdbms软件

3.1 校验安装环境

runcluvfy stage -pre crsinst -n winrac01 -verbose

3.2 由于有下面bug需要先仅安装grid软件随后配置集群

[INS-20802] Grid Infrastructure failed During Grid Installation On Windows OS (Doc ID 1987371.1)
Bug:17927204 is first fixed in Windows DB Bundle Patch 11.2.0.4.11 or higher. At the time of writting the solution, the latest version is 11.2.0.4.14, which is available as Patch 20502905 WINDOWS DB BUNDLE PATCH 11.2.0.4.14.
1. Complete a software only install of the 11204 Grid software on each node.
2. Apply Patch 20502905 WINDOWS DB BUNDLE PATCH 11.2.0.4.14 to the Grid HOME.
3. Run config.bat from GI_HOME\crs\config to configure Grid Infrastructure in a clustered environment (OR 'Grid_home\perl\bin\perl -IGrid_home\perl\lib -IGrid_home\crs\install Grid_home\crs\install\roothas.pl' for a Grid Infrastructure standalone / Oracle Restart environment)
The following error may be seen after running the config.bat : "ACFS drivers installation failed" to resolve the error run ASMCA to configure ACFS.  To resolve the error run ASMCA to configure ACFS on cluster env.  Run following in on standalone (Restart) env.
   1) cd Grid_home\oui\bin
   2) setup.exe -updateNodeList ORACLE_HOME=Grid_home CLUSTER_NODES= CRS=TRUE
   3) run ASMCA to configure ACFS

3.3 仅安装grid软件

安装选择仅安装grid软件,由于bug存在,需要先安装软件,然后打补丁。

3.4 打补丁

1.下载OPatch工具并更新GRID Home
2. opatch apply
c:\software\补丁\29596609>c:\app\11.2.0\grid\OPatch\opatch.bat apply

3.5 配置Grid集群

c:\app\11.2.0\grid\crs\config>config.bat

3.6 安装Oracle软件

# 需要指定hostname否则会报错INS-35423
c:\software\database>setup.exe -debug ORACLE_HOSTNAME=winrac01  # 只需要指定安装所在节点hostname即可。

3.7 Oracle软件打补丁

有活动dll程序,需要进入运行-services.msc-停止oracle rdbms ORACLE_HOME下的相关Service,重新apply即可。
c:\software\补丁\29596609>C:\app\Administrator\product\11.2.0\dbhome_1\OPatch\opatch.bat apply

3.8 DBCA创建数据库

dbca创建数据库即可,如果使用rman迁移数据库,可不创建数据库。

4. 添加节点

4.1 新服务器配置

参考1、2、3、4、5章节依次设置新服务器。

4.2 Grid addNode

Grid Cluster添加节点在官方文档位置:
1. 校验新节点是否设置
# 在已存在节点校验新节点是否符合条件
cluvfy stage -pre nodeadd -n  -verbose
2. copy grid software以及配置
cd c:\app\11.2.0\grid\oui\bin
set IGNORE_PREADDNODE_CHECKS=Y
addNode.bat -silent "CLUSTER_NEW_NODES={winrac02}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={winrac02-priv}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={winrac02-vip}"
# windows server不像linux上添加节点会提示需要最后执行root.sh,windows server会自动完成执行脚本,只需要关注弹出cmd窗口是否成功即可,成功会提示Enter退出。
3. gridconfig.bat配置新节点
Run the following command on the new node:
C:\>Grid_home\crs\config\gridconfig.bat
4.集群组件完整性检查
Run the following command to verify the integrity of the Oracle Clusterware components on all of the configured nodes, both the preexisting nodes and the nodes that you have added:
C:\>cluvfy stage -post crsinst -n all [-verbose]
5.查看集群所有资源是否正常,如有异常,单独处理
C:\Windows\system32>crsctl status res -t

4.3 Oracle RDBMS addNode

Oracle软件添加节点其他详细场景在官方文档:
Oracle Real Application Clusters Administration and Deployment Guide
1. 在集群已存在节点,本例为winrac01节点
# 参考语法
cd %ORACLE_HOME%/oui/bin
addNode.bat -silent "CLUSTER_NEW_NODES={}"
c:\app\Administrator\product\11.2.0\dbhome_1\oui\bin>addNode.bat -silent "CLUSTER_NEW_NODES={winrac02}"
...
实例化脚本以添加节点 (2021年6月30日 星期三 上午09时18分41秒 CST)
.                                                                 1% 已完成。
实例化添加节点脚本完成
复制到远程节点 (2021年6月30日 星期三 上午09时18分49秒 CST)
................................................................................
................                                97% 已完成。
主目录已复制到新节点
正在执行远程节点操作 (2021年6月30日 星期三 上午09时54分49秒 CST)
远程节点操作完成
在节点上保存产品清单 (2021年6月30日 星期三 上午09时55分46秒 CST)
保存产品清单完成
C:\app\Administrator\product\11.2.0\dbhome_1 的 添加集群节点 已成功。
请查看 'C:\Windows\Temp\silentInstall.log' 以获取详细资料。
请按 Enter 退出...
# 上面显示成功,Enter退出即可。
2.DBCA ADD Administrator-Managed Oracle RAC Database Instances
如有DBCA无法完成添加,手工添加实例即可。
3.手工添加实例(optional)
SQL> create undo tablespace undotbs2 datafile '+data' size 200M;
SQL> alter system set undo_tablespace='undotbs1' scope=both sid='orcl1';
SQL> alter system set undo_tablespace='undotbs2' scope=both sid='orcl2';
SQL> alter system set instance_number=1 scope=spfile sid='orcl1';
SQL> alter system set instance_number=2 scope=spfile sid='orcl2';
SQL> alter database add logfile thread 2 group 4 ‘+datadg’ size 50M;
SQL> alter database add logfile thread 2 group 4 ‘+datadg’ size 50M;
SQL> alter database add logfile thread 2 group 4 ‘+datadg’ size 50M;
SQL> alter database enable thread 2;
将active节点的$ORACLE_HOME/dbs/initorcl1.ora文件拷贝一份到新加节点的$ORACLE_HOME/dbs/下,并改名为对应实例名的参数文件。
$ cd $ORACLE_BASE/admin
$ mkdir orcl
$ cd solaris/
$ mkdir adump
$ mkdir bdump
$ mkdir udump
$ mkdir cdump
在新加节点使用sqlplus,startup实例。
$ echo $ORACLE_SID
$ sqlplus / as sysdba
$ SQL>startup;
如果服务正常,则使用srvctl命令将新加节点实例注册到集群中,使用集群服务托管。
$ srvctl add instance -d orcl -i orcl2

二、数据库迁移

由于数据量不大,如果停机时间较为充足,首选比较简单expdp迁移。如果停机时间较短,则需要使用RMAN

1. 停应用

需要应用配合停止应用

2. 源库备份

# 由于未开归档,在停机之前,先逻辑备份数据库
cmd> sqlplus / as sysdba
SQL> create directory a1 as 'd:\bak';
SQL> grant read,write on a1 to system;
expdp system/111111 directory=expdp dumpfile=db_bak_%U.dmp exclude=statistics schemas=user1,user2 parallel=8

3. 源库停监听,kill连接,锁定业务帐户

# 停止监听
cmd > lsnrctl stop
# kill session
sqlplus / as sysdba
SQL> select 'alter system kill session '''||sid||','||serial#||''';' from v$session where username in ('USER1','USER2');
# 查询是否有活动事务
SYS@honor1 > select sysdate,min(start_time) from v$transaction;
# 锁定帐户
SQL select 'alter user '||username||' account lock;' from dba_users where username in ('HR');

4. 最终导出

expdp system/111111 directory=expdp dumpfile=db_bak_%U.dmp exclude=statistics schemas=user1,user2 parallel=8

5. 目标端创建表空间

# 源库获取创建表空间语句SELECT 'CREATE TABLESPACE '||tablespace_name||' DATAFILE '||'''path'||tablespace_name||file_id||'.dbf'' SIZE '||sum(bytes)/1024/1024||'M;' FROM dba_data_files GROUP BY tablespace_name,file_id;# 目标库创建表空间根据上述生成语句适当修改目标库创建表空间。

6. 目标库导入

impdp system/password directory= dumpfile= parallel=N exclude=statistics

7. 收集统计信息

SQL> exec dbms_stats.gather_schema_stats('HR',degree=>16,estimate_percent=>5,method_opt=>'for all columns size 1');

8. 数据比对

8.1 对象数量校验

# 11.2.0.4 dba_objects统计包含了LOB段索引。

SELECT object_type,count(*)FROM dba_objectsWHERE owner='&username'group by object_type;

8.2 约束数量校验

# 约束

SELECT constraint_type,invalid,count(*)FROM  dba_constraintsWHERE owner='&username'GROUP BY constraint_type,invalid;

8.3 通过count(*)校验数据

# 使用临时表、匿名pl/sql批量校验数据

8.3.1 创建临时表结构

CREATE TABLE table_hash( owner VARCHAR2(30), tn VARCHAR2(30), tc NUMBER, PRIMARY KEY(owner,tn));

8.3.2 修改owner,对用户下所有表进行count(*)统计

DECLARE  v_cc number;  CURSOR v_tbl IS SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER='HR';BEGIN FOR c IN v_tbl LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' ||c.owner||'.'||'"'||c.table_name||'"' INTO v_cc; INSERT INTO TABLE_HASH VALUES(c.owner,c.table_name,v_cc); END LOOP; COMMIT;END;/

8.3.3 查询数量

SELECT owner,tn,tcFROM table_hash;

8.3.4 比对

可以通过建立db link或者使用excel表格进行数据比对即可。

9. 修改应用连接串,验证应用

10. 验证通过,备份数据库

请使用浏览器的分享功能分享到微信等