大多数企业是无法忍受Oracle系统停机的。下面将介绍一种方法,能够在保持RAC运行的前提下,将Oracle集群中的数据库移动到新的服务器节点。 使用Oracle RAC数据库,其中一些物理服务器到了报废的时候。我们需要更换硬件,切换到新的服务器上。
我们想要以零停机的代价来完成数据库迁移,这可以办到么?答案是,可以。 为了说明这一点,我将介绍一个示例,在这个例子中,我将替换现有的服务器节点1和2,来支持运行在Oracle Real Application集群(RAC)环境中的新实例3和4。在此任务结束后,我们将删除实例1和2。 第一步是设置新节点,配置其网络带宽以及Oracle RAC 数据库……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
电子邮件地址不会被公开。 必填项已用*标注
评论
敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。
姓名 *
电子邮件 *
站点
Save my name, email, and website in this browser for the next time I comment.
大多数企业是无法忍受Oracle系统停机的。下面将介绍一种方法,能够在保持RAC运行的前提下,将Oracle集群中的数据库移动到新的服务器节点。
使用Oracle RAC数据库,其中一些物理服务器到了报废的时候。我们需要更换硬件,切换到新的服务器上。我们想要以零停机的代价来完成数据库迁移,这可以办到么?答案是,可以。
为了说明这一点,我将介绍一个示例,在这个例子中,我将替换现有的服务器节点1和2,来支持运行在Oracle Real Application集群(RAC)环境中的新实例3和4。在此任务结束后,我们将删除实例1和2。
第一步是设置新节点,配置其网络带宽以及Oracle RAC 数据库所需的共享的磁盘空间等。接下来,在新节点上创建管理账户和用户组,以及SSH,以便可以使用无密码的 SSH 来管理服务器。
在服务器完全建立起来之后,我就会从现有节点的一个节点上运行Oracle的集群验证工具(CVU),以确保迁移不会产生问题,比如错误的集群互连配置或者错误的操作系统库等,运行命令的示例如下。
cluvfy stage -pre nodeadd -n new_node1,new_node2 -verbose
如果CVU发现任何问题,那我们就需要在进行下一步之前解决它们。当一切检查完毕后,我们需要将新节点添加到集群中。为此,我需要从一个现有节点输入以下内容:
cd $GRID_HOME/addnode
./addnode.sh -silent "CLUSTER_NEW_NODES={new_node1,new_node2}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={new_node1-vip,new_node2-vip}"
这需要我们在完成时,使用root权限运行一些脚本。一旦新节点成为集群的一部分,我就可以将数据库软件部署扩展到这些节点。在现有节点上,我们需要输入以下内容:
cd $ORACLE_HOME/addnode
./addnode.sh -silent "CLUSTER_NEW_NODES={new_node1,new_node2}"
然而,在新节点上启动任何Oracle RAC数据库实例之前,我还需要添加redo日志线程。在嵌入式SQL*Plus工具中,可以运行如下命令来添加:
alter database add logfile thread 3 group 30 '/directory/redo30a.log' size 5g;
上面的命令为线程3添加了一个联机恢复日志组,它可以被一个新节点所使用。我为该线程创建了足够多的组,通常至少有3个,然后将类似的组添加到线程4,以供其他新节点使用。在创建了所有联机恢复日志组之后,还需要使用如下命令启用它们。
alter database enable thread 3;
alter database enable thread 4;.
接下来,我为新节点创建撤销表空间,以存储需要回滚数据库所需的信息。
create undo tablespace undotbs03 datafile '/directory/undotbs03.dbf' size 30g;
create undo tablespace undotbs04 datafile '/directory/undotbs03.dbf' size 30g;
然后,我需要将条目添加到参数文件中,以支持每个新的数据库实例。首先,我需要输入:
alter system set thread=3 sid='orcl3' scope=spfile;
alter system set instance_number=3 sid='orcl3' scope=spfile;
alter system set undo_tablespace='UNDOTBS03' sid='orcl3' scope=spfile;
对于第四个实例,重复上面的命令。在每个新节点中,我还必须确保$ ORACLE_HOME/ dbs目录与共享存储上数据库服务器参数文件(即SPFILE)和密码文件之间存在软链接。
完成所有这些之后,我就可以开始在新节点上启动新实例了。
srvctl add instance -db orcl -instance orcl3 -node new_node1
srvctl start instance -db orcl -instance orcl3
我在实例4上重复了上述命令。现在我们有了同时运行在新老硬件上的Oracle RAC数据库。
我总是喜欢使用Oracle的服务来实现应用程序连接和工作负载管理。下一步是修改现有的服务,以便其新节点上运行。
srvctl modify service -db orcl -service service_name -modifyconfig -preferred "new_node1,new_node2"
srvctl start service -db orcl -service service_name -node new_node1
srvctl start service -db orcl -service service_name -node new_node2
应用程序连接到新节点上。然后,我将旧节点的服务停止运行。
srvctl stop service -db orcl -service service_name -node old_node1
srvctl stop service -db orcl -service service_name -node old_node2
然而,停止服务不会影响现有的连接。因此,我现在必须等待所有用户从旧节点中断开连接。一旦没有了与实例1和2的活动连接,我就可以关闭并删除它们。
srvctl stop instance -db orcl -instance orcl1 -o immediate
srvctl remove instance -db orcl -instance orcl1
我在实例2上重复上面操作。接下来,通过依次输入这些命令,从集群中删除旧节点:
cd $ORACLE_HOME/oui/bin
./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={old_node1}" -local
接下来,我们需要让新节点上的目录知道它们是集群中仅存的托管数据库软件的目录。在一个新节点上,我输入了如下命令:
cd $ORACLE_HOME/oui/bin
./runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={new_node1,new_node2}" LOCAL_NODE=this_nodes_name
由于数据库软件不再是现有服务器目录的一部分,因此也应该删除Oracle Grid基础结构软件。在删除节点时,我输入了以下命令:
cd $GRID_HOME/bin
./crsctl stop crs
cd $GRID_HOME/oui/bin
./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={old_node1}" CRS=TRUE -silent -local
同样的,我们需要让新节点上的库知道它们是Oracle Grid基础结构集群中仅存的库。我在一个新节点上输入如下命令:
cd $GRID_HOME/oui/bin
./runInstaller -updateNodeList ORACLE_HOME=$GRID_HOME "CLUSTER_NODES={ new_node1,new_node2}" CRS=TRUE -silent
这就是全部的步骤。我们能够在零停机情况下完成一个Oracle RAC数据库的迁移工作。在所有现有用户会话与旧实例断开连接之前,我们可能需要等待一段时间来启用新实例,但这样的切换对于我们的用户来说是透明的,他们完全不会察觉。