Oracle rac

rac多实例数据库架构有几个基础.第一个基础是共享存储,多台服务器(一般称之为节点)可以同时并发读写相同的文件.

实现共享存储有好多方法:1.最普遍的就是存储局域网络SAN,通过光纤交换机连接的共享存储,一组lun可以同时被多个服务器节点访问.2.以NETAPP为代表的基于TCP/IP的存储方案也是RAC的可选方案,通过ISCSI或者NFS共享文件系统,同样可以满足RAC对于共享存储的需要.在底层的可共享硬件的基础上,对于裸设备或者除了NFS外的非共享文件系统,RAC还需要依赖于操作系统提供的并发存储支持,允许软件并发访问底层存储.从10g开始,Oracle也提供了一个自己的共享存储解决方案ASM,在底层提供共享的存储硬件基础上,Oracle可不使用第三方的共享存储解决方案,仅仅利用自己的ASM技术,实现类似HACMP并发VG或者赛门铁克CFS的功能.

除了共享存储外,RAC还需要依赖于CLUSTWARE.从Oracle10g开始,RAC完全可以脱离第三方的CLUSTWARE,而使用Oracle自己的CRS(Cluster Ready Service).CRS提供了RAC数据库系统所必需的运行环境.从10g开始,RAC数据库(RAC RDBMS)必须依赖于CRS,无论你是否安装了第三方的CLUSTWARE,RAC RDBMS的底层堆栈只能在CRS的基础上运行.

RAC和CRS的区别?

RAC更严格的说是RAC RDBMS,RAC只是Oracle RDBMS的一个选件,安装并启用了RAC功能的数据库我们称之为RAC RDBMS,这是一个多实例的关系型数据库系统.而CRS只是一个CLUSTER的组件,它提供了RAC RDBMS运行所必需的底层集群环境.CRS本身也不提供共享存储系统,它只提供了CLUSTER的节点管理,健康性检查以及一系列CLUSTER应用(比如VIP,ONS等应用),真正在RAC中提供共享存储的是 ASM,HACMP或者CFS等技术.

一个多实例的数据库系统,必须运行在CLUSTWARE环境中,同时CLUSTWARE也是对RDBMS的运行情况进行一定限度的监控.一个RAC数据库实例可以不经过在CRS的OCR中注册而独立启动,而不会影响RDBMS的正常功能,但是如果CRS不知道这个数据库的存在,那么这个数据库及其实例都不在其监控中.一旦某个数据库实例出现故障,CRS也不会做出对应的反应,比如重启节点等.

在多实例数据库环境中,每个实例都有自己独立的SGA,为了确保数据库的一致性,Oracle RAC系统需要使用一个被称为缓冲区融合(CACHE FUSION)的技术来实现多个节点上的缓冲区的一致性访问.

如果一个BUFFER在多个实例中被访问,其开销是比普通的BUFFER大一些的,因为每次访问都需要向某个BUFFER的MASTER节点咨询该BUFFER的情况,并由MASTER节点来授权对该BUFFER的各种访问.

Oracle的所有数据文件都是所有实例共享的,一般来说,必须将数据文件放在所有实例都能访问的存储系统上.

日常维护例子?

在维护RAC数据库的时候,DBA常犯的一个错误就是在添加裸设备的时候,往往只注意了在要添加的节点上修改文件的owner属性,而忘了在其它节点修改属性,一旦其它实例访问了这个文件,发现这个文件无法访问,那么在其他节点的SGA中,这个文件就变成无法访问了.这个时候,哪怕我们修改了文件属性,在SGA中的文件状态还是无法改变的.有的DBA想通过设置文件OFFLINE/ONLINE来解决这个问题,好像也无效.Oracle官方建议是重启其它几个实例,在24*7的生产系统中,重启实例是灾难性的,这种情况下执行alter system check datafiles;可以让实例重新校验所有online文件的状态,恢复文件的可用性.

多实例的数据库中,每个实例拥有一组独立的在线日志记录,REDO THREAD.每个实例独立生成在线日志信息,并且拥有独立的LGWR进程用于写入在线日志文件.在RAC数据环境中,在线日志文件必须是所有节点都能够共同访问的.当我们在数据库上增加新的实例的时候,必须为这个实例创建一组新的在线日志,同时激活这个REDO LOG THREAD.反过来,要从数据库中删除一个实例的时候,必须关闭这个THREAD,否则无论这个实例是否被使用,数据库恢复的时候仍然会用到这个THREAD日志.在这种情况下,关闭某个THREAD重新做一次全库备份,会少很多麻烦事.

在使用UNDO自动段管理模式下,每个实例都需要使用独立的UNDO表空间,这些表空间的数据文件也必须放在所有实例都能访问的共享存储上,.

在多实例数据库环境中,临时表空间是可以多个实例共享的,临时段是不能共享的.在一个临时表空间上,每个表空间都必须拥有自己独立的临时段.当临时表空间满的时候如果其它实例的临时段有空闲空间,那么这个实例可以从其它实例的临时段中偷取一个EXTEND,用于扩展自己的临时段.

  

原文地址:https://www.cnblogs.com/gw666/p/7462663.html