由于回滚段参数设置存在问题导致数据库无法启动

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

操作系统:Sun Solaris 8

双机软件: Sun Cluster 3.0

数据库:Oracle 8.1.7.3

故障现象:

1.Oracle无法启动。

2.双机的环境一个节点或者所有点上的oracle资源组无法启动,显示为offline。

3.手工启动oracle时报告"ORA-01092: ORACLE instance terminated. Disconnection forced"错误。

4.查看$ORACLE_BASE/admin/ORCL/bdump/alert_ORCL.log,发现有ORA-01534: rollback segment RBSXXX does not exist类似的错误。

故障分析:

这个故障是由于初始化参数文件中的rollback_segments参数设置了一个并不存在的回滚段而引起的。Oracle内部有一个回滚段rollback segment的概念,它对于oracle有着非常重要的作用。回滚段有public和private两种类型,Oracle的初始化文件$ORACLE_BASE/admin/ORCL/pfile/initORCL.ora中有一个静态初始化参数rollback_segments。它包含在oracle启动时候需要online的private的回滚段的列表。如果这个参数设置了一个并不存在的回滚段会导致oracle在启动的时候报ORA-01534和ORA-01092错误,最终导致数据库无法启动,双机中的oracle资源也将无法online。如果rollback_segments在初始化参数中没有指定,那么oracle会将一部分public的回滚段online。具体online的回滚段的个数等于transactions/transactions_per_rollback_segment)。transactions和transactions_per_rollback_segment都是初始化参数文件中的静态初始化参数。在我们oss的系统中transactions=1.1*(1.1*processes+5),

transactions_per_rollback_segment=5。其中processes也是oracle的一个初始化参数,确定oracle的用户连接数,在我们oss的系统中一般为300。所以在我们的系统中如果没有指定rollback_segments,则会将73个public的回滚段online。由于在我们的系统中一般不会创建这么多回滚段,最终导致我们的系统中会将所有的public的回滚段online。

故障处理:

可以将oracle初始化参数中的rollback_segments注释掉,再重新启动数据库。如果是双机则要在两个节点上同时改变rollback_segments这个初始化参数。

日常维护:

1.平时维护初始化参数文件的时候最好用vi命令来维护;或者用ascii方式将初始化文件ftp到本地,用utlraedi修改后在用ascii方式ftp到主机系统上。千万不要telnet到主机上用拷屏的方法将初始化参数拷贝到本地再做修改,因为rollback_segments这个参数很长,直接拷贝屏幕会将这个参数分行。

2.双机的系统中初始化参数一定要同步。

3.如果将rollback_segments参数注释掉,系统只会将public的回滚段online,所以如果系统中所创建的public回滚段很少的话,oracle启动起来之后系统内将只有很少的回滚段。这会严重的影响系统的性能。因此如果要将rollback_segments参数注释掉,建议将所有的回滚段全部按照public的方式来来重新创建。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航