问题:20111206,今天公司又突然断电,参考问题10,这次问题更加严重了,oracle数据库可以启动到mount状态,但不能open。后来解决方案如下:
当在mount状态下执行alter database open命令时,开始时会报错误:ORACLE server session terminated by fatal error。。
等重启solaris服务器和shutdown immediate等操作后,又尝试了一下alter database open,很奇怪不报错误了,并输出database altered这条成功命令。。此时我输入select status from v$instance;查看服务器状态,,立即会报错:connection lost contact(失去连接。。) 并且用客户端连接也是不行的,故此为一种假象。。继续上网搜。。
网上说当数据库突然断电后,是可能造成这种数据库无法打开的问题的,UNDO里的数据存在不一致导致的,可以通过重建UNDO表空间来解决此问题.。可以通过新建一个undo表空间,并替换掉原有的undo表空间。。(注意每个数据库只能同时用一个undo表空间哦!区别临时表空间..)
于是,在mount状态下创建undo表空间,结果不行,必须在open状态下创建(因为貌似要打开系统表往里写东东..故需要open数据库才行..),但问题是此时数据库open后会有问题,于是就抱着试试看的想法,当执行alter database open后并提示altered成功后,没有做任何命令,立即黏贴上SQL> CREATE UNDO TABLESPACE UNDOTBS2500M REUSE AUTOEXTEND ON NEXT 50M这条创建语句,并执行,出乎意料的是竟然提示创建成功!查看文件管理器里确实生成了一个undotbs02.dbf文件!后来想想是不是这种情况下是可以执行create语句的呢?!而select则不行?!。。这点还不太清楚,以后再说吧,反正是暂时这样操作成功了。。。
于是再次shutdown immediate后启动到mount状态下。开始修改所使用的undo表空间。执行show parameter undo
会看到参数undo_tablespace为初始的UNDOTBS1(注意显示的就为大写),然后执行命令alter system set undo_tablespace=’undotbs2’spfile; 提示成功!(注意此处undotbs2貌似必须是小写!? 而且scope必须指定spfile才能成功,指定为both则报错。。?! 不过网上也看到过写法:SQL> create undo tablespace undotbs2 datafile 'D:\U01\ORACLE\ORADATA\NXDB\UNDOTB
S02.DBF' size 200m;
表空间已创建。
SQL> alter system set undo_tablespace=undotbs2 scope=both;
系统已更改。
)
估计还是写法问题吧。。暂且不管,先这样咯。。
修改后,需要shutdown immediate,然后再次启动到mount,再次执行show parameter undo才会看到undo_tablespace参数已改为修改后的undotbs2(小写)。
此时执行alter database open,提示成功。
执行select status from v$instance;成功显示数据!!
启动lsnrctl start监听服务!
至此,客户端可以正常访问咯!!!
转载于:https://blog.51cto.com/alinazh/1280327