Oracle RAC是Oracle数据库推出的实时应用集群技术,它起源于8i的OPS(Oracle Parallel Server),最开始的设计初衷就是系统与应用的高可用性。但是直到Oracle 9i才出现真正的意义上的集群产品(RealApplication Clusters RAC),从Oracle 10g开始的RAC得到了全面的推广,其具备稳定可靠、负载均衡和分布计算的特性,并可以实现性能随服务器线性扩充。如下图,是一个2节点RAC的典型硬件架构。
RAC作为集群系统其不同于传统的HA集群软件,主要表现为多实例并行运行和数据文件所有节点共同访问。因此在进行数据库备份恢复操作的时候需要考虑多实例这一特点,不能单纯只在一个节点上操作。
由于RAC是并行服务集群,每个节点上都有一个运行着的单独实例、监听和集群服务,我们可以通过crs_stat工具查看这些对象的状态,如果要对这些对象进行停止,我们可以在每个节点类似于单实例的方式对这些对象进行停止操作,也可以直接用SRVCTL工具在一个节点上对所有节点的对象进行操作,这里我们介绍下如何通过SRVCTL工具停止数据库、实例和监听的操作,下面我们举例进行下演示。
[root@rac1~]#su–oracle
[oracle@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.orcl.db application ONLINE ONLINE rac1
ora....l1.inst application ONLINE ONLINE rac1
ora....l2.inst application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....01.lsnr application ONLINE ONLINE rac1
ora....c01.gsd application ONLINE ONLINE rac1
ora....c01.ons application ONLINE ONLINE rac1
ora....c01.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....02.lsnr application ONLINE ONLINE rac2
ora....c02.gsd application ONLINE ONLINE rac2
ora....c02.ons application ONLINE ONLINE rac2
ora....c02.vip application ONLINE ONLINE rac2
下面对字段列表做一些说明:
Ø Name资源名称
Ø Type类型,一般都为application
Ø Target目标状态
Ø State当前状态
Ø Host资源所在的当前主机
如果资源的当前状态为offline或unknown,就表示资源状态不正常。如下例,就是表示一个节点上的数据库实例没有启动。
ora....l2.inst application OFFLINEOFFLINE
[oracle@rac1~]$ srvctl stop database –dorcl
[oracle@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.orcl.db application OFFLINE OFFLINE
ora....l1.inst application OFFLINE OFFLINE
ora....l2.inst application OFFLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE rac1
ora....01.lsnr application ONLINE ONLINE rac1
ora....c01.gsd application ONLINE ONLINE rac1
ora....c01.ons application ONLINE ONLINE rac1
ora....c01.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....02.lsnr application ONLINE ONLINE rac2
ora....c02.gsd application ONLINE ONLINE rac2
ora....c02.ons application ONLINE ONLINE rac2
ora....c02.vip application ONLINE ONLINE rac2
[oracle@rac1~]$ srvctl stop instance –dorcl –i orcl2
[oracle@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.orcl.db application ONLINE ONLINE rac1
ora....l1.inst application ONLINE ONLINE rac1
ora....l2.inst application OFFLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE rac1
ora....01.lsnr application ONLINE ONLINE rac1
ora....c01.gsd application ONLINE ONLINE rac1
ora....c01.ons application ONLINE ONLINE rac1
ora....c01.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....02.lsnr application ONLINE ONLINE rac2
ora....c02.gsd application ONLINE ONLINE rac2
ora....c02.ons application ONLINE ONLINE rac2
ora....c02.vip application ONLINE ONLINE rac2
[oracle@rac1~]$ srvctl stop listener –nrac1
[oracle@rac1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.orcl.db application ONLINE ONLINE rac1
ora....l1.inst application ONLINE ONLINE rac1
ora....l2.inst application ONLINE ONLINE rac2
ora....SM1.asm application ONLINE ONLINE rac1
ora....01.lsnr application OFFLINE OFFLINE
ora....c01.gsd application ONLINE ONLINE rac1
ora....c01.ons application ONLINE ONLINE rac1
ora....c01.vip application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....02.lsnr application ONLINE ONLINE rac2
ora....c02.gsd application ONLINE ONLINE rac2
ora....c02.ons application ONLINE ONLINE rac2
ora....c02.vip application ONLINE ONLINE rac2
[oracle@rac1~]$ srvctl start database –d orcl
[oracle@rac1~]$ srvctl start instance –d orcl –i orcl2
[oracle@rac1~]$ srvctl start listener–n rac1
当然也可以使用sqlplus来启动/关闭数据库,通过lsnrctl来启动/关闭监听,这些就不做具体介绍了。
RAC采用多节点共享磁盘方式实现数据库群集,它的数据文件、联机日志和数据库控制文件都能为集群中的每个节点所访问,RAC允许多个实例同时访问同一数据库,所以一个实例的故障不会导致无法访问数据库。RAC的这种基于共享磁盘体系结构的特性,使得用户能够方便地按需要增加和减少集群的服务器,并为用户提供了容错、负载均衡和性能效益等特性。
由于RAC的数据文件需要所有节点同时访问,因此RAC的共享数据文件一般采用3种方式存放:
Ø 裸设备
Ø 集群文件系统
Ø ASM
它们各有优缺点,在中联的用户中最常见的是使用ASM方式存放共享数据文件,这里我们只重点介绍ASM,其他2种方式可以自行参阅相关资料。
ASM的全称是自动存储管理(Automatic Storage Management),是 Oracle 数据库 10g 中一个非常出色的新特性,它以平台无关的方式提供了文件系统、逻辑卷管理器以及软件 RAID 等服务。ASM 可以条带化和镜像磁盘,从而实现了在数据库被加载的情况下添加或移除磁盘以及自动平衡 I/O 以删除“热点”。
ASM 不是一个通用的文件系统,并只能用于 Oracle 数据文件、重做日志以及控制文件。ASM中的文件既可以由数据库自动创建和命名(通过使用 Oracle 管理文件特性),也可以由 DBA 手动创建和命名。
ASM被广泛地用于RAC环境,在中联的用户中得到了较为广泛的应用,事实也证明ASM的稳定性是有保障的。
要使用ASM,Oracle会在RAC中的节点上创建一个单独的 Oracle 实例,并作为CRS集群资源来管理:
ora....SM1.asm application ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
由于使用ASM来保证数据库文件,因而只有ASM实例正常运行时,数据库实例才能启动和动迁。ASM也有独立的SGA和后台进程结构,不同的是它没有属于自己的数据库文件,只是为普通数据库实例提供IO能力。
ASM不同于一般的文件系统,不可以通过操作系统命令对它进行访问,只能通过数据库对进行操作和查询。我们可以在普通数据库实例中通过查询v$datafile来查看数据文件的存放的路径:
SQL> Select Name From v$datafile;
NAME
-------------------------------------------
+DATE/orcl/datafile/system.260.782241001
+DATE/orcl/datafile/undotbs1.301.782241003
+DATE/orcl/datafile/sysaux.267.782241003
+DATE/orcl/datafile/users.263.782241003
+DATE/orcl/datafile/undotbs2.300.782241163
+DATE/orcl/datafile/zl9indexcis.dbf
+DATE/orcl/datafile/zl9cisrec.dbf
可以清楚的看到,ASM下存放的数据文件的路径不同于常规文件系统下的路径,其都是以+DATE开头,这里的DATA是ASM磁盘组名称,表示我们的数据文件是存放在DATA这个ASM磁盘组下的;当然我们也可以创建多个ASM磁盘组。
如果我们要直接访问这些数据文件应该怎么办呢?Oracle提供了一个asmcmd工具来直接操作ASM中的文件,asmcmd在windows与Unix/Linux中用法相同的。
在使用asmcmd工具前,必须要指定访问的ASM实例(设置环境ORACLE_SID变量),有点类似于指定数据库实例,只是实例名是+ASMn,具体操作如下,其中n为节点编号,过程简述如下:
[root@rac1~]#su–oracle
export ORACLE_SID=+ASM1
[oracle@rac1~]$asmcmd
ASMCMD>
接着我们做一些简单的操作,看下如何通过ASMCMD访问ASM中的文件,asmcmd中命令用法大体类似Unix/Linux命令,这里我们列举几个简单的示例:
ASMCMD>ls
DATE/
进入指定名录
ASMCMD>cd DATE
ASMCMD>ls
ORCL/
ASMCMD>cd ORCL
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileorcl.ora
ASMCMD>
Ø cd,进入指定目录
Ø du,显示文件/目录的空间占用情况
Ø find,查找文件或目录
Ø help,帮助,列出主要命令的用法
Ø ls,列举目录/文件
Ø lsct,显示显示ASM和数据库实例连接情况
Ø lsdg,显示ASM磁盘组的使用情况
Ø mkalias,建立别名
Ø mkdir,建立目录
Ø pwd,显示当前目录
Ø rm,删除目录或文件
Ø rmalias,删除别名
具体每个命令的含义的使用通过help进行查阅,有详细的说明,如下。
ASMCMD>help cd
cd <dir>
Change the current directory to <dir>.
由于ASM是一个单独的实例,操作系统无法直接访问 ASM 中存储的文件,无法直接对其进行复制、粘贴和删除操作,因此对使用 ASM 文件的数据库执行备份和恢复操作的唯一途径就是通过RMAN,后面我们将对RMAN的具体使用进行详细的说明。