摘 要:在简要说明数据库复制技术的基础上,主要探讨了oracle数据库高级复制的几种方法,介绍了多主复制和可更新快照复制两种机制的设计步骤,并将实际应用中可能出现的问题进行列举,最后给出一个可更新快照复制实例。
关键词:Oracle数据库;高级复制;应用
一些大的信息系统往往由多地的不同用户同时使用,由相距较远的多个站点构成的广域网,并且各个站点之间需要数据共享,通常将这些共享的数据存储在其中一个站点上,作为数据中心,所有用户都从该站点存取数据。这种方案很容易就能保证数据一致性,但会造成数据中心的负载过大,使远程用户的数据响应很慢,甚至造成系统瘫痪。数据复制技术可以有效地解决这个问题,它通过将这些共享数据复制到多个不同站点的数据库中,实现数据的本地访问,减少网络负荷,并提高数据访问的性能,而且通过数据同步,确保数据实时性和一致性[1]。该技术适用于用户数较多、地理分布较广、而且需要实时地访问相同数据的应用模式。
Oracle数据库的复制是由数据库的后台进程自动实现的,通过设置数据库参数,确定后台负责复制任务的进程数和被激活的时间。数据库的后台进程是由系统按设定的时间间隔执行预定的操作,以实现数据定期地从源数据库到目标数据库的传输,并由系统进行控制。Oracle数据库复制支持基本复制和高级复制两种形式,这里主要讲述Oracle高级复制技术在应用时的设计,以及可能遇到的问题和解决办法。
1 基本概念
Oracle高级复制,即对称复制,既可支持整个表的复制也可支持基于部分表的复制两种复制方案,其主要是通过多主复制和可更新快照复制两种机制实现的。同时还可以将这两种复制机制结合起来以满足不断变化的业务需求。
2 高级复制设计步骤
2.1 多主复制
(1)创建复制环境,明确高级复制的站点和参与复制的数据表;保证各站点具有复制关系的表结构的一致性;(2)使用数据库复制管理器,定义参加复制的站点,在复制的各站点,建立包含复制实体的用户和复制的数据库链路,建立复制的管理用户,配置数据更新的计划;(3)建立主复制组,不同的需参与复制的实体可加入不同的组中;(4)给用户分配适合的权限,防止由于用户权限过大而造成的复制冲突。
2.2 可更新快照复制
(1)创建复制环境,明确高级复制的站点、参与复制的数据表和可更新快照复制的站点;保证各站点具有复制关系的表结构的一致性;(2)在复制的各站点建立快照管理用户,建立包含可更新快照实体的用户和复制的数据库链路,配置数据更新的时间和间隔;(3)在主站点建立快照日志;(4)在复制点建立必要的更新组;(5)建立快照组,快照组可包含表、存储过程、包、函数、同义词、视图等实体;(6)给用户分配适合的权限,防止由于用户权限过大而造成的复制冲突。[3]
3 需要注意事项
3.1 确保网络连接的稳定。如果服务器网络连接中断,则造成数据无法访问和传输;网络不稳定,会导致数据传输过程中出现丢包现象,影响数据的完整性。
3.2 要有较高的网络传输速度。各个站点之间要进行大量的、频繁的数据传输,速度过慢的话将影响其访问速度。
3.3 服务器应保持开机状态或定时开机。否则会造成大量的延迟任务,无法进行数据发布。
3.4 不能在参与复制的表上面直接执行DDL语句。因为ORACLE自动在参与复制的表上建立了支持复制的TRIGGER和PACKAGE,在其上面直接执行任何DDL语句都会破坏这些复制支持。应该先SUSPEND要修改表所在的复制组,在REPICATION MANAGER中或调用REPCAT API执行DDL语句,然后重新GENERATE该表的复制支持,最后将复制组状态恢复为NORMAL。注意一定要在修改表结构的DDL语句中的表名前带上属主,并且最后不加分号。若直接执行了DDL语句,应先将该表移出复制环境删掉,再重新建立或复制表。
3.5 如需要在表中增加字段并设置默认值时,在9i之前的版本中要分成两部分执行,不能一次执行。例
ALTER TABLE owner.table_name ADD field_name
ALTER TABLE owner.table_name MODIFY field_name DEFAULT 'abc'
因为在高级复制环境中,执行任何DDL语句,都需要SUSPEND复制组,此时复制表只能查询,不能再执行DML语句。如何在一个SQL语句中执行添加字段同时赋缺省值,则添加字段后插入缺省值的DML操作不会执行,并且报错。分成两步操作能解决该问题。
3.6 执行任何对复制环境的管理命令前,都要保证此时没有堆积的DEFERRED TRANS。
3.7 ADMIN REQUEST(对复制环境的管理命令)须一步一步执行。用一个REPCATLOG表保存ADMIN REQUEST语句,从第一条到最后一条顺序执行,只有执行完上一条后才能执行下一条。每次发出ADMIN REQUEST后,都要检查REPCATLOG表是否为空,只有当所有的REPCATLOG表都为空后,才能将复制组设置为NORMAL,发出下一条命令。
3.8 如果REPCATLOG表中有无法执行的命令,可以APPLY或PURGE掉,再重新执行命令。若只是其中一个节点上有遗留命令,则可在该节点上多执行几次APPLY。
3.9 当出现死锁现象时,可以先尝试中断掉该ADMIN REQUEST对应的任务,重新刷新命令,若能继续执行,则恢复任务,否则从V$SESSION 和V$LOCK中查出死锁进程,用ALTER SYSTEM KILL SESSION 将其杀掉。如果无法杀掉,则需查出类型为'RQ'的分布式死锁,根据SID查出对应的后台进程,从操作系统中杀掉后台进程,最后再恢复任务和相关复制环境的状态。
4 实际应用
某地下水监测系统由省级主站、市级分站和县级分站组成,数据存储采取省级数据中心和市级数据中心分布式存储,均采用Oracle数据库,以确保全省数据储存的快速、稳定、安全。各市分站只为本市所辖县级分站提供存储服务,并将所有测报数据传送汇总到省级主站数据中心,同时其为各市级分站数据实现异地备份,提供跨地市数据查询,当各地市分站数据出现故障时,可从省级主站读取数据,恢复数据。
整个数据同步机制主要采用Oracle复制技术的可更新快照机制。整个分布式数据库系统采用的是“一主多从”的结构(如图1),设置省级主站的数据库系统为主数据库,各市分站的数据库系统为从数据库。使用Oracle系统中的增量复制技术,定时或手动进行主数据库与从数据库的数据更新。从数据库复制到主数据库的是全部数据,只要从数据库中的数据有变化,就会反映到主数据库中;主数据库复制到从数据库的是与本市分站相关的测报数据。
5 结束语
分布式数据库系统适应于地理上分散而管理上又有不同程度集中的大型信息系统的需求,Oracle高级复制机制提供了高可靠性、高可用性以及改善了系统的性能,同时也提供了很好的各数据中心数据同步实现方案。在具体应用中,也还有许多比较复杂的问题需要解决,需要逐步探索、深入研究。
参考文献
[1]郑振楣,于戈,郭敏.分布式数据库[M].北京:科学出版社,1998
[2]丁铖.Oracle8/8I数据库系统原理[M].北京:人民邮电出版社,2001
[3]胡桂香.数据库复制的设计和管理[J].电子工程师,2002,(5)
作者简介:李丽(1981-),女,汉族,河南新乡人,焦作师范高等专科学校教师,本科学士学位,研究生学历,研究方向:计算机应用。