数据库复制的设计和管理简介
4.2.1 唯一性约束冲突
如果复制的数据将破坏完整性约束(如当不同站点的事务向参加复制的表中插入主键相同的记录时)将导致唯一性约束冲突。
如果复制方在插入或修改时出现违反唯一性约束问题,则复制方检测到唯一性约束冲突。
多站点复制时网络上不同数据库上的用户同时修改或删除同一记录或同时插入主键相同的记录的矛盾,在设计时要考虑充分,可用以下方法避免:
(1)尽量减少需同时更新数据的站点数;
(2)建立不同取值范围的序列生成器生成主键,避免主键重复的矛盾。但对于站点很多的情况这种方法不合适。避免主键重复的另一方法是在每一站点采用相同的全范围的序列生成器,将其与站点的唯一标识结合作为复合主键;
(3)在应用中不允许修改主键。
4.2.2 删除冲突
如果复制方在执行删除和更新操作时,主键不存在,复制方将检测到一个删除冲突。如果一个事务试图删除已经被别的用户删除了的或正被别的用户修改的记录时将出现删除冲突。删除冲突在复制环境中必须避免。可采用异步删除方法,即在应用程序中不采用删除命令,而采用标记需删除的记录,然后系统定期地统一执行删除操作以避免删除冲突。
4.2.3 更新冲突
当不同站点的事务在几乎同一时间修改同一记录时将导致更新冲突。
在设计时需尽可能避免更新冲突,但不能彻底杜绝。设计时不能避免的冲突,在设计时要全部理出,针对不同情况配置数据库提供的冲突解决方法解决。但数据库内建的冲突解决功能不能解决删除冲突、对主键的修改、违反参考一致性等冲突,这些需要通过应用的设计解决。
4.3 参数的设置
要使复制能自动、正常工作,需在参数文件中适当设置和调整以下参数: 本文引用地址: //m.amcfsurvey.com/article/170939.htm
它们决定复制进程启动的时间间隔和复制进程的个数,它们的设置需与复制的作业的多少和间隔进行协调。
一般第一个参数为2(必须大于0)即可,如果数据库中配置的作业非常多、有多个同时更新的作业,需增大此参数。其取值范围为0~9,A~Z。
第二个参数单位为秒,定义唤醒服务器后台进程的时间间隔,使用缺省值60。
如果二者设置不协调,将导致数据库不能及时更新数据或后台进程死锁。
5 数据库复制的管理
数据库复制的设计主要由研制方完成,而其管理主要是指系统投入使用后的日常管理工作,主要由使用方的数据库管理员来完成。
5.1 参数的修改
在设计时,设计者会综合考虑各种因素以设置参数,但随着用户业务的发展,数据量的增大,在数据库还未出现问题时,数据库管理员应及时地对
JOB QUEUE PROCESS,JOB QUEUE
INTERVAL参数进行调整。如果所设置的参数不能满足应用的需要,数据的复制将出现问题。这可查看快照和数据库的日志文件,如果出现错误,日志中有记录,并且生成CORE文件。后台进程出现的问题数据库自己能解决,但CORE文件需要数据库管理员及时删除,否则由于它增长迅速,将很快占满整个硬盘。
5.2 更改复制更新的间隔
复制作业执行的时间和触发的时间间隔也是管理员经常需调整的因素。
数据库管理员能根据需要更改复制间隔时间,以满足需求的变化。每个用户只能更改属于自己的作业执行间隔。
作业间隔的设定一定不能小于执行一次数据更新所需的时间。
5.3 取消复制作业
由于某种原因不需继续执行复制操作时可取消复制作业。有两种选择:暂时终止和彻底删除。暂时终止的复制作业在将来需要时可恢复执行,而彻底删除的复制作业不可恢复,只能重建。
用户只能停止或取消属于自己的复制作业。
5.4 可能出现的问题
下列情况下数据库的复制不能正常进行:缺少后台进程,网络故障,数据库例程失败,以及复制程序出现错误。
若由于某种原因复制作业不能正常执行,数据库将以一定的时间间隔重复执行此作业,在经过一定次数的尝试后仍不能成功,则该作业将由数据库自动标记为“终止”。一旦造成终止的问题被解决,被终止的作业可人为地让其执行复制(一旦执行成功,该作业的状态将自动改变),或将其状态由终止改为自动执行,让数据库自动执行复制。如果造成终止的问题在数据库发现问题至设定的尝试次数的时间范围之内解决,复制作业将正常执行而不会终止。
如果复制方在设定的时间得不到数据的更新,这时有可能是后台进程死锁,有三种解决方法:人为执行复制作业,将数据复制上来;如果用户并不急需看到更新的数据,那么可以再等待一段时间,Oracle的系统监视进程将自动杀掉死的复制进程,重新生成新的后台进程,复制将自动恢复;关闭并重新打开数据库,复制将自动恢复。
每个用户只能人工执行属于自己的作业。
5.5 扩充站点的问题
如果为了满足新的需求,需在已建立好的复制环境中建立新的快照,则以下三个条件同时成立,系统将出错:
(1)新的快照须采用快速更新方式更新;
(2)新的快照与某个已存在的快照是基于相同的主表;
(3)该已存在的快照在创建新的快照时能被快速更新。
解决此问题的方法是新建的快照采用完全更新方式,或采用以下方法避免问题出现:在建新的快照之前建立一个基于同一主表的虚拟快照,以避免在快照创建时的数据更新,然后以快速更新方式建立所需的快照,最后删除虚拟快照。
6 结束语
数据库的复制是个非常灵活的技术,恰当地应用该技术将给用户和设计者带来意想不到的好处。但复制的应用经常会给数据库系统的管理带来很多麻烦,因此,设计数据库复制环境时要尽可能地简单、实用,以提高系统的可用性。同时,一个分布式数据库系统的数据库管理员,必须具有全面的数据库知识以保证系统正常、稳定地工作。
评论