Oracle数据库虽然是一个成熟稳定的系统,但是不可避免地会出现这样那样的问题,本文就Oracle数据库的一些常见问题进行探讨。
优先权问题分类及诊断
下面是优先权问题的各种分类,这些问题可能会影响到数据库性能以及数据库的数据完整性。
数据冲突
数据冲突包括所有块格式冲突、非法索引入口和媒介数据冲突(例如数据字典)。典型例子是选择一个表时用户得到有关系统数据文件的ORA-600『3339』错误。引起数据冲突的原因多种多样。比如,某硬件厂商的磁盘簇会引起操作系统的问题等。诊断这些问题的标准或典型的操作包括:
(1)如果冲突是一个内部错误,收集跟踪文件,并在应用时格式化。
(2)根据冲突时间转储重做日志文件。如果无法确信究竟有多少日志文件要转储,请保存所有的重做日志文件。
(3)如果有理由怀疑是操作系统问题,则要求系统管理员执行全面的硬件诊断。
(4)决定问题是否常见或在指定端口。
逻辑冲突
逻辑冲突是数据出错(包括存储数据或是查询返回的数据)。尽管错误并不必须由外部返回,将一列更新为空后还想操作表中的行,或使用不同的类型优化器时一条查询返回不同的结果等都是逻辑冲突的例子。因为很难检测出,所以逻辑冲突的危害性非常大,数据库管理员采取的标准诊断操作有:
(1)创建可再现检测的案例。
(2)如果冲突时一个内部错误(如ORA-600『13004』错误),收集跟踪文件,并在应用时格式化。
(3)决定问题的类属或确定端口。
系统挂起
系统挂起是指用户无法注册到数据库或执行操作,也可能是介质恢复或崩溃恢复后在数据库一直打开时数据库挂起。比如,一个进程具有某数据结构的latch,微调可能引起系统挂起。系统挂起时的标准诊断操作如下:
(1)数据库打开的情况下挂起时,设置事件并诊断是在哪一恢复阶段引起了数据库阻塞,同时转储诊断信息(如进行事务恢复期间undo段段头的微调)。如果是一个系统挂起的情况,使用诸如ORADBX的工具或者ALTER SESSION命令在适当的间隔对系统状态转储。还要监测CPU和后台、前台进程的IO活动。
(2)决定问题的类属或指定端口。
(3)创建可再现测试的案例。
(4)如果问题仅在某个用户处经常出现,可通过调制解调器网络拨号方式与OSS联系寻求帮助。
性能问题
性能问题分成两类。一类是响应时间或批处理时间性能的恶化,另一种是并发处理活动的增加引起的性能降低。这些问题解决起来通常很费时,需要耐心。响应时间很慢,有时可能是由于等待库高速缓存芯片。标准诊断包括:
(1)以专门指定的形式报告性能降低,如响应时间、批处理时间、支持的并发注册数量,以及共享管理的有效性等。
(2)如果可能,提供可再现测试案例,或提供导致性能变差的环境和因素的细节内容。
(3)如果问题仅在某个用户处经常出现,可通过调制解调器网络拨号方式与OSS联系寻求帮助。
(4)决定问题的类属或确定端口。
系统崩溃
系统崩溃包括由于后台进程死掉而引起的数据库崩溃。这类问题不常见,但如果是数据库崩溃,DBA应采取以下诊断操作:
(1)检查警告日志文件,查看是否有ORA-600错误出现。如果是,需要的话获取跟踪文件并将其格式化。
(2)找到用户在出现问题时正在执行的操作以及正在执行的应用程序。如果可以找出该程序,则试着在试验机上运行,以发现问题。
(3)决定问题的类属或确定端口
临界功能非法
临界功能非法是指数据库所有功能或依赖一个大应用程序的重要特征失效。最典型的是在数据库软件中存在bug,还有就是运行于Oracle顶层的任何第三方软件引起的。在某种情况下,一个功能不可用,可能只会简单的影响数据库的可用性。例如一个数据库正用一个安全数据库导出文件进行恢复,并且是从几个工作不正常的磁带上导入,这就使数据库无法从产品库上重建。常用的诊断操作有:
(1)收集跟踪文件,依赖错误类型转储相关的重做日志文件,并报告产生错误的环境。
(2)试着创建一个可再现检测的案例。
(3)提供具体内容,如使用的应用工具、存取的存储结构、实施的DDL、DML和在错误发生期间运行的包或过程,尤其是在无法提供一个可再现检测案例时,这些信息尤其重要。
(4)决定问题的类属或确定端口。
内存冲突
内存冲突包括标记内存泄漏的内部错误、内存数据结构冲突和高速缓存冲突。诊断操作包括:
(1)收集产生的跟踪文件。
(2)如果可能提供一个可再现的测试案例,或报告可能引起错误的环境。
(3)OCI细节或Oracle工具/实用程序,以及应用程序使用的预编译器。
(4)操作系统工具或用于连接应用的第三方工具。
(5)应用程序触发的触发器。
(6)执行的包或过程。