ALLSTARS_ORACLE 发表于 2013-12-4 16:13:32

单实例转RAC实施方案

单实例转RAC实施方案


2        直接转换方案


2.1        当前环境的操作系统准备工作
请参照搭建RAC环境的规范和要求,对当前操作系统进行检查,如果有不满足条件的,进行调整以满足条件


除了通用的安装规范和要求,针对本系统的实际情况,有以下特殊情况,需要特别关注
2.2        网卡的准备
oracle的10g数据库搭建RAC环境,对用户oracle数据库的网卡和IP有以下要求
1 每个节点至少2块网卡,一块用于RAC的私网通讯,一块用于公网通讯
2 每个节点至少需要3个IP地址:
私网通讯地址:操作系统必须指定相关IP,用于oracle的RAC内部通讯
公网通讯地址:操作系统必须指定相关IP,通常为主机名所对应的IP地址
虚拟IP地址:操作系统不能启动相关IP,但是必须预留,并且在/etc/hosts中指定相关IP地址,在oracle的RAC相关组件启动后,将启用该IP地址。
请注意公网地址和vip和当前数据库监听器所使用IP地址,设定在同一个网段内,以便最后可以将其中一个节点的vip修改为当前节点的监听器所使用地址

2.3        存储的准备

2.3.1.1        裸设备的识别方式变更

在当前主备双机热备模式下,存储在同一时间只能被一个节点所识别并读写
而RAC模式下所有裸设备必须被2个节点同时识别,并且可以同时读写,

2.3.1.2        需要增加的裸设备

单节点转RAC还需要增加以下裸设备

用途        份数        每份大小        备注
Voting Disk        3        256M       
OCR        2        512M       
新增节点在线日志        3*2        500M       
新增节点undo表空间        5        4GB       
控制文件        1        和原有控制
文件大小一致        Oracle推荐控制文件
设置3份实现高可用

其中Voting Disk和OCR必须在安装oracle的clusterware之前准备就绪,并且能够2个节点能够同时读写
其它裸设备可以在安装完oracle的RDBMS后面再增加




















2.4        备份原始ORACLE的相关软件
请以root用户将整个ORACLE_BASE目录进行tar备份
Eg:
--当前数据库的ORACLE_BASE为/oracle/app/oracle,并且ORACLE_HOME在ORACLE_BASE目录下
cd /oracle/app/oracle
--以下目录temp_dir用有剩余空间的目录替换
tar cpf - . | compress -fv > temp_dir/ora_db_10204_aix_single.tar.Z


2.5        安装ORACLE的10.2.0.1版本的CRS软件
安装前请确保Voting Disk和OCR必须在安装oracle的clusterware之前准备就绪,并且能够2个节点能够同时读写
请按照CRS的安装文档,安装ORACLE的CRS软件
CRS必须和RDBMS的安装在不同的目录下。
准备工作就绪后,通过cluvfy工具检查安装crs的条件是否已经具备
oracle用户到crs安装软件的目录下,然后进入相关目录并执行相关命令
$cd Disk1/cluvfy/
--node_list为逗号分隔的集群各个节点名称的列表
$runcluvfy.sh stage -pre crsinst -n node_list -verbose

2.6        安装ORACLE的10.2.0.1版本的RDBMS软件
请按照RAC数据库的安装文档,安装ORACLE的RDBMS软件
请务必注意,此处安装的选择的路径,必须和原有单实例数据库的RDBMS不一样
CRS安装完成后,通过cluvfy工具检查安装RDBMS的条件是否已经具备
到crs安装软件的目录下,然后进入相关目录并执行相关命令
$cd Disk1/cluvfy/
--node_list为逗号分隔的集群各个节点名称的列表
$runcluvfy.sh stage -pre dbinst -n node_list -verbose

2.7        升级ORACLE的CRS到10.2.0.4
请按照CRS的升级文档,升级ORACLE的CRS软件


2.8        升级ORACLE的RDBMS到10.2.0.4
请按照RAC数据库的升级文档,升级ORACLE的RDBMS软件
请务必注意,此处新升级的oracle的RDBMS,为新安装的RDBMS软件

2.9        应用ORACLE的CRS的相关补丁
安装ORACLE的CRS软件的补丁

2.10        应用ORACLE的RDBMS的相关补丁
安装ORACLE的RDBMS软件的补丁
请务必注意,此处应用补丁所的oracle的RDBMS路径,为新安装的RDBMS软件所在路径


2.11        备份原始oracle单实例数据库
请根据日常的备份策略,对现有数据库进行全库完整备份













2.12        执行单实例转RAC操作

2.12.1        关闭当前的单实例数据库和监听
echo $ORACLE_HOME
echo $ORACLE_SID
lsnrctl stop
sqlplus "/ as sysdba"
shutdown immediate


2.12.2        关闭确保所有的裸设备都能够被2个节点同时识别和读写
请操作系统确认,数据库所涉及的所有裸设备都可以被2个节点同时识别和读写
这里包括当前数据库的所有控制文件,数据文件,临时文件和在线日志,
也包括本章前面部分 <<存储的准备>>中所涉及的裸设备

2.12.3        切换ORACLE用户的环境变量
指向相关环境变量新安装的CRS和RDBMS相关路径
CRS_HOME:指向CRS的安装目录
ORACLE_HOME:指向安装CRS之后,新安装的RDBMS的目录,而不是以前的单实例的RDBMS的安装目录
ORACLE_SID:指向新的实例名称,此处为RAC的实例名,例如ORACLE_SID=SCOOBY1
PATH:修改为export PATH=$ORACLE_HOME/bin:$CRS_HOME/bin:/usr/ccs/bin:$PATH:/home/oracle/OPatch确保新安装RDBMS和CRS的bin目录下的目录搜索的优先级最高
修改后确认
$CRS_HOME
$ORACLE_HOME
$ORACLE_SID
$PATH

2.12.4        针对新的ORACLE_SID,创建新的初始化参数文件:

$ORACLE_HOME/dbs/initSCOOBY1.ora
It either has all parameters or has spfile defined to point to a shared location for spfile.

2.12.5        设置RAC相关的数据库参数和本实例的相关参数:
添加以下内容
*.cluster_database=true
*.cluster_database_instances=2
SCOOBY1.thread=1
SCOOBY1.instance_number=1
SCOOBY1.undo_tablespace='UNDOTBS1'
2.12.6        启动实例SCOOBY1,并检查前面设置参数已经生效
sqlplus "/ as sysdba"
start up;
show parameter cluster

2.12.7        在实例SCOOBY1上,创建cluster的数据字典:
sql> @?/rdbms/admin/catclust.sql

2.12.8        备份当前OCR
root用户执行:
$ORA_CRS_HOME/bin/ocrconfig -export /tmp/ocr.backup.20110812
$ORA_CRS_HOME/bin/ocrconfig -showbackup

2.12.9        通过srvctl将数据库和实例信息注册到OCR当中,以下是添加的命令和格式
oracle用户执行
srvctl add database -d <name> -o <oracle_home>
srvctl add instance -d <name> -i <inst_name> -n <node_name>

eg:
srvctl add database -d SCOOBY -o $ORACLE_HOME
--QCP630701用节点1的主机名代替
srvctl add instance -d SCOOBY -i SCOOBY1 -n QCP630701

2.12.10        通过srvctl关闭和启动数据库实例,确保能够正常运行
srvctl stop instance -d SCOOBY -i SCOOBY1
srvctl start instance -d SCOOBY -i SCOOBY1



2.13        添加第二个实例


这个时候可以通过DBCA工具来通过Add Instance来添加第二个实例



2.14        执行后续操作
2.14.1        调整public IP和VIP
如果应用有相关要求,需要将其中一个节点的vip设置为原始为应用提供服务的IP地址,可以通过以下方法实现:
1 关闭oracle数据库和CRS所有程序和资源
2 操作系统回收公网网卡原始为应用提供服务的IP地址,并为公网网卡指定新的IP地址
3 修改/etc/hosts文件,调整public和vip的主机名和IP地址的对应关系
4 通过oracle的命令oifcfg来修改集群中配置的公网地址
如果公网地址的网段和网卡都没有发生变化,仅仅是ip地址的最后面发生变化,oracle的CRS和数据库不需要进行特殊处理
4 通过oracle的命令oifcfg来修改集群中配置vip地址
如果vip的ip地址发生变化,需要修改vip地址,可以参考
Modifying the VIP or VIP Hostname of a 10g or 11g Oracle Clusterware Node
Gathering Current VIP Configuration
1. Gather the existing setup
for 10g and 11gR1, as CRS owner:

$ srvctl config nodeapps -n <node> -a

eg:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-vip/101.17.80.184/255.255.254.0/eth1
for 11gR2, as Grid owner:
$ srvctl config nodeapps -a

eg:
$ srvctl config nodeapps -a
Network exists: 1/101.17.80.0/255.255.254.0/eth1, type static
VIP exists: /racnode1-vip/101.17.80.184/101.17.80.0/255.255.254.0/eth1, hosting node racnode1
VIP exists: /racnode2-vip/101.17.80.186/101.17.80.0/255.255.254.0/eth1, hosting node racnode2
2. Verify VIP status

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)
- it should show VIPs are ONLINE

$ ifconfig -a
(netstat -in for HP and ipconfig /all for Windows)
- VIP logical interface is bind to the public network interface

Stopping Resources
3. Stop the nodeapps resources and all dependent resources (stop ASM/DB instance only required for full outage):

10g and 11gR1, as CRS owner:
$ srvctl stop asm -n <node_name>
$ srvctl stop instance -d <db_name> -i <inst_name>
$ srvctl stop nodeapps -n <node_name>

eg,
$ srvctl stop asm -n racnode1
$ srvctl stop instance -d RACDB -i RACDB1
$ srvctl stop nodeapps -n racnode1
11gR2, as Grid owner:
$ srvctl stop instance -d <db_name> -n <node_name>
$ srvctl stop vip -n <node_name> -f

eg,
$ srvctl stop instance -d RACDB -n racnode1
$ srvctl stop vip -n racnode1 -f


Note: The -f option is required for 11gR2, otherwise following error will occur:
PRCR-1014 : Failed to stop resource ora.racnode1.vip
PRCR-1065 : Failed to stop resource ora.racnode1.vip
CRS-2529: Unable to act on 'ora.racnode1.vip' because that would require stopping or relocating 'ora.LISTENER.lsnr', but the force option was not specified
...



To prevent the automatic startup of ASM or database instances until the change has been verified, one might want to disable the corresponding resources:

$ srvctl disable database -d <db_name>
$ srvctl disable asm -n <node>  (only applicable for pre-11.2)
$ srvctl disable nodeapps  (only applicable for 11.2+)



4. Verify VIP is now OFFLINE and the interface is no longer bound to the public network interface

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)

$ ifconfig -a
(netstat -in for HP and ipconfig /all for windows)

Modifying VIP and Its Associated Attributes
5. Determine the new VIP IP/subnet/netmask or VIP hostname, make the network change on OS first, ensure the new VIP is registered in DNS or modified in /etc/hosts (for Unix/Linux) and \WINDOWS\System32\drivers\etc\hosts file (for Windows). If the network interface is changed, ensure the new interface is available on the server before proceeding with the modification.

For example:
New VIP is: 110.11.70.11 racnode1-nvip
new subnet is 110.11.70.0
new netmask is 255.255.255.0
new interface is eth2

6. Modify the VIP resource

as root user:
# srvctl modify nodeapps -n <node> -A <new_vip_address or new_vip_hostname>/<netmask>/<]>

eg:
# srvctl modify nodeapps -n racnode1 -A racnode1-nvip/255.255.255.0/eth2


Note 1: For Windows platform, the interface name needs to be in quote (") if there is space in between, eg:
As administrator user or software install user:
> srvctl modify nodeapps -n racnode1 -A 110.11.70.11/255.255.255.0/"Local Area Connection 1"


Note 2: Starting with 11.2, the VIP depends on network resource (ora.net1.network), the OCR only records the VIP hostname or the IP address associated with the VIP resource. The network attributes (subnet/netmask) is recorded with the network resource.

From 11.2.0.2 onwards, network resource can be modified directly via srvctl modify network command.

as root user:
# srvctl modify network -k <network_number>] [-S <subnet>/<netmask>]

eg:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2


7. Verify the change

$ srvctl config nodeapps -n <node> -a (10g and 11gR1)
$ srvctl config nodeapps -a (11gR2)

eg:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-nvip/110.11.70.11/255.255.255.0/eth2

Restarting Resources
8. Start the nodeapps and the other resources


If resources are disabled before, they can be enabled now with
$ srvctl enable nodeapps
$ srvctl enable asm -n <node_name>
$ srvctl enable database -d <db_name>


As CRS or Grid Infrastructure user:

$ srvctl start nodeapps -n <node_name>
$ srvctl start instance -d <dbanme> -i <inst>
$ srvctl start asm -n <node_name>

eg:
$ srvctl start nodeapps -n racnode1
$ srvctl start instance -d RACDB -i RACDB1
$ srvctl start asm -n racnode1

9. Verify the new VIP is ONLINE and bind to the public network interface

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)

$ ifconfig -a
(netstat -in for HP or ipconfig /all for windows)

10. Repeat the same steps for the rest nodes in the cluster only if the similar change is required.


Others
11. Modify listener.ora and tnsnames.ora for release prior to 11gR2 to reflect the VIP change if necessary.

5 通过netca工具来修改listener和tnsnames等相关内容






























































3        数据迁移方案

3.1        新环境的准备
请参照当前搭建RAC环境的准备工作,准备2台新的服务器,并准备好共享存储


3.2        安装ORACLE的10.2.0.1版本的CRS软件
请按照CRS的安装文档,安装ORACLE的CRS软件


3.3        安装ORACLE的10.2.0.1版本的RDBMS软件
请按照RAC数据库的安装文档,安装ORACLE的RDBMS软件



3.4        升级ORACLE的CRS到10.2.0.4
请按照CRS的升级文档,升级ORACLE的CRS软件


3.5        升级ORACLE的RDBMS到10.2.0.4
请按照RAC数据库的升级文档,升级ORACLE的RDBMS软件


3.6        应用ORACLE的CRS的相关补丁
安装ORACLE的CRS软件的补丁


3.7        应用ORACLE的RDBMS的相关补丁
安装ORACLE的RDBMS软件的补丁


































3.8        通过expdp导出应用用户的相关对象

在源环境进行操作
3.8.1        expdp前的准备工作

--首先创建一个目录,指向准备存放dump文件的OS目录
此次假定为/orabak/data_dump_dest,请确保该目录有足够空间,并且IO性能较好,请根据实际情况进行替换
cd /orabak/
pwd
mkdir data_dump_dest
sqlplus "/ as sysdfba"
create directory data_pump_dest as '/orabak/data_dump_dest';
--授权
GRANT read,write ON DIRECTORY data_dump_dest TO system;


3.8.2        避免expdp期间,应用还通过网络连接修改数据
以下方法,可以避免expdp期间,应用通过网络连接修改数据和job运行修改数据的情况
如果有直接在本地运行的会修改业务数据的应用程序,需要额外处理
echo $ORACLE_HOME
echo $ORACLE_SID
--停止监听器
lsnrctl stop
sqlplus "/ as sysdba"
--禁用job
alter system set job_queue_processes=0;
--正常关闭数据库
shutdown immediate
--正常启动数据库
startup

3.8.3        源环境导出相关应用用户对象
以下命令中APP_USER1,APP_USER2为以逗号分隔的应用用户列表,请根据实际情况进行替换
vi expdp_app_users.par
DIRECTORY=data_pump_dest
logfile=expdp_app_users.log
DUMPFILE=expdp_app_users_%U.dmp
JOB_NAME=expdp_app_users
SCHEMAS=APP_USER1,APP_USER2
FILESIZE=2G  
PARALLEL=8

以下命令中SYSTEM_USER_PASSWARD用SYSTEM用户实际密码替换
nohup expdp system/SYSTEM_USER_PASSWARD PARFILE=expdp_app_users.par &




3.9        通过impdp导入应用用户的相关对象
通过ftp等工具以二进制方式将源环境生成的导出文件,传送到目标环境

3.9.1        目标环境导入应用用户相关对象

在目标环境进行操作
3.9.2        impdp前的准备工作

--首先创建一个目录,指向准备存放dump文件的OS目录
此次假定为/orabak/data_dump_dest,请确保该目录有足够空间,并且IO性能较好,请根据实际情况进行替换
cd /orabak/
pwd
mkdir data_dump_dest
sqlplus "/ as sysdfba"
create directory data_pump_dest as '/orabak/data_dump_dest';
--授权
GRANT read,write ON DIRECTORY data_dump_dest TO system;


3.9.3        目标环境导入相关应用用户对象


vi impdp_app_users.par
DIRECTORY=data_pump_dest
logfile=impdp_app_users.log
DUMPFILE=expdp_app_users_%U.dmp
JOB_NAME=impdp_app_users
FULL=Y
PARALLEL=8

以下命令中SYSTEM_USER_PASSWARD用SYSTEM用户实际密码替换
nohup impdp system/SYSTEM_USER_PASSWARD PARFILE=impdp_app_users.par &




3.9.4         用system用户进行datapump可能导致job的owner发生变化

如果是system用户进行schema模式的进行expdp和impdp,可能出现导致job的owner发生变化的情况
出现这种情况,可以在目标环境上将本来属于其它用户,最后被被移动到system用户下job删除,然后重新创建相关job



3.9.5         验证源和目标数据库的一致性

请应用验证源和目标一致性



3.10        执行后续操作

3.10.1        调整public IP和VIP
如果应用有相关要求,需要将其中一个节点的vip设置为原始为应用提供服务的IP地址,可以通过以下方法实现:
源环境操作:
1 操作系统回收公网网卡原始为应用提供服务的IP地址,并为公网网卡指定新的IP地址
目标环境操作:以下操作在目标环境进行
1 关闭oracle数据库和CRS所有程序和资源
2 修改/etc/hosts文件,调整public和vip的主机名和IP地址的对应关系
3 通过oracle的命令oifcfg来修改集群中配置的公网地址
如果公网地址的网段和网卡都没有发生变化,仅仅是ip地址的最后面发生变化,oracle的CRS和数据库不需要进行特殊处理
4 通过oracle的命令oifcfg来修改集群中配置vip地址
如果vip的ip地址发生变化,需要修改vip地址,可以参考
Modifying the VIP or VIP Hostname of a 10g or 11g Oracle Clusterware Node
Gathering Current VIP Configuration
1. Gather the existing setup
for 10g and 11gR1, as CRS owner:

$ srvctl config nodeapps -n <node> -a

eg:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-vip/101.17.80.184/255.255.254.0/eth1
for 11gR2, as Grid owner:
$ srvctl config nodeapps -a

eg:
$ srvctl config nodeapps -a
Network exists: 1/101.17.80.0/255.255.254.0/eth1, type static
VIP exists: /racnode1-vip/101.17.80.184/101.17.80.0/255.255.254.0/eth1, hosting node racnode1
VIP exists: /racnode2-vip/101.17.80.186/101.17.80.0/255.255.254.0/eth1, hosting node racnode2
2. Verify VIP status

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)
- it should show VIPs are ONLINE

$ ifconfig -a
(netstat -in for HP and ipconfig /all for Windows)
- VIP logical interface is bind to the public network interface

Stopping Resources
3. Stop the nodeapps resources and all dependent resources (stop ASM/DB instance only required for full outage):

10g and 11gR1, as CRS owner:
$ srvctl stop asm -n <node_name>
$ srvctl stop instance -d <db_name> -i <inst_name>
$ srvctl stop nodeapps -n <node_name>

eg,
$ srvctl stop asm -n racnode1
$ srvctl stop instance -d RACDB -i RACDB1
$ srvctl stop nodeapps -n racnode1
11gR2, as Grid owner:
$ srvctl stop instance -d <db_name> -n <node_name>
$ srvctl stop vip -n <node_name> -f

eg,
$ srvctl stop instance -d RACDB -n racnode1
$ srvctl stop vip -n racnode1 -f


Note: The -f option is required for 11gR2, otherwise following error will occur:
PRCR-1014 : Failed to stop resource ora.racnode1.vip
PRCR-1065 : Failed to stop resource ora.racnode1.vip
CRS-2529: Unable to act on 'ora.racnode1.vip' because that would require stopping or relocating 'ora.LISTENER.lsnr', but the force option was not specified
...



To prevent the automatic startup of ASM or database instances until the change has been verified, one might want to disable the corresponding resources:

$ srvctl disable database -d <db_name>
$ srvctl disable asm -n <node>  (only applicable for pre-11.2)
$ srvctl disable nodeapps  (only applicable for 11.2+)



4. Verify VIP is now OFFLINE and the interface is no longer bound to the public network interface

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)

$ ifconfig -a
(netstat -in for HP and ipconfig /all for windows)

Modifying VIP and Its Associated Attributes
5. Determine the new VIP IP/subnet/netmask or VIP hostname, make the network change on OS first, ensure the new VIP is registered in DNS or modified in /etc/hosts (for Unix/Linux) and \WINDOWS\System32\drivers\etc\hosts file (for Windows). If the network interface is changed, ensure the new interface is available on the server before proceeding with the modification.

For example:
New VIP is: 110.11.70.11 racnode1-nvip
new subnet is 110.11.70.0
new netmask is 255.255.255.0
new interface is eth2

6. Modify the VIP resource

as root user:
# srvctl modify nodeapps -n <node> -A <new_vip_address or new_vip_hostname>/<netmask>/<]>

eg:
# srvctl modify nodeapps -n racnode1 -A racnode1-nvip/255.255.255.0/eth2


Note 1: For Windows platform, the interface name needs to be in quote (") if there is space in between, eg:
As administrator user or software install user:
> srvctl modify nodeapps -n racnode1 -A 110.11.70.11/255.255.255.0/"Local Area Connection 1"


Note 2: Starting with 11.2, the VIP depends on network resource (ora.net1.network), the OCR only records the VIP hostname or the IP address associated with the VIP resource. The network attributes (subnet/netmask) is recorded with the network resource.

From 11.2.0.2 onwards, network resource can be modified directly via srvctl modify network command.

as root user:
# srvctl modify network -k <network_number>] [-S <subnet>/<netmask>]

eg:
# srvctl modify network -k 1 -S 110.11.70.0/255.255.255.0/eth2


7. Verify the change

$ srvctl config nodeapps -n <node> -a (10g and 11gR1)
$ srvctl config nodeapps -a (11gR2)

eg:
$ srvctl config nodeapps -n racnode1 -a
VIP exists.: /racnode1-nvip/110.11.70.11/255.255.255.0/eth2

Restarting Resources
8. Start the nodeapps and the other resources


If resources are disabled before, they can be enabled now with
$ srvctl enable nodeapps
$ srvctl enable asm -n <node_name>
$ srvctl enable database -d <db_name>


As CRS or Grid Infrastructure user:

$ srvctl start nodeapps -n <node_name>
$ srvctl start instance -d <dbanme> -i <inst>
$ srvctl start asm -n <node_name>

eg:
$ srvctl start nodeapps -n racnode1
$ srvctl start instance -d RACDB -i RACDB1
$ srvctl start asm -n racnode1

9. Verify the new VIP is ONLINE and bind to the public network interface

$ crs_stat -t (or $ crsctl stat res -t for 11gR2)

$ ifconfig -a
(netstat -in for HP or ipconfig /all for windows)

10. Repeat the same steps for the rest nodes in the cluster only if the similar change is required.


Others
11. Modify listener.ora and tnsnames.ora for release prior to 11gR2 to reflect the VIP change if necessary.

5 通过netca工具来修改listener和tnsnames等相关内容








iimax 发表于 2013-12-4 19:53:51

太好了 收藏

lf_c 发表于 2013-12-16 11:14:16

写的不错

licharles 发表于 2013-12-16 12:15:58

收藏了!

GuanghuiZhou 发表于 2013-12-18 14:36:58

也可以直接搭建Oracle single-instace<==>RAC的Dataguard。然后再执行主备切换。

stevehai812 发表于 2015-5-20 16:09:25

很详细,好文收藏

elementkk 发表于 2015-12-1 13:47:38

好文收藏,但是有一点考虑,为何当初不直接就规划好呢,非得等后面再来折腾,这样加节点的和前期直接安装好的有没有完全一致。
页: [1]
查看完整版本: 单实例转RAC实施方案