由于oracle回滚段表空间数据文件丢失导致数据库起不来,报ora-01157错误,对于回滚段数据文件丢失后的恢复,处理方法有很多,本例主要是用oracle隐含参数来恢复数据库的一个例子:
隐含参数的含义:
SQL> select KSPPDESC from X$KSPPI where ksppinm='_corrupted_rollback_segments';
KSPPDESC
----------------------------------------------------------------
corrupted undo segment list
具体操作步骤如下:
首先把初始化参数init.ora文件里自动管理改为手工管理,然后加入隐含参数:
#undo_management=AUTO
undo_tablespace=UNDOTBS
_corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
SQL>startup restrict mount (数据库启动到mount状态)
SQL> alter database datafile 'D:/ORACLE/ORADATA/ORCL/UNDOTBS01.DBF' offline drop;
Database altered.
SQL>alter database open;
Database opened.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ---------
undo_management string MANUAL
undo_retention integer 900
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS
SQL> drop tablespace undotbs including contents; (假如回滚段里有活动事物,undo表空间可能会drop不掉,本例是回滚段里没有活动事物的时候)
Tablespace dropped.
重建undotbs表空间:
SQL> create undo tablespace undotbs datafile 'D:/ORACLE/ORADATA/ORCL/UNDOTBS01.DBF'
size 100M;
Tablespace created.
SQL> shutdown immediate (关闭数据库)
Database closed.
Database dismounted.
ORACLE instance shut down.
编辑init.ora初始化参数文件,去掉隐含参数,设置
undo_management=AUTO
undo_tablespace=UNDOTBS
保存初始化参数init.ora文件,然后执行
SQL> startup mount
ORACLE instance mounted.
Total System Global Area 114061244 bytes
Fixed Size 282556 bytes
Variable Size 79691776 bytes
Database Buffers 33554432 bytes
Redo Buffers 532480 bytes
Database mounted.
SQL>alter database datafile 'D:/ORACLE/ORADATA/ORCL/UNDOTBS01.DBF' online;
Database altered.
SQL>alter database open;
Database opened.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS
建议用隐含参数将数据库open后,立刻做个exp全备,如果数据量不大的话,最好的方法是重新建库,将exp出来的数据再imp进新数据库里。
至此,数据库恢复完毕。此方法不到万不得已不建议采用,最好的方法是用以前的数据文件的备份来做恢复,因为用加隐含参数的方法将数据库打开后,此时数据库有可能数据会不一致,因为对于回滚段里有活动事物的时候,数据库可能会丢失一些数据,主要是回滚段里有活动事物的那部分数据,因此做好数据库的备份是至关重要的,这样对于恢复起来就很简单方便。
本文介绍因Oracle回滚段表空间数据文件丢失致数据库无法启动,报ora - 01157错误的恢复方法。通过使用Oracle隐含参数,按步骤操作恢复数据库,最后建议恢复后做全备,强调数据库备份的重要性,避免数据不一致和丢失。
1763

被折叠的 条评论
为什么被折叠?



