Oracle RAC培训学习心得
OracleRAC培训学习心得
上周参加了OracleRAC培训课程,课程介绍了RAC在数据库中的概念,以及如何在LINUX系统下配置和管理使用RAC的数据库,同时还介绍了如何在RAC环境中配置和使用自动存储管理(ASM),节点的添加和删除,RAC数据库的备份和恢复。
OracleRAC是Oracle数据库实现高可用的一项重要技术,OracleRAC的实施配置并不困难,只要按照文档一步步操作下去就可以了。然而,我认为Oracle培训更大的意义在于对RAC技术原理、实现方式在理论上的讲解。对于一项技术的深入掌握,理论和实践缺一不可。理论指导实践,尤其在进行故障诊断的时候,理论知识的掌握就会起到巨大的作用,另一方面,实践能更好地帮助理论的理解,进而完全的掌握这项技术。Oracle和其他技术的学习都应该是一个由实践到理论,再由理论回到实践的不断交替的过程。
OracleRAC的优势在于利用多个节点(实例)组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展。实现OracleRAC需要解决的关键问题就是多节点进行数据访问时如何保证数据的一致性,Oracle是通过各节点间的私有连接进行内存融合(cachefusion)来保证各节点数据访问的一致性。用一个例子来解释一下内存融合的过程,在存在A、B两个节点的RAC环境中,当A节点使用DML语句(如Update)对一个数据块中的数据进行修改时,A节点实例会到GRD(GlobalResourceDirectory)中查找该数据块的信息,这些信息包括该数据块的Master(第一次读这个数据块的节点),Owner(当前拥有这个数据块的节点),以及数据块在各个节点间的传递记录。A节点如果发现GRD中没有需要读取的数据块的信息,说明该数据块是一个干净的数据块,A节点从磁盘或BufferCache中获得该数据块,然后对需要修改的行加锁,进行相应的修改,当然SCN会随之增加。在A完成修改而没有提交或回滚的情况下,如果B节点也需要访问这个数据块修改某些行(假设不同于A修改的行),B同样去到GRD中查找该数据块的信息,当然B发现该数据块的Master为A,Owner也为A,为了保证A的修改不丢失,B需要发信息给A,让A将需要修改的数据块通过私有连接直接从内存中传给B,当然该数据块中包含A的锁信息,这样A节点与B节点间的一次内存的数据传递就是内存融合。OracleRAC的内存融合也面临一些问题,继续刚刚的例子,如果A又再次请求对该数据块修改或者结束事务(提交或回滚)的时候,又需要从B节点内存中取得数据块,又要发生内存融合,这样在两个节点业务没有合理分割的情况下,数据库繁忙时,大量的内存融合会对数据库性能造成严重的影响。通过对OracleRAC技术的理解,在实现OracleRAC架构时的业务分割就成为了保证系统性能的重要手段,业务分割的根本在于使不同的实例不能访问相同的数据块,这样业务分割规则可以小到表的级别(通常不同的表共享一个数据块的几率不大),大到表空间、Schema的级别。这些理论知识的理解对于OracleRAC架构的实施有着巨大的指导意义。另外,我对在OracleRAC培训中讲到的一个扩展的RAC磁盘镜像架构印象很深,传统的OracleRAC架构中,存储仍然是一个单点故障,在这个扩展的RAC磁盘镜像架构中,解决了传统架构中的存储单点故障风险,该架构如下图:
该架构中分为A、B两个Site,两个Site可以存在数公里的距离,整体上两个Site的4个节点共同构成一个RAC集群,两个Site间通过DarkFiber(暗光纤)作为私有连接链路,保证各个节点间的内存融合的进行,每个节点的写操作都能同时无延迟的写到2个存储上,两个存储的同步写可以通过第三方软件或ASM实现。不过其中很大的成本在于两个Site间的DarkFiber(暗光纤)架设成本。
在讲解这部分内容时,关于这个架构是一个RAC还是两个RAC实现的,我们有过一些争论,我认为是一个RAC实现的,而另外一名学员和讲师说是两个RAC实现,最后针对这个问题,请教了一位更资深的Oracle讲师,这位Oracle讲师通过对RAC原理的分析,如果认为是两个RAC实现的话,两个Site无法进行内存融合,就没有办法保证Oracle数据库的数据一致性,因此采用两个RAC是无法实现这个架构的。这样大家都认同了这个架构是一个RAC实现的,可见理论知识的理解对解决问题的帮助还是很大的。
扩展阅读:Oracle培训心得
OracleConcept
StevenCheng
主讲:贾代平著有《OracleDBA核心技术解析》
一.OracleDatabase
database=instance(inmemory)+database(indisk)callscallscalls
1instancecorrespondsto1database.二.Session
Oneusercanopenseveralsessions(对话期间)withOracleserver,thelifeofasessionexistsonlyduringthetimewhenitiscreated.三.Oracle优于传统档案者,在于它能保障一笔资料(transaction)散置
在相关个表(table)中数据的完整性,记录则完全记录,删除则完全删除。因为它将《重做日志》完整保存,其记录过程如下:
commitwritewritewrite。因此Oracle所储存的资料可以倒回(rollback)。如果insert,update或delete,没有commit或rollback,该记录会被锁住。四.StartUp/ShutDown
Oracle在不同阶段,依序启动各个files(i.e.Controlfile,etc.):
五.Oracle的框架
i.
ii.
物理结构
1.控制档(ControlFile):包含维护和验证数据库完整性的必要信息。例如:《控制档》指示《数据档》和《重做日志档》的储存位置,一个数据库至少需要一个《控制档》。2.数据档(DataFile):储存数据。
3.重做日志档(RedoLogFile):储存对数据库所做的更改记录。这样万一出现故障可以启动数据恢复(recovery)。一个数据库至少需要两个《重做日志档》。
4.参数档(ParameterFile):定义Oracleinstance的特性。例如:它包含SGA中一些内存区大小的参数。
5.归档档(ArchiveFile):是《重做日志档》的off-linecopy,储存较早的资料,目的和《重做日志档》一样,都是用于recovery。
6.密码档(PasswordFile):储存哪些用户有权启动和关闭Oracleinstance。
数据档(DataFile)逻辑结构
想象一个装满东西的柜子,数据库(e.g.ShippingDatabase)就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据档,文件夹中的纸是表,写在纸上的信息就是数据,表空间是组织数据的一种方法。
1.表空间(Tablespaces):是数据库中的基本逻辑结构,包含该数据库中所有的表,以及相关的程序、程式,由段组成。每个数据库包含至少一个系统表空间,以及其他数个档案:系统表空间(systemtablespace):是必备的部分,存放表空间名称,所包含数据档等信息。临时表空间(temptablespace):储存所有临时表。工具表空间(toolstablespace):储存工具软件。用户表空间(userstablespace):储存用户的私有信息,数据档通常存放在此。索引表空间(indextablespace):用来迅速找出存放的数据。
回滚表空间(rollbacktablespace):储存回滚段。2.段(Segment):长度(numberofbytes)可由用户自定,由区组成。段可以包含数据段、索引段、回滚段、临时段等。3.区(Extent):长度由用户自定,由块组成。
4.块(Block):Oracle最基本的存储单位,在建立数据服务器的时候指定,大小一般可以在2~64k之间。
2内存分配
1.SystemGlobalArea:储存数据库信息的内存区,该信息为数据库各种进程所共享。它包含Oracle服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
2.ProgramGlobalArea:储存单个服务器/后台进程的数据和控制信息,PGA在创建进程时分配,在终止进程时回收。
iv.后台进程
1.写数据进程(Database-WriteProcess):负责将更改的数据从数据库高速缓存区写入数据档。
2.写日志进程(Log-WriteProcess):负责将重做日志缓冲区中的更改写入在线重做日志档。
3.系统监控(SystemMonitor):负责检查数据库的一致性,如有必要,还会在数据库打开时,启动数据库的恢复。
4.进程监控(ProcessMonitor):负责在一个Oracle进程失败时清理资源。
5.检查点进程(CheckpointProcess):负责将每次缓冲区高速缓存的更改,永久地记录在数据库中,更新控制档和数据档中的数据库状态信息。当检查点进程(CheckpointProcess)向数据库发出检查点时,Oracle必须更新所有数据文件的文件头,以记录检查点的详细信息。检查点进程(CheckpointProcess)有助于减少实例恢复的时间,因为它可以引起数据库写进程(DatabaseWriter)把自上一个检查点以来所有被修改过的数据块写到数据文件中。
6.归档进程(ArchiveProcess):负责在每次日志切换时,把已满的日志组进行备份或归档。
7.服务进程(ServerProcess):负责在服务器端,执行用户进程的命令。
8.用户进程(Userprocess):负责在客户端,将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。
六.数据库体系各部份之间的联系
iii.
友情提示:本文中关于《Oracle RAC培训学习心得》给出的范例仅供您参考拓展思维使用,Oracle RAC培训学习心得:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。