胡琪
摘 要文章主要分析了大型数据库Oracle的主动维护和按需维护的一般方法,重点探讨了维护过程中的安全性、门闩锁与排队锁的竞争以及如果周期性监测并解决锁冲突的问题,最后总结了通用例程维护过程中,需要注意的问题。
关键词Oracle;维护
中图分类号TP文献标识码A文章编号1673-9671-(2011)071-0102-01
数据库的维护工作在整个数据库的使用过程中都要进行。由于Oracle的RDBMS 非常嚴谨,所以它在相当长的使用周期中都不会崩溃。但是,这一严谨性要求诸多组成部分之间相互协作。这样,就需要时常维护此数据库系统,使其不仅能够正常运转而且要保证可接受的响应时间和吞吐率,而且要对额外的负载保证其可扩展性。如果考虑到数据库的功能需要有多个组成部分来实现,以及不断增长的数据处理需求,就可以理解数据库维护工作的必要性。这些维护工作包括:补丁/版本升级、初始化参数的改变、分段、索引重构、计算段统计信息、错误检测及修正,以及在管理权限下的其他各种维护任务,这些都是必须的。
1主动维护和按需维护
维护可以是主动维护和按需维护。按需维护一般是针对当时出现的问题,尽快采取正确措施,通常是立刻进行。相反,主动维护包括预见到一些一般或非一般问题并采取措施防止其发生。在任何情况下,为保证及时发现出现的问题并作出相应处理,必须进行经常性的监测。通常情况下,按需维护可能需要立即停工以防止将来不得不进行更长时间的停工维护。而主动维护也可能需要停工,因为没有急待处理的问题,可以在非数据库访问高峰期再来进行需要停工才能进行的维护工作。而且,对于主动维护有了一定的熟悉之后,可以尽量避免按需维护,防止在数据库访问的高峰期进行长时间的停工维护。
1.1在所有可能级上实现健壮的安全性
在数据库环境中,一项最重要的维护任务是增强安全性。对于任何支持关键任务的环境,
健壮的安全性都是必不可少的。缺少安全性会直接影响可用性:①由于用户或管理员的误操作而破坏数据库的安全性;②由于暴露了数据库及相关组成部分(硬件、软件和网络),而易受到恶意的攻击。
为了使用户错误所造成的损失最小并可能防止受到恶意攻击的伤害,必须面向数据库及其扩展构件如网络和来实现安全性。一个重要的维护是要关注安全错误信号并采取措施更正。这一技巧广泛应用于与数据库相关的安全性中。同时,Oracle8和第三方还提供了各种各样的终端用户认证方法。除了终端用户认证,客户服务器机器也要被认证。特别是,如果客户通过互联网络输入数据库请求,为了防止数据库被侵犯必须进行这种认证。有多种机制支持客户/服务器认证。
1.2理解、防止并解决门闩锁和排队锁的竞争
Oracle服务器利用几种机制,如门闩锁、排队锁、分布锁和全局锁来控制SGA(缓冲区cache、行cache、库函数cache等)内对内部数据结构的共享访问。然而,这些内部的加锁机制在许多时候也引起竞争,直接影响性能并限制吞吐量和可用性。因此,需要对这些内部锁的机制以及如何检测竞争有一个全面的了解,采取适当的操作技巧。
首先来了解两种最常用的内部锁机制:门闩锁和排队锁。门闩锁是复杂的细粒度串行化构件,用来控制对SGA内部结构的访问;排队锁与门闩锁类似,保护特定的结构,但是它们在实现上更高级,除了依赖互斥策略,排队锁允许资源在多个级别共享。根据锁的类型的不同,解决锁竞争的方法也有多种,如:重作分配和重作拷贝数;对于行Cache对象锁,减少这种锁的竞争的方法之一是增大SHAREDPOOL初始化参数的大小等。总之,重要的是要预先主动地通过调解所有的SQL资源,之后再采用上面的方法来解决这些问题。
1.3周期性地监测并解决锁冲突
任何多用户的数据库都需要锁,因此很容易引起锁冲突。对于Oracle,冲突一般很少,但确实也有时发生。当锁冲突发生时可能严重影响其他各种运行的会话,就会使常规的操作混乱—除非锁问题成为DBA监测数据库时所必须警觉的事情,这样可以采取措施来解决潜在的问题。Oracle提供了许多工具来监测锁问题,如Oracle和第三方工具、特定的SQL访问、使用catblock.sql和utllockt.sql脚本文件等。但是,有时这些常规的方法并不能确定锁冲突问题。例如,某些运行时间长的关键作业可能会受到影响而没有被杀死,或者许多进程受到影响,使得整个程序挂起。解决这种情况需要使用某些OS和数据库调试工具(如oradbx或orad ebug及truss)来获得进程状态或系统状态,跟踪发布的SQL调用等。
2通用维护例程需要注意的问题
这里列出一些别的可能出现问题的情形,DBA需要监测这些情形作为其通常管理例程的一部分,并在需要时解决。
1)除了常规的锁冲突以外,要显式地警惕死锁。
2)警惕效率低下的应用S Q L代码,并在需要时调试代码监测各种各样应用程序对系统/数据库资源的使用,保证这些资源在任何级都被要删除。特别是带有选项,如并行访问选项(Parallel Query Option,PQO)和SORTAREASIZE动态设置,用户/应用程序可能会使系统饱和,会影响性能和可用性。
3)同时,要熟悉应用程序使用的特定数据库选项,保证这些选项被最优地配置。例如,如果应用程序频繁地执行Hash操作,要保证HASH_AREA_SIZE和HASH_MULTIBLOCK_IO_COUNT设置为相等,否则,可能会使系统资源很快用光。
4)显式地编写监测脚本,检查某些潜在的危机(如段数达到了MAXEXTENTS、足够的自由空间供段扩展等待),以便采取正确的措施。
3结语
总之,Oracle数据库虽然功能齐全、操作灵活,但在维护过程中也需要有很强的技巧性。需要使用各种各样的进程去防止、监测、查找、解决引起数据库故障的各种因素,如果忽略了周期性的维护工作,有可能发生数据库崩溃。因此,必须预先做好这些工作以保障数据库正常运行。
参考文献
[1]王海翔.Oracle数据库软件研究[J].现代商贸工业,2010.
[2]巢子杰.Oracle数据库优化探究[J].软件导刊,2010.