Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

2

主题
1#
发表于 2017-8-17 14:53:40 | 查看: 9313| 回复: 2
Oracle 11.2.0.3 Linux 5 64bit

数据库出现undo表空间文件损坏,无法打开数据库。
  1. SQL> startup
  2. Oracle instance started.

  3. Total System Global Area  709836800 bytes
  4. Fixed Size                  2231752 bytes
  5. Variable Size            536871480 bytes
  6. Database Buffers          167772160 bytes
  7. Redo Buffers                2961408 bytes
  8. Database mounted.
  9. ORA-01092: ORACLE instance terminated. Disconnection forced
  10. ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type
  11. Process ID: 4098

  12. Session ID: 1 Serial number: 5
复制代码
尝试重建undo后发现继续报错,怎么办!!
2#
发表于 2017-8-17 14:59:00
本帖最后由 biotwang 于 2017-8-17 15:03 编辑

对于Undo损坏造成数据库无法打开的问题,面对不同情况要不同对待。

undo损坏恢复(无事务影响)
  1. sql> startup nomount;
  2. sql> create pfile='/tmp/pfile' from spfile;
复制代码
修改pfile
  1. *.undo_management='MANUAL'
  2. *.undo_tablespace='SYSTEM'
  3. #*.undo_tablespace='UNDOTBS02'
  4. #*.undo_management='AUTO'
复制代码
启动数据库,Undo使用的是system下的rollback segemts
  1. startup pfile='/tmp/pfile' mount;
  2. alter database datafile 2 offline drop;
  3. alter database open;
复制代码
  1. drop tablespace undotbs1 including contents;
复制代码
-- 此时会报错并告知相关那个回滚段正处于使用中

查看回滚段并删除
  1. select segment_name,status from dba_rollback_segs;
  2. drop rollback segment "_SYSSMUx"$;
  3. drop tablespace undotbs1 including contents;
复制代码
重建undo
  1. CREATE UNDO TABLESPACE UNDOTBS02 DATAFILE '/opt/oracle/oradata/PROD1/UNDOTBS02.dbf' SIZE 50M
  2. shutdown immediate;
复制代码
修改pfile,使用自动undo管理
  1. #*.undo_management='MANUAL'
  2. #*.undo_tablespace='SYSTEM'
  3. *.undo_tablespace='UNDOTBS02'
  4. *.undo_management='AUTO'
复制代码
  1. startup pfile='/tmp/pfile';
  2. create spfile from pfile='/tmp/pfile';
复制代码

回复 只看该作者 道具 举报

3#
发表于 2017-8-17 16:45:24
本帖最后由 biotwang 于 2017-8-17 16:46 编辑

undo损坏恢复 (有事务影响)
** 接上面的例子,正在使用UNDOTBS02, 此UNDOTBS02损坏
  1. startup nomount;
  2. create pfile='/tmp/pfile' from spfile;
复制代码
修改pfile
  1. *._allow_resetlogs_corruption=true
  2. *._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

  3. startup pfile='/tmp/pfile' mount;
复制代码
undo数据文件不用离线也可以打开,若不行则采用下面的方法
  1. alter database datafile '/opt/oracle/oradata/PROD1/UNDOTBS01.dbf' offline drop;
  2. alter database open;
  3. drop tablespace undotbs1;

  4. CREATE UNDO TABLESPACE UNDOTBS01
  5. DATAFILE '/opt/oracle/oradata/PROD1/UNDOTBS01.dbf' SIZE 50M;
复制代码
查看是否有回滚段被创建,处于offline状态,若应该都正常online了。
  1. select segment_name,status from dba_rollback_segs;
  2. shutdown immediate;
复制代码
修改pfile:
  1. *.undo_tablespace='UNDOTBS01'

  2. startup pfile='/tmp/pfile'
复制代码
使数据文件先离线,如果开始已经离线,这里不需要处理
  1. –- alter tablespace undotbs1 offline normal;
  2. select segment_name,status from dba_rollback_segs;
  3. drop rollback segment "_SYSSMUx$";
  4. drop tablespace UNDOTBS02 including contents and datafiles;
  5. select * from v$recover_file; –-验证是否还有文件需要恢复
  6. shutdown immediate
复制代码
修改参数文件
  1. #*._allow_resetlogs_corruption=true
  2. #*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,
  3. _SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

  4. startup pfile='/tmp/pfile';
  5. create spfile from pfile='/tmp/pfile';
复制代码

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-5-2 23:25 , Processed in 0.048771 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569