问:我的数据库重新启动后,出现了ora-00600 4194错误,日志如下:
sat jan 21 13:55:21 2006
errors 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 2006
errors 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 2006
undo segment 11 onlined
undo segment 12 onlined
undo segment 13 onlined
successfully onlined undo tablespace 16.
|
◆注意:对应的aum (auto undo management) 下的回滚段名称为:
'_syssmu11$','_syssmu12$','_syssmu13$'
|
◆此时你可以修改init.ora参数文件,使用oracle隐含参数_corrupted_rollback_segments将回滚段标记为损坏,然后启动数据库,oracle则会跳过对于这些回滚段的相关操作,强制启动数据库。
._corrupted_rollback_segments='_syssmu11$','_syssmu12$','_syssmu13$'
|
◆然后使用init.ora参数文件启动数据库:
[oracle@jumper dbs]$ sqlplus "/ as sysdba"
sql*plus: release 9.2.0.4.0 - production on sat jan 21 13:56:47 2006
copyright (c) 1982, 2002, oracle corporation. all rights reserved.
connected to an idle instance.
sql> startup pfile=initconner.ora
oracle instance started.
total system global area 97588504 bytes
fixed size 451864 bytes
variable size 33554432 bytes
database buffers 62914560 bytes
redo buffers 667648 bytes
database mounted.
database opened.
|
现在数据库正常open。
1
2
3
下一页>>
◆注意观察alert文件所获得的如下信息:
sat jan 21 13:57:03 2006
smon: enabling tx recovery
smon: about to recover undo segment 11
smon: mark undo segment 11 as needs recovery
smon: about to recover undo segment 12
smon: mark undo segment 12 as needs recovery
smon: about to recover undo segment 13
smon: mark undo segment 13 as needs recovery
sat jan 21 13:57:03 2006
database characterset is zhs16gbk
sat jan 21 13:57:03 2006
smon: about to recover undo segment 11
smon: mark undo segment 11 as needs recovery
smon: about to recover undo segment 12
smon: mark undo segment 12 as needs recovery
smon: about to recover undo segment 13
smon: mark undo segment 13 as needs recovery
sat jan 21 13:57:04 2006
created undo segment _syssmu1$
undo segment 1 onlined
completed: alter database open
asat jan 21 14:02:11 2006
smon: about to recover undo segment 11
smon: mark undo segment 11 as needs recovery
smon: about to recover undo segment 12
smon: mark undo segment 12 as needs recovery
smon: about to recover undo segment 13
smon: 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 2006
create undo tablespace undotbs1
datafile '/opt/oracle/oradata/conner/undotbs1.dbf' size 10m
sat jan 21 14:03:29 2006
created 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 autobackup
control autobackup written to disk device
handle '/opt/oracle/product/9.2.0/dbs/c-3152029224-20060121-00'
completed: create undo tablespace undotbs1
datafile '/opt/ora
sat jan 21 14:03:43 2006
undo segment 2 onlined
undo segment 3 onlined
undo segment 4 onlined
undo segment 5 onlined
undo segment 6 onlined
undo segment 7 onlined
undo segment 8 onlined
undo segment 9 onlined
undo segment 10 onlined
undo segment 14 onlined
successfully onlined undo tablespace 1.
undo segment 1 offlined
undo tablespace 16 successfully switched out.
sat jan 21 14:03:43 2006
alter system set undo_tablespace='undotbs1' scope=memory;
sat jan 21 14:07:18 2006
smon: about to recover undo segment 11
smon: mark undo segment 11 as needs recovery
smon: about to recover undo segment 12
smon: mark undo segment 12 as needs recovery
smon: about to recover undo segment 13
smon: mark undo segment 13 as needs recovery
sat jan 21 14:08:06 2006
drop tablespace undotbs2
sat jan 21 14:08:07 2006
starting control autobackup
control 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> startup
oracle instance started.
total system global area 97588504 bytes
fixed size 451864 bytes
variable size 33554432 bytes
database buffers 62914560 bytes
redo buffers 667648 bytes
database mounted.database opened.
|
◆然后重起数据库,观察alert文件:
sat jan 21 14:08:36 2006
undo segment 2 onlined
undo segment 3 onlined
undo segment 4 onlined
undo segment 5 onlined
undo segment 6 onlined
undo segment 7 onlined
undo segment 8 onlined
undo segment 9 onlined
undo segment 10 onlined
undo segment 14 onlined
successfully onlined undo tablespace 1.
|
◆此时数据库恢复正常,通常建议立即全库exp,然后重新建库,再imp恢复数据库。