您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

管理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 表空间。

(1)创建pfile 文件

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

文件已创建。

(2)修改pfile文件

#*.undo_tablespace='UNDOTBS1'

#*.undo_management='AUTO'

undo_management='MANUAL'

rollback_segments='SYSTEM'

(3)启动数据库至Mount 状态

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

(4)SQL> ALTER DATABASE DATAFILE 'D:\app\Administrator\oradata\orcl\UNDOTBS01.DBF' OFFLINE DROP;

(5)open 数据库

SQL> ALTER DATABASE OPEN;

(6)删除旧的undo 表空间

SQL> DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS;

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

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

(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: 指定了 选项, 但文件已经存在

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

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

表空间已创建。

(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

(9)修改pfile 参数

*.undo_tablespace='UNDOTBS1'

*.undo_management='AUTO'

#undo_management='MANUAL'

#rollback_segments='SYSTEM'

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

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

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

(11)再次shutdown,用spfile 启动.

SQL> shutdown immediate

SQL> startup

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

源文档

相关文章 [上一篇] 管理UNDO(五)--UNDO表空间满了的处理方法
010-56426307(59426319)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-56426307,59426319 QQ讨论群:243729577 182441349 邮箱:yuezt@cuug.com
通信地址:北京市海淀区紫竹院路88号紫竹花园D座703(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号