浅谈Oracle RAC – RAC DB 简介
小伙伴好久不见。
前面我们写了很多关于集群软件的知识,了解之前的内容,在维护RAC环境时是必不可少的技能。今天我们来写一些关于数据库层面的知识。
1.RAC DB 与 GI 的关系
正如之前我们谈到的GI软件是甲骨文开发的集群软件,这个集群软件可以管理众多资源。这里所说的资源包括各种应用程序(当然也可以包括客户自定义的程序)。在介绍CRS的博文中,我们介绍到GI软件中的CRS组件是管理资源的重要组件。它可以对资源进行 CHECK,START,STOP,ABORT 等操作。那么Oracle数据库当然也可以被GI所管理,Oracle数据库以ora.<数据库名>.db的资源名的形式存在于GI管理的资源中。我们通过以下命令可以看到CRSD下面所管理的Oracle数据库的名字。
# crsctl stat res ora.test.db -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.test.db
1 ONLINE ONLINE node2 Open
2 ONLINE ONLINE node1 Open
以上的例子说明TEST是个2节点的RAC数据库,其两个instance分别存在于node1和node2上。
以上除了STATE和STATE_DETAILS之外的信息都保存在OCR中。而STATE和STATE_DETAILS的信息则是由CRSD的oraagent监测到的当前TEST数据库的状态。
既然RAC DB被CRSD组件管理,那么我们可以通过GI层面的命令srvctl来操作RAC DB。比如:
$srvctl start|stop database -db <数据库名>
以上命令可以通过CRSD将所有节点的数据库启动和关停。为什么可以这样做?因为CRSD是一个在所有节点上都存在的分布式组件。
关于stop命令需要注意一点,在不指定关闭数据库的mode时,srvctl默认采用是immediate。也就是说srvctl内部会执行类似于shutdown immediate的命令。
如果你需要强制停止数据库时,可以在srvctl后面加-o abort.
$srvctl stop database -db <数据库名> -o abort
还有其它的操作mode,就不一一列举了。
另外,可以用以下命令启动或关闭特定节点上的实例。
$srvctl start|stop instance -db <数据库名> -node <节点名>