undo表 空间损坏恢复方法

当UNDO表空间损坏导致数据库无法打开时,可以通过创建pfile,修改参数以使用SYSTEM rollback segment启动数据库,然后离线删除损坏的表空间,创建新的UNDO表空间,并在最后恢复参数设置以正常启动数据库。

 UNDO 表空间损坏的恢复方法


一般Undo 表空间损坏的情况下,数据库都已不能正常打开了。启动时都会报类似如下的错误:


ORA-01157: cannot identify/lock data file 12 - see DBWR trace file
ORA-01110: data file 12: '/d01/oramtest/proddata/undo01.dbf'


 要想解决问题,必须重建UNDO 表空间,但是如果不open, 就不能重建创建undo 表空间。 所以可以先用系统默认的undo 表空间:system rollback segment 来启动数据库,再创建UNDO 表空间。

 

3.1 创建pfile 文件

SQL> create pfile='F:/initorcl.ora' from spfile;

文件已创建。
3.2 修改pfile文件
#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

undo_management='MANUAL'

rollback_segments='SYSTEM'


3.3 启动数据库至Mount 状态

SQL> STARTUP MOUNT pfile='F:/initorcl.ora' ;


3.4 offline drop undo 表空间

 SQL> ALTER DATABASE DATAFILE 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' OFFLINE DROP;


3.5 open 数据库

SQL> ALTER DATABASE OPEN;


3.6 删除旧的undo 表空间

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;  

注:该命令不会删除物理文件。 要想一起删除物理文件需要 AND DATAFILES CASCADE CONSTRAINTS ;

如:  drop tablespace UNDOTBS1 including contents AND DATAFILES CASCADE CONSTRAINTS ;


3.7 创建新的UNDO 表空间


SQL> create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M ;

create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M

*

第 1 行出现错误:

ORA-01119: 创建数据库文件 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF'时出错

ORA-27038: 所创建的文件已存在

OSD-04010: 指定了 <create> 选项, 但文件已经存在


因为我们之前删除时并没有删除物理文件,所以在建同名文件时就会报错。 我们可以加上REUSE 参数。 只要文件不在使用,就可以重写已经存在的文件。


SQL> create undo tablespace undotbs1 datafile 'D:/app/Administrator/oradata/orcl/UNDOTBS01.DBF' size 100M reuse;

表空间已创建。


3.8  shutdown 数据库 并将pfile 改回

SQL> select name,issys_modifiable from v$parameter where name='undo_management' or name='rollback_segments';

NAME             ISSYS_MOD

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

rollback_segments    FALSE

undo_management    FALSE


从上面查询的结果,可以知道修改这2个参数必须重启数据,所以还是shutdown 吧。


SQL> shutdown immediate


3.9 修改pfile 参数

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'


3.10 用刚才修改的pfile 启动数据库,并创建spfile

SQL> startup pfile='F:/initorcl.ora' ;

SQL> create spfile from pfile='F:/initorcl.ora';


3.10 再次shutdown,用spfile 启动.

SQL> shutdown immediate

SQL> startup

 

 

一般数据文件损坏的情况也可以采用类似的方法, 先启动到mount, 在将损坏的数据文件offline drop。 在open 数据库,drop 掉损坏的数据文件。 当然这种做法有数据丢失。 能恢复的话,尽量恢复。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/tianlesoftware/archive/2010/06/23/5689558.aspx

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值