[oracle]undo表空间出错,导致数据库实例无法打开

         今天老师帮某客户解决了数据库实例无法打开的情况,出现此故障是由于undo表空间损坏所致。

         老师问我们,如何解决此问题,本人随口一答,新建undo表空间,然后把undo_tablespace参数指向新的表空间即可。后来才反应过来,数据库在未open的情况下,是无法新建表空间操作的,顿时觉得很囧。

         废话不说了,下面演示针对undo表空间出错的情况下,如何打开数据库实例。

         解决思路:将UNDO_MANAGEMENT修改为manul,下次启动数据库时,则系统使用的是system表空间的回滚段(rollback segment)。

1、  模拟undo表空间出错的情况,将该表空间名字修改为一个错误的名字。则下次启动使用spfile时,会因为无法找到该表空间而报错。

SQL> alter system set undo_tablespace=undotbs11 scope=spfile;

System altered.

2、重启数据库实例,果然出现了错误(老师所述的错误是由于undo表空间出现了坏块,不过解决这种问题的办法都是相同的):

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size             121636432 bytes

Database Buffers          159383552 bytes

Redo Buffers                2973696 bytes

Database mounted.

ORA-01092: ORACLE instance terminated. Disconnection forced

3、这种情况下,由于数据库无法变成open状态,因此是无法打开spfile的,我们只能通过pfile来打开数据库。

3.1、新建pfile

SQL> create pfile from spfile;

        

File created.

3.2、编辑pfile,我们将undo_management的值由AUTO修改为manual

[oracle@localhost dbs]$ cd $ORACLE_HOME/dbs

[oracle@localhost dbs]$ vi initorcl.ora 

*.undo_management='AUTOà                    *.undo_management='manual'

         4、下面,我们采用pfile来启动数据库:

SQL> shutdown immediate

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

Linux Error: 2: No such file or directory

SQL> startup pfile=/opt/ora10g/product/10.2.0/db_1/dbs/initorcl.ora

ORACLE instance started.

 

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size             121636432 bytes

Database Buffers          159383552 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL>

 

5、现在数据库实例打开了,我们再创建spfile,让数据库下次启动时,自动读取spfile

SQL> show parameter spfile

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

spfile                               string

SQL> create spfile from pfile;

File created.

 

SQL> startup force

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size             121636432 bytes

Database Buffers          159383552 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL> show parameter spfile

NAME       TYPE              VALUE

--------------  ---------------------  --------------------------------------------------------------

spfile        string                    /opt/ora10g/product/10.2.0/db_1/dbs/spfileorcl.ora

6、现在我们再将相应的参数修改回去,系统表空间的资源是有限的,我们最好不要使用回滚段。

SQL> show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      MANUAL

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS11

SQL> alter system set undo_management=auto scope=spfile;

System altered.

 

SQL> alter system set undo_tablespace=UNDOTBS1 scope=spfile;

System altered.

 

SQL> startup force

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size             125830736 bytes

Database Buffers          155189248 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

SQL> show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

 

至此,undo表空间损坏,导致数据库实例无法打开的问题的基本解决思路已经展示完成。有兴趣的读者,还可以自行再创建新的undo表空间,并且将undo_tablespace的参数值修改为此表空间名

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14600958/viewspace-672267/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14600958/viewspace-672267/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值