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

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖
1#
发表于 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';
复制代码

回复 显示全部楼层 道具 举报

2#
发表于 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-17 15:45 , Processed in 0.046897 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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