快速掌握Ora-00600 4194错误的解决方法

来源:岁月联盟 编辑:zhuzhu 时间:2007-10-26

问:我的数据库重新启动后,出现了Ora-00600 4194错误,日志如下:

 

Sat Jan 21 13:55:21 2006Errors in file /opt/oracle/admin/conner/bdump/conner_smon_17113.trc:ORA-00600: internal error code, arguments: [4194], [43], [46], [], [], [], [], []Sat Jan 21 13:55:21 2006Errors in file /opt/oracle/admin/conner/udump/conner_ora_17121.trc:ORA-00600: internal error code, arguments: [4194], [45], [44], [], [], [], [], []

请问具体应该怎样解决?

答:具体的解决办法是通过备份来进行恢复,因为Ora-00600 4194错误的出现说明UNDO段出现了问题,如果你没有备份,业可以通过特殊的初始化参数进行强制启动,下文针对Oracle的隐含参数进行恢复说明(由于你的实际情况可能会有所出入,所以请你进行测试前先行备份)。

◆首先你需要确定当前的回滚段名称,注释:(可以从alert文件中获得)

 

Sat Jan 21 13:55:21 2006Undo Segment 11 OnlinedUndo Segment 12 OnlinedUndo Segment 13 OnlinedSuccessfully onlined Undo Tablespace 16.

◆注意:对应的AUM (auto undo management) 下的回滚段名称为:

 

'_SYSSMU11

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

._corrupted_rollback_segments='_SYSSMU11

◆然后使用init.ora参数文件启动数据库:

 

[oracle@jumper dbs]$ sqlplus "/ as sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Sat Jan 21 13:56:47 2006Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.Connected to an idle instance.SQL> startup pfile=initconner.oraORACLE instance started.Total System Global Area   97588504 bytesFixed Size                   451864 bytesVariable Size              33554432 bytesDatabase Buffers           62914560 bytesRedo Buffers                 667648 bytesDatabase mounted.Database opened.

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

Sat Jan 21 13:57:03 2006SMON: enabling tx recoverySMON: about to recover undo segment 11SMON: mark undo segment 11 as needs recoverySMON: about to recover undo segment 12SMON: mark undo segment 12 as needs recoverySMON: about to recover undo segment 13SMON: mark undo segment 13 as needs recoverySat Jan 21 13:57:03 2006Database Characterset is ZHS16GBKSat Jan 21 13:57:03 2006SMON: about to recover undo segment 11SMON: mark undo segment 11 as needs recoverySMON: about to recover undo segment 12SMON: mark undo segment 12 as needs recoverySMON: about to recover undo segment 13SMON: mark undo segment 13 as needs recoverySat Jan 21 13:57:04 2006Created Undo Segment _SYSSMU1$Undo Segment 1 OnlinedCompleted: ALTER DATABASE OPENaSat Jan 21 14:02:11 2006SMON: about to recover undo segment 11SMON: mark undo segment 11 as needs recoverySMON: about to recover undo segment 12SMON: mark undo segment 12 as needs recoverySMON: about to recover undo segment 13SMON: mark undo segment 13 as needs recovery

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

SQL> create undo tablespace undotbs1  2  datafile '/opt/oracle/oradata/conner/undotbs1.dbf' size 10M;Tablespace created.SQL> alter system set undo_tablespace=undotbs1;System altered.SQL> drop tablespace undotbs2;Tablespace dropped.

◆请注意此时的alert文件记录的:

 

Sat Jan 21 14:03:29 2006create undo tablespace undotbs1datafile '/opt/oracle/oradata/conner/undotbs1.dbf' size 10MSat Jan 21 14:03:29 2006Created Undo Segment _SYSSMU2$Created Undo Segment _SYSSMU3$Created Undo Segment _SYSSMU4$Created Undo Segment _SYSSMU5$Created Undo Segment _SYSSMU6$Created Undo Segment _SYSSMU7$Created Undo Segment _SYSSMU8$Created Undo Segment _SYSSMU9$Created Undo Segment _SYSSMU10$Created Undo Segment _SYSSMU14$Starting control autobackupControl autobackup written to DISK device        handle '/opt/oracle/product/9.2.0/dbs/c-3152029224-20060121-00'Completed: create undo tablespace undotbs1datafile '/opt/oraSat Jan 21 14:03:43 2006Undo Segment 2 OnlinedUndo Segment 3 OnlinedUndo Segment 4 OnlinedUndo Segment 5 OnlinedUndo Segment 6 OnlinedUndo Segment 7 OnlinedUndo Segment 8 OnlinedUndo Segment 9 OnlinedUndo Segment 10 OnlinedUndo Segment 14 OnlinedSuccessfully onlined  Undo Tablespace 1.Undo Segment 1 OfflinedUndo Tablespace 16 successfully switched out.Sat Jan 21 14:03:43 2006ALTER SYSTEM SET undo_tablespace='UNDOTBS1' SCOPE=MEMORY;Sat Jan 21 14:07:18 2006SMON: about to recover undo segment 11SMON: mark undo segment 11 as needs recoverySMON: about to recover undo segment 12SMON: mark undo segment 12 as needs recoverySMON: about to recover undo segment 13SMON: mark undo segment 13 as needs recoverySat Jan 21 14:08:06 2006drop tablespace undotbs2Sat Jan 21 14:08:07 2006Starting control autobackupControl autobackup written to DISK device        handle '/opt/oracle/product/9.2.0/dbs/c-3152029224-20060121-01'Completed: drop tablespace undotbs2

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

*.undo_tablespace='UNDOTBS1'

 

 

◆然后由参数文件创建spfile文件。

 

SQL> create spfile from pfile;File created.SQL>shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area   97588504 bytesFixed Size                   451864 bytesVariable Size              33554432 bytesDatabase Buffers           62914560 bytesRedo Buffers                 667648 bytesDatabase mounted.Database opened.

◆然后重起数据库,观察alert文件:

 

Sat Jan 21 14:08:36 2006Undo Segment 2 OnlinedUndo Segment 3 OnlinedUndo Segment 4 OnlinedUndo Segment 5 OnlinedUndo Segment 6 OnlinedUndo Segment 7 OnlinedUndo Segment 8 OnlinedUndo Segment 9 OnlinedUndo Segment 10 OnlinedUndo Segment 14 OnlinedSuccessfully onlined Undo Tablespace 1.

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU12

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU13

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU12

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU12

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU13

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU13

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU12

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU13

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU12

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

,'_SYSSMU13

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。

◆此时你可以修改init.ora参数文件,使用Oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,Oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。

 

___FCKpd___3

◆然后使用init.ora参数文件启动数据库:

 

___FCKpd___4

现在数据库正常Open。

 

 

◆注意观察alert文件所获得的如下信息:

 

___FCKpd___5

◆现在你可以重新创建新的UNDO表空间,删除出现问题的表空间,修改参数文件,由参数文件生成新的spfile,然后重新启动数据库:

 

___FCKpd___6

◆请注意此时的alert文件记录的:

 

___FCKpd___7

◆请修改参数文件,变更undo表空间,并取消_corrupted_rollback_segments设置:

 

___FCKpd___8

 

 

◆然后由参数文件创建spfile文件。

 

___FCKpd___9

◆然后重起数据库,观察alert文件:

 

___FCKpd___10

◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。