这又是一个一天一度的吃饭季节,天气闷热,心里有点儿抑郁。
突然公司停电了,难道供电的设备也午休了吗?
过了几分钟,供电设备休息完毕也开始正常供电了,跟我一样也真够准时的。
一切尽在掌握中,服务器自动开机,然后迷途小运维起按顺序起相关的服务,一如既往。
过了一会儿,XX的同鞋们高兴的说XXX数据库连不上,是不是没起实例呀??
然后我抑郁的告诉他们,实例我起来好久了,并且边信心百倍的说着,边去查看实例状态
oracle@oracle:~$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on 星期五 7月 26 06:08:24 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
已连接到空闲例程。
SQL>
当时我就抑郁了,难道我是做梦启的么???
索性又startup一次!
我这次聪明了,是十分聪明了,我去看altre log
tail -30f alert_SEM.log
所有的信息欢快的在屏幕上跳动这,突然扫到一串让我感觉比较凄凉的字符串
ORA-00600: 内部错误代码, 参数: [4194], [20], [29], [], [], [], [], [], [], [], [], []
然后CTRL+C之后再
ps -ef|grep oracle|wc -l
4
额,神码情况???
于是决定详细查看alert日志,有如下发现
Thu Jul 25 08:27:35 2013
Doing block recovery for file 3 block 3683
Resuming block recovery (PMON) for file 3 block 3683
Block recovery from logseq 128, block 64 to scn 1878635
Thu Jul 25 08:27:35 2013
Recovery of Online Redo Log: Thread 1 Group 2 Seq 128 Reading mem 0
Mem# 0: /oracle/oradata/SEM/redo02.log
Block recovery completed at rba 128.82.16, scn 0.1878637
Errors in file /oracle/diag/rdbms/sem/SEM/trace/SEM_pmon_3796.trc (incident=57730):
ORA-00600: 内部错误代码, 参数: [4194], [20], [29], [], [], [], [], [], [], [], [], []
主要是数据库恢复rba 128.82.16, scn 0.1878637的时候,出现ora-600[4194],主要是指redo和undo的信息不一致
经过迷途小运维一番咨询下边是专家给出的思路
1. 换成undo 为manual,看看是否可以启动,如果可以,然后创建undo表空间,删除老undo,重启库
2. 如果不能启动,设置event,然后对undo表空间操作
3. 如果上面步骤都不行,直接使用undo隐含参数,屏蔽undo异常回滚段,删除异常回滚段
有思路了,那么下边开始按步骤以进行恢复
首先将undo_management改成manual
undo_management参数详解:初始化参数UNDO_MANAGEMENT用于指定系统要使用的UNDO管理模式,默认值为AUTO。当设置该参数为AUTO时, 系统会使用UNDO表空间管理UNDO数据;当设置该参数为MANUAL时,系统会使用回滚段管理UNDO数据。
SQL> alter system set undo_management=manual scope=spfile; //由于是初始化值,所有得加上scope=spfile
SQL> shutdown immediate //重启数据库使得参数生效
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1670221824 bytes
Fixed Size 2361784 bytes
Variable Size 1006634568 bytes
Database Buffers 654311424 bytes
Redo Buffers 6914048 bytes
数据库装载完毕。
数据库已经打开。
SQL> !
oracle@oracle:/oracle/diag/rdbms/sem/SEM/trace$ tail -30f alert_SEM.log //查看alert log 未出错
oracle@oracle:/oracle/diag/rdbms/sem/SEM/trace$ exit
exit
SQL>
SQL>
SQL> show parameter undo; //查看undo使用情况
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
temp_undo_enabled boolean
FALSE
undo_management string
MANUAL
undo_retention integer
900
undo_tablespace string
UNDOTBS1
SQL> create undo tablespace UNDOTP datafile '/oracle/oradata/SEM/UNDOTP01.dbf' size 50M; //创建新的undo表空间
表空间已创建。
SQL> alter system set undo_tablespace=UNDOTP; //更改系统使用新的UNDO表空间
alter system set undo_tablespace=UNDOTP
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效 ORA-30014: //这儿意思是只有undo_management=auto的时候这个值才可以不用加scope=spfile就可以更改
此操作仅在自动还原管理模式中才受支持
SQL> alter system set undo_tablespace=UNDOTP scope=spfile; //更改undo表空间到初始化值
系统已更改。
SQL> shutdown immediate //重启实例,让undo_tablespace值生效
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1670221824 bytes
Fixed Size 2361784 bytes
Variable Size 1006634568 bytes
Database Buffers 654311424 bytes
Redo Buffers 6914048 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter system set undo_management=auto scope=spfile; //更改undo_management值为auto
系统已更改。
SQL> drop tablespace UNDOTBS1; //然后删除老的undo表空间
表空间已删除。
SQL> shutdown immediate //重启实例,使得undo_management值生效
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1670221824 bytes
Fixed Size 2361784 bytes
Variable Size 1006634568 bytes
Database Buffers 654311424 bytes
Redo Buffers 6914048 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter undo;
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
temp_undo_enabled boolean
FALSE
undo_management string
AUTO
undo_retention integer
900
undo_tablespace string
UNDOTP
至此,就算全部都OK了,一切还是那么美好!!!
**********************************************
数据库mount后删除undo表空间
alter tablespace undotbs1 offline
**********************************************
#############################################
本文属笔者原创
作者:john
转载请注明出处