oracle 启动不了的情况分析

1. 确定问题

在开发或者维护Oracle数据库时,有时候会遇到启动不了的情况,这种情况十分烦人,需要我们去找出原因并且修复它才能使数据库正常运行。出现这种情况一般会给我们反馈一些错误信息,但是这些错误信息可能很难理解并且指引我们找到问题的根源所在。

所以在解决这种问题前,需要做以下几步:

确定问题

找到错误信息

识别数据库启动的过程

了解日志

2. 找到错误信息

确定问题后,我们需要找到错误信息,以此来定位问题。其实,Oracle的错误信息就是它的日志信息,它会记录在ORACLE_HOME目录下的log目录里面。它的日志分为两类,一类是alert日志,这个日志里面记录了数据库中的一些重要事件,比如说数据库启动和关闭事件、数据库备份恢复等事件;另外一个就是trace文件,它是为了排错而产生的日志文件。

如果你的Oracle数据库无法正常启动,那么在$ORACLE_HOME/diag/rdbms///trace目录下找到alert_SID.log和ora_SID.trc文件进行查阅。

2.1 alert日志

在查看alert日志时,需要找到日志里面的错误信息。在日志里面查找的方法,一般是:首先找到改变的时间点,然后从这个时间点开始往前找报错信息。通过这种方法,就可以很快地找到报错信息了。

以下是一段alert日志中的错误信息:

Errors in file /u01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_lgwr_9381.trc:

ORA-00439: feature not enabled: Real Application Clusters

...

Process Startup failure, error stack:

ORA-00704: bootstrap process failure

ORA-39700: database must be opened with UPGRADE option

Process startup failed.

...

...

以上的日志中第四行是一个最重要的信息。它告诉我们ORA-00704: bootstrap process failure,这个表示Oracle的启动过程中出现了错误。我们可以在ORA-00704之前找到直接的原因。

2.2 trace文件

当你在alert日志中定位问题时,可能会发现alert日志中的错误信息无法详细说明问题,这时候你需要查看trace文件。trace文件是包含了更为详细的日志信息的文件,可以帮助我们更加深入地了解问题。它的位置在$ORACLE_HOME/diag/rdbms///trace目录下。

以下是一段trace文件的报错信息:

ORA-00448: normal completion of background process

ORA-00600: internal error code, arguments: [00000000000AEB00], [1], [0], [0], [1], [], [], [], [], [], [], []

LGWR (ospid: 2323): terminating the instance due to error 474

以上的trace文件报错信息告诉我们出现了ORA-00600的内部错误。对于这种类型的问题,需要查阅Oracle提供的文档。

3. 识别数据库启动的过程

当你查看上面的日志或者错误信息后,你可能会发现一系列的日志信息。这些信息可以描述Oracle的启动过程。下面,我将会介绍Oracle的启动过程:

3.1 Oracle的启动过程

在Oracle的启动过程中,需要依次执行以下的步骤:

执行SPOOL $ORACLE_HOME/startup.log以记录日志信息

判断数据库是否已经在运行了,如果已经在运行,那么就跳过以下所有步骤

启动ASM实例(如果是RAC的话)

初始化SMON

初始化DBWn等后台进程

初始化LGWR进程

初始化CKPT进程,并且检查redo日志的完整性

检查控制文件的完整性,并且清除数据库的SCN号

可以通过阅读日志了解数据库启动的过程

3.2 了解日志

我们在了解启动过程后,需要阅读日志信息。通过这个过程,可以了解数据库启动的状态。以下的是一份日志信息示例:

DATABASE MOUNTED

Completed: ALTER DATABASE OPEN

Sat Jan 24 05:01:15 2015

alter database enable block change tracking using file '/u01/app/oracle/oradata/db/block_change_tracking.dbf'

Completed: alter database enable block change tracking using file '/u01/app/oracle/oradata/db/block_change_tracking.dbf'

Sat Jan 24 05:02:05 2015

alter system enable restricted session

Completed: alter system enable restricted session

Sat Jan 24 05:02:05 2015

alter system set _system_trig_enabled=FALSE scope=both;

Completed: alter system set _system_trig_enabled=FALSE scope=both;

Sat Jan 24 05:04:21 2015

ALTER SYSTEM SET db_recovery_file_dest_size=1073741824 SCOPE=SPFILE;

Completed: ALTER SYSTEM SET db_recovery_file_dest_size=1073741824 SCOPE=SPFILE;

...

以上的日志可以看出,数据库已经处于打开状态。在这个过程中确保重要的信息已经全部完成了,包括了控制文件和数据文件的完整性检查等。在日志中查找跟数据库有关的错误信息。任何一个错误都会中断启动过程,使得数据库无法正确启动。

4. 解决问题

了解错误信息和启动过程之后,现在您就可以处理问题了。

4.1 先把所有的Oracle进程都关闭掉

在处理问题之前,您需要把所有的Oracle进程都关闭掉。

pgrep ora | xargs kill -9 

4.2 重命名或删除控制文件,然后重启Oracle

有时候,我们可以重命名或者删除控制文件。在Oracle启动的时候,系统会从控制文件中读取数据库的配置信息,如果控制文件被占据或者破坏了,那么就会影响整个数据库的启动。重启Oracle的命令如下:

sqlplus "/ as sysdba"

SQL> STARTUP

4.3 通过修改pfile或spfile的方式解决

修改启动文件有时可以解决问题。Oracle启动时有两种配置文件,一种是pfile,一种是spfile。pfile是一个文本文件,主要用于人工编辑修改;而spfile是一个二进制文件,主要用于由Oracle自动生成,其优势在于可实现不停机修改数据库参数。

下面是通过修改pfile的方式解决Oracle启动的教程:

打开pfile文件。pfile文件默认存放在$ORACLE_HOME/dbs目录下面。

检查参数的值是否正确。如果修改了配置文件,请记得保存。

打开sqlplus,输入以下的命令:SQL> STARTUP PFILE=$ORACLE_HOME/dbs/init.ora

等待数据库起来并且检查控制文件是否已经恢复。

5. 总结

在使用Oracle的过程中,遇到无法启动的问题是非常常见的。一旦出现了这种情况,我们需要快速定位和解决问题,以便系统能够尽快恢复正常运行。为此,在解决问题之前,我们需要了解错误信息、掌握Oracle启动的过程、查看日志等方面的知识。

上一篇:oracle 启动停止

下一篇:oracle 启动 关闭

数据库标签